import { useMemo } from 'react'; import type { Flag, Resource } from 'fhir/r4'; import { useAdverseEventServiceContext, useAllergyIntoleranceServiceContext, useCarePlanServiceContext, useCareTeamServiceContext, useClinicalImpressionServiceContext, useConditionServiceContext, useCoverageServiceContext, useDetectedIssueServiceContext, useDeviceRequestServiceContext, useDeviceServiceContext, useDeviceUseStatementServiceContext, useDocumentReferenceServiceContext, useEncounterServiceContext, useEpisodeOfCareServiceContext, useFamilyMemberHistoryServiceContext, useGoalServiceContext, useImmunizationEvaluationServiceContext, useImmunizationRecommendationServiceContext, useImmunizationServiceContext, useMedicationAdministrationServiceContext, useMedicationDispenseServiceContext, useMedicationRequestServiceContext, useMedicationStatementServiceContext, useNutritionOrderServiceContext, useObservationServiceContext, useProcedureServiceContext, useQuestionnaireResponseServiceContext, useRiskAssessmentServiceContext, useTaskServiceContext, useVisionPrescriptionServiceContext, } from '../services'; /** Flag has no `getFlagDisplay` on its service - derive a summary row label inline. */ function flagRowLabel(flag: Flag): string { return ( flag.code?.text ?? flag.code?.coding?.[0]?.display ?? flag.code?.coding?.[0]?.code ?? 'Flag' ); } /** * The single shared source of per-resource-type "row label" functions used by both the Cap A * point-in-time reconstruction (`usePatientSnapshot`) and the care-view `AnchorView` * (`useAnchorResults`). Each entry maps a FHIR resourceType to a `(resource) => string` summary * derived from that resource's service context's `getDisplay` (Flag has no such method, so * it uses the inline `flagRowLabel`). Keeping this in ONE place guarantees the reconstructed * chart and the resolved anchor chart label rows identically. */ export function useSnapshotRowLabels(): Record string> { const conditionCtx = useConditionServiceContext(); const allergyCtx = useAllergyIntoleranceServiceContext(); const procedureCtx = useProcedureServiceContext(); const adverseEventCtx = useAdverseEventServiceContext(); const clinicalImpressionCtx = useClinicalImpressionServiceContext(); const detectedIssueCtx = useDetectedIssueServiceContext(); const familyHistoryCtx = useFamilyMemberHistoryServiceContext(); const observationCtx = useObservationServiceContext(); const medStatementCtx = useMedicationStatementServiceContext(); const medRequestCtx = useMedicationRequestServiceContext(); const medAdminCtx = useMedicationAdministrationServiceContext(); const medDispenseCtx = useMedicationDispenseServiceContext(); const immunizationCtx = useImmunizationServiceContext(); const immunizationEvalCtx = useImmunizationEvaluationServiceContext(); const immunizationRecCtx = useImmunizationRecommendationServiceContext(); const deviceCtx = useDeviceServiceContext(); const deviceRequestCtx = useDeviceRequestServiceContext(); const deviceUseCtx = useDeviceUseStatementServiceContext(); const carePlanCtx = useCarePlanServiceContext(); const careTeamCtx = useCareTeamServiceContext(); const goalCtx = useGoalServiceContext(); const nutritionOrderCtx = useNutritionOrderServiceContext(); const riskAssessmentCtx = useRiskAssessmentServiceContext(); const visionPrescriptionCtx = useVisionPrescriptionServiceContext(); const encounterCtx = useEncounterServiceContext(); const episodeCtx = useEpisodeOfCareServiceContext(); const taskCtx = useTaskServiceContext(); const docRefCtx = useDocumentReferenceServiceContext(); const questionnaireResponseCtx = useQuestionnaireResponseServiceContext(); const coverageCtx = useCoverageServiceContext(); return useMemo string>>( () => ({ Condition: (r) => conditionCtx.getConditionDisplay(r as any), AllergyIntolerance: (r) => allergyCtx.getAllergyIntoleranceDisplay(r as any), Procedure: (r) => procedureCtx.getProcedureDisplay(r as any), AdverseEvent: (r) => adverseEventCtx.getAdverseEventDisplay(r as any), ClinicalImpression: (r) => clinicalImpressionCtx.getClinicalImpressionDisplay(r as any), DetectedIssue: (r) => detectedIssueCtx.getDetectedIssueDisplay(r as any), FamilyMemberHistory: (r) => familyHistoryCtx.getFamilyMemberHistoryDisplay(r as any), Observation: (r) => observationCtx.getObservationDisplay(r as any), MedicationStatement: (r) => medStatementCtx.getMedicationStatementDisplay(r as any), MedicationRequest: (r) => medRequestCtx.getMedicationRequestDisplay(r as any), MedicationAdministration: (r) => medAdminCtx.getMedicationAdministrationDisplay(r as any), MedicationDispense: (r) => medDispenseCtx.getMedicationDispenseDisplay(r as any), Immunization: (r) => immunizationCtx.getImmunizationDisplay(r as any), ImmunizationEvaluation: (r) => immunizationEvalCtx.getImmunizationEvaluationDisplay(r as any), ImmunizationRecommendation: (r) => immunizationRecCtx.getImmunizationRecommendationDisplay(r as any), Device: (r) => deviceCtx.getDeviceDisplay(r as any), DeviceRequest: (r) => deviceRequestCtx.getDeviceRequestDisplay(r as any), DeviceUseStatement: (r) => deviceUseCtx.getDeviceUseStatementDisplay(r as any), CarePlan: (r) => carePlanCtx.getCarePlanDisplay(r as any), CareTeam: (r) => careTeamCtx.getCareTeamDisplay(r as any), Goal: (r) => goalCtx.getGoalDisplay(r as any), NutritionOrder: (r) => nutritionOrderCtx.getNutritionOrderDisplay(r as any), RiskAssessment: (r) => riskAssessmentCtx.getRiskAssessmentDisplay(r as any), VisionPrescription: (r) => visionPrescriptionCtx.getVisionPrescriptionDisplay(r as any), Encounter: (r) => encounterCtx.getEncounterDisplay(r as any), EpisodeOfCare: (r) => episodeCtx.getEpisodeOfCareDisplay(r as any), Task: (r) => taskCtx.getTaskDisplay(r as any), DocumentReference: (r) => docRefCtx.getDocumentReferenceDisplay(r as any), QuestionnaireResponse: (r) => questionnaireResponseCtx.getQuestionnaireResponseDisplay(r as any), Coverage: (r) => coverageCtx.getCoverageDisplay(r as any), Flag: (r) => flagRowLabel(r as Flag), }), // eslint-disable-next-line react-hooks/exhaustive-deps [ conditionCtx, allergyCtx, procedureCtx, adverseEventCtx, clinicalImpressionCtx, detectedIssueCtx, familyHistoryCtx, observationCtx, medStatementCtx, medRequestCtx, medAdminCtx, medDispenseCtx, immunizationCtx, immunizationEvalCtx, immunizationRecCtx, deviceCtx, deviceRequestCtx, deviceUseCtx, carePlanCtx, careTeamCtx, goalCtx, nutritionOrderCtx, riskAssessmentCtx, visionPrescriptionCtx, encounterCtx, episodeCtx, taskCtx, docRefCtx, questionnaireResponseCtx, coverageCtx, ], ); }