import React from 'react'; import { ItemGroup } from "../components/ui/item-group"; import { Dosage } from 'fhir/r4'; import { FhirCodeableConceptDisplay } from './fhirCodeableConcept'; import { FhirQuantityDisplay } from './fhirQuantity'; import { FhirRangeDisplay } from './fhirRange'; import { FhirRatioDisplay } from './fhirRatio'; import { Card, CardHeader, CardBody } from '../components/ui/wp-card'; import { Heading } from '../components/ui/heading'; import { renderField } from './renderField'; interface FhirDosageDisplayProps { dosage: Dosage | Dosage[] | undefined | null; className?: string; emptyText?: string; multiple?: boolean; } export const formatFhirDosage = (dosage: Dosage | undefined | null): string => { if (!dosage) { return ''; } return dosage.text || ''; }; export const FhirDosageDisplay: React.FC = ({ dosage, className, emptyText = '', multiple = false }) => { const renderDoseValue = (singleDosage: Dosage) => { if (singleDosage.doseAndRate && singleDosage.doseAndRate.length > 0) { const doseAndRate = singleDosage.doseAndRate[0]; if (doseAndRate.doseQuantity) { return ; } if (doseAndRate.doseRange) { return ; } } return '-'; }; const renderRateValue = (singleDosage: Dosage) => { if (singleDosage.doseAndRate && singleDosage.doseAndRate.length > 0) { const doseAndRate = singleDosage.doseAndRate[0]; if (doseAndRate.rateRatio) { return ; } if (doseAndRate.rateRange) { return ; } if (doseAndRate.rateQuantity) { return ; } } return '-'; }; const renderAsNeededValue = (singleDosage: Dosage) => { if (singleDosage.asNeededBoolean === true) { return 'Yes'; } if (singleDosage.asNeededCodeableConcept) { return ; } return '-'; }; const renderSingleDosage = (singleDosage: Dosage, index?: number) => { // - `variant="secondary"` dropped, and it was ALREADY dead before this edit. The // ui/wp-card adapter reproduces WordPress's Card as `size` / `isRounded` / `isBorderless`; // it has no `variant`, and `.wp-card--secondary` does not exist in index.css. The prop was // being spread onto the underlying
, where React emits it as an unknown DOM attribute // and no styling is applied - so removing it changes nothing on screen. // tsc found this ONE call site. A grep for `variant=` across files importing wp-card // returns 16, all Badge/Button/Alert variants - the compiler is the precise instrument, not // the search. // This comment sits ABOVE the `return`, not inside it: a `{/*... */}` as the first thing // inside `return (` parses as an object literal. recorded that trap five times and // I still walked into it while writing this very note. return ( {multiple && index !== undefined && ( Dosage {index + 1} )} {renderField('Instructions', singleDosage.text || '')} {renderField('Additional Instructions', )} {renderField('Patient Instructions', singleDosage.patientInstruction)} {renderField('Timing', )} {renderField('As Needed', renderAsNeededValue(singleDosage))} {renderField('Site', )} {renderField('Route', )} {renderField('Method', )} {renderField('Dose Amount', renderDoseValue(singleDosage))} {renderField('Rate', renderRateValue(singleDosage))} {renderField('Max Dose Per Period', )} {renderField('Max Dose Per Administration', )} {renderField('Max Dose Per Lifetime', )} ); }; if (!dosage || (Array.isArray(dosage) && dosage.length === 0)) { return {emptyText || '-'}; } if (multiple && Array.isArray(dosage)) { return (
{dosage.map((singleDosage, index) => renderSingleDosage(singleDosage, index))}
); } const singleDosage = Array.isArray(dosage) ? dosage[0] : dosage; return (
{renderSingleDosage(singleDosage)}
); };