From b5061c012d1f3f12681345706e05c7e842f35a8d Mon Sep 17 00:00:00 2001 From: jabahum Date: Wed, 12 Feb 2025 10:59:09 +0300 Subject: [PATCH 01/63] chore --- .../active-visits-clinical-table.component.tsx | 1 - .../src/active-visits/active-visits-table.component.tsx | 1 - .../visit-prompt/start-visit-dialog.component.tsx | 2 -- packages/esm-patient-queues-app/src/index.ts | 2 -- .../patient-chart-link/patient-chart-link.component.tsx | 0 .../src/patient-chart-link/patient-chart-link.scss | 0 .../src/patient-chart-link/patient-chart-link.ts | 0 packages/esm-patient-queues-app/src/test.component.tsx | 7 ------- 8 files changed, 13 deletions(-) delete mode 100644 packages/esm-patient-queues-app/src/patient-chart-link/patient-chart-link.component.tsx delete mode 100644 packages/esm-patient-queues-app/src/patient-chart-link/patient-chart-link.scss delete mode 100644 packages/esm-patient-queues-app/src/patient-chart-link/patient-chart-link.ts delete mode 100644 packages/esm-patient-queues-app/src/test.component.tsx diff --git a/packages/esm-patient-queues-app/src/active-visits/active-visits-patients-clinical/active-visits-clinical-table.component.tsx b/packages/esm-patient-queues-app/src/active-visits/active-visits-patients-clinical/active-visits-clinical-table.component.tsx index 2f6d3603..1fbd726a 100644 --- a/packages/esm-patient-queues-app/src/active-visits/active-visits-patients-clinical/active-visits-clinical-table.component.tsx +++ b/packages/esm-patient-queues-app/src/active-visits/active-visits-patients-clinical/active-visits-clinical-table.component.tsx @@ -34,7 +34,6 @@ import StatusIcon from '../../queue-entry-table-components/status-icon.component import PickPatientActionMenu from '../../queue-entry-table-components/pick-patient-queue-entry-menu.component'; import ViewActionsMenu from '../view-action-menu.components'; import NotesActionsMenu from '../notes-action-menu.components'; -import MovetoNextPointAction from '../move-patient-to-next-action-menu.components'; import styles from '../active-visits-table.scss'; import { QueueStatus } from '../../utils/utils'; import { getLocationByUuid, usePatientQueuesList } from './active-visits-clinical.resource'; diff --git a/packages/esm-patient-queues-app/src/active-visits/active-visits-table.component.tsx b/packages/esm-patient-queues-app/src/active-visits/active-visits-table.component.tsx index 86b9d13b..580aee00 100644 --- a/packages/esm-patient-queues-app/src/active-visits/active-visits-table.component.tsx +++ b/packages/esm-patient-queues-app/src/active-visits/active-visits-table.component.tsx @@ -37,7 +37,6 @@ import ViewActionsMenu from './view-action-menu.components'; import NotesActionsMenu from './notes-action-menu.components'; import { PRIVILEGE_ENABLE_EDIT_DEMOGRAPHICS } from '../constants'; import { QueueStatus } from '../utils/utils'; -import MovetoNextPointAction from './move-patient-to-next-action-menu.components'; import { useSession, useLayoutType, usePagination, userHasAccess, isDesktop } from '@openmrs/esm-framework'; interface ActiveVisitsTableProps { diff --git a/packages/esm-patient-queues-app/src/active-visits/visit-prompt/start-visit-dialog.component.tsx b/packages/esm-patient-queues-app/src/active-visits/visit-prompt/start-visit-dialog.component.tsx index cde2485e..74b89598 100644 --- a/packages/esm-patient-queues-app/src/active-visits/visit-prompt/start-visit-dialog.component.tsx +++ b/packages/esm-patient-queues-app/src/active-visits/visit-prompt/start-visit-dialog.component.tsx @@ -25,8 +25,6 @@ const StartVisitDialog: React.FC = ({ queueEntry, closeMo
Patient : {queueEntry?.name} -
-
{t('nextServicePoint', 'Next Service Point')}
diff --git a/packages/esm-patient-queues-app/src/index.ts b/packages/esm-patient-queues-app/src/index.ts index 775acc4f..e17e99fd 100644 --- a/packages/esm-patient-queues-app/src/index.ts +++ b/packages/esm-patient-queues-app/src/index.ts @@ -11,7 +11,6 @@ import addPatientToQueueComponent from './active-visits/visit-form/visit-form.co import notesModalComponent from './active-visits/notes-dialog.component'; import pickPatientEntryQueueComponent from './active-visits/pick-patient-dialog.component'; import queueScreenComponent from './queue-board/queue-board.component'; -import testScreenComponent from './test.component'; import rootComponent from './root.component'; import homeDashboardComponent from './home.component'; import outpatientSideNavExtComponent from './side-menu/side-menu.component'; @@ -75,4 +74,3 @@ export const pickPatientEntryQueue = getSyncLifecycle(pickPatientEntryQueueCompo export const queueScreen = getSyncLifecycle(queueScreenComponent, options); -export const testScreen = getSyncLifecycle(testScreenComponent, options); diff --git a/packages/esm-patient-queues-app/src/patient-chart-link/patient-chart-link.component.tsx b/packages/esm-patient-queues-app/src/patient-chart-link/patient-chart-link.component.tsx deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/esm-patient-queues-app/src/patient-chart-link/patient-chart-link.scss b/packages/esm-patient-queues-app/src/patient-chart-link/patient-chart-link.scss deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/esm-patient-queues-app/src/patient-chart-link/patient-chart-link.ts b/packages/esm-patient-queues-app/src/patient-chart-link/patient-chart-link.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/esm-patient-queues-app/src/test.component.tsx b/packages/esm-patient-queues-app/src/test.component.tsx deleted file mode 100644 index dcbc1d0b..00000000 --- a/packages/esm-patient-queues-app/src/test.component.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react'; - -const Test = () => { - return null; -}; - -export default Test; From c8199a8df6b1bc1dc90a0ee4ee5fa63355e82994 Mon Sep 17 00:00:00 2001 From: jabahum Date: Wed, 12 Feb 2025 11:09:36 +0300 Subject: [PATCH 02/63] remove load banner and appointments availabe --- .../visit-form/visit-form.component.tsx | 22 +------------------ 1 file changed, 1 insertion(+), 21 deletions(-) diff --git a/packages/esm-patient-queues-app/src/active-visits/visit-form/visit-form.component.tsx b/packages/esm-patient-queues-app/src/active-visits/visit-form/visit-form.component.tsx index 9a710660..98dc9d28 100644 --- a/packages/esm-patient-queues-app/src/active-visits/visit-form/visit-form.component.tsx +++ b/packages/esm-patient-queues-app/src/active-visits/visit-form/visit-form.component.tsx @@ -66,10 +66,6 @@ const StartVisitForm: React.FC = ({ patientUuid, toggleSearchTyp const { queueRoomLocations, mutate } = useQueueRoomLocations(sessionUser?.sessionLocation?.uuid); const [selectedNextQueueLocation, setSelectedNextQueueLocation] = useState(''); const [selectedProvider, setSelectedProvider] = useState(''); - const { patient, isLoading } = usePatient(patientUuid); - - const [upcomingAppointment, setUpcomingAppointment] = useState(null); - const upcomingAppointmentState = useMemo(() => ({ patientUuid, setUpcomingAppointment }), [patientUuid]); useEffect(() => { if (queueRoomLocations?.length && sessionUser) { @@ -218,24 +214,8 @@ const StartVisitForm: React.FC = ({ patientUuid, toggleSearchTyp return (
- {isLoading && ( - - )} - + - {config.showUpcomingAppointments && ( -
-
-
- -
-
- )}
{t('priority', 'Priority')}
Date: Wed, 12 Feb 2025 11:10:34 +0300 Subject: [PATCH 03/63] remove visittype check --- .../src/active-visits/visit-form/visit-form.component.tsx | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/packages/esm-patient-queues-app/src/active-visits/visit-form/visit-form.component.tsx b/packages/esm-patient-queues-app/src/active-visits/visit-form/visit-form.component.tsx index 98dc9d28..efe84bc8 100644 --- a/packages/esm-patient-queues-app/src/active-visits/visit-form/visit-form.component.tsx +++ b/packages/esm-patient-queues-app/src/active-visits/visit-form/visit-form.component.tsx @@ -50,7 +50,6 @@ const StartVisitForm: React.FC = ({ patientUuid, toggleSearchTyp const sessionUser = useSession(); const config = useConfig() as ConfigObject; const [contentSwitcherIndex, setContentSwitcherIndex] = useState(0); - const [isMissingVisitType, setIsMissingVisitType] = useState(false); const [isSubmitting, setIsSubmitting] = useState(false); const [timeFormat, setTimeFormat] = useState(new Date().getHours() >= 12 ? 'PM' : 'AM'); const [visitDate, setVisitDate] = useState(new Date()); @@ -116,11 +115,7 @@ const StartVisitForm: React.FC = ({ patientUuid, toggleSearchTyp const status = 'pending'; const comment = event?.target['nextNotes']?.value; - if (!visitType) { - setIsMissingVisitType(true); - return; - } - + setIsSubmitting(true); const [hours, minutes] = convertTime12to24(visitTime, timeFormat); From 3a92621c6669327ebd2ea82475aefb2b91ec77b7 Mon Sep 17 00:00:00 2001 From: jabahum Date: Wed, 12 Feb 2025 11:24:58 +0300 Subject: [PATCH 04/63] update packages --- package.json | 2 +- packages/esm-patient-queues-app/package.json | 4 +++- yarn.lock | 18 ++++++++++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 1287ecd5..4d51385d 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ }, "devDependencies": { "@carbon/react": "^1.64.1", - "@openmrs/esm-framework": "5.8.2-pre.2417", + "@openmrs/esm-framework": "next", "@openmrs/esm-patient-common-lib": "next", "@openmrs/esm-styleguide": "next", "@swc/cli": "^0.1.57", diff --git a/packages/esm-patient-queues-app/package.json b/packages/esm-patient-queues-app/package.json index ab722af8..7a72d01e 100644 --- a/packages/esm-patient-queues-app/package.json +++ b/packages/esm-patient-queues-app/package.json @@ -38,11 +38,13 @@ }, "dependencies": { "@carbon/react": "^1.64.1", + "@hookform/resolvers": "^4.0.0", "dayjs": "^1.11.6", "lodash-es": "^4.17.15", "qrcode.react": "^3.1.0", "react-to-print": "^2.14.13", - "swr": "^2.1.1" + "swr": "^2.1.1", + "zod": "^3.24.2" }, "peerDependencies": { "@openmrs/esm-framework": "5.8.2-pre.2417", diff --git a/yarn.lock b/yarn.lock index 450d9883..9e696fdc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2049,6 +2049,15 @@ __metadata: languageName: node linkType: hard +"@hookform/resolvers@npm:^4.0.0": + version: 4.0.0 + resolution: "@hookform/resolvers@npm:4.0.0" + peerDependencies: + react-hook-form: ^7.0.0 + checksum: e7b64511f2cc097f0716bb04d400c6d20b54cb75493452cebe5cd596da5730d03087384fceac3613c70eb2ed886c24e7a95865b02c3118dde74f1afdcb6ebb77 + languageName: node + linkType: hard + "@humanwhocodes/config-array@npm:^0.11.10": version: 0.11.10 resolution: "@humanwhocodes/config-array@npm:0.11.10" @@ -8911,6 +8920,7 @@ __metadata: resolution: "@ugandaemr/esm-patient-queues-app@workspace:packages/esm-patient-queues-app" dependencies: "@carbon/react": ^1.64.1 + "@hookform/resolvers": ^4.0.0 dayjs: ^1.11.6 lodash-es: ^4.17.15 qrcode.react: ^3.1.0 @@ -8918,6 +8928,7 @@ __metadata: react-tooltip: ^5.26.3 swr: ^2.1.1 webpack: ^5.83.1 + zod: ^3.24.2 peerDependencies: "@openmrs/esm-framework": 5.8.2-pre.2417 react: 18.x @@ -24950,6 +24961,13 @@ __metadata: languageName: node linkType: hard +"zod@npm:^3.24.2": + version: 3.24.2 + resolution: "zod@npm:3.24.2" + checksum: c02455c09678c5055c636d64f9fcda2424fea0aa46ac7d9681e7f41990bc55f488bcd84b9d7cfef0f6e906f51f55b245239d92a9f726248aa74c5b84edf00c2d + languageName: node + linkType: hard + "zustand@npm:^4.3.6": version: 4.4.1 resolution: "zustand@npm:4.4.1" From d10aa80d226243bbcae5ac35063c82a5708c1a42 Mon Sep 17 00:00:00 2001 From: jabahum Date: Wed, 12 Feb 2025 11:25:32 +0300 Subject: [PATCH 05/63] update lock file --- yarn.lock | 310 +++++++++++++++++++++++++++++------------------------- 1 file changed, 164 insertions(+), 146 deletions(-) diff --git a/yarn.lock b/yarn.lock index 9e696fdc..15504cbf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4392,18 +4392,18 @@ __metadata: languageName: node linkType: hard -"@openmrs/esm-api@npm:5.8.2-pre.2417": - version: 5.8.2-pre.2417 - resolution: "@openmrs/esm-api@npm:5.8.2-pre.2417" +"@openmrs/esm-api@npm:6.0.5-pre.2681": + version: 6.0.5-pre.2681 + resolution: "@openmrs/esm-api@npm:6.0.5-pre.2681" dependencies: "@types/fhir": 0.0.31 lodash-es: ^4.17.21 peerDependencies: - "@openmrs/esm-config": 5.x - "@openmrs/esm-error-handling": 5.x - "@openmrs/esm-navigation": 5.x - "@openmrs/esm-offline": 5.x - checksum: 613e5b01a65d55a0223ac3d7a69528e87b03b2c9b3e394219054e290fecb94750386e093fb687847f7b9e6cb062b6d1865bf86ce39e67104c664fb7acf323139 + "@openmrs/esm-config": 6.x + "@openmrs/esm-error-handling": 6.x + "@openmrs/esm-navigation": 6.x + "@openmrs/esm-offline": 6.x + checksum: 07397648a4a055d5b4dbdbe14662cb911e35b07c1afedbd56f3523a90d8f3c5a60414b2df8da6050450421d1ded896993c63e51fd895f3c0768c547728b89042 languageName: node linkType: hard @@ -4456,17 +4456,17 @@ __metadata: languageName: node linkType: hard -"@openmrs/esm-config@npm:5.8.2-pre.2417": - version: 5.8.2-pre.2417 - resolution: "@openmrs/esm-config@npm:5.8.2-pre.2417" +"@openmrs/esm-config@npm:6.0.5-pre.2681": + version: 6.0.5-pre.2681 + resolution: "@openmrs/esm-config@npm:6.0.5-pre.2681" dependencies: ramda: ^0.26.1 peerDependencies: - "@openmrs/esm-globals": 5.x - "@openmrs/esm-state": 5.x - "@openmrs/esm-utils": 5.x - single-spa: 5.x - checksum: ed11ed0ca669ff3ac81dee615dd43bad2ea8462a32fb595f06258a1329994aeaf4e3176a7529a3f0ae046a55890ef6bdc1d403cad1a0fa3fbc8f271928738ecb + "@openmrs/esm-globals": 6.x + "@openmrs/esm-state": 6.x + "@openmrs/esm-utils": 6.x + single-spa: 6.x + checksum: 1924e9e3ab57b07b2f43cb8cce657b4adfdc325e045cca7c3ccb6c1554d18a1be606f1db838723e519bc35f81dce528d92836763edf07ab65bbc7ef94976f086 languageName: node linkType: hard @@ -4482,15 +4482,15 @@ __metadata: languageName: node linkType: hard -"@openmrs/esm-context@npm:5.8.2-pre.2417": - version: 5.8.2-pre.2417 - resolution: "@openmrs/esm-context@npm:5.8.2-pre.2417" +"@openmrs/esm-context@npm:6.0.5-pre.2681": + version: 6.0.5-pre.2681 + resolution: "@openmrs/esm-context@npm:6.0.5-pre.2681" dependencies: immer: ^10.0.4 peerDependencies: - "@openmrs/esm-globals": 5.x - "@openmrs/esm-state": 5.x - checksum: 1cc9054c34666dcc04c35e7a20ec21ed2abdcdd0df609f69a6d90b5d009924c7749f141563cff0cb0e1fdeb21af77595406cf4a4d2810421a8724610420ac437 + "@openmrs/esm-globals": 6.x + "@openmrs/esm-state": 6.x + checksum: 1d110a968e0e3a03ab7aa13eee609b5567f8e13f6cb1c71705ddadc15eb6508fb5af4a2efa23679d0815307ab9465cd5567fe15c052c543aebbc44fb5732fe9a languageName: node linkType: hard @@ -4504,13 +4504,13 @@ __metadata: languageName: node linkType: hard -"@openmrs/esm-dynamic-loading@npm:5.8.2-pre.2417": - version: 5.8.2-pre.2417 - resolution: "@openmrs/esm-dynamic-loading@npm:5.8.2-pre.2417" +"@openmrs/esm-dynamic-loading@npm:6.0.5-pre.2681": + version: 6.0.5-pre.2681 + resolution: "@openmrs/esm-dynamic-loading@npm:6.0.5-pre.2681" peerDependencies: - "@openmrs/esm-globals": 5.x - "@openmrs/esm-translations": 5.x - checksum: 3e56929071e4fd27f440089ca9eaa21fb71c07c5d158ac12800bb41e72307064b22d5cfe9101e3db708e2236b9c134c6f437a60b27f3c981f9352c0a74baa5af + "@openmrs/esm-globals": 6.x + "@openmrs/esm-translations": 6.x + checksum: bc0c25aa1167a48eb0cb5653835253b979bff16e7153abaf59daf852f7f8dfdc6c1d54bc47b861a23899a43cfa1c4625fcd33fb470a04f8cf7098cc4884ac1f3 languageName: node linkType: hard @@ -4523,18 +4523,18 @@ __metadata: languageName: node linkType: hard -"@openmrs/esm-error-handling@npm:5.8.2-pre.2417": - version: 5.8.2-pre.2417 - resolution: "@openmrs/esm-error-handling@npm:5.8.2-pre.2417" +"@openmrs/esm-error-handling@npm:6.0.5-pre.2681": + version: 6.0.5-pre.2681 + resolution: "@openmrs/esm-error-handling@npm:6.0.5-pre.2681" peerDependencies: - "@openmrs/esm-globals": 5.x - checksum: 7badb0d09658b8d1c32ef1f4e5651845b7f7f2303f0d5b085677143b889698d53c449e119eddeb14cd4491b85aab960e9093dd5ca4f821ea2411d22b865c5ec5 + "@openmrs/esm-globals": 6.x + checksum: 0f179b09ce7ed36750e98b97b86c030486fccd56e3b0a44170a055e490081f3d19bf77540cd859af3997aef0c3b34f3d602b099b3db034490b4ea6ddb6d4a2eb languageName: node linkType: hard -"@openmrs/esm-expression-evaluator@npm:5.8.2-pre.2417": - version: 5.8.2-pre.2417 - resolution: "@openmrs/esm-expression-evaluator@npm:5.8.2-pre.2417" +"@openmrs/esm-expression-evaluator@npm:6.0.5-pre.2681": + version: 6.0.5-pre.2681 + resolution: "@openmrs/esm-expression-evaluator@npm:6.0.5-pre.2681" dependencies: "@jsep-plugin/arrow": ^1.0.5 "@jsep-plugin/new": ^1.0.3 @@ -4543,7 +4543,7 @@ __metadata: "@jsep-plugin/template": ^1.0.4 "@jsep-plugin/ternary": ^1.1.3 jsep: ^1.3.9 - checksum: 0e1180eae24d32038b11cb5bd1705b3c7eae78b3c4a468f66d75e19910718d56c52a5feebb8363a3717d9874be2c30f688f9024441b2627e0c5800bf460ec78c + checksum: e5daba15d0f343fdbb471e2d13415ee3958d35c9403e04645c4b3e65b20e469f4d4bb42ea0a7a50a1b453f2b0ef64f85a280f7743c89434bc263223f0514f073 languageName: node linkType: hard @@ -4563,20 +4563,20 @@ __metadata: languageName: node linkType: hard -"@openmrs/esm-extensions@npm:5.8.2-pre.2417": - version: 5.8.2-pre.2417 - resolution: "@openmrs/esm-extensions@npm:5.8.2-pre.2417" +"@openmrs/esm-extensions@npm:6.0.5-pre.2681": + version: 6.0.5-pre.2681 + resolution: "@openmrs/esm-extensions@npm:6.0.5-pre.2681" dependencies: lodash-es: ^4.17.21 peerDependencies: - "@openmrs/esm-api": 5.x - "@openmrs/esm-config": 5.x - "@openmrs/esm-expression-evaluator": 5.x - "@openmrs/esm-feature-flags": 5.x - "@openmrs/esm-state": 5.x - "@openmrs/esm-utils": 5.x - single-spa: 5.x - checksum: 1272eda3ab69b7bd14d4977406704686ef4c52187aca95235b38dad4c766cf264d2feb4123c604d221bed0b3591fba3e1136e9476addf6a71b0ba1dc965d8a1c + "@openmrs/esm-api": 6.x + "@openmrs/esm-config": 6.x + "@openmrs/esm-expression-evaluator": 6.x + "@openmrs/esm-feature-flags": 6.x + "@openmrs/esm-state": 6.x + "@openmrs/esm-utils": 6.x + single-spa: 6.x + checksum: 720a60e77f37e88d8f3bff967285ddf5bed283368ee1e506b7180271549dcb64ed874291e838bf64143692d5e12e40531baf9eff2ba0c614765fb3b0087ba8ed languageName: node linkType: hard @@ -4593,16 +4593,16 @@ __metadata: languageName: node linkType: hard -"@openmrs/esm-feature-flags@npm:5.8.2-pre.2417": - version: 5.8.2-pre.2417 - resolution: "@openmrs/esm-feature-flags@npm:5.8.2-pre.2417" +"@openmrs/esm-feature-flags@npm:6.0.5-pre.2681": + version: 6.0.5-pre.2681 + resolution: "@openmrs/esm-feature-flags@npm:6.0.5-pre.2681" dependencies: ramda: ^0.26.1 peerDependencies: - "@openmrs/esm-globals": 5.x - "@openmrs/esm-state": 5.x - single-spa: 5.x - checksum: 3e1afff3d7e2d66ac0b91ca39a8ac64429f6a9b12e1898d311698a74020e4f6f526e4147d117c38879e228bc68943d0a2626c8587973daabc6652d7d6d2bcb96 + "@openmrs/esm-globals": 6.x + "@openmrs/esm-state": 6.x + single-spa: 6.x + checksum: 04fcd4235ce1da457983d0db4db9993bd0f89c934e8964a41ed1ee35ccdf697f970cde0508c782c980273df2b9a9b027f133bba0bc81ac63a048fce3e2de27ed languageName: node linkType: hard @@ -4640,27 +4640,27 @@ __metadata: languageName: node linkType: hard -"@openmrs/esm-framework@npm:5.8.2-pre.2417": - version: 5.8.2-pre.2417 - resolution: "@openmrs/esm-framework@npm:5.8.2-pre.2417" - dependencies: - "@openmrs/esm-api": 5.8.2-pre.2417 - "@openmrs/esm-config": 5.8.2-pre.2417 - "@openmrs/esm-context": 5.8.2-pre.2417 - "@openmrs/esm-dynamic-loading": 5.8.2-pre.2417 - "@openmrs/esm-error-handling": 5.8.2-pre.2417 - "@openmrs/esm-expression-evaluator": 5.8.2-pre.2417 - "@openmrs/esm-extensions": 5.8.2-pre.2417 - "@openmrs/esm-feature-flags": 5.8.2-pre.2417 - "@openmrs/esm-globals": 5.8.2-pre.2417 - "@openmrs/esm-navigation": 5.8.2-pre.2417 - "@openmrs/esm-offline": 5.8.2-pre.2417 - "@openmrs/esm-react-utils": 5.8.2-pre.2417 - "@openmrs/esm-routes": 5.8.2-pre.2417 - "@openmrs/esm-state": 5.8.2-pre.2417 - "@openmrs/esm-styleguide": 5.8.2-pre.2417 - "@openmrs/esm-translations": 5.8.2-pre.2417 - "@openmrs/esm-utils": 5.8.2-pre.2417 +"@openmrs/esm-framework@npm:next": + version: 6.0.5-pre.2681 + resolution: "@openmrs/esm-framework@npm:6.0.5-pre.2681" + dependencies: + "@openmrs/esm-api": 6.0.5-pre.2681 + "@openmrs/esm-config": 6.0.5-pre.2681 + "@openmrs/esm-context": 6.0.5-pre.2681 + "@openmrs/esm-dynamic-loading": 6.0.5-pre.2681 + "@openmrs/esm-error-handling": 6.0.5-pre.2681 + "@openmrs/esm-expression-evaluator": 6.0.5-pre.2681 + "@openmrs/esm-extensions": 6.0.5-pre.2681 + "@openmrs/esm-feature-flags": 6.0.5-pre.2681 + "@openmrs/esm-globals": 6.0.5-pre.2681 + "@openmrs/esm-navigation": 6.0.5-pre.2681 + "@openmrs/esm-offline": 6.0.5-pre.2681 + "@openmrs/esm-react-utils": 6.0.5-pre.2681 + "@openmrs/esm-routes": 6.0.5-pre.2681 + "@openmrs/esm-state": 6.0.5-pre.2681 + "@openmrs/esm-styleguide": 6.0.5-pre.2681 + "@openmrs/esm-translations": 6.0.5-pre.2681 + "@openmrs/esm-utils": 6.0.5-pre.2681 dayjs: ^1.10.7 peerDependencies: dayjs: 1.x @@ -4669,9 +4669,9 @@ __metadata: react-dom: 18.x react-i18next: 11.x rxjs: 6.x - single-spa: 5.x + single-spa: 6.x swr: 2.x - checksum: 0c4a3473e951f23dc2b69f1695948c8c4f9029ed76d793c1b3f2aa93cc47406c68db4a29a5cb99dc6d97924b69d9790fa7d9978bae72fdb4a04de466865ec1f3 + checksum: 836e075ec5332d76ff92e28b1719eeec72ad24eb2a211b88fd0033ee522e5caa0169eb13353e783580cb53337be55c9293c27161bb0daed71f47a39b6bb5090b languageName: node linkType: hard @@ -4686,14 +4686,14 @@ __metadata: languageName: node linkType: hard -"@openmrs/esm-globals@npm:5.8.2-pre.2417": - version: 5.8.2-pre.2417 - resolution: "@openmrs/esm-globals@npm:5.8.2-pre.2417" +"@openmrs/esm-globals@npm:6.0.5-pre.2681": + version: 6.0.5-pre.2681 + resolution: "@openmrs/esm-globals@npm:6.0.5-pre.2681" dependencies: "@types/fhir": 0.0.31 peerDependencies: - single-spa: 5.x - checksum: d0653b12094ba8551b21fd58f934411a1fbac905bb41dbb828a329ec236a96e8d827702087659db86245d4352a4ea65f10140b2f10812b5b5a26a708c3a8ef37 + single-spa: 6.x + checksum: 87a76355b1d86d8f3a08a33b282955f4849fde177eeb96b9162632c110386327e9adf8183cd912d504ce450c6757445bda5c5bd2d7529e163f500da44e11ce11 languageName: node linkType: hard @@ -4708,14 +4708,14 @@ __metadata: languageName: node linkType: hard -"@openmrs/esm-navigation@npm:5.8.2-pre.2417": - version: 5.8.2-pre.2417 - resolution: "@openmrs/esm-navigation@npm:5.8.2-pre.2417" +"@openmrs/esm-navigation@npm:6.0.5-pre.2681": + version: 6.0.5-pre.2681 + resolution: "@openmrs/esm-navigation@npm:6.0.5-pre.2681" dependencies: path-to-regexp: 6.1.0 peerDependencies: - "@openmrs/esm-state": 5.x - checksum: 943288c0c5b50664c3fed19d7290c005b81700266e4eaa4c919225e79a2dba6ea19b75acdedec5955ecba236c391c6ee5b1ec568da47773e949172866e2fad24 + "@openmrs/esm-state": 6.x + checksum: d04f364fac161b31b0bda18bcb4b5079e4d394ba67c376b06a02b4449e9744e7504486d4e173043076bdda0faf79c5190ef356a9fcacb64f0925966782861447 languageName: node linkType: hard @@ -4736,20 +4736,20 @@ __metadata: languageName: node linkType: hard -"@openmrs/esm-offline@npm:5.8.2-pre.2417": - version: 5.8.2-pre.2417 - resolution: "@openmrs/esm-offline@npm:5.8.2-pre.2417" +"@openmrs/esm-offline@npm:6.0.5-pre.2681": + version: 6.0.5-pre.2681 + resolution: "@openmrs/esm-offline@npm:6.0.5-pre.2681" dependencies: dexie: ^3.0.3 lodash-es: ^4.17.21 uuid: ^9.0.1 workbox-window: ^6.1.5 peerDependencies: - "@openmrs/esm-api": 5.x - "@openmrs/esm-globals": 5.x - "@openmrs/esm-state": 5.x + "@openmrs/esm-api": 6.x + "@openmrs/esm-globals": 6.x + "@openmrs/esm-state": 6.x rxjs: 6.x - checksum: c09ae3e07a81041d5ff17bda83f756d3893fbe601bb206ddb448a8d5d2821f7534de1e4196e3b60e64bd889aaff1b92562f6cc5c760a8970162250cc99f20b28 + checksum: 3bc01335ef211273156379e33bf563244b9af1dad8b0b208dd578067ef87f37d69b92462478d52f380a04339d9e4509a0f1dfaaf6593fd9dd3a7b61f1181c19f languageName: node linkType: hard @@ -4795,22 +4795,22 @@ __metadata: languageName: node linkType: hard -"@openmrs/esm-react-utils@npm:5.8.2-pre.2417": - version: 5.8.2-pre.2417 - resolution: "@openmrs/esm-react-utils@npm:5.8.2-pre.2417" +"@openmrs/esm-react-utils@npm:6.0.5-pre.2681": + version: 6.0.5-pre.2681 + resolution: "@openmrs/esm-react-utils@npm:6.0.5-pre.2681" dependencies: lodash-es: ^4.17.21 - single-spa-react: ^6.0.0 - peerDependencies: - "@openmrs/esm-api": 5.x - "@openmrs/esm-config": 5.x - "@openmrs/esm-context": 5.x - "@openmrs/esm-error-handling": 5.x - "@openmrs/esm-extensions": 5.x - "@openmrs/esm-feature-flags": 5.x - "@openmrs/esm-globals": 5.x - "@openmrs/esm-navigation": 5.x - "@openmrs/esm-utils": 5.x + single-spa-react: ^6.0.2 + peerDependencies: + "@openmrs/esm-api": 6.x + "@openmrs/esm-config": 6.x + "@openmrs/esm-context": 6.x + "@openmrs/esm-error-handling": 6.x + "@openmrs/esm-extensions": 6.x + "@openmrs/esm-feature-flags": 6.x + "@openmrs/esm-globals": 6.x + "@openmrs/esm-navigation": 6.x + "@openmrs/esm-utils": 6.x dayjs: 1.x i18next: 21.x react: 18.x @@ -4818,7 +4818,7 @@ __metadata: react-i18next: 11.x rxjs: 6.x swr: 2.x - checksum: 4348dfd6d8ea906d069adafcc17effaa1f430b46fd6d99f1654d5fab7f06344ed7ba67206dddec24e01869c0621173c3bf40624d1a0f954fefde906c353a2683 + checksum: 3985dd4abc23265540db6f487b7f202b0b9fcf02316323c613ba4ba8272ac4c440d93a4c95c72e4b50fa63c5adc47d7c0e0292965b1e139be91387d99d69d6fc languageName: node linkType: hard @@ -4837,18 +4837,18 @@ __metadata: languageName: node linkType: hard -"@openmrs/esm-routes@npm:5.8.2-pre.2417": - version: 5.8.2-pre.2417 - resolution: "@openmrs/esm-routes@npm:5.8.2-pre.2417" +"@openmrs/esm-routes@npm:6.0.5-pre.2681": + version: 6.0.5-pre.2681 + resolution: "@openmrs/esm-routes@npm:6.0.5-pre.2681" peerDependencies: - "@openmrs/esm-config": 5.x - "@openmrs/esm-dynamic-loading": 5.x - "@openmrs/esm-extensions": 5.x - "@openmrs/esm-feature-flags": 5.x - "@openmrs/esm-globals": 5.x - "@openmrs/esm-utils": 5.x + "@openmrs/esm-config": 6.x + "@openmrs/esm-dynamic-loading": 6.x + "@openmrs/esm-extensions": 6.x + "@openmrs/esm-feature-flags": 6.x + "@openmrs/esm-globals": 6.x + "@openmrs/esm-utils": 6.x single-spa: 6.x - checksum: c07f1ca08308b5c2c76afabb331433a1aeacbd60d58235e407f6b1f5bf6fedb5d30b974871112bedbde8d0c67ecfb2e52788ccec9c27b015915e2fdf4b131d59 + checksum: 831555d6a067d1128a522e77084014070c09c375d59270c804a1d50c3c913fced9bdd595f8b357b5dab4eb98cee44620129b89103af3f82823810f01061e9363 languageName: node linkType: hard @@ -4863,15 +4863,15 @@ __metadata: languageName: node linkType: hard -"@openmrs/esm-state@npm:5.8.2-pre.2417": - version: 5.8.2-pre.2417 - resolution: "@openmrs/esm-state@npm:5.8.2-pre.2417" +"@openmrs/esm-state@npm:6.0.5-pre.2681": + version: 6.0.5-pre.2681 + resolution: "@openmrs/esm-state@npm:6.0.5-pre.2681" dependencies: zustand: ^4.5.5 peerDependencies: - "@openmrs/esm-globals": 5.x - "@openmrs/esm-utils": 5.x - checksum: c1c0cef8834c1c6e06eaa6e839f17247022359dcafbdcb1977d287a62afeac850fdc2fc7eada6a2fb9d92a59f9b185b777d59868f54edb7e5cbc28fa35f37f7b + "@openmrs/esm-globals": 6.x + "@openmrs/esm-utils": 6.x + checksum: d9baf362ad7f4f1f368862aaa4aa81e4e62b827f12dce1fa13a9c9bb09a62fd912dedbb38fd77c0c2516a7e003b94b3e234e63f70a865c459804920027bf1094 languageName: node linkType: hard @@ -4904,9 +4904,9 @@ __metadata: languageName: node linkType: hard -"@openmrs/esm-styleguide@npm:5.8.2-pre.2417": - version: 5.8.2-pre.2417 - resolution: "@openmrs/esm-styleguide@npm:5.8.2-pre.2417" +"@openmrs/esm-styleguide@npm:6.0.5-pre.2681": + version: 6.0.5-pre.2681 + resolution: "@openmrs/esm-styleguide@npm:6.0.5-pre.2681" dependencies: "@carbon/charts": ^1.12.0 "@carbon/react": ~1.37.0 @@ -4918,19 +4918,19 @@ __metadata: react-aria-components: ^1.3.3 react-avatar: ^5.0.3 peerDependencies: - "@openmrs/esm-error-handling": 5.x - "@openmrs/esm-extensions": 5.x - "@openmrs/esm-navigation": 5.x - "@openmrs/esm-react-utils": 5.x - "@openmrs/esm-state": 5.x - "@openmrs/esm-translations": 5.x + "@openmrs/esm-error-handling": 6.x + "@openmrs/esm-extensions": 6.x + "@openmrs/esm-navigation": 6.x + "@openmrs/esm-react-utils": 6.x + "@openmrs/esm-state": 6.x + "@openmrs/esm-translations": 6.x dayjs: 1.x i18next: 21.x react: 18.x react-dom: 18.x react-i18next: 11.x rxjs: 6.x - checksum: 97d7fb2b4e49de1d8c7604df9da4a82dac046c1332da01509b255f206c35fa8cae2b695ab00db84ff76ae0a7135c3980e7521eb73782823b29f8a99403a3d99f + checksum: 69278304e9bc2f440b34f827062b88a32fbb4e5d75fb3dd6ef9ba9215e7266ff36845ad1bd49ae68559d2110ee18ada9c8d77679a40bb2b40ca2951aabb06293 languageName: node linkType: hard @@ -4974,14 +4974,14 @@ __metadata: languageName: node linkType: hard -"@openmrs/esm-translations@npm:5.8.2-pre.2417": - version: 5.8.2-pre.2417 - resolution: "@openmrs/esm-translations@npm:5.8.2-pre.2417" +"@openmrs/esm-translations@npm:6.0.5-pre.2681": + version: 6.0.5-pre.2681 + resolution: "@openmrs/esm-translations@npm:6.0.5-pre.2681" dependencies: i18next: 21.10.0 peerDependencies: i18next: 21.x - checksum: 76216092d60ba704033ea63a589a6bb3b85f83846dad5148351b533f7c6eddf549fa1cff2f14b003cdb78b3bfb67ed874fe24abab500a1397d79da08bd6637f2 + checksum: 5dfa8ffd09e440598bcb60b0b3d78bbae81d951db66534a351c9078a30f592f1c5b6d4fa126808d584866aa875132b0dbbdcb3ca9fcb8323b3f5caea0bb10361 languageName: node linkType: hard @@ -5001,19 +5001,19 @@ __metadata: languageName: node linkType: hard -"@openmrs/esm-utils@npm:5.8.2-pre.2417": - version: 5.8.2-pre.2417 - resolution: "@openmrs/esm-utils@npm:5.8.2-pre.2417" +"@openmrs/esm-utils@npm:6.0.5-pre.2681": + version: 6.0.5-pre.2681 + resolution: "@openmrs/esm-utils@npm:6.0.5-pre.2681" dependencies: "@formatjs/intl-durationformat": ^0.2.4 "@internationalized/date": ^3.5.5 semver: 7.3.2 peerDependencies: - "@openmrs/esm-globals": 5.x + "@openmrs/esm-globals": 6.x dayjs: 1.x i18next: 21.x rxjs: 6.x - checksum: b40392f93da503ea2f8c1016355d174d0f83f43876293ae2520ac52fb470860172e0fab6f0157ee86126c056b3e988e3e485bcbb1bfccae3b7a3aa2f5f36470f + checksum: 6260dcc8e69d1b0c779dc5c6345012f99fb30d857e1aa510c9638e2f76f3d362313ad3c3f958e2e8a92ce8fcbe630d1016469fbd64d9316efb43f690cb2f0aff languageName: node linkType: hard @@ -8958,7 +8958,7 @@ __metadata: dependencies: "@carbon/react": ^1.64.1 "@hookform/resolvers": ^3.3.4 - "@openmrs/esm-framework": 5.8.2-pre.2417 + "@openmrs/esm-framework": next "@openmrs/esm-patient-common-lib": next "@openmrs/esm-styleguide": next "@swc/cli": ^0.1.57 @@ -21788,6 +21788,24 @@ __metadata: languageName: node linkType: hard +"single-spa-react@npm:^6.0.2": + version: 6.0.2 + resolution: "single-spa-react@npm:6.0.2" + dependencies: + browserslist-config-single-spa: ^1.0.1 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: "*" + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 2ac52690e9b0304f7e67c22a5f6900fe31bb6919eefd3e7688d6ca8b105e60f5e701367a0e6a135a4fc2beab47a98db47d32fdca226a8d5518e9540fc80ca216 + languageName: node + linkType: hard + "single-spa@npm:^6.0.1": version: 6.0.1 resolution: "single-spa@npm:6.0.1" From ecb898177e7124acdb72009b6a4e06d19ed072aa Mon Sep 17 00:00:00 2001 From: jabahum Date: Wed, 12 Feb 2025 16:33:39 +0300 Subject: [PATCH 06/63] refactor save visit and update implementation --- ...ctive-visits-reception-table.component.tsx | 12 +- .../active-visits-table.resource.ts | 6 +- .../start-visit-form-button.component.tsx | 32 ++ .../visit-form/queue.resource.ts | 31 +- .../visit-form/visit-form.component.tsx | 331 ++++++++---------- .../src/helpers/helpers.tsx | 22 ++ packages/esm-patient-queues-app/src/index.ts | 8 + .../esm-patient-queues-app/src/routes.json | 7 + 8 files changed, 259 insertions(+), 190 deletions(-) create mode 100644 packages/esm-patient-queues-app/src/active-visits/start-visit-form-button.component.tsx diff --git a/packages/esm-patient-queues-app/src/active-visits/active-visits-patients-reception/active-visits-reception-table.component.tsx b/packages/esm-patient-queues-app/src/active-visits/active-visits-patients-reception/active-visits-reception-table.component.tsx index a02ab06f..a24e3695 100644 --- a/packages/esm-patient-queues-app/src/active-visits/active-visits-patients-reception/active-visits-reception-table.component.tsx +++ b/packages/esm-patient-queues-app/src/active-visits/active-visits-patients-reception/active-visits-reception-table.component.tsx @@ -26,11 +26,9 @@ import EditActionsMenu from '../edit-action-menu.components'; import PrintActionsMenu from '../print-action-menu.components'; import { buildStatusString, formatWaitTime, getTagColor, trimVisitNumber } from '../../helpers/functions'; import StatusIcon from '../../queue-entry-table-components/status-icon.component'; -import { SearchTypes } from '../../types'; import { usePatientQueuesList } from './active-visits-reception.resource'; import styles from './active-visits-reception.scss'; import { useParentLocation } from '../patient-queues.resource'; -import PatientSearch from '../../patient-search/patient-search.component'; import QueueLauncher from '../../queue-launcher/queue-launcher.component'; function ActiveVisitsReceptionTable() { @@ -38,9 +36,6 @@ function ActiveVisitsReceptionTable() { const session = useSession(); const layout = useLayoutType(); - const [showOverlay, setShowOverlay] = useState(false); - const [overlayHeader, setOverlayTitle] = useState(''); - const [view, setView] = useState(''); const [viewState, setViewState] = useState<{ selectedPatientUuid: string } | null>(null); const [searchTerm, setSearchTerm] = useState(''); @@ -144,10 +139,7 @@ function ActiveVisitsReceptionTable() { renderIcon: (props) => , }, selectPatientAction: (selectedPatientUuid) => { - setShowOverlay(true); - setView(SearchTypes.VISIT_FORM); setViewState({ selectedPatientUuid }); - setOverlayTitle(t('checkIn', 'Check In')); }, }} /> @@ -240,7 +232,7 @@ function ActiveVisitsReceptionTable() { )} - {showOverlay && ( + {/* {showOverlay && ( setShowOverlay(false)} @@ -249,7 +241,7 @@ function ActiveVisitsReceptionTable() { }} headerTitle={overlayHeader} /> - )} + )} */}
); } diff --git a/packages/esm-patient-queues-app/src/active-visits/active-visits-table.resource.ts b/packages/esm-patient-queues-app/src/active-visits/active-visits-table.resource.ts index 299f3756..3a9660ab 100644 --- a/packages/esm-patient-queues-app/src/active-visits/active-visits-table.resource.ts +++ b/packages/esm-patient-queues-app/src/active-visits/active-visits-table.resource.ts @@ -206,7 +206,7 @@ export async function updateQueueEntry( ) { const abortController = new AbortController(); - return openmrsFetch(`${restBaseUrl}/patientqueue/${queueUuid}`, { + return await openmrsFetch(`${restBaseUrl}/patientqueue/${queueUuid}`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -226,7 +226,7 @@ export async function updateQueueEntry( export async function endPatientStatus(previousQueueUuid: string, queueEntryUuid: string, endedAt: Date) { const abortController = new AbortController(); - await openmrsFetch(`${restBaseUrl}/queue/${previousQueueUuid}/entry/${queueEntryUuid}`, { + return await openmrsFetch(`${restBaseUrl}/queue/${previousQueueUuid}/entry/${queueEntryUuid}`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -250,7 +250,7 @@ export async function addQueueEntry( ) { const abortController = new AbortController(); - return openmrsFetch(`${restBaseUrl}/patientqueue`, { + return await openmrsFetch(`${restBaseUrl}/patientqueue`, { method: 'POST', headers: { 'Content-Type': 'application/json', diff --git a/packages/esm-patient-queues-app/src/active-visits/start-visit-form-button.component.tsx b/packages/esm-patient-queues-app/src/active-visits/start-visit-form-button.component.tsx new file mode 100644 index 00000000..fad954ed --- /dev/null +++ b/packages/esm-patient-queues-app/src/active-visits/start-visit-form-button.component.tsx @@ -0,0 +1,32 @@ +import React, { useState } from 'react'; +import { useTranslation } from 'react-i18next'; +import StartVisitForm from './visit-form/visit-form.component'; +import { Button } from '@carbon/react'; +import { usePatient } from '@openmrs/esm-framework'; + +interface StartVisitFormProps { + patientUuid? : string +} + +const StartVisitButton: React.FC = ({ patientUuid }) => { + const { t } = useTranslation(); + const [showOverlay, setShowOverlay] = useState(false); + const handleClick = () => { + setShowOverlay(true); + }; + + return ( + <> + + {showOverlay && ( + true} + patientUuid={patientUuid} + /> + )} + + ); +}; + +export default StartVisitButton; diff --git a/packages/esm-patient-queues-app/src/active-visits/visit-form/queue.resource.ts b/packages/esm-patient-queues-app/src/active-visits/visit-form/queue.resource.ts index 8acc0677..a6a34064 100644 --- a/packages/esm-patient-queues-app/src/active-visits/visit-form/queue.resource.ts +++ b/packages/esm-patient-queues-app/src/active-visits/visit-form/queue.resource.ts @@ -1,6 +1,6 @@ import { openmrsFetch, restBaseUrl } from '@openmrs/esm-framework'; import useSWR from 'swr'; -import { Appointment, ProviderResponse } from '../../types'; +import { Appointment, NewVisitPayload, ProviderResponse } from '../../types'; export async function saveAppointment(appointment: Appointment) { const abortController = new AbortController(); @@ -55,3 +55,32 @@ export async function getCurrentPatientQueueByPatientUuid(patientUuid: string, c }, }); } + + +// create visit +export async function createVisit(payload: NewVisitPayload) { + const abortController = new AbortController(); + + return await openmrsFetch(`${restBaseUrl}/visit`, { + method: 'POST', + signal: abortController.signal, + headers: { + 'Content-Type': 'application/json', + }, + body: payload, + }); +} + +// update Visit +export async function updateVisit(uuid: string, payload: NewVisitPayload) { + const abortController = new AbortController(); + + return await openmrsFetch(`${restBaseUrl}/visit/${uuid}`, { + method: 'POST', + signal: abortController.signal, + headers: { + 'Content-Type': 'application/json', + }, + body: payload, + }); +} \ No newline at end of file diff --git a/packages/esm-patient-queues-app/src/active-visits/visit-form/visit-form.component.tsx b/packages/esm-patient-queues-app/src/active-visits/visit-form/visit-form.component.tsx index efe84bc8..c8dbd54a 100644 --- a/packages/esm-patient-queues-app/src/active-visits/visit-form/visit-form.component.tsx +++ b/packages/esm-patient-queues-app/src/active-visits/visit-form/visit-form.component.tsx @@ -10,19 +10,13 @@ import { Stack, Switch, TextArea, - InlineLoading, } from '@carbon/react'; import { - ConfigObject, - ExtensionSlot, - saveVisit, showNotification, showToast, toDateObjectStrict, toOmrsIsoString, - useConfig, useLayoutType, - usePatient, useSession, useVisitTypes, } from '@openmrs/esm-framework'; @@ -30,33 +24,29 @@ import dayjs from 'dayjs'; import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import styles from './visit-form.scss'; -import { useProviders } from './queue.resource'; +import { createVisit, useProviders } from './queue.resource'; import { NewVisitPayload, SearchTypes } from '../../types'; import { amPm, convertTime12to24 } from '../../helpers/time-helpers'; import { useQueueRoomLocations } from '../../hooks/useQueueRooms'; import { addQueueEntry } from '../active-visits-table.resource'; -import { first } from 'rxjs/operators'; +import Overlay from '../../overlay.component'; interface VisitFormProps { - toggleSearchType: (searchMode: SearchTypes, patientUuid) => void; patientUuid: string; closePanel: () => void; - mode: boolean; + header : string } -const StartVisitForm: React.FC = ({ patientUuid, toggleSearchType, closePanel, mode }) => { +const StartVisitForm: React.FC = ({ patientUuid, closePanel, header }) => { const { t } = useTranslation(); const isTablet = useLayoutType() === 'tablet'; const sessionUser = useSession(); - const config = useConfig() as ConfigObject; const [contentSwitcherIndex, setContentSwitcherIndex] = useState(0); const [isSubmitting, setIsSubmitting] = useState(false); const [timeFormat, setTimeFormat] = useState(new Date().getHours() >= 12 ? 'PM' : 'AM'); const [visitDate, setVisitDate] = useState(new Date()); const [visitTime, setVisitTime] = useState(dayjs(new Date()).format('hh:mm')); - const state = useMemo(() => ({ patientUuid }), [patientUuid]); const allVisitTypes = useVisitTypes(); - const [ignoreChanges, setIgnoreChanges] = useState(true); const [selectedLocation, setSelectedLocation] = useState(''); const [visitType, setVisitType] = useState(''); const [priorityComment, setPriorityComment] = useState(''); @@ -107,83 +97,70 @@ const StartVisitForm: React.FC = ({ patientUuid, toggleSearchTyp const isFormValid = selectedNextQueueLocation; const handleSubmit = useCallback( - (event) => { + async (event) => { event.preventDefault(); - - // retrieve values from queue extension - const nextQueueLocationUuid = event?.target['nextQueueLocation']?.value; - const status = 'pending'; - const comment = event?.target['nextNotes']?.value; - - setIsSubmitting(true); - const [hours, minutes] = convertTime12to24(visitTime, timeFormat); + try { + // Retrieve values from queue extension + const nextQueueLocationUuid = event?.target['nextQueueLocation']?.value; + const status = 'pending'; + const comment = event?.target['nextNotes']?.value; + + const [hours, minutes] = convertTime12to24(visitTime, timeFormat); - const payload: NewVisitPayload = { - patient: patientUuid, - startDatetime: toDateObjectStrict( - toOmrsIsoString( - new Date(dayjs(visitDate).year(), dayjs(visitDate).month(), dayjs(visitDate).date(), hours, minutes), + const payload: NewVisitPayload = { + patient: patientUuid, + startDatetime: toDateObjectStrict( + toOmrsIsoString( + new Date(dayjs(visitDate).year(), dayjs(visitDate).month(), dayjs(visitDate).date(), hours, minutes), + ), ), - ), - visitType: visitType, - location: selectedNextQueueLocation, - attributes: [], - }; + visitType: visitType, + location: selectedNextQueueLocation, + attributes: [], + }; - const abortController = new AbortController(); - saveVisit(payload, abortController) - .pipe(first()) - .subscribe( - (response) => { - if (response.status === 201) { - // add new queue entry if visit created successfully - addQueueEntry( - nextQueueLocationUuid, - patientUuid, - selectedProvider, - contentSwitcherIndex, - status, - selectedLocation, - priorityComment, - comment, - ).then( - ({ status }) => { - if (status === 201) { - showToast({ - kind: 'success', - title: t('startVisit', 'Start a visit'), - description: t( - 'startVisitQueueSuccessfully', - 'Patient has been added to active visits list and queue.', - `${hours} : ${minutes}`, - ), - }); - closePanel(); - mutate(); - } - }, - (error) => { - showNotification({ - title: t('queueEntryError', 'Error adding patient to the queue'), - kind: 'error', - critical: true, - description: error?.message, - }); - }, - ); - } - }, - (error) => { - showNotification({ - title: t('startVisitError', 'Error starting visit'), - kind: 'error', - critical: true, - description: error?.message, + // // Attempt to save the visit + const response = await createVisit(payload); + if (response.status === 201) { + // Add new queue entry if visit was created successfully + const queueResponse = await addQueueEntry( + nextQueueLocationUuid, + patientUuid, + selectedProvider, + contentSwitcherIndex, + status, + selectedLocation, + priorityComment, + comment, + ); + + if (queueResponse.status === 201) { + showToast({ + kind: 'success', + title: t('startVisit', 'Start a visit'), + description: t( + 'startVisitQueueSuccessfully', + 'Patient has been added to active visits list and queue.', + `${hours} : ${minutes}`, + ), }); - }, - ); + closePanel(); + mutate(); + } + } + } catch (error) { + console.log('error', error); + showNotification({ + title: t('startVisitError', 'Error starting visit'), + kind: 'error', + critical: true, + description: error?.message || t('unexpectedError', 'An unexpected error occurred'), + }); + } finally { + setIsSubmitting(false); + } }, [ closePanel, @@ -202,102 +179,104 @@ const StartVisitForm: React.FC = ({ patientUuid, toggleSearchTyp ], ); - const handleOnChange = () => { - setIgnoreChanges((prevState) => !prevState); - }; - return ( - -
- - -
-
{t('priority', 'Priority')}
- setContentSwitcherIndex(index)} - > - - - - -
-
- {contentSwitcherIndex !== 0 && ( - (item ? String(item) : '')} - /> - )} -
+
+ closePanel} header={header}> + +
+ +
+
{t('priority', 'Priority')}
+ setContentSwitcherIndex(index)} + > + + + + +
+
+ {contentSwitcherIndex !== 0 && ( + (item ? String(item) : '')} + /> + )} +
-
-