import { useEffect, useState, type FormEvent } from 'react' import { ParentParityShell } from './ParentParityShell' import { fetchAttendanceReportForm, fetchParentEnrollments, fetchParentEventsOverview, fetchParentInvoices, fetchParentProfile, fetchParentRegistrationOverview, submitParentAttendanceReport, submitContactMessage, } from '../../api/session' import type { ParentAttendanceReportFormResponse, ParentEnrollmentStudent, ParentEventsOverviewResponse, ParentInvoiceRow, ParentRegistrationOverviewResponse, } from '../../api/types' import { useAuth } from '../../auth/AuthProvider' /** `Views/parent/contact.php` — POST /api/v1/contact */ export function ParentContactPage() { const { user } = useAuth() const [name, setName] = useState('') const [email, setEmail] = useState('') const [subject, setSubject] = useState('') const [message, setMessage] = useState('') const [status, setStatus] = useState(null) const [error, setError] = useState(null) const [loading, setLoading] = useState(false) useEffect(() => { let cancelled = false ;(async () => { try { const res = await fetchParentProfile() const p = res.profile if (cancelled || !p) return const fn = (p.firstname ?? '').trim() const ln = (p.lastname ?? '').trim() const full = `${fn} ${ln}`.trim() if (full) setName(full) if (p.email) setEmail(String(p.email)) } catch { /* optional */ } })() return () => { cancelled = true } }, []) useEffect(() => { if (!user?.name) return setName((n) => n || user.name) }, [user?.name]) async function onSubmit(e: FormEvent) { e.preventDefault() setLoading(true) setError(null) setStatus(null) try { const res = await submitContactMessage({ name, email, subject, message }) if (res.status) { setStatus(res.message ?? 'Message sent.') setSubject('') setMessage('') } else { setError('Could not send message.') } } catch (err) { setError(err instanceof Error ? err.message : 'Request failed.') } finally { setLoading(false) } } return ( {status ?
{status}
: null} {error ?
{error}
: null}
setName(e.target.value)} required minLength={3} />
setEmail(e.target.value)} required />
setSubject(e.target.value)} required minLength={3} />