import type { Appointment, Location } from 'fhir/r4'; import { isVirtualLocation } from '../../../utils/roomLocation'; export interface AppointmentWhere { label: string; virtual: boolean; } /** Where a visit happens, from the practice Locations it names; nothing when none is known. */ export const appointmentWhere = (appointment: Appointment, locations: Location[]): AppointmentWhere | undefined => { const named = (appointment.participant ?? []) .map((participant) => participant.actor?.reference) .filter((reference): reference is string => Boolean(reference?.startsWith('Location/'))) .map((reference) => locations.find((location) => location.id === reference.slice('Location/'.length))) .filter((location): location is Location => Boolean(location)); const virtual = named.find(isVirtualLocation); if (virtual) return { label: 'Telehealth', virtual: true }; const site = named.find((location) => Boolean(location.name?.trim())); return site ? { label: (site.name as string).trim(), virtual: false } : undefined; };