From b1328b57be8c50263a513b38412cc198b44c79c8 Mon Sep 17 00:00:00 2001 From: BharathKShetty Date: Sat, 11 Jan 2025 14:39:30 +0530 Subject: [PATCH 1/2] fix: launch Start Visit form immediately from Appointment Scheduler --- .../src/visit/start-visit-button.component.tsx | 17 +++++++++-------- .../esm-patient-orders-app/translations/en.json | 1 + 2 files changed, 10 insertions(+), 8 deletions(-) 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 index dfee38e85f..6105b566b7 100644 --- 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 @@ -1,5 +1,5 @@ import { Button } from '@carbon/react'; -import { launchPatientChartWithWorkspaceOpen } from '@openmrs/esm-patient-common-lib'; +import { launchPatientWorkspace } from '@openmrs/esm-patient-common-lib'; import React, { useCallback } from 'react'; import { useTranslation } from 'react-i18next'; @@ -7,17 +7,18 @@ const StartVisitButton = ({ patientUuid }) => { const { t } = useTranslation(); const handleStartVisit = useCallback(() => { - launchPatientChartWithWorkspaceOpen({ - patientUuid, - workspaceName: 'start-visit-workspace-form', - additionalProps: { + try { + launchPatientWorkspace('start-visit-workspace-form', { + patientUuid, openedFrom: 'patient-chart-start-visit', - }, - }); + }); + } catch (error) { + console.error('Error launching Start Visit workspace:', error); + } }, [patientUuid]); return ( - ); diff --git a/packages/esm-patient-orders-app/translations/en.json b/packages/esm-patient-orders-app/translations/en.json index 3c560217a6..f9cea5f86f 100644 --- a/packages/esm-patient-orders-app/translations/en.json +++ b/packages/esm-patient-orders-app/translations/en.json @@ -31,6 +31,7 @@ "errorSavingLabResults": "Error saving lab results", "goToDrugOrderForm": "Order form", "indication": "Indication", + "labResultError": "Error loading lab results", "inStock": "In stock", "instructions": "Instructions", "labResultError": "Error loading lab results", From 2b0cec5b01986d8a0e046b68f54dcc7c0076062b Mon Sep 17 00:00:00 2001 From: Dennis Kigen Date: Thu, 23 Jan 2025 13:24:54 +0300 Subject: [PATCH 2/2] This commit makes some additional improvements: - Add a `StartVisitButtonProps` interface for annotating the `StartVisitButton` component. - Add a test for the `StartVisitButton` component. - Reorder imports. - Show a snackbar when an error occurs while launching the visit form workspace. --- .../visit/start-visit-button.component.tsx | 27 ++++++++++---- .../src/visit/start-visit-button.test.tsx | 35 +++++++++++++++++++ .../translations/en.json | 2 ++ .../translations/en.json | 1 - 4 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 packages/esm-patient-chart-app/src/visit/start-visit-button.test.tsx 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 index 6105b566b7..26fbea4858 100644 --- 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 @@ -1,24 +1,37 @@ -import { Button } from '@carbon/react'; -import { launchPatientWorkspace } from '@openmrs/esm-patient-common-lib'; import React, { useCallback } from 'react'; +import { Button } from '@carbon/react'; import { useTranslation } from 'react-i18next'; +import { launchPatientWorkspace } from '@openmrs/esm-patient-common-lib'; +import { showSnackbar } from '@openmrs/esm-framework'; -const StartVisitButton = ({ patientUuid }) => { +interface StartVisitButtonProps { + patientUuid: string; +} + +const StartVisitButton = ({ patientUuid }: StartVisitButtonProps) => { const { t } = useTranslation(); + const startVisitWorkspaceForm = 'start-visit-workspace-form'; const handleStartVisit = useCallback(() => { try { - launchPatientWorkspace('start-visit-workspace-form', { + launchPatientWorkspace(startVisitWorkspaceForm, { patientUuid, openedFrom: 'patient-chart-start-visit', }); } catch (error) { - console.error('Error launching Start Visit workspace:', error); + console.error('Error launching visit form workspace:', error); + + showSnackbar({ + isLowContrast: false, + kind: 'error', + title: t('errorStartingVisit', 'Error starting visit'), + subtitle: error.message ?? t('errorStartingVisitDescription', 'An error occurred while starting the visit'), + }); } - }, [patientUuid]); + }, [patientUuid, t]); return ( - ); diff --git a/packages/esm-patient-chart-app/src/visit/start-visit-button.test.tsx b/packages/esm-patient-chart-app/src/visit/start-visit-button.test.tsx new file mode 100644 index 0000000000..9591f51f11 --- /dev/null +++ b/packages/esm-patient-chart-app/src/visit/start-visit-button.test.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import userEvent from '@testing-library/user-event'; +import { render, screen } from '@testing-library/react'; +import { mockPatient } from 'tools'; +import { launchPatientWorkspace } from '@openmrs/esm-patient-common-lib'; +import StartVisitButton from './start-visit-button.component'; + +const mockLaunchPatientWorkspace = jest.mocked(launchPatientWorkspace); + +jest.mock('@openmrs/esm-patient-common-lib', () => ({ + launchPatientWorkspace: jest.fn(), +})); + +describe('StartVisitButton', () => { + it('renders the start visit button', () => { + render(); + + expect(screen.getByRole('button', { name: /start visit/i })).toBeInTheDocument(); + }); + + it('clicking the button launches the start visit form', async () => { + const user = userEvent.setup(); + + render(); + + const startVisitButton = screen.getByRole('button', { name: /start visit/i }); + await user.click(startVisitButton); + + expect(mockLaunchPatientWorkspace).toHaveBeenCalledTimes(1); + expect(mockLaunchPatientWorkspace).toHaveBeenCalledWith('start-visit-workspace-form', { + patientUuid: mockPatient.id, + openedFrom: 'patient-chart-start-visit', + }); + }); +}); diff --git a/packages/esm-patient-chart-app/translations/en.json b/packages/esm-patient-chart-app/translations/en.json index 575edabfb4..89b919859d 100644 --- a/packages/esm-patient-chart-app/translations/en.json +++ b/packages/esm-patient-chart-app/translations/en.json @@ -65,6 +65,8 @@ "errorMarkingPatientAlive": "Error marking patient alive", "errorMarkingPatientDeceased": "Error marking patient deceased", "errorOccuredDeletingVisit": "An error occured when deleting visit", + "errorStartingVisit": "Error starting visit", + "errorStartingVisitDescription": "An error occurred while starting the visit", "errorUpdatingVisitAttribute": "Could not update {{attributeName}} attribute", "errorUpdatingVisitDetails": "Error updating visit details", "errorWhenRestoringVisit": "Error occured when restoring {{visit}}", diff --git a/packages/esm-patient-orders-app/translations/en.json b/packages/esm-patient-orders-app/translations/en.json index f9cea5f86f..3c560217a6 100644 --- a/packages/esm-patient-orders-app/translations/en.json +++ b/packages/esm-patient-orders-app/translations/en.json @@ -31,7 +31,6 @@ "errorSavingLabResults": "Error saving lab results", "goToDrugOrderForm": "Order form", "indication": "Indication", - "labResultError": "Error loading lab results", "inStock": "In stock", "instructions": "Instructions", "labResultError": "Error loading lab results",