'use client'; import { useState, useEffect } from 'react'; import { Dialog, DialogTitle, DialogContent, DialogActions, Button, TextField, MenuItem, Box, Alert, } from '@mui/material'; import { Child, CreateChildData } from '@/lib/api/children'; import { useTranslation } from '@/hooks/useTranslation'; import { PhotoUpload } from '@/components/common/PhotoUpload'; interface ChildDialogProps { open: boolean; onClose: () => void; onSubmit: (data: CreateChildData) => Promise; child?: Child | null; isLoading?: boolean; } export function ChildDialog({ open, onClose, onSubmit, child, isLoading = false }: ChildDialogProps) { const { t } = useTranslation('children'); const [formData, setFormData] = useState({ name: '', birthDate: '', gender: 'male', photoUrl: '', }); const [error, setError] = useState(''); useEffect(() => { if (child) { setFormData({ name: child.name, birthDate: child.birthDate.split('T')[0], // Convert to YYYY-MM-DD format gender: child.gender, photoUrl: child.photoUrl || '', }); } else { setFormData({ name: '', birthDate: '', gender: 'male', photoUrl: '', }); } setError(''); }, [child, open]); const handleChange = (field: keyof CreateChildData) => ( e: React.ChangeEvent ) => { setFormData({ ...formData, [field]: e.target.value }); }; const handleSubmit = async () => { setError(''); // Validation if (!formData.name.trim()) { setError(t('dialog.validation.nameRequired')); return; } if (!formData.birthDate) { setError(t('dialog.validation.birthDateRequired')); return; } // Check if birth date is in the future const selectedDate = new Date(formData.birthDate); const today = new Date(); today.setHours(0, 0, 0, 0); if (selectedDate > today) { setError(t('dialog.validation.birthDateFuture')); return; } try { await onSubmit(formData); onClose(); } catch (err: any) { setError(err.message || t('errors.saveFailed')); } }; return ( {child ? t('editChild') : t('addChild')} {error && ( setError('')} role="alert"> {error} )} {t('gender.male')} {t('gender.female')} {t('gender.other')} setFormData({ ...formData, photoUrl: url })} disabled={isLoading} size={80} childId={child?.id} type="profile" /> ); }