frontend/app/DeletedItems/DeletedItemSummary.tsx (66 lines of code) (raw):

import React, {useEffect, useState} from "react"; import {AdvancedSearchDoc, DeletionSummaryResponse} from "../types"; import axios from "axios"; import {formatError} from "../common/ErrorViewComponent"; import BrowseSummaryDisplay from "../browse/BrowseSummaryDisplay"; import {Button, Grid, LinearProgress, makeStyles} from "@material-ui/core"; import {DeleteForever} from "@material-ui/icons"; import {baseStyles} from "../BaseStyles"; interface DeletedItemSummaryProps { collectionName:string; path:string|undefined; parentIsLoading: boolean; loadingNotifiction?: string; searchDoc: AdvancedSearchDoc; onError?: (errorDesc:string)=>void; goToRootCb:()=>void; refreshCb:()=>void; requestRemoveAll:()=>void; } const useStyles = makeStyles(baseStyles); const DeletedItemSummary:React.FC<DeletedItemSummaryProps> = (props) => { const [summaryData, setSummaryData] = useState<DeletionSummaryResponse|undefined>(undefined); const classes = useStyles(); useEffect(()=>{ if(props.collectionName!="") { loadData(); } }, [props.collectionName, props.path, props.searchDoc]); const loadData = async ()=>{ try { let args = ""; if(props.path) { args = `?prefix=${encodeURIComponent(props.path)}` } const response = await axios.put<DeletionSummaryResponse>(`/api/deleted/${props.collectionName}/summary${args}`, props.searchDoc, {headers: {"Content-Type":"application/json"}}); setSummaryData(response.data); } catch(err) { console.error("Could not load deletion summary for ", props.collectionName, ": ", err); if(props.onError) { props.onError(formatError(err, false)); } } } return <BrowseSummaryDisplay collectionName={props.collectionName} path={props.path} parentIsLoading={props.parentIsLoading} totalHits={summaryData ? summaryData.totalHits : 0} totalSize={summaryData ? summaryData.totalSize : 0} goToRootCb={props.goToRootCb} refreshCb={props.refreshCb}> <Grid item style={{marginLeft: "0.8em"}}> <Button variant="outlined" onClick={props.requestRemoveAll} startIcon={<DeleteForever/>}> Remove all tombstones </Button> </Grid> <div style={{width:"100%"}}> { props.parentIsLoading ? <LinearProgress/> : null } { props.parentIsLoading && props.loadingNotifiction ? <p className={classes.centered} style={{marginTop: "0.1em"}}>{props.loadingNotifiction}</p> : null } </div> </BrowseSummaryDisplay> } export default DeletedItemSummary;