import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { useReminderClearance } from '../../../components/Chat/useReminderClearance'; import type { Encounter, Patient } from 'fhir/r4'; import { useLocation, useNavigate } from 'react-router-dom'; import { readOpenVisit } from './openVisitState'; import { useAuthServiceContext } from '../../../services/AuthService'; import { usePatientServiceContext } from '../../../services/PatientService'; import { useEncounterServiceContext } from '../../../services/EncounterService'; import { formatFhirHumanName } from '../../../utils/fhirHumanName'; import { roleTier, type ClinicalTier } from '../../../utils/roleTier'; import { holdsClinicianSeat } from '../../../utils/clinicianEnabled'; import { CLINICIAN_SEAT_GRANTED_BY } from '../../../utils/recordEditability'; import { getPractitionerRolePrimaryCoding } from '../../../utils/staffRoleCatalog'; import { useClinicianDay } from './useClinicianDay'; import { useOpenEncounterActions } from './useOpenEncounterActions'; import { EncounterQueue, supportModeLabel } from './EncounterQueue'; import { QueueCountCards } from './QueueCountCards'; import { OverviewEmptyState } from './OverviewEmptyState'; import { EncounterFocusPanel } from './EncounterFocusPanel'; import { SupportFocusPanel } from './SupportFocusPanel'; import { RoomingDayPanel } from './RoomingDayPanel'; import { EncounterWorkspace } from './EncounterWorkspace'; import { WaitingOnYouCard } from './WaitingOnYouCard'; import { OwedWorkPanel } from './OwedWorkPanel'; import { OpenVisitsPanel } from './OpenVisitsPanel'; import { useOpenVisits } from './useOpenVisits'; import { useOwedWork } from './useOwedWork'; import { useUnfinishedNoteNag } from './useUnfinishedNoteNag'; import type { OwedWorkRow } from './owedWork'; import { resultToReviewPath } from './owedWork'; import { usePatientNamesByIds } from '../../../hooks/useAppointmentPatientNames'; import { useContainerWidth } from '../../../hooks/useContainerWidth'; import { nextCandidateKey, selectionAfterQueueChange } from './nextCandidate'; import { usePatientTaskTallies } from '../../../hooks/usePatientTaskTallies'; import { useAppointmentPatientNames } from '../../../hooks/useAppointmentPatientNames'; import { useActiveEncounterContext } from './ActiveEncounterContext'; import { deriveStatus, type QueueItem } from './encounterLifecycle'; import { usePracticeRoomingRead } from './usePracticeRooming'; import { useFhirLocations } from '../../../hooks/useFhirLocations'; import { onlyVirtual } from '../../../utils/roomLocation'; // Explain the missing mode without directing the clinician to purchase a seat. The mode is named only // once the practice's rooming is known (undefined while its rooms are still being read). export const ClinicalModeNotice = ({ seated, rooming: roomsInUse }: { seated: boolean; rooming: boolean | undefined }) => { if (seated) return null; return (
I am: {supportModeLabel(roomsInUse)}
)}Seeing your own patients needs a clinician seat. {CLINICIAN_SEAT_GRANTED_BY}
Loading your dayโฆ
: countCards ?