import { useEffect, useState } from "react"; import type { ReactNode } from "react"; import { fetchFields } from "./api"; import { ChecklistFieldsContext, EMPTY_CHECKLIST_FIELDS } from "./checklistFields"; import type { ChecklistFields } from "./checklistFields"; // Fetched once at app mount and held in context: the list is small, static for // the life of the backend process, and every screen needs it (issue #37). export function ChecklistFieldsProvider({ children }: { children: ReactNode }) { const [state, setState] = useState(EMPTY_CHECKLIST_FIELDS); useEffect(() => { let cancelled = false; fetchFields() .then((fields) => { if (cancelled) return; setState({ fields, names: fields.map((f) => f.name), labels: Object.fromEntries(fields.map((f) => [f.name, f.label])), loading: false, error: null, }); }) .catch((err) => { if (cancelled) return; setState({ ...EMPTY_CHECKLIST_FIELDS, loading: false, error: err instanceof Error ? err.message : String(err), }); }); return () => { cancelled = true; }; }, []); return ( {children} ); }