/
sweetebin
/
hackaton_26
Обзор
Документация
Войти
/
sweetebin
/
hackaton_26
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
web-form-project/src/components/AddDataDialog.jsx
64 строки
2 KB
AKorostelev
web form project added
28 июл 2026, 10:57
28 июл 2026, 10:57
4339e77
Код
Авторство
О чём код?
import { useEffect, useState } from 'react'; import { Alert, Button, Dialog, DialogActions, DialogContent, DialogTitle, Typography, } from '@mui/material'; import DataInput from './DataInput'; export default function AddDataDialog({ open, onClose, onSubmit }) { const [payload, setPayload] = useState(null); const [busy, setBusy] = useState(false); const [error, setError] = useState(null); // Сброс полей при каждом открытии диалога useEffect(() => { if (open) { setPayload(null); setError(null); } }, [open]); const handleSubmit = async () => { setBusy(true); setError(null); try { await onSubmit(payload); onClose(); } catch (e) { setError(e.message); } finally { setBusy(false); } }; return ( <Dialog open={open} onClose={busy ? undefined : onClose} maxWidth="sm" fullWidth> <DialogTitle>Добавить данные в пул проекта</DialogTitle> {/* key пересоздаёт DataInput при каждом открытии */} <DialogContent key={open}> <Typography variant="body2" color="text.secondary" sx={{ mb: 2 }}> Новые данные добавятся к уже накопленным, и весь пул будет проанализирован заново. </Typography> <DataInput onChange={setPayload} /> {error && ( <Alert severity="error" sx={{ mt: 2 }} onClose={() => setError(null)}> {error} </Alert> )} </DialogContent> <DialogActions sx={{ px: 3, pb: 2 }}> <Button onClick={onClose} disabled={busy} color="inherit"> Отмена </Button> <Button variant="contained" onClick={handleSubmit} disabled={!payload || busy}> {busy ? 'Отправка…' : 'Добавить и переанализировать'} </Button> </DialogActions> </Dialog> ); }