import { type FormEvent, useEffect, useState } from 'react' import { useNavigate } from 'react-router-dom' import { createStaff, fetchStaffFormOptions, type RoleOption } from '../../api/staff' import { ReadOnlyBanner, SchoolYearSelector } from '../../components/schoolYear' import { useSchoolYear } from '../../context/SchoolYearContext' export function StaffCreatePage() { const navigate = useNavigate() const { selectedSchoolYearName, isReadOnlyYear } = useSchoolYear() const [roles, setRoles] = useState([]) const [firstname, setFirstname] = useState('') const [lastname, setLastname] = useState('') const [email, setEmail] = useState('') const [phone, setPhone] = useState('') const [password, setPassword] = useState('') const [roleId, setRoleId] = useState(0) const [status, setStatus] = useState('active') const [error, setError] = useState(null) useEffect(() => { let cancelled = false ;(async () => { try { const data = await fetchStaffFormOptions({ school_year: selectedSchoolYearName ?? undefined }) if (cancelled) return const list = data.roles ?? [] setRoles(list) if (list[0]?.id) setRoleId(Number(list[0].id)) } catch { if (!cancelled) setRoles([]) } })() return () => { cancelled = true } }, [selectedSchoolYearName]) async function onSubmit(e: FormEvent) { e.preventDefault() if (!selectedSchoolYearName) { setError('Please select a school year.') return } if (!roleId) { setError('Please select a role.') return } try { await createStaff({ firstname, lastname, email, phone, password, role_id: roleId, status, school_year: selectedSchoolYearName }) navigate(`/app/staff?school_year=${encodeURIComponent(selectedSchoolYearName)}`) } catch (err) { setError(err instanceof Error ? err.message : 'Unable to create staff.') } } return (

Add Staff Member

School year: {selectedSchoolYearName ?? '—'}
{error ?
{error}
: null}
void onSubmit(e)}>
setFirstname(e.target.value)} required />
setLastname(e.target.value)} required />
setEmail(e.target.value)} required />
setPassword(e.target.value)} required />
setPhone(e.target.value)} />
) }