react/src/pages/AdminImports.js
import React, { useEffect } from 'react';
import { useDispatch, useSelector } from 'react-redux'
import { AdminImport } from '../actions'
import { Dashboard } from '../components/Dashboard'
import { SuccessFailureChip } from '../components/SuccessFailureChip';
import Table from '@material-ui/core/Table';
import TableBody from '@material-ui/core/TableBody';
import TableCell from '@material-ui/core/TableCell';
import TableHead from '@material-ui/core/TableHead';
import TableRow from '@material-ui/core/TableRow';
import TableFooter from '@material-ui/core/TableFooter';
import TablePagination from '@material-ui/core/TablePagination';
import Button from '@material-ui/core/Button';
import { Link } from 'react-router-dom';
import { reverse as url } from 'named-urls'
import routes from '../routes'
const AdminImports = () => {
const dispatch = useDispatch()
const imports = useSelector(state => state.imports);
const [page, setPage] = React.useState(0);
const [rowsPerPage, setRowsPerPage] = React.useState(20);
const rows: RowsProp = Object.values(imports).sort().reverse();
const handleChangePage = (event, newPage) => {
setPage(newPage);
};
const handleChangeRowsPerPage = (event) => {
setRowsPerPage(parseInt(event.target.value, 10));
setPage(0);
};
useEffect(() => {
dispatch(AdminImport.all());
// eslint-disable-next-line react-hooks/exhaustive-deps
},[]);
return (
<div style={{ height: 500, width: '100%' }}>
<Dashboard title={'DDI Imports'}>
<Table size="small">
<TableHead>
<TableRow>
<TableCell>ID</TableCell>
<TableCell>File</TableCell>
<TableCell>Type</TableCell>
<TableCell>State</TableCell>
<TableCell>Created At</TableCell>
<TableCell>Actions</TableCell>
</TableRow>
</TableHead>
<TableBody>
{rows.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage).map((row) => (
<TableRow key={row.id}>
<TableCell>{row.id}</TableCell>
<TableCell>{row.filename}</TableCell>
<TableCell>{row.import_type}</TableCell>
<TableCell><SuccessFailureChip outcome={row.state}/></TableCell>
<TableCell>{row.created_at}</TableCell>
<TableCell>
<Button variant="outlined">
<Link to={url(routes.admin.imports.show, { importId: row.id })}>
View Log
</Link>
</Button>
</TableCell>
</TableRow>
))}
</TableBody>
<TableFooter>
<TableRow>
<TablePagination
rowsPerPageOptions={[20, 50, 100, { label: 'All', value: -1 }]}
colSpan={3}
count={rows.length}
rowsPerPage={rowsPerPage}
page={page}
onChangePage={handleChangePage}
onChangeRowsPerPage={handleChangeRowsPerPage}
SelectProps={{
inputProps: { 'aria-label': 'rows per page' },
native: true,
}}
/>
</TableRow>
</TableFooter>
</Table>
</Dashboard>
</div>
);
}
export default AdminImports;