import React, { useState, useEffect } from 'react'; import { Card, CardHeader, CardBody, CardDivider } from '../ui/wp-card'; import { Elevation } from '../ui/elevation'; import { InputControl } from '../ui/input-control'; import { Divider } from '../ui/divider'; import { Heading } from '../ui/heading'; import { Spacer } from '../ui/spacer'; import { TabPanel } from '../ui/tab-panel'; import { useFormContext, Controller, useFieldArray } from 'react-hook-form'; import { IValueSet, useValueSetServiceContext } from '../../services'; import { FhirAnnotation, FhirCode, FhirPeriod, FhirReference, FhirReferenceCollection, FhirTiming, FhirValueSetSearch, TypeSelector } from '../../components'; import { useFhirConditions, useFhirDevices, useFhirDeviceUseStatementBroadcast, useFhirDeviceUseStatements, useFhirObservations, useFhirProcedures } from '../../hooks'; import { FhirResource } from 'fhir/r4'; interface FhirDeviceUseStatementProps { elevated?: boolean; disabled?: boolean; enableInlineActions?: boolean; } export const FhirDeviceUseStatement: React.FC = ({ elevated = true, disabled = false, enableInlineActions = true }) => { const { control, watch } = useFormContext(); const { fetchValueSet, valueSetUrls } = useValueSetServiceContext(); const [loading, setLoading] = useState(false); // value sets const [deviceStatementStatus, setDeviceStatementStatus] = useState([]); const spacerMargin = '24px'; useFhirDeviceUseStatements(); useFhirDeviceUseStatementBroadcast(); const { devicesList } = useFhirDevices(); const { conditionsList } = useFhirConditions(); const { observationsList } = useFhirObservations(); const { proceduresList } = useFhirProcedures(); const timingType = watch('timingType'); const reasonReferenceFieldArray = useFieldArray({ control, name: 'reasonReference' }); const derivedFromFieldArray = useFieldArray({ control, name: 'derivedFrom' }); useEffect(() => { const loadValueSets = async () => { setLoading(true); try { const [deviceStatementStatusValueSet] = await Promise.all([fetchValueSet(valueSetUrls.deviceStatementStatus)]); setDeviceStatementStatus(deviceStatementStatusValueSet); } catch (err) { console.error('Error loading value sets:', err); } finally { setLoading(false); } }; loadValueSets(); }, [fetchValueSet, valueSetUrls]); return ( {elevated && } Details {/* device */} {/* status */} {/* bodySite */} {/* recordedOn */} ( )}/> When was the device used? {/* timingType */} {timingType === 'dateTime' && ( <> {/* timingDateTime */} ( )}/> )} {timingType === 'period' && ( <> {/* timingPeriod */} )} {timingType === 'timing' && ( <> {/* timingTiming */} )} {(tab) => { // reason if (tab.name === 'reason') { return (
{/* reasonCode */} {/* reasonReference */} { switch (referenceType) { case 'Condition': return conditionsList; case 'Observation': return observationsList; default: return []; } }} required={false} disabled={disabled} enableInlineActions={enableInlineActions}/>
); } // derivedFrom if (tab.name === 'derivedFrom') { return (
{ switch (referenceType) { case 'Procedure': return proceduresList; default: return []; } }} required={false} disabled={disabled} enableInlineActions={enableInlineActions}/>
); } // notes if (tab.name === 'notes') { return (
{/* note */}
); } }}
); }; export default FhirDeviceUseStatement;