Advertisement
Shell_Casing

adminPage

Jul 20th, 2020
1,461
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React, { useEffect, useState } from 'react';
  2. import { Link } from 'react-router-dom';
  3. import { useDispatch, useSelector } from "react-redux";
  4. import Table from '@material-ui/core/Table';
  5. import TableContainer from '@material-ui/core/TableContainer';
  6. import TableHead from '@material-ui/core/TableHead';
  7. import TableBody from '@material-ui/core/TableBody';
  8. import TableRow from '@material-ui/core/TableRow';
  9. import TableCell from '@material-ui/core/TableCell';
  10. import Paper from '@material-ui/core/Paper';
  11. import TableFooter from "@material-ui/core/TableFooter";
  12. import TablePagination from "@material-ui/core/TablePagination";
  13. import { TablePaginationActions } from "./TablePaginationActions";
  14. import { fetchPendingRequestsAction } from "../../state/actions/request-actions";
  15. import Loading from "../../loading/loading";
  16.  
  17.  
  18. export const AdminPage = props => {
  19.  
  20.     // state data
  21.     const loading = useSelector(state => state.requests.loading);
  22.     const pendingRequests = useSelector(state => state.requests.pendingRequests);
  23.     const dispatch = useDispatch();
  24.  
  25.     useEffect(() => {
  26.          dispatch(fetchPendingRequestsAction());
  27.          console.log(pendingRequests);
  28.         // eslint-disable-next-line
  29.     }, []);
  30.  
  31.     // pagination stuff
  32.     const [page, setPage] = useState(0);
  33.     const [rowsPerPage, setRowsPerPage] = useState(5);
  34.  
  35.     const emptyRows = rowsPerPage - Math.min(rowsPerPage, pendingRequests.length - page * rowsPerPage);
  36.  
  37.     const handleChangePage = (event, newPage) => setPage(newPage);
  38.  
  39.     const handleChangeRowsPerPage = event => {
  40.         setRowsPerPage(parseInt(event.target.value, 10));
  41.         setPage(0);
  42.     };
  43.  
  44.     const showRequests = (
  45.        <TableContainer component={Paper} className={`shadow-md`}>
  46.            <Table>
  47.                <TableHead className={`bg-gray-200`}>
  48.                    <TableRow>
  49.                        <TableCell><span className={`font-bold`}>worker</span></TableCell>
  50.                        <TableCell><span className={`font-bold`}>action</span></TableCell>
  51.                        <TableCell><span className={`font-bold`}>admin</span></TableCell>
  52.                        <TableCell><span className={`font-bold`}>requestor</span></TableCell>
  53.                        <TableCell><span className={`font-bold`}>name</span></TableCell>
  54.                        <TableCell><span className={`font-bold`}>task_id</span></TableCell>
  55.                        <TableCell><span className={`font-bold`}>path</span></TableCell>
  56.                        <TableCell><span className={`font-bold`}>table_name</span></TableCell>
  57.                    </TableRow>
  58.                </TableHead>
  59.                <TableBody>
  60.  
  61.                    {
  62.                        (rowsPerPage > 0
  63.                            ? pendingRequests.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)
  64.                            : pendingRequests).map(request => (
  65.                            <TableRow key={request.id} component={Link} to={`request-details/${request.id}`} className={`hover:bg-gray-200`}>
  66.                                <TableCell>{ request.worker }</TableCell>
  67.                                <TableCell>{ request.action }</TableCell>
  68.                                <TableCell>{ request.admin }</TableCell>
  69.                                <TableCell>{ request.requestor }</TableCell>
  70.                                <TableCell>{ request.name }</TableCell>
  71.                                <TableCell>{ request.task_id }</TableCell>
  72.                                <TableCell>{ request.path }</TableCell>
  73.                                <TableCell>{ request.table_name }</TableCell>
  74.                            </TableRow>
  75.                        ))
  76.                    }
  77.  
  78.                    {emptyRows > 0 && (
  79.                        <TableRow style={{ height: 53 * emptyRows }}>
  80.                            <TableCell colSpan={6} />
  81.                        </TableRow>
  82.                    )}
  83.                </TableBody>
  84.  
  85.                <TableFooter>
  86.                    <TableRow>
  87.                        <TablePagination
  88.                            rowsPerPageOptions={[5, 10, 20, { label: 'All', value: -1 }]}
  89.                            colSpan={3}
  90.                            count={pendingRequests.length}
  91.                            rowsPerPage={rowsPerPage}
  92.                            page={page}
  93.                            SelectProps={{
  94.                                inputProps: { 'aria-label': 'rows per page' },
  95.                                native: true,
  96.                            }}
  97.                            onChangePage={handleChangePage}
  98.                            onChangeRowsPerPage={handleChangeRowsPerPage}
  99.                            ActionsComponent={TablePaginationActions}
  100.                        />
  101.                    </TableRow>
  102.                </TableFooter>
  103.  
  104.            </Table>
  105.        </TableContainer>
  106.     );
  107.  
  108.     if(loading || !pendingRequests.length) return (<Loading />);
  109.  
  110.     return (
  111.         <div className="">
  112.             { showRequests }
  113.         </div>
  114.     );
  115.  
  116. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement