import { useEffect } from 'react'; import { RiskAssessment } from 'fhir/r4'; import { usePatientServiceContext, useWebSocketServiceContext } from '../services'; interface UseRiskAssessmentWebSocketOptions { riskAssessment?: RiskAssessment; riskAssessmentId?: string; isOpen?: boolean; onUpdate: (riskAssessment: RiskAssessment) => void; onDelete: () => void; } export const useFhirRiskAssessmentTargetedBroadcast = ({ riskAssessment, riskAssessmentId, isOpen = true, onUpdate, onDelete }: UseRiskAssessmentWebSocketOptions) => { const { subscribe, unsubscribe } = useWebSocketServiceContext(); const { patientState } = usePatientServiceContext(); useEffect(() => { if (!patientState || !riskAssessment || !isOpen) { return; } const handleRiskAssessmentEvent = (cloudEvent: any) => { const riskAssessmentPayload: RiskAssessment = cloudEvent.data; const eventType = cloudEvent.type; const targetId = riskAssessmentId || riskAssessment.id; if (riskAssessmentPayload.id === targetId) { switch (eventType) { case 'com.akashichealthrecords.fhir.riskassessment.updated': onUpdate(riskAssessmentPayload); break; case 'com.akashichealthrecords.fhir.riskassessment.deleted': onDelete(); break; } } }; subscribe('com.akashichealthrecords.fhir.riskassessment.updated', handleRiskAssessmentEvent); subscribe('com.akashichealthrecords.fhir.riskassessment.deleted', handleRiskAssessmentEvent); return () => { unsubscribe('com.akashichealthrecords.fhir.riskassessment.updated', handleRiskAssessmentEvent); unsubscribe('com.akashichealthrecords.fhir.riskassessment.deleted', handleRiskAssessmentEvent); }; }, [patientState, riskAssessment, riskAssessmentId, isOpen, onUpdate, onDelete, subscribe, unsubscribe]); };