import React from 'react';
import { useTranslation } from 'react-i18next';
import { Button, InlineNotification, SkeletonText } from '@carbon/react';
import {
ArrowLeftIcon,
closeWorkspaceGroup2,
type DefaultWorkspaceProps,
useVisit,
Workspace2,
type Workspace2DefinitionProps,
} from '@openmrs/esm-framework';
import { useAssignedBedByPatient } from '../../hooks/useAssignedBedByPatient';
import { useInpatientAdmissionByPatients } from '../../hooks/useInpatientAdmissionByPatients';
import { useInpatientRequestByPatients } from '../../hooks/useInpatientRequestByPatients';
import useRestPatient from '../../hooks/useRestPatient';
import useWardLocation from '../../hooks/useWardLocation';
import type { Bed, WardPatient } from '../../types';
import AdmitPatientButton from '../admit-patient-button.component';
import WardPatientWorkspaceBanner from '../patient-banner/patient-banner.component';
export interface CreateAdmissionEncounterWorkspaceProps {
selectedPatientUuid: string;
}
/**
* This is the workspace that opens when clicking on a search result
* from the workspace triggered by the "Add patient to ward" button.
* It directly admits them to the current ward locations
*/
const CreateAdmissionEncounterWorkspace: React.FC<
Workspace2DefinitionProps<
CreateAdmissionEncounterWorkspaceProps,
{
startVisitWorkspaceName: string;
},
{}
>
> = ({ closeWorkspace, workspaceProps: { selectedPatientUuid } }) => {
const { location } = useWardLocation();
const { patient, isLoading: isLoadingPatient, error: errorLoadingPatient } = useRestPatient(selectedPatientUuid);
const { activeVisit, isLoading: isLoadingVisit, error: errorLoadingVisit } = useVisit(selectedPatientUuid);
const { t } = useTranslation();
const {
data: bedData,
isLoading: isLoadingBed,
error: errorLoadingBed,
} = useAssignedBedByPatient(selectedPatientUuid);
const {
data: inpatientAdmissions,
isLoading: isLoadingInpatientAdmission,
error: errorInpatientAdmission,
} = useInpatientAdmissionByPatients([selectedPatientUuid]);
const {
inpatientRequests,
isLoading: isLoadingInpatientRequest,
error: errorInpatientRequests,
} = useInpatientRequestByPatients([selectedPatientUuid]);
const isLoading =
isLoadingPatient || isLoadingVisit || isLoadingBed || isLoadingInpatientAdmission || isLoadingInpatientRequest;
const hasError =
errorLoadingPatient || errorLoadingVisit || errorLoadingBed || errorInpatientAdmission || errorInpatientRequests;
let content: JSX.Element = null;
if (isLoading) {
content =