import React, { useState, useEffect } from 'react'; import { Card, CardBody, CardDivider } from '../ui/wp-card'; import { InputControl } from '../ui/input-control'; import { Spacer } from '../ui/spacer'; import { TabPanel } from '../ui/tab-panel'; import { useFormContext, useFieldArray, Controller } from 'react-hook-form'; import { IValueSet, usePatientServiceContext, useValueSetServiceContext } from '../../services'; import { FhirAnnotation, FhirCode, FhirCodeableConcept, FhirReference, FhirReferenceCollection } from '../../components'; import { useFhirConditions, useFhirEncounters, useFhirObservations } from '../../hooks'; import { FhirResource } from 'fhir/r4'; interface FhirCommunicationRequestProps { elevated?: boolean; disabled?: boolean; enableInlineActions?: boolean; } export const FhirCommunicationRequest: React.FC = ({ disabled = false, enableInlineActions = false }) => { const { control } = useFormContext(); const { patientState, tempPatientState } = usePatientServiceContext(); const { fetchValueSet, valueSetUrls } = useValueSetServiceContext(); const [loading, setLoading] = useState(false); // value sets const [requestStatus, setRequestStatus] = useState([]); const [communicationCategory, setCommunicationCategory] = useState([]); const [requestPriority, setRequestPriority] = useState([]); const [participationMode, setParticipationMode] = useState([]); const [actReason, setActReason] = useState([]); const spacerMargin = '24px'; const { encountersList, tempEncountersList } = useFhirEncounters(); const { conditionsList, tempConditionsList } = useFhirConditions(); const { observationsList, tempObservationsList } = useFhirObservations(); const reasonReferenceFieldArray = useFieldArray({ control, name: 'reasonReference' }); useEffect(() => { const loadValueSets = async () => { setLoading(true); try { const [ requestStatusValueSet, communicationCategoryValueSet, requestPriorityValueSet, participationModeValueSet, actReasonValueSet ] = await Promise.all([ fetchValueSet(valueSetUrls.requestStatus), fetchValueSet(valueSetUrls.communicationCategory), fetchValueSet(valueSetUrls.requestPriority), fetchValueSet(valueSetUrls.participationMode), fetchValueSet(valueSetUrls.actReason, false) ]); setRequestStatus(requestStatusValueSet); setCommunicationCategory(communicationCategoryValueSet); setRequestPriority(requestPriorityValueSet); setParticipationMode(participationModeValueSet); setActReason(actReasonValueSet); } catch (err) { console.error('Error loading value sets:', err); } finally { setLoading(false); } }; loadValueSets(); }, [fetchValueSet, valueSetUrls]); return ( {/* status */} {/* category */} {/* priority */} {/* medium */} {/* replaces */} {(patientState || tempPatientState) && ( <> {/* encounter */} )} {/* authoredOn */} ( )}/> {(tab) => { // reason if (tab.name === 'reason') { return (
{/* reasonCode */} {(patientState || tempPatientState) && ( <> {/* reasonReference */} { switch (referenceType) { case 'Condition': return patientState ? conditionsList : tempPatientState ? tempConditionsList : []; case 'Observation': return patientState ? observationsList : tempPatientState ? tempObservationsList : []; default: return []; } }} multiple={true} required={false} disabled={disabled} enableInlineActions={enableInlineActions}/> )}
); } // notes if (tab.name === 'notes') { return (
{/* note */}
); } }}
); }; export default FhirCommunicationRequest;