import * as React from 'react'; import Grid from '@mui/material/Grid'; import { Container, Dialog, Typography, IconButton, Tooltip } from '@mui/material'; import MUIDataTable from "mui-datatables"; import { useAxios } from './axios'; import { useMutation, useQuery, useQueryClient } from 'react-query'; import StudentDialog from './StudentDialog'; import AddIcon from '@mui/icons-material/Add'; function App() { const client = useAxios(); const queryClient = useQueryClient() const [open, setOpen] = React.useState(false); const [openedStudent, setOpenedStudent] = React.useState({}); const { data, status } = useQuery('students', async () => { const {data} = await client.get('/api/students'); return data.map(({ uid, first_name, last_name, middle_name, discipline, mark, }) => { return { 'first_name': first_name, 'last_name': last_name, 'middle_name': middle_name, 'discipline': discipline, 'mark': mark, 'display_name': `${first_name} ${last_name} ${middle_name}`, 'uid': uid }; }) }); const columns = [ { name: "uid", label: "ID", options: { display: false } }, { name: "display_name", label: "Имя" }, { name: "mark", label: "Оценка" }, { name: "discipline", label: "Дисциплина" }, ]; const commitDelete = useMutation(async (uid) => { await client.delete(`/api/students/${uid}`); }, { onSuccess: () => { queryClient.invalidateQueries('students'); } }); const handleRowClick = (rowData) => { setOpenedStudent(data.find(({uid}) => uid === rowData[0])); setOpen(true); console.log(data.find(({uid}) => uid === rowData[0])); }; const handleRowsDelete = (rowsDeleted) => { const uids = rowsDeleted.data.map(({dataIndex}) => data[dataIndex]['uid']); for (const uid of uids) { commitDelete.mutate(uid); } }; const handleClose = () => { setOpen(false); }; if (data === undefined || status === 'loading') { return
Loading...
} return ( { return }, onRowsDelete: handleRowsDelete }} /> ); function CustomToolbar() { if (data !== undefined) return ( { setOpenedStudent({}); setOpen(true); }}> ) return (<>) } } export default App;