flask-contacts/frontend/src/StudentDialog.jsx

140 lines
5.1 KiB
React
Raw Normal View History

2021-12-15 06:57:35 +00:00
import * as React from 'react';
import Grid from '@mui/material/Grid';
import { Button, Container, Dialog, DialogActions, DialogContent, DialogTitle, TextField, Typography } from '@mui/material';
import MUIDataTable from "mui-datatables";
import { useAxios } from './axios';
import { useMutation, useQuery, useQueryClient } from 'react-query';
2022-10-30 11:29:52 +00:00
function StudentDialog({
2021-12-15 06:57:35 +00:00
open,
onClose,
2022-10-30 11:29:52 +00:00
student,
2021-12-15 06:57:35 +00:00
}) {
const client = useAxios();
const queryClient = useQueryClient()
2022-10-30 11:29:52 +00:00
const [uid, setUid] = React.useState(student ? student.uid : null);
const [firstName, setFirstName] = React.useState(student['first_name'] ?? '');
const [lastName, setLastName] = React.useState(student['last_name'] ?? '');
const [middleName, setMiddleName] = React.useState(student['middle_name'] ?? '');
const [discipline, setDiscipline] = React.useState(student['discipline'] ?? '');
const [mark, setMark] = React.useState(student['mark'] ?? '');
2021-12-15 06:57:35 +00:00
2022-10-30 11:29:52 +00:00
const commitCreate = useMutation(async (payload) => client.post('/api/students', payload), {
2021-12-15 06:57:35 +00:00
onSuccess: () => {
2022-10-30 11:29:52 +00:00
queryClient.invalidateQueries('students');
2021-12-15 06:57:35 +00:00
onClose();
}
});
2022-10-30 11:29:52 +00:00
const commitUpdate = useMutation(async (payload) => client.put(`/api/students/${student['uid']}`, payload), {
2021-12-15 06:57:35 +00:00
onSuccess: () => {
2022-10-30 11:29:52 +00:00
queryClient.invalidateQueries('students');
queryClient.invalidateQueries(['student', student['uid']]);
2021-12-15 06:57:35 +00:00
onClose();
}
});
const handleFormSubmit = (event) => {
event.preventDefault();
const data = {
first_name: firstName,
last_name: lastName,
middle_name: middleName,
2022-10-30 11:29:52 +00:00
discipline: discipline,
mark: mark,
2021-12-15 06:57:35 +00:00
};
2022-10-30 11:29:52 +00:00
if (student['uid']) {
2021-12-15 06:57:35 +00:00
commitUpdate.mutate(data);
}
else {
commitCreate.mutate(data);
}
onClose();
};
const loadData = () => {
2022-10-30 11:29:52 +00:00
console.log(student);
setUid(student['uid'] ?? null);
setFirstName(student['first_name'] ?? '');
setLastName(student['last_name'] ?? '');
setMiddleName(student['middle_name'] ?? '');
setDiscipline(student['discipline'] ?? '');
setMark(student['mark'] ?? '');
2021-12-15 06:57:35 +00:00
};
return (
<Dialog
open={open}
onClose={onClose}
fullWidth
maxWidth="md"
TransitionProps={{
onEnter: loadData
}}
>
2022-10-30 11:29:52 +00:00
<DialogTitle>Студент</DialogTitle>
2021-12-15 06:57:35 +00:00
<form onSubmit={handleFormSubmit}>
<DialogContent dividers>
<Grid container spacing={3}>
<Grid item xs={12}>
<TextField
id="first_name"
label="Имя"
value={firstName}
onChange={(event) => setFirstName(event.target.value)}
fullWidth
/>
</Grid>
<Grid item xs={12}>
<TextField
id="last_name"
label="Фамилия"
value={lastName}
onChange={(event) => setLastName(event.target.value)}
fullWidth
/>
</Grid>
<Grid item xs={12}>
<TextField
id="middle_name"
label="Отчество"
value={middleName}
onChange={(event) => setMiddleName(event.target.value)}
fullWidth
/>
</Grid>
<Grid item xs={12}>
<TextField
2022-10-30 11:29:52 +00:00
id="discipline"
label="Дисциплина"
value={discipline}
onChange={(event) => setDiscipline(event.target.value)}
2021-12-15 06:57:35 +00:00
fullWidth
required
/>
</Grid>
2022-10-30 11:29:52 +00:00
<Grid item xs={12}>
2021-12-15 06:57:35 +00:00
<TextField
2022-10-30 11:29:52 +00:00
id="mark"
label="Оценка"
value={mark}
onChange={(event) => setMark(event.target.value)}
2021-12-15 06:57:35 +00:00
fullWidth
/>
</Grid>
</Grid>
</DialogContent>
<DialogActions>
<Button onClick={onClose}>Отмена</Button>
<Button type="submit" color="primary">Сохранить</Button>
</DialogActions>
</form>
</Dialog>
);
}
2022-10-30 11:29:52 +00:00
export default StudentDialog;