'use client';
import { useRouter } from 'src/routes/hooks';
import { useState, useEffect, useCallback } from 'react';
import Box from '@mui/material/Box';
import Card from '@mui/material/Card';
import Grid from '@mui/material/Grid';
import Stack from '@mui/material/Stack';
import Alert from '@mui/material/Alert';
import Avatar from '@mui/material/Avatar';
import Button from '@mui/material/Button';
import Dialog from '@mui/material/Dialog';
import TextField from '@mui/material/TextField';
import Typography from '@mui/material/Typography';
import CardContent from '@mui/material/CardContent';
import CardActions from '@mui/material/CardActions';
import DialogTitle from '@mui/material/DialogTitle';
import DialogContent from '@mui/material/DialogContent';
import DialogActions from '@mui/material/DialogActions';
import CircularProgress from '@mui/material/CircularProgress';
import InputAdornment from '@mui/material/InputAdornment';
import { paths } from 'src/routes/paths';
import axios from 'src/utils/axios';
import { DashboardContent } from 'src/layouts/dashboard';
import { Iconify } from 'src/components/iconify';
import { CustomBreadcrumbs } from 'src/components/custom-breadcrumbs';
// ----------------------------------------------------------------------
async function getChildren() {
const res = await axios.get('/parent/dashboard/');
const raw = res.data?.children ?? [];
return raw.map((item) => {
const c = item.child ?? item;
const [first_name = '', ...rest] = (c.name || '').split(' ');
return { id: c.id, first_name, last_name: rest.join(' '), email: c.email };
});
}
// ----------------------------------------------------------------------
function AddChildDialog({ open, onClose, onSuccess }) {
const [code, setCode] = useState('');
const [loading, setLoading] = useState(false);
const [error, setError] = useState('');
const handleClose = () => {
setCode('');
setError('');
onClose();
};
const handleSubmit = async () => {
const trimmed = code.trim().toUpperCase();
if (!trimmed) { setError('Введите код'); return; }
if (trimmed.length !== 8) { setError('Код должен содержать ровно 8 символов'); return; }
try {
setLoading(true);
setError('');
await axios.post('/manage/parents/add_child/', { universal_code: trimmed });
handleClose();
onSuccess();
} catch (e) {
const msg = e?.response?.data?.error
|| e?.response?.data?.detail
|| e?.message
|| 'Ошибка при добавлении';
setError(msg);
} finally {
setLoading(false);
}
};
return (
);
}
// ----------------------------------------------------------------------
export function ChildrenView() {
const router = useRouter();
const [children, setChildren] = useState([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
const [addOpen, setAddOpen] = useState(false);
const load = useCallback(async () => {
try {
setLoading(true);
setError(null);
const list = await getChildren();
setChildren(list);
} catch (e) {
setError(e?.response?.data?.detail || e?.message || 'Ошибка загрузки');
} finally {
setLoading(false);
}
}, []);
useEffect(() => { load(); }, [load]);
return (
}
onClick={() => setAddOpen(true)}
>
Добавить ребёнка
}
sx={{ mb: 3 }}
/>
{error && (
{error}
)}
{loading ? (
) : children.length === 0 ? (
Нет привязанных детей
}
onClick={() => setAddOpen(true)}
>
Добавить ребёнка по коду
) : (
{children.map((child) => {
const name = `${child.first_name || ''} ${child.last_name || ''}`.trim() || child.email;
return (
{name[0]?.toUpperCase()}
{name}
{child.email}
}
onClick={() => {
localStorage.setItem('selected_child', JSON.stringify({ id: child.id, name }));
window.dispatchEvent(new Event('child-changed'));
router.push(paths.dashboard.root);
}}
>
Дашборд
);
})}
)}
setAddOpen(false)}
onSuccess={() => {
load();
window.dispatchEvent(new Event('child-changed'));
}}
/>
);
}