import {useState, useEffect} from 'react'; import Checkbox from '@mui/material/Checkbox'; import Table from '@mui/material/Table'; import TableBody from '@mui/material/TableBody'; import TableCell from '@mui/material/TableCell'; import TableContainer from '@mui/material/TableContainer'; import TableHead from '@mui/material/TableHead'; import TablePagination from '@mui/material/TablePagination'; import TableRow from '@mui/material/TableRow'; import Button from '@mui/material/Button'; import TextField from '@mui/material/TextField'; import IconButton from '@mui/material/IconButton'; import DeleteIcon from '@mui/icons-material/Delete'; import { DateTimePicker } from '@mui/x-date-pickers'; import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns'; import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'; import moment from 'moment'; import {get_registration_tokens, add_registration_token, delete_registration_token, unpack_api_result} from '../api/Api'; function AdminPanel(props) { const [page, setPage] = useState(0); const [rowsPerPage, setRowsPerPage] = useState(10); const [registrationTokens, setRegistrationTokens] = useState([]); const [expires, setExpires] = useState(null); const [isSingleUse, setIsSingleUse] = useState(false); const handleChangePage = (event, newPage) => { setPage(newPage); }; const handleChangeRowsPerPage = (event) => { setRowsPerPage(+event.target.value); setPage(0); }; const refetchTokens = () => { if(props.user !== null) { unpack_api_result(get_registration_tokens(props.user.jwt), props.setFlash) .then(result => setRegistrationTokens(result.registration_tokens)); } } const deleteToken = (id) => { if(props.user !== null) { unpack_api_result(delete_registration_token(props.user.jwt, id), props.setFlash) .then(() => refetchTokens()) } } const handleAddToken = () => { let input = { single_use: isSingleUse, expires: expires, } if(props.user !== null) { unpack_api_result(add_registration_token(props.user.jwt, input), props.setFlash) .then(() => refetchTokens()) } } useEffect(() => { refetchTokens() }, []) let columns = [ { id: 'single_use', label: 'Single Use', minWidth: 30, format: value => (value ? "Yes" : "No") }, { id: 'token', label: 'Token', minwidht: 300}, { id: 'expires', label: 'Expires', minwidth: 200, format: value => (moment(value).format('LL HH:mm')) }, { id: 'delete_button', label: '', minwidth: 20, } ]; return ( <>
{ e.preventDefault(); }}> }/> setIsSingleUse(e.target.checked)}/>
{columns.map((column) => ( {column.label} ))} {registrationTokens .slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage) .map((row) => { return ( {columns.map((column) => { const value = row[column.id]; return ( {column.format ? column.format(value) : value} ); })} { e.stopPropagation(); deleteToken(row.id) }}> ); })}
{registrationTokens.length > rowsPerPage && } ); } export default AdminPanel