frontend/app/ProxyFramework/ProxyFrameworkList.tsx (68 lines of code) (raw):
import React, {useEffect, useState} from "react";
import {RouteComponentProps} from "react-router";
import axios from "axios";
import {Redirect} from "react-router-dom";
import AdminContainer from "../admin/AdminContainer";
import LoadingThrobber from "../common/LoadingThrobber";
import {DataGrid} from "@material-ui/data-grid";
import {Button, Grid, makeStyles, Paper} from "@material-ui/core";
import {baseStyles} from "../BaseStyles";
import {ProxyFrameworkDeploymentRow, ProxyFrameworkDeploymentsResponse} from "../types";
import {makeProxyFrameworkColumns} from "./ProxyFrameworkContent";
import {Helmet} from "react-helmet";
const useStyles = makeStyles(Object.assign({
tableContainer: {
marginTop: "1em",
height: "80vh"
}
}, baseStyles));
const ProxyFrameworkList:React.FC<RouteComponentProps> = (props) => {
const [currentDeployments, setCurrentDeployments] = useState<ProxyFrameworkDeploymentRow[]>([]);
const [loading, setLoading] = useState(false);
const [lastError, setLastError] = useState<any|undefined>(undefined);
const classes = useStyles();
const loadData = async ()=>{
try {
const result = await axios.get<ProxyFrameworkDeploymentsResponse>("/api/proxyFramework/deployments");
setLoading(false);
setLastError(undefined);
setCurrentDeployments(result.data.entries.map((entry, idx)=>Object.assign({id: idx.toString()}, entry)));
} catch (err) {
console.error("Could not load proxy deployments: ", err);
setLoading(false);
setLastError(err);
}
}
useEffect(()=>{
setLoading(true);
loadData();
}, []);
const callDelete = async (region:string) => {
try {
const result = await axios.delete("/api/proxyFramework/deployments/" + region);
return loadData();
} catch (err) {
console.error("Could not delete proxy deployment: ", err);
setLoading(false);
setLastError(err);
}
}
const columns = makeProxyFrameworkColumns(callDelete);
return <AdminContainer {...props}>
<Helmet>
<title>Proxying Frameworks - ArchiveHunter</title>
</Helmet>
<Grid container justify="flex-start">
<Grid item>
<LoadingThrobber show={loading} caption="Loading data..." small={true}/>
</Grid>
<Grid item style={{marginLeft: "auto"}}>
<Button variant="contained" onClick={()=>props.history.push("/admin/proxyFramework/new")}>Add</Button>
</Grid>
</Grid>
<Paper elevation={3} className={classes.tableContainer}>
<DataGrid columns={columns} rows={currentDeployments}/>
</Paper>
</AdminContainer>
}
export default ProxyFrameworkList;