diff --git a/packages/esm-patient-common-lib/src/form-entry-interop.ts b/packages/esm-patient-common-lib/src/form-entry-interop.ts index efa0c46dd..029b0aee8 100644 --- a/packages/esm-patient-common-lib/src/form-entry-interop.ts +++ b/packages/esm-patient-common-lib/src/form-entry-interop.ts @@ -1,4 +1,5 @@ import { launchPatientWorkspace, launchStartVisitPrompt } from '@openmrs/esm-patient-common-lib'; +import { formEntryWorkspace } from '@openmrs/esm-patient-forms-app/src/constants'; interface HtmlFormEntryForm { formUuid: string; @@ -19,6 +20,7 @@ export function launchFormEntryOrHtmlForms( visitStartDatetime?: string, visitStopDatetime?: string, mutateForms?: () => void, + formEntryWorkspaceName = formEntryWorkspace, ) { if (visitUuid) { const htmlForm = htmlFormEntryForms.find((form) => form.formUuid === formUuid); @@ -37,6 +39,7 @@ export function launchFormEntryOrHtmlForms( visitStopDatetime, htmlForm, mutateForms, + formEntryWorkspaceName, ); } } else { @@ -55,9 +58,12 @@ export function launchFormEntry( visitStopDatetime?: string, htmlForm?: HtmlFormEntryForm, mutateForm?: () => void, + formEntryWorkspaceName = formEntryWorkspace, ) { - launchPatientWorkspace('patient-form-entry-workspace', { + launchPatientWorkspace(formEntryWorkspaceName || formEntryWorkspace, { workspaceTitle: formName, + formEntryWorkspaceName, + patientUuid, mutateForm, formInfo: { encounterUuid, diff --git a/packages/esm-patient-common-lib/src/index.ts b/packages/esm-patient-common-lib/src/index.ts index 76537159b..eb14c0c14 100644 --- a/packages/esm-patient-common-lib/src/index.ts +++ b/packages/esm-patient-common-lib/src/index.ts @@ -19,4 +19,5 @@ export * from './time-helper'; export * from './types'; export * from './useAllowedFileExtensions'; export * from './useSystemVisitSetting'; +export * from './useCheckAndPromptForVisit'; export * from './workspaces'; diff --git a/packages/esm-patient-common-lib/src/useCheckAndPromptForVisit.ts b/packages/esm-patient-common-lib/src/useCheckAndPromptForVisit.ts new file mode 100644 index 000000000..dfa9366d4 --- /dev/null +++ b/packages/esm-patient-common-lib/src/useCheckAndPromptForVisit.ts @@ -0,0 +1,14 @@ +import { launchStartVisitPrompt } from './launchStartVisitPrompt'; +import { useVisitOrOfflineVisit } from './offline/visit'; +import { useSystemVisitSetting } from './useSystemVisitSetting'; + +export function useCheckAndPromptForVisit(patientUuid: string) { + const { systemVisitEnabled } = useSystemVisitSetting(); + const { currentVisit } = useVisitOrOfflineVisit(patientUuid); + + // Check if there's no active visit and the system requires visits, then prompt to start one + if (systemVisitEnabled && !currentVisit) { + launchStartVisitPrompt(); + } + return { hasCurrentVisit: systemVisitEnabled && !!currentVisit }; +} diff --git a/packages/esm-patient-forms-app/src/forms/form-entry.workspace.tsx b/packages/esm-patient-forms-app/src/forms/form-entry.workspace.tsx index 89c5b8df6..d5f7f4f95 100644 --- a/packages/esm-patient-forms-app/src/forms/form-entry.workspace.tsx +++ b/packages/esm-patient-forms-app/src/forms/form-entry.workspace.tsx @@ -9,16 +9,19 @@ import { interface FormEntryComponentProps extends DefaultPatientWorkspaceProps { mutateForm: () => void; formInfo: FormEntryProps; + formEntryWorkspaceName?: string; } const FormEntry: React.FC = ({ patientUuid, + formEntryWorkspaceName, closeWorkspace, closeWorkspaceWithSavedChanges, promptBeforeClosing, mutateForm, formInfo, }) => { + // console.log({ formEntryWorkspaceName }); const { encounterUuid, formUuid, visitStartDatetime, visitStopDatetime, visitTypeUuid, visitUuid, additionalProps } = formInfo || {}; const { patient } = usePatient(patientUuid); diff --git a/packages/esm-patient-forms-app/src/forms/forms-dashboard.component.tsx b/packages/esm-patient-forms-app/src/forms/forms-dashboard.component.tsx index 048871a8a..5493f8bb3 100644 --- a/packages/esm-patient-forms-app/src/forms/forms-dashboard.component.tsx +++ b/packages/esm-patient-forms-app/src/forms/forms-dashboard.component.tsx @@ -1,6 +1,6 @@ import React, { useCallback, useMemo } from 'react'; import { Tile } from '@carbon/react'; -import { useConfig, useConnectivity, usePatient, ResponsiveWrapper } from '@openmrs/esm-framework'; +import { ResponsiveWrapper, useConfig, useConnectivity, usePatient } from '@openmrs/esm-framework'; import { type DefaultPatientWorkspaceProps, EmptyDataIllustration, @@ -13,20 +13,26 @@ import styles from './forms-dashboard.scss'; import { useForms } from '../hooks/use-forms'; import { useTranslation } from 'react-i18next'; -const FormsDashboard: React.FC = () => { +interface FormsDashboardProps extends DefaultPatientWorkspaceProps { + formEntryWorkspaceName?: string; +} + +const FormsDashboard: React.FC = ({ patientUuid, formEntryWorkspaceName }) => { const { t } = useTranslation(); const config = useConfig(); const isOnline = useConnectivity(); const htmlFormEntryForms = config.htmlFormEntryForms; - const { patient, patientUuid } = usePatient(); + const { patient, patientUuid: fetchedPatientUuid } = usePatient(patientUuid); const { data: forms, error, mutateForms } = useForms(patientUuid, undefined, undefined, !isOnline, config.orderBy); const { currentVisit } = useVisitOrOfflineVisit(patientUuid); const handleFormOpen = useCallback( (formUuid: string, encounterUuid: string, formName: string) => { + // console.log({ formUuid, patientUuid, formEntryWorkspaceName, fetchedPatientUuid }); + launchFormEntryOrHtmlForms( htmlFormEntryForms, - patientUuid, + fetchedPatientUuid, formUuid, currentVisit.uuid, encounterUuid, @@ -35,9 +41,10 @@ const FormsDashboard: React.FC = () => { currentVisit.startDatetime, currentVisit.stopDatetime, mutateForms, + formEntryWorkspaceName, ); }, - [currentVisit, htmlFormEntryForms, mutateForms, patientUuid], + [currentVisit, htmlFormEntryForms, mutateForms, fetchedPatientUuid, formEntryWorkspaceName], ); const sections = useMemo(() => { diff --git a/packages/esm-patient-forms-app/src/index.ts b/packages/esm-patient-forms-app/src/index.ts index c3ce3231e..eae9cd957 100644 --- a/packages/esm-patient-forms-app/src/index.ts +++ b/packages/esm-patient-forms-app/src/index.ts @@ -31,6 +31,10 @@ export function startupApp() { // t('clinicalForm', 'Clinical form') export const patientFormEntryWorkspace = getAsyncLifecycle(() => import('./forms/form-entry.workspace'), options); +export const patientFormEntryWorkspaceExtension = getAsyncLifecycle( + () => import('./forms/form-entry.workspace'), + options, +); export const patientHtmlFormEntryWorkspace = getAsyncLifecycle( () => import('./htmlformentry/html-form-entry.workspace'), @@ -39,6 +43,10 @@ export const patientHtmlFormEntryWorkspace = getAsyncLifecycle( // t('clinicalForms', 'Clinical forms') export const clinicalFormsWorkspace = getAsyncLifecycle(() => import('./forms/forms-dashboard.workspace'), options); +export const clinicalFormsWorkspaceExtension = getAsyncLifecycle( + () => import('./forms/forms-dashboard.workspace'), + options, +); export const clinicalFormActionMenu = getSyncLifecycle(clinicalFormActionMenuComponent, options); diff --git a/packages/esm-patient-forms-app/src/routes.json b/packages/esm-patient-forms-app/src/routes.json index 462af920a..31d82cb6c 100644 --- a/packages/esm-patient-forms-app/src/routes.json +++ b/packages/esm-patient-forms-app/src/routes.json @@ -37,6 +37,16 @@ "offline": true, "online": true, "order": 2 + }, + { + "name": "clinical-forms-workspaceExtension", + "component": "clinicalFormsWorkspaceExtension", + "slot": "ward-patient-clinical-forms-workspace-slot" + }, + { + "name": "patient-form-entry-workspaceExtension", + "component": "patientFormEntryWorkspaceExtension", + "slot": "ward-patient-form-entry-workspace-slot" } ], "workspaces": [