import React from 'react'; import { DetectedIssue } from 'fhir/r4'; import { FhirCodeableConceptDisplay } from '../../utils/fhirCodeableConcept'; import { FhirCodeDisplay } from '../../utils/fhirCode'; import { FhirPeriodDisplay } from '../../utils/fhirPeriod'; import { FhirReferenceDisplay } from '../../utils/fhirReference'; import { formatDateTime } from '../../utils/dateUtils'; import { renderField } from '../../utils/renderField'; 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 { PrintRecord } from '../ui/print-record'; import { RecordEditedMarker } from '../FieldHistory/RecordEditedMarker'; import { FieldGroup, Section } from '../FieldHistory/FieldLayout'; interface FhirDetectedIssueDisplayProps { detectedIssue: DetectedIssue; isOpen: boolean; onClose: () => void; title?: string; } export const FhirDetectedIssueDisplay: React.FC = ({ detectedIssue, isOpen, onClose, title = "Detected Issue Details" }) => { const renderIdentifiedValue = () => { if (detectedIssue.identifiedDateTime) { return formatDateTime(detectedIssue.identifiedDateTime); } if (detectedIssue.identifiedPeriod) { return ; } return '-'; }; const renderEvidence = () => { if (!detectedIssue.evidence || detectedIssue.evidence.length === 0) { return (

No evidence recorded

); } return (
{detectedIssue.evidence.map((evidence, index) => (
Evidence {index + 1}
{renderField('Manifestation', )} {renderField('Supporting Information', )}
))}
); }; const renderMitigation = () => { if (!detectedIssue.mitigation || detectedIssue.mitigation.length === 0) { return (

No mitigation actions recorded

); } return (
{detectedIssue.mitigation.map((mitigation, index) => (
Mitigation {index + 1}
{renderField('What mitigation?', )} {renderField('Date', formatDateTime(mitigation.date))} {renderField('Author', )}
))}
); }; // `detectedIssue` 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 // `detectedIssue.*` so a non-DetectedIssue/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('Issue Category', , 'code.coding[0].display')} {renderField('Status', , 'status')} {renderField('Severity', , 'severity')} {renderField('Description and Context', detectedIssue.detail, 'detail')} {renderField('When Identified', renderIdentifiedValue(), detectedIssue.identifiedDateTime ? 'identifiedDateTime' : undefined)} {renderField('Patient', )} {renderField('Author', )}
{renderField('Problem resource', )}
{renderEvidence()}
{renderMitigation()}
{renderField('URI to more information', detectedIssue.reference ? ( {detectedIssue.reference} ) : '-', 'reference')}
); }; export default FhirDetectedIssueDisplay;