import React from 'react'; import { FamilyMemberHistory, FamilyMemberHistoryCondition } from 'fhir/r4'; import { FhirCodeableConceptDisplay } from '../../utils/fhirCodeableConcept'; import { formatDate, formatDateTime } from '../../utils/dateUtils'; import { FhirPeriodDisplay } from '../../utils/fhirPeriod'; import { FhirRangeDisplay } from '../../utils/fhirRange'; import { FhirAgeDisplay } from '../../utils/fhirAge'; import { FhirAnnotationDisplay } from '../../utils/fhirAnnotation'; import { renderField } from '../../utils/renderField'; import { FhirReferenceDisplay } from '../../utils/fhirReference'; import { Dialog, DialogContent, DialogHeader, DialogTitle } from '../ui/dialog'; import { Card, CardHeader, CardContent } from '../ui/card'; import { FieldHistoryProvider, FieldHistoryScope } from '../FieldHistory/FieldHistoryProvider'; import { ShowFieldHistoryToggle } from '../FieldHistory/ShowFieldHistoryToggle'; import { RecordEditedMarker } from '../FieldHistory/RecordEditedMarker'; import { FieldGroup, Section } from '../FieldHistory/FieldLayout'; interface FhirFamilyMemberHistoryDisplayProps { familyMemberHistory: FamilyMemberHistory; isOpen: boolean; onClose: () => void; title?: string; } export const FhirFamilyMemberHistoryDisplay: React.FC = ({ familyMemberHistory, isOpen, onClose, title = "Family Member History Details" }) => { const renderBornValue = () => { if (familyMemberHistory.bornDate) { return formatDate(familyMemberHistory.bornDate); } if (familyMemberHistory.bornPeriod) { return ; } return '-'; }; const renderAgeValue = () => { if (familyMemberHistory.ageAge) { return ; } if (familyMemberHistory.ageRange) { return ; } return '-'; }; const renderDeceasedValue = () => { if (familyMemberHistory.deceasedBoolean === false) { return 'No'; } if (familyMemberHistory.deceasedBoolean === true) { if (familyMemberHistory.deceasedAge) { return ; } if (familyMemberHistory.deceasedRange) { return ; } if (familyMemberHistory.deceasedDate) { return formatDate(familyMemberHistory.deceasedDate); } if (familyMemberHistory.deceasedString) { return familyMemberHistory.deceasedString; } return 'Yes'; } return '-'; }; const renderConditions = () => { if (!familyMemberHistory.condition || familyMemberHistory.condition.length === 0) { return (

No conditions recorded

); } return (
{familyMemberHistory.condition.map((condition, index) => { const renderOnset = (condition: FamilyMemberHistoryCondition) => { if (condition.onsetAge) { return ; } if (condition.onsetRange) { return ; } if (condition.onsetPeriod) { return ; } if (condition.onsetString) { return condition.onsetString; } return '-'; }; return (
Condition {index + 1}
{renderField('Condition', )} {renderField('Outcome', )} {renderField('Contributed to death', condition.contributedToDeath ? 'Yes' : 'No')} {renderField('Onset', renderOnset(condition))} {renderField('Notes', )}
); })}
); }; // `familyMemberHistory` is frequently a forced cast over a union of resource types (several // callers keep one `selectedItem`/`selected.resource` and multiplex it across many // `Fhir*Display` modals, gating only via `isOpen`) -- it can be the wrong resource shape, or // undefined, whenever `isOpen` is false. This guard must run before anything below touches // `familyMemberHistory.*` so a non-FamilyMemberHistory/absent value while closed never throws // (mirrors the original `if (!isOpen) return null;` that ran before WP's `` was ever // constructed). if (!isOpen) return null; return ( { if (!next) onClose(); }} >
{title}
{renderField('Name', familyMemberHistory.name, 'name')} {renderField('Relationship', , 'relationship.coding[0].display')} {renderField('Status', familyMemberHistory.status, 'status')} {renderField('Data Absent Reason', , 'dataAbsentReason.coding[0].display')} {renderField('Gender', , 'sex.coding[0].display')} {renderField('Date of Birth', renderBornValue())} {renderField('Age', renderAgeValue())} {familyMemberHistory.estimatedAge && renderField('Age is Estimated', 'Yes', 'estimatedAge')} {renderField('Deceased', renderDeceasedValue())} {renderField('Date', formatDateTime(familyMemberHistory.date), 'date')}
{renderField('Reason Code', )} {renderField('Reason Reference', )}
{renderConditions()}
{renderField('General Notes', )}
); }; export default FhirFamilyMemberHistoryDisplay;