diff --git a/packages/esm-patient-chart-app/src/actions-buttons/add-past-visit.component.tsx b/packages/esm-patient-chart-app/src/actions-buttons/add-past-visit.component.tsx index bfa7929a22..53d86c90d3 100644 --- a/packages/esm-patient-chart-app/src/actions-buttons/add-past-visit.component.tsx +++ b/packages/esm-patient-chart-app/src/actions-buttons/add-past-visit.component.tsx @@ -2,16 +2,24 @@ import { showModal } from '@openmrs/esm-framework'; import React, { useCallback } from 'react'; import { useTranslation } from 'react-i18next'; -interface AddPastVisitOverflowMenuItemProps {} +interface AddPastVisitOverflowMenuItemProps { + patientUuid?: string; + launchPatientChart?: boolean; +} -const AddPastVisitOverflowMenuItem: React.FC = () => { +const AddPastVisitOverflowMenuItem: React.FC = ({ + patientUuid, + launchPatientChart, +}) => { const { t } = useTranslation(); const openModal = useCallback(() => { const dispose = showModal('start-visit-dialog', { + patientUuid, + launchPatientChart, closeModal: () => dispose(), }); - }, []); + }, [patientUuid, launchPatientChart]); return (
  • diff --git a/packages/esm-patient-chart-app/src/index.ts b/packages/esm-patient-chart-app/src/index.ts index cb8a8eb260..f97765d793 100644 --- a/packages/esm-patient-chart-app/src/index.ts +++ b/packages/esm-patient-chart-app/src/index.ts @@ -79,6 +79,14 @@ function setupOpenMRS() { moduleName, }), }, + { + name: 'stop-visit-button-patient-search', + slot: 'patient-search-actions-slot', + load: getAsyncLifecycle(() => import('./actions-buttons/stop-visit.component'), { + featureName: 'patient-actions-slot', + moduleName, + }), + }, { name: 'cancel-visit-button', slot: 'patient-actions-slot', @@ -87,6 +95,14 @@ function setupOpenMRS() { moduleName, }), }, + { + name: 'cancel-visit-button', + slot: 'patient-search-actions-slot', + load: getAsyncLifecycle(() => import('./actions-buttons/cancel-visit.component'), { + featureName: 'patient-actions-slot', + moduleName, + }), + }, { name: 'add-past-visit-button', slot: 'patient-actions-slot', @@ -95,6 +111,14 @@ function setupOpenMRS() { moduleName, }), }, + { + name: 'add-past-visit-button', + slot: 'patient-search-actions-slot', + load: getAsyncLifecycle(() => import('./actions-buttons/add-past-visit.component'), { + featureName: 'patient-actions-slot', + moduleName, + }), + }, { name: 'encounters-summary-dashboard', slot: 'patient-chart-dashboard-slot', @@ -182,6 +206,14 @@ function setupOpenMRS() { moduleName, }), }, + { + id: 'start-visit-button-patient-search', + slot: 'start-visit-button-slot', + load: getAsyncLifecycle(() => import('./visit/start-visit-button.component'), { + featureName: 'start-visit-button-patient-search', + moduleName, + }), + }, ], }; } diff --git a/packages/esm-patient-chart-app/src/visit/start-visit-button.component.tsx b/packages/esm-patient-chart-app/src/visit/start-visit-button.component.tsx new file mode 100644 index 0000000000..375dad7a30 --- /dev/null +++ b/packages/esm-patient-chart-app/src/visit/start-visit-button.component.tsx @@ -0,0 +1,31 @@ +import { navigate } from '@openmrs/esm-framework'; +import { launchPatientChartWithWorkspaceOpen } from '@openmrs/esm-patient-common-lib'; +import { Button } from 'carbon-components-react'; +import React, { useCallback } from 'react'; +import { useTranslation } from 'react-i18next'; + +interface StartVisitButtonProps { + patientUuid: string; +} + +const StartVisitButton = ({ patientUuid }) => { + const { t } = useTranslation(); + + const handleStartVisit = useCallback(() => { + launchPatientChartWithWorkspaceOpen({ + patientUuid, + workspaceName: 'start-visit-workspace-form', + }); + navigate({ + to: `\${openmrsSpaBase}/patient/${patientUuid}/chart`, + }); + }, [patientUuid]); + + return ( + + ); +}; + +export default StartVisitButton; diff --git a/packages/esm-patient-chart-app/src/visit/visit-form/visit-form.component.tsx b/packages/esm-patient-chart-app/src/visit/visit-form/visit-form.component.tsx index 6b4a42c3a3..abbb30cd39 100644 --- a/packages/esm-patient-chart-app/src/visit/visit-form/visit-form.component.tsx +++ b/packages/esm-patient-chart-app/src/visit/visit-form/visit-form.component.tsx @@ -122,7 +122,7 @@ const StartVisitForm: React.FC = ({ patientUuid, closeWor }, ); }, - [closeWorkspace, patientUuid, selectedLocation, t, timeFormat, visitDate, visitTime, visitType], + [closeWorkspace, patientUuid, selectedLocation, t, timeFormat, visitDate, visitTime, visitType, mutate], ); const handleOnChange = () => { diff --git a/packages/esm-patient-chart-app/src/visit/visit-prompt/cancel-visit-dialog.component.tsx b/packages/esm-patient-chart-app/src/visit/visit-prompt/cancel-visit-dialog.component.tsx index 614484388b..6bbaceeb40 100644 --- a/packages/esm-patient-chart-app/src/visit/visit-prompt/cancel-visit-dialog.component.tsx +++ b/packages/esm-patient-chart-app/src/visit/visit-prompt/cancel-visit-dialog.component.tsx @@ -44,7 +44,7 @@ const CancelVisitDialog: React.FC = ({ patientUuid, clos setSubmitting(false); }, ); - }, []); + }, [closeModal, currentVisit.uuid, mutate, t]); return (
    diff --git a/packages/esm-patient-chart-app/src/visit/visit-prompt/start-visit-dialog.component.tsx b/packages/esm-patient-chart-app/src/visit/visit-prompt/start-visit-dialog.component.tsx index dcaca3302d..492dbb4335 100644 --- a/packages/esm-patient-chart-app/src/visit/visit-prompt/start-visit-dialog.component.tsx +++ b/packages/esm-patient-chart-app/src/visit/visit-prompt/start-visit-dialog.component.tsx @@ -1,27 +1,48 @@ import React, { useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import { Button, ModalBody, ModalHeader, ModalFooter } from 'carbon-components-react'; -import { launchPatientWorkspace } from '@openmrs/esm-patient-common-lib'; +import { launchPatientChartWithWorkspaceOpen, launchPatientWorkspace } from '@openmrs/esm-patient-common-lib'; import styles from './start-visit-dialog.scss'; interface StartVisitDialogProps { patientUuid: string; closeModal: () => void; visitType: string; + launchPatientChart?: boolean; } -const StartVisitDialog: React.FC = ({ patientUuid, closeModal, visitType }) => { +const StartVisitDialog: React.FC = ({ + patientUuid, + closeModal, + visitType, + launchPatientChart, +}) => { const { t } = useTranslation(); const handleEditPastVisit = useCallback(() => { - launchPatientWorkspace('past-visits-overview'); + if (launchPatientChart) { + launchPatientChartWithWorkspaceOpen({ + patientUuid, + workspaceName: 'past-visits-overview', + }); + } else { + launchPatientWorkspace('past-visits-overview'); + } closeModal(); - }, [closeModal]); + }, [closeModal, patientUuid, launchPatientChart]); const handleStartNewVisit = useCallback(() => { - launchPatientWorkspace('start-visit-workspace-form'); + if (launchPatientChart) { + launchPatientChartWithWorkspaceOpen({ + patientUuid, + workspaceName: 'start-visit-workspace-form', + }); + } else { + launchPatientWorkspace('start-visit-workspace-form'); + } + closeModal(); - }, [closeModal]); + }, [closeModal, patientUuid, launchPatientChart]); const modalHeaderText = visitType === 'past' ? t('addPastVisit', 'Add a past visit') : t('noActiveVisit', 'No active visit'); diff --git a/packages/esm-patient-chart-app/src/workspace/workspace-renderer.component.tsx b/packages/esm-patient-chart-app/src/workspace/workspace-renderer.component.tsx index 1e6c8e618b..b15e434fd6 100644 --- a/packages/esm-patient-chart-app/src/workspace/workspace-renderer.component.tsx +++ b/packages/esm-patient-chart-app/src/workspace/workspace-renderer.component.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react'; +import React, { useEffect, useState, useMemo } from 'react'; import { useLayoutType } from '@openmrs/esm-framework'; import { OpenWorkspace, useWorkspaceWindowSize } from '@openmrs/esm-patient-common-lib'; import { mountRootParcel } from 'single-spa'; @@ -31,7 +31,7 @@ export function WorkspaceRenderer({ workspace, patientUuid, active }: WorkspaceR }; }, [workspace]); - const props = React.useMemo( + const props = useMemo( () => workspace && { closeWorkspace: workspace.closeWorkspace, @@ -39,7 +39,7 @@ export function WorkspaceRenderer({ workspace, patientUuid, active }: WorkspaceR patientUuid, ...workspace.additionalProps, }, - [workspace, workspace.additionalProps, workspace.closeWorkspace, workspace.promptBeforeClosing, patientUuid], + [workspace, patientUuid], ); return ( diff --git a/packages/esm-patient-chart-app/src/workspace/workspace-window.component.tsx b/packages/esm-patient-chart-app/src/workspace/workspace-window.component.tsx index b30abf383c..a7f687c1f7 100644 --- a/packages/esm-patient-chart-app/src/workspace/workspace-window.component.tsx +++ b/packages/esm-patient-chart-app/src/workspace/workspace-window.component.tsx @@ -45,7 +45,7 @@ const WorkspaceWindow: React.FC> = ( if (active && hidden) { updateWindowSize('normal'); } - }, [workspaces]); + }, [workspaces, active, hidden, updateWindowSize]); useBodyScrollLock(active && !isDesktop(layout));