import { useCallback, useEffect, useState } from 'react'; import { useOptionalPublicFormService } from '../services/PublicFormService'; export type PublicQuestionnaireRead = 'loading' | 'ready' | 'failed'; /** * The questionnaires that are public forms, published or not. * * A public form is website content, so it is never offered to assign to a patient. Until this read has * answered nothing can be offered, because an unknown form may be a public one. */ export const usePublicQuestionnaireIds = (enabled = true) => { const service = useOptionalPublicFormService(); const [ids, setIds] = useState>(() => new Set()); const [read, setRead] = useState('loading'); const load = useCallback(async () => { if (!service) { setRead('failed'); return; } setRead('loading'); try { const forms = await service.listPublicForms(); setIds(new Set(forms.map((form) => form.questionnaireId).filter((id): id is string => Boolean(id)))); setRead('ready'); } catch (error) { console.error('Could not read which forms are public:', error); setRead('failed'); } }, [service]); useEffect(() => { if (enabled) void load(); }, [enabled, load]); return { publicIds: ids, publicRead: read, retryPublicRead: load }; };