frontend/app/ScanTargets/ScanTargetActionsBox.tsx (120 lines of code) (raw):

import React from "react"; import {Button, Grid, Paper, Tooltip, Typography} from "@material-ui/core"; import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; import axios from "axios"; import ErrorViewComponent, {formatError} from "../common/ErrorViewComponent"; interface ScanTargetActionsBoxProps { idToLoad: string; actionDidStart: (caption:string)=>void; actionDidFail: (caption:string)=>void; actionDidSucceed: (caption:string)=>void; classes: Record<string, string>; bucketName:string; } const ScanTargetActionsBox:React.FC<ScanTargetActionsBoxProps> = (props)=>{ const triggerAddedScan = ()=>{ return generalScanTrigger("additionScan") } const triggerRemovedScan = ()=>{ return generalScanTrigger("deletionScan") } const triggerFullScan = () =>{ return generalScanTrigger("scan") } const triggerValidateConfig = async () => { const targetId = props.idToLoad; props.actionDidStart("Validating config...") try { const result = await axios.post("/api/scanTarget/" + encodeURIComponent(targetId) + "/" + "checkTranscoder") console.log("Config validation has been started with job ID " + result.data.entity); } catch(err) { console.error(err); props.actionDidFail(formatError(err, false)); } } const triggerTranscodeSetup = async ()=>{ const targetId = props.idToLoad; try { const result = await axios.post("/api/scanTarget/" + encodeURIComponent(targetId) + "/" + "createPipelines?force=true") props.actionDidStart("Transcode setup has been started with job ID " + result.data.entity); } catch(err) { props.actionDidFail(formatError(err, false)) } } const triggerProxyGen = async ()=>{ const targetId = props.idToLoad; try { await axios.post("/api/scanTarget/" + encodeURIComponent(targetId) + "/" + "genProxies"); props.actionDidStart("Proxy generation has started on this target") } catch (err) { console.error(err); props.actionDidFail(formatError(err, false)); } } const triggerProxyRelink = async ()=>{ const targetId = props.idToLoad; try { await axios.post("/api/proxy/relink/" + props.bucketName) props.actionDidStart("Global proxy relink has been started"); } catch(err) { console.error(err); props.actionDidFail(formatError(err, false)) } } const generalScanTrigger = async (type:string)=>{ const targetId = props.idToLoad; try { await axios.post("/api/scanTarget/" + encodeURIComponent(targetId) + "/" + type) props.actionDidStart("Rescan of this bucket has been triggered") } catch (err) { props.actionDidFail(formatError(err, false)) } } return <Paper elevation={3} className={props.classes.formContainer}> <Typography variant="h4">Actions</Typography> <Grid container justify="space-between" spacing={1} className={props.classes.actionButtonsContainer}> <Grid item> <Tooltip title="Addition scan"> <Button variant="outlined" startIcon={<FontAwesomeIcon icon="folder-plus"/>} onClick={triggerAddedScan}> Scan for added files only </Button> </Tooltip> </Grid> <Grid item> <Tooltip title="Removal scan"> <Button variant="outlined" startIcon={<FontAwesomeIcon icon="folder-minus"/>} onClick={triggerRemovedScan}> Scan for removed files </Button> </Tooltip> </Grid> <Grid item> <Tooltip title="Full scan"> <Button variant="outlined" startIcon={<FontAwesomeIcon icon="folder"/>} onClick={triggerFullScan}> Scan for added and removed files </Button> </Tooltip> </Grid> <Grid item> <Tooltip title="Proxy generation"> <Button variant="outlined" startIcon={<FontAwesomeIcon icon="compress-arrows-alt"/>} onClick={triggerProxyGen}> Generate proxies </Button> </Tooltip> </Grid> <Grid item> <Tooltip title="Relink proxies"> <Button variant="outlined" startIcon={<FontAwesomeIcon icon="book-reader"/>} onClick={triggerProxyRelink}> Relink existing proxies </Button> </Tooltip> </Grid> </Grid> </Paper> } export default ScanTargetActionsBox;