@ampath/esm-dha-workflow-app 4.0.0-claim-workflows.159

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (405) hide show
  1. package/.editorconfig +12 -0
  2. package/.eslintignore +2 -0
  3. package/.eslintrc +57 -0
  4. package/.husky/pre-commit +7 -0
  5. package/.husky/pre-push +6 -0
  6. package/.prettierignore +14 -0
  7. package/.turbo.json +18 -0
  8. package/.yarn/plugins/@yarnpkg/plugin-outdated.cjs +35 -0
  9. package/LICENSE +401 -0
  10. package/README.md +37 -0
  11. package/__mocks__/react-i18next.js +50 -0
  12. package/dist/1197.js +1 -0
  13. package/dist/1277.js +1 -0
  14. package/dist/1277.js.map +1 -0
  15. package/dist/1558.js +2 -0
  16. package/dist/1558.js.LICENSE.txt +14 -0
  17. package/dist/1558.js.map +1 -0
  18. package/dist/1729.js +1 -0
  19. package/dist/1729.js.map +1 -0
  20. package/dist/182.js +1 -0
  21. package/dist/182.js.map +1 -0
  22. package/dist/1826.js +1 -0
  23. package/dist/1826.js.map +1 -0
  24. package/dist/1833.js +1 -0
  25. package/dist/1833.js.map +1 -0
  26. package/dist/1856.js +1 -0
  27. package/dist/1856.js.map +1 -0
  28. package/dist/1925.js +1 -0
  29. package/dist/1925.js.map +1 -0
  30. package/dist/2021.js +1 -0
  31. package/dist/2021.js.map +1 -0
  32. package/dist/2054.js +1 -0
  33. package/dist/2054.js.map +1 -0
  34. package/dist/2177.js +2 -0
  35. package/dist/2177.js.LICENSE.txt +9 -0
  36. package/dist/2177.js.map +1 -0
  37. package/dist/2333.js +1 -0
  38. package/dist/2333.js.map +1 -0
  39. package/dist/2801.js +1 -0
  40. package/dist/2801.js.map +1 -0
  41. package/dist/282.js +2 -0
  42. package/dist/282.js.LICENSE.txt +32 -0
  43. package/dist/282.js.map +1 -0
  44. package/dist/3041.js +1 -0
  45. package/dist/3041.js.map +1 -0
  46. package/dist/3099.js +1 -0
  47. package/dist/3184.js +2 -0
  48. package/dist/3184.js.LICENSE.txt +14 -0
  49. package/dist/3184.js.map +1 -0
  50. package/dist/3654.js +1 -0
  51. package/dist/3654.js.map +1 -0
  52. package/dist/4055.js +1 -0
  53. package/dist/4205.js +1 -0
  54. package/dist/4205.js.map +1 -0
  55. package/dist/4225.js +1 -0
  56. package/dist/4225.js.map +1 -0
  57. package/dist/4300.js +1 -0
  58. package/dist/4335.js +1 -0
  59. package/dist/4353.js +1 -0
  60. package/dist/4353.js.map +1 -0
  61. package/dist/4517.js +1 -0
  62. package/dist/4517.js.map +1 -0
  63. package/dist/4652.js +1 -0
  64. package/dist/4674.js +1 -0
  65. package/dist/4674.js.map +1 -0
  66. package/dist/4947.js +1 -0
  67. package/dist/4947.js.map +1 -0
  68. package/dist/5015.js +1 -0
  69. package/dist/5015.js.map +1 -0
  70. package/dist/5422.js +1 -0
  71. package/dist/5422.js.map +1 -0
  72. package/dist/5428.js +1 -0
  73. package/dist/5428.js.map +1 -0
  74. package/dist/5752.js +1 -0
  75. package/dist/5752.js.map +1 -0
  76. package/dist/5851.js +1 -0
  77. package/dist/5851.js.map +1 -0
  78. package/dist/6260.js +1 -0
  79. package/dist/6260.js.map +1 -0
  80. package/dist/6264.js +1 -0
  81. package/dist/6264.js.map +1 -0
  82. package/dist/6540.js +2 -0
  83. package/dist/6540.js.LICENSE.txt +9 -0
  84. package/dist/6540.js.map +1 -0
  85. package/dist/6606.js +1 -0
  86. package/dist/6606.js.map +1 -0
  87. package/dist/693.js +1 -0
  88. package/dist/693.js.map +1 -0
  89. package/dist/6991.js +1 -0
  90. package/dist/6991.js.map +1 -0
  91. package/dist/7199.js +1 -0
  92. package/dist/7199.js.map +1 -0
  93. package/dist/7255.js +1 -0
  94. package/dist/7255.js.map +1 -0
  95. package/dist/7258.js +1 -0
  96. package/dist/7258.js.map +1 -0
  97. package/dist/7420.js +1 -0
  98. package/dist/7420.js.map +1 -0
  99. package/dist/8114.js +1 -0
  100. package/dist/8114.js.map +1 -0
  101. package/dist/8321.js +1 -0
  102. package/dist/8321.js.map +1 -0
  103. package/dist/8339.js +1 -0
  104. package/dist/8339.js.map +1 -0
  105. package/dist/8558.js +1 -0
  106. package/dist/8558.js.map +1 -0
  107. package/dist/8778.js +1 -0
  108. package/dist/8778.js.map +1 -0
  109. package/dist/8803.js +2 -0
  110. package/dist/8803.js.LICENSE.txt +54 -0
  111. package/dist/8803.js.map +1 -0
  112. package/dist/8865.js +1 -0
  113. package/dist/8865.js.map +1 -0
  114. package/dist/8895.js +1 -0
  115. package/dist/8895.js.map +1 -0
  116. package/dist/9037.js +1 -0
  117. package/dist/9037.js.map +1 -0
  118. package/dist/9091.js +1 -0
  119. package/dist/9091.js.map +1 -0
  120. package/dist/9093.js +1 -0
  121. package/dist/9093.js.map +1 -0
  122. package/dist/9117.js +1 -0
  123. package/dist/9117.js.map +1 -0
  124. package/dist/961.js +2 -0
  125. package/dist/961.js.LICENSE.txt +19 -0
  126. package/dist/961.js.map +1 -0
  127. package/dist/9721.js +1 -0
  128. package/dist/9721.js.map +1 -0
  129. package/dist/esm-dha-workflow-app.js +1 -0
  130. package/dist/esm-dha-workflow-app.js.buildmanifest.json +1594 -0
  131. package/dist/esm-dha-workflow-app.js.map +1 -0
  132. package/dist/main.js +1 -0
  133. package/dist/main.js.map +1 -0
  134. package/dist/routes.json +1 -0
  135. package/e2e/README.md +115 -0
  136. package/e2e/core/global-setup.ts +32 -0
  137. package/e2e/core/index.ts +1 -0
  138. package/e2e/core/test.ts +20 -0
  139. package/e2e/fixtures/api.ts +26 -0
  140. package/e2e/fixtures/index.ts +1 -0
  141. package/e2e/pages/index.ts +1 -0
  142. package/e2e/pages/root-page.ts +32 -0
  143. package/e2e/specs/template-app.spec.ts +23 -0
  144. package/e2e/support/github/Dockerfile +34 -0
  145. package/e2e/support/github/docker-compose.yml +24 -0
  146. package/e2e/support/github/run-e2e-docker-env.sh +37 -0
  147. package/example.env +6 -0
  148. package/jest.config.js +33 -0
  149. package/package.json +117 -0
  150. package/playwright.config.ts +32 -0
  151. package/prettier.config.js +8 -0
  152. package/src/accounting/accounting.component.tsx +13 -0
  153. package/src/admissions/admission-request-list/admission-request-list.scss +0 -0
  154. package/src/admissions/admission-request-list/admission-request-list.tsx +134 -0
  155. package/src/admissions/admissions-dashboard.component.scss +15 -0
  156. package/src/admissions/admissions-dashboard.component.tsx +160 -0
  157. package/src/admissions/admissions.resource.ts +101 -0
  158. package/src/admissions/admitted-list/admitted-patients-list.tsx +141 -0
  159. package/src/admissions/constants/index.ts +33 -0
  160. package/src/admissions/discharged-list/discharged-list.scss +0 -0
  161. package/src/admissions/discharged-list/discharged-list.tsx +58 -0
  162. package/src/admissions/inpatient/admission-history/patient-admission-history.tsx +76 -0
  163. package/src/admissions/inpatient/admission-requests/patient-admission-requests.scss +19 -0
  164. package/src/admissions/inpatient/admission-requests/patient-admission-requests.tsx +72 -0
  165. package/src/admissions/inpatient/inpatient-admissions.component.scss +7 -0
  166. package/src/admissions/inpatient/inpatient-admissions.component.tsx +46 -0
  167. package/src/admissions/modal/admit-elsewhere/admit-elsewhere.modal.scss +23 -0
  168. package/src/admissions/modal/admit-elsewhere/admit-elsewhere.modal.tsx +156 -0
  169. package/src/admissions/modal/admit-patient/admit-patient.modal.scss +0 -0
  170. package/src/admissions/modal/admit-patient/admit-patient.modal.tsx +109 -0
  171. package/src/admissions/modal/bed-swap/bed-swap.modal.scss +0 -0
  172. package/src/admissions/modal/bed-swap/bed-swap.modal.tsx +102 -0
  173. package/src/admissions/modal/cancel-admission-request/cancel-admission-request.scss +11 -0
  174. package/src/admissions/modal/cancel-admission-request/cancel-admission-request.tsx +105 -0
  175. package/src/admissions/modal/discharge/discharge-patient.modal.scss +13 -0
  176. package/src/admissions/modal/discharge/discharge-patient.modal.tsx +84 -0
  177. package/src/admissions/types/index.ts +192 -0
  178. package/src/appointments/appointments.component.tsx +13 -0
  179. package/src/billing/api/billing.api.ts +107 -0
  180. package/src/billing/billing-root.tsx +20 -0
  181. package/src/billing/dashboard/billingDashboard.component.scss +0 -0
  182. package/src/billing/dashboard/billingDashboard.component.tsx +25 -0
  183. package/src/billing/extensions/visit-billing/visit-billing.extension.scss +0 -0
  184. package/src/billing/extensions/visit-billing/visit-billing.extension.tsx +508 -0
  185. package/src/billing/invoice/bill.resource.ts +47 -0
  186. package/src/billing/invoice/invoice-header/header-card/header-card.scss +17 -0
  187. package/src/billing/invoice/invoice-header/header-card/header-card.tsx +21 -0
  188. package/src/billing/invoice/invoice.scss +113 -0
  189. package/src/billing/invoice/invoice.tsx +1441 -0
  190. package/src/billing/invoice/line-items/line-items.scss +0 -0
  191. package/src/billing/invoice/line-items/line-items.tsx +120 -0
  192. package/src/billing/invoice/modal/delete-bill-item/delete-bill-item.modal.scss +23 -0
  193. package/src/billing/invoice/modal/delete-bill-item/delete-bill-item.modal.tsx +114 -0
  194. package/src/billing/invoice/modal/edit-bill-item/edit-bill-item.modal.scss +0 -0
  195. package/src/billing/invoice/modal/edit-bill-item/edit-bill-item.modal.tsx +122 -0
  196. package/src/billing/invoice/payment-details/payment-details.scss +0 -0
  197. package/src/billing/invoice/payment-details/payment-details.tsx +43 -0
  198. package/src/billing/invoice/print-invoice/print-receipt.component.tsx +44 -0
  199. package/src/billing/invoice/print-invoice/print-receipt.scss +14 -0
  200. package/src/billing/types/index.ts +84 -0
  201. package/src/billing/utils/index.ts +17 -0
  202. package/src/billing/widgets/billingTotalsRow.component.scss +0 -0
  203. package/src/billing/widgets/billingTotalsRow.component.tsx +712 -0
  204. package/src/billing/workspaces/create-order-bill-form-workspace/create-order-bill-form.resource.ts +103 -0
  205. package/src/billing/workspaces/create-order-bill-form-workspace/create-order-bill-form.scss +58 -0
  206. package/src/billing/workspaces/create-order-bill-form-workspace/create-order-bill-form.workspace.tsx +357 -0
  207. package/src/billing/workspaces/create-order-bill-form-workspace/schema.ts +11 -0
  208. package/src/bookings/bookings.component.scss +7 -0
  209. package/src/bookings/bookings.component.tsx +31 -0
  210. package/src/bookings/daily/daily-bookings.component.scss +38 -0
  211. package/src/bookings/daily/daily-bookings.component.tsx +138 -0
  212. package/src/bookings/daily/daily-bookings.resource.ts +28 -0
  213. package/src/bookings/daily/filters/daily-bookings-filter.component.scss +15 -0
  214. package/src/bookings/daily/filters/daily-bookings-filter.component.tsx +80 -0
  215. package/src/bookings/daily/patient-list/daily-bookings-patient-list.component.tsx +97 -0
  216. package/src/bookings/types/index.ts +68 -0
  217. package/src/claims/claims.component.tsx +142 -0
  218. package/src/claims/claims.resource.ts +168 -0
  219. package/src/claims/index.ts +206 -0
  220. package/src/claims/interventions.resource.ts +49 -0
  221. package/src/claims/utils.ts +59 -0
  222. package/src/config-schema.ts +215 -0
  223. package/src/createDashboardLink.tsx +9 -0
  224. package/src/dashboard/charts/chart.component.scss +13 -0
  225. package/src/dashboard/charts/chart.component.tsx +56 -0
  226. package/src/dashboard/dashboard.component.scss +7 -0
  227. package/src/dashboard/dashboard.component.tsx +51 -0
  228. package/src/dashboard/overview/overview.component.scss +150 -0
  229. package/src/dashboard/overview/overview.component.tsx +134 -0
  230. package/src/dashboard/patient-list/patient-list.component.tsx +41 -0
  231. package/src/dashboard-meta/accounting-dashboard.meta.ts +6 -0
  232. package/src/dashboard-meta/admissions-dashboard.meta.ts +6 -0
  233. package/src/dashboard-meta/billing-dashboard.meta.ts +6 -0
  234. package/src/dashboard-meta/bookings-dashboard.meta.ts +6 -0
  235. package/src/dashboard-meta/consultation-dashboard.meta.ts +6 -0
  236. package/src/dashboard-meta/dha-workflow-dashboard.meta.ts +6 -0
  237. package/src/dashboard-meta/inpatient-admissions.meta.ts +6 -0
  238. package/src/dashboard-meta/maternity-dashboard.meta.ts +6 -0
  239. package/src/dashboard-meta/mch-dashboard.meta.ts +6 -0
  240. package/src/dashboard-meta/pharmacy-dashboard.meta.ts +6 -0
  241. package/src/dashboard-meta/queue-dashboard.meta.ts +6 -0
  242. package/src/dashboard-meta/registers-dashboard.meta.ts +6 -0
  243. package/src/dashboard-meta/registry-dashboard.meta.ts +6 -0
  244. package/src/dashboard-meta/service-queue-admin.meta.ts +6 -0
  245. package/src/dashboard-meta/triage-dashboard.meta.ts +6 -0
  246. package/src/declarations.d.ts +5 -0
  247. package/src/hooks/useActions.ts +165 -0
  248. package/src/index.ts +161 -0
  249. package/src/laboratory/laboratory.component.tsx +13 -0
  250. package/src/left-panel/left-panel.component.tsx +20 -0
  251. package/src/left-panel/left-panel.scss +42 -0
  252. package/src/mnch/maternity/maternity-queues.component.scss +7 -0
  253. package/src/mnch/maternity/maternity-queues.component.tsx +28 -0
  254. package/src/mnch/maternity/queues/triage/maternity-triage.tsx +15 -0
  255. package/src/mnch/mch/mch-queues.component.scss +7 -0
  256. package/src/mnch/mch/mch-queues.component.tsx +32 -0
  257. package/src/mnch/mch/queues/consultation/mch-consultation.tsx +18 -0
  258. package/src/mnch/mch/queues/triage/mch-triage.tsx +15 -0
  259. package/src/mnch/mnch-root.tsx +17 -0
  260. package/src/modals/sign-off-modal.scss +7 -0
  261. package/src/modals/sign-off-modal.tsx +52 -0
  262. package/src/mortuary/mortuary.component.tsx +13 -0
  263. package/src/pharmacy/pharmacy.component.tsx +13 -0
  264. package/src/registers/registers.component.tsx +8 -0
  265. package/src/registry/client-details/client-details.tsx +40 -0
  266. package/src/registry/eligibility/eligibility-details/eligibility-details.scss +38 -0
  267. package/src/registry/eligibility/eligibility-details/eligibility-details.tsx +101 -0
  268. package/src/registry/eligibility/eliigibility-tags/eligibility-tags.scss +6 -0
  269. package/src/registry/eligibility/eliigibility-tags/eligibility-tags.tsx +120 -0
  270. package/src/registry/eligibility/modal/eligibility-details.modal.scss +0 -0
  271. package/src/registry/eligibility/modal/eligibility-details.modal.tsx +45 -0
  272. package/src/registry/modal/client-details-modal/client-details-modal.scss +28 -0
  273. package/src/registry/modal/client-details-modal/client-details-modal.tsx +119 -0
  274. package/src/registry/modal/otp-verification-modal/otp-verification-modal.scss +43 -0
  275. package/src/registry/modal/otp-verification-modal/otp-verification-modal.tsx +280 -0
  276. package/src/registry/modal/send-to-triage/send-to-triage.modal.scss +39 -0
  277. package/src/registry/modal/send-to-triage/send-to-triage.modal.tsx +921 -0
  278. package/src/registry/payment-details/payment-options/payment-options.scss +13 -0
  279. package/src/registry/payment-details/payment-options/payment-options.tsx +68 -0
  280. package/src/registry/registry.component.scss +89 -0
  281. package/src/registry/registry.component.tsx +490 -0
  282. package/src/registry/registry.resource.ts +62 -0
  283. package/src/registry/types/index.ts +401 -0
  284. package/src/registry/utils/error-handler.ts +37 -0
  285. package/src/registry/utils/format-dependant-display-data.ts +8 -0
  286. package/src/registry/utils/hie-adapter.ts +56 -0
  287. package/src/registry/utils/hie-client-adapter.ts +312 -0
  288. package/src/registry/utils/mask-data.ts +32 -0
  289. package/src/registry/utils/phone-number-formatter.ts +11 -0
  290. package/src/resources/dashboard.resource.ts +20 -0
  291. package/src/resources/hie-amrs-automatic-registration.service.ts +16 -0
  292. package/src/resources/identifier-types.ts +29 -0
  293. package/src/resources/patient-resource.ts +62 -0
  294. package/src/resources/patient-search.resource.ts +22 -0
  295. package/src/resources/queue.resource.ts +60 -0
  296. package/src/resources/superset.resource.ts +21 -0
  297. package/src/resources/visit.resource.ts +38 -0
  298. package/src/root.component.tsx +48 -0
  299. package/src/root.scss +11 -0
  300. package/src/root.test.tsx +51 -0
  301. package/src/routes.json +292 -0
  302. package/src/service-queues/action-button.component.tsx +34 -0
  303. package/src/service-queues/action-overflow-menu-item.component.tsx +34 -0
  304. package/src/service-queues/admin/queue/modal/create-queue/create-queue.modal.scss +31 -0
  305. package/src/service-queues/admin/queue/modal/create-queue/create-queue.modal.tsx +143 -0
  306. package/src/service-queues/admin/queue/modal/edit-queue/edit-queue.modal.scss +0 -0
  307. package/src/service-queues/admin/queue/modal/edit-queue/edit-queue.modal.tsx +154 -0
  308. package/src/service-queues/admin/queue/queue-list/queue-list.scss +33 -0
  309. package/src/service-queues/admin/queue/queue-list/queue-list.tsx +113 -0
  310. package/src/service-queues/admin/queue-entry/queue-entry-list.component.scss +6 -0
  311. package/src/service-queues/admin/queue-entry/queue-entry-list.component.tsx +137 -0
  312. package/src/service-queues/admin/queue-room/modal/create-queue-room/create-queue-room.modal.scss +31 -0
  313. package/src/service-queues/admin/queue-room/modal/create-queue-room/create-queue-room.modal.tsx +137 -0
  314. package/src/service-queues/admin/queue-room/modal/edit-queue-room/edit-queue-room.modal.scss +0 -0
  315. package/src/service-queues/admin/queue-room/modal/edit-queue-room/edit-queue-room.modal.tsx +146 -0
  316. package/src/service-queues/admin/queue-room/queue-room-list/queue-room-list.scss +22 -0
  317. package/src/service-queues/admin/queue-room/queue-room-list/queue-room-list.tsx +120 -0
  318. package/src/service-queues/admin/service-queue-admin-dashboard.component.scss +6 -0
  319. package/src/service-queues/admin/service-queue-admin-dashboard.component.tsx +34 -0
  320. package/src/service-queues/consultation/consultation.component.scss +7 -0
  321. package/src/service-queues/consultation/consultation.component.tsx +15 -0
  322. package/src/service-queues/extensions/service-queue-patient-banner/service-queue-patient-banner.scss +30 -0
  323. package/src/service-queues/extensions/service-queue-patient-banner/service-queue-patient-banner.tsx +108 -0
  324. package/src/service-queues/metrics/metrics-cards/attended-patients.extension.tsx +38 -0
  325. package/src/service-queues/metrics/metrics-cards/metrics-card.component.tsx +86 -0
  326. package/src/service-queues/metrics/metrics-cards/metrics-card.scss +106 -0
  327. package/src/service-queues/metrics/metrics-cards/waiting-patients.extension.tsx +34 -0
  328. package/src/service-queues/metrics/metrics-container.component.tsx +23 -0
  329. package/src/service-queues/metrics/metrics-container.scss +36 -0
  330. package/src/service-queues/metrics/metrics.resource.ts +65 -0
  331. package/src/service-queues/modals/daily-report-patient-list/daily-report-patient-list.scss +26 -0
  332. package/src/service-queues/modals/daily-report-patient-list/daily-report-patient-list.tsx +110 -0
  333. package/src/service-queues/modals/move/move-patient.component.scss +35 -0
  334. package/src/service-queues/modals/move/move-patient.component.tsx +152 -0
  335. package/src/service-queues/modals/serve/serve-patient.comppnent.scss +0 -0
  336. package/src/service-queues/modals/serve/serve-patient.comppnent.tsx +80 -0
  337. package/src/service-queues/modals/sign-off/sign-off.modal.scss +0 -0
  338. package/src/service-queues/modals/sign-off/sign-off.modal.tsx +79 -0
  339. package/src/service-queues/modals/transition/transition-patient.component.scss +0 -0
  340. package/src/service-queues/modals/transition/transition-patient.component.tsx +122 -0
  341. package/src/service-queues/queue-list/check-in.service.ts +26 -0
  342. package/src/service-queues/queue-list/queue-list.component.scss +56 -0
  343. package/src/service-queues/queue-list/queue-list.component.tsx +311 -0
  344. package/src/service-queues/queue-room.component.tsx +39 -0
  345. package/src/service-queues/room/room.component.tsx +58 -0
  346. package/src/service-queues/service-queue/service-queue.component.scss +14 -0
  347. package/src/service-queues/service-queue/service-queue.component.tsx +387 -0
  348. package/src/service-queues/service-queue/stats/stat-details/stat-details.component.scss +12 -0
  349. package/src/service-queues/service-queue/stats/stat-details/stat-details.component.tsx +63 -0
  350. package/src/service-queues/service-queue.scss +27 -0
  351. package/src/service-queues/service-queue.tsx +37 -0
  352. package/src/service-queues/service-queues.resource.ts +361 -0
  353. package/src/service-queues/service.resource.ts +28 -0
  354. package/src/shared/constants/civil-status.ts +29 -0
  355. package/src/shared/constants/concepts.ts +35 -0
  356. package/src/shared/constants/index.ts +1 -0
  357. package/src/shared/constants/patient-category.ts +6 -0
  358. package/src/shared/constants/patient-type.ts +10 -0
  359. package/src/shared/constants/person-attributes.ts +33 -0
  360. package/src/shared/constants/visit-types.ts +7 -0
  361. package/src/shared/services/billing.resource.ts +38 -0
  362. package/src/shared/services/client-payment-mode.resource.ts +27 -0
  363. package/src/shared/services/client-payment.resource.ts +17 -0
  364. package/src/shared/services/eligibility.resource.ts +20 -0
  365. package/src/shared/services/encounters.resource.ts +27 -0
  366. package/src/shared/services/location.resource.ts +9 -0
  367. package/src/shared/types/index.ts +153 -0
  368. package/src/shared/ui/aggregate-stat-card/aggregate-stat-card.scss +42 -0
  369. package/src/shared/ui/aggregate-stat-card/aggregate-stat-card.tsx +42 -0
  370. package/src/shared/ui/confirm-modal/confirm.modal.scss +18 -0
  371. package/src/shared/ui/confirm-modal/confirm.modal.tsx +38 -0
  372. package/src/shared/ui/otp-input/otp-input.component.scss +14 -0
  373. package/src/shared/ui/otp-input/otp-input.component.tsx +90 -0
  374. package/src/shared/ui/stat-card/stat-card.component.scss +10 -0
  375. package/src/shared/ui/stat-card/stat-card.component.tsx +26 -0
  376. package/src/shared/ui/timer/timer.component.scss +5 -0
  377. package/src/shared/ui/timer/timer.component.tsx +40 -0
  378. package/src/shared/utils/get-base-url.ts +27 -0
  379. package/src/shared/utils/get-tag-type.ts +66 -0
  380. package/src/side-nav/side-menu.scss +38 -0
  381. package/src/side-nav-menu/mnch-nav-link-config.ts +16 -0
  382. package/src/side-nav-menu/mnch-nav-links.tsx +42 -0
  383. package/src/side-nav-menu/nav-link-config.ts +78 -0
  384. package/src/side-nav-menu/nav-links.tsx +42 -0
  385. package/src/triage/metrics/attended-patients.extension.tsx +42 -0
  386. package/src/triage/metrics/metrics.scss +36 -0
  387. package/src/triage/metrics/triage-metrics.component.tsx +21 -0
  388. package/src/triage/metrics/waiting-patients.extension.tsx +39 -0
  389. package/src/triage/room/room.scss +29 -0
  390. package/src/triage/triage.component.tsx +15 -0
  391. package/src/triage/triage.resource.ts +19 -0
  392. package/src/triage/types.ts +16 -0
  393. package/src/types/types.ts +180 -0
  394. package/src/widgets/workflow-registry-link.extension.tsx +12 -0
  395. package/tools/i18next-parser.config.js +89 -0
  396. package/tools/setup-tests.ts +1 -0
  397. package/tools/update-openmrs-deps.mjs +43 -0
  398. package/translations/am.json +24 -0
  399. package/translations/en.json +24 -0
  400. package/translations/es.json +24 -0
  401. package/translations/fr.json +24 -0
  402. package/translations/he.json +24 -0
  403. package/translations/km.json +24 -0
  404. package/tsconfig.json +24 -0
  405. package/webpack.config.js +1 -0
@@ -0,0 +1,165 @@
1
+ import { restBaseUrl, showModal, useConfig } from '@openmrs/esm-framework';
2
+ import { type ConfigObject, type QueueEntryAction } from '../config-schema';
3
+ import { useMemo } from 'react';
4
+ import { useSWRConfig } from 'swr';
5
+ import { type QueueEntry } from '../types/types';
6
+ import { mapVisitQueueEntryProperties, serveQueueEntry } from '../service-queues/service-queues.resource';
7
+
8
+ type ActionProps = {
9
+ label: string;
10
+ text: string;
11
+ onClick: (queueEntry: QueueEntry) => void;
12
+ showIf?: (queueEntry: QueueEntry) => boolean;
13
+ isDelete?: boolean;
14
+ };
15
+
16
+ export function useMutateQueueEntries() {
17
+ const { mutate } = useSWRConfig();
18
+
19
+ return {
20
+ mutateQueueEntries: () => {
21
+ return mutate((key) => {
22
+ return (
23
+ typeof key === 'string' &&
24
+ (key.includes(`${restBaseUrl}/queue-entry`) || key.includes(`${restBaseUrl}/visit-queue-entry`))
25
+ );
26
+ }).then(() => {
27
+ window.dispatchEvent(new CustomEvent('queue-entry-updated'));
28
+ });
29
+ },
30
+ };
31
+ }
32
+
33
+ export function useActionPropsByKey() {
34
+ const {
35
+ concepts: { defaultStatusConceptUuid },
36
+ visitQueueNumberAttributeUuid,
37
+ } = useConfig<ConfigObject>();
38
+ const { mutateQueueEntries } = useMutateQueueEntries();
39
+
40
+ // Map action strings to component props
41
+ const actionPropsByKey: Record<QueueEntryAction, ActionProps> = useMemo(() => {
42
+ return {
43
+ call: {
44
+ // t('call', 'Call'),
45
+ label: 'call',
46
+ text: 'Call',
47
+ onClick: async (queueEntry: QueueEntry) => {
48
+ const mappedQueueEntry = mapVisitQueueEntryProperties(queueEntry, visitQueueNumberAttributeUuid);
49
+ const callingQueueResponse = await serveQueueEntry(
50
+ mappedQueueEntry.queue.name,
51
+ mappedQueueEntry.visitQueueNumber,
52
+ 'calling',
53
+ );
54
+ if (callingQueueResponse.ok) {
55
+ await mutateQueueEntries();
56
+ const dispose = showModal('call-queue-entry-modal', {
57
+ closeModal: () => dispose(),
58
+ queueEntry,
59
+ size: 'sm',
60
+ });
61
+ }
62
+ },
63
+ showIf: (queueEntry: QueueEntry) => {
64
+ return queueEntry.status.uuid === defaultStatusConceptUuid;
65
+ },
66
+ },
67
+ move: {
68
+ // t('move', 'Move'),
69
+ label: 'move',
70
+ text: 'Move',
71
+ onClick: (queueEntry: QueueEntry) => {
72
+ const dispose = showModal('move-queue-entry-modal', {
73
+ closeModal: () => dispose(),
74
+ queueEntry,
75
+ size: 'sm',
76
+ });
77
+ },
78
+ },
79
+ transition: {
80
+ // t('transition', 'Transition'),
81
+ label: 'transition',
82
+ text: 'Transition',
83
+ onClick: (queueEntry: QueueEntry) => {
84
+ const dispose = showModal('transition-queue-entry-modal', {
85
+ closeModal: () => dispose(),
86
+ queueEntry,
87
+ size: 'sm',
88
+ });
89
+ },
90
+ },
91
+ edit: {
92
+ // t('edit', 'Edit'),
93
+ label: 'edit',
94
+ text: 'Edit',
95
+ onClick: (queueEntry: QueueEntry) => {
96
+ const dispose = showModal('edit-queue-entry-modal', {
97
+ closeModal: () => dispose(),
98
+ queueEntry,
99
+ size: 'sm',
100
+ });
101
+ },
102
+ },
103
+ remove: {
104
+ // t('removePatient', 'Remove patient'),
105
+ label: 'removePatient',
106
+ text: 'Remove patient',
107
+ onClick: (queueEntry: QueueEntry) => {
108
+ const dispose = showModal('remove-queue-entry-modal', {
109
+ closeModal: () => dispose(),
110
+ queueEntry,
111
+ size: 'sm',
112
+ });
113
+ },
114
+ },
115
+ delete: {
116
+ // t('deleteEntry', 'Delete entry'),
117
+ label: 'deleteEntry',
118
+ text: 'Delete entry',
119
+ onClick: (queueEntry: QueueEntry) => {
120
+ const dispose = showModal('delete-queue-entry-modal', {
121
+ closeModal: () => dispose(),
122
+ queueEntry,
123
+ size: 'sm',
124
+ });
125
+ },
126
+ isDelete: true,
127
+ showIf: (queueEntry: QueueEntry) => {
128
+ return queueEntry.previousQueueEntry === null;
129
+ },
130
+ },
131
+ undo: {
132
+ // t('undoTransition', 'Undo transition'),
133
+ label: 'undoTransition',
134
+ text: 'Undo transition',
135
+ onClick: (queueEntry: QueueEntry) => {
136
+ const dispose = showModal('undo-transition-queue-entry-modal', {
137
+ closeModal: () => dispose(),
138
+ queueEntry,
139
+ size: 'sm',
140
+ });
141
+ },
142
+ isDelete: true,
143
+ showIf: (queueEntry: QueueEntry) => {
144
+ return queueEntry.previousQueueEntry !== null;
145
+ },
146
+ },
147
+ signOff: {
148
+ // t('signOff', 'Sign off'),
149
+ label: 'signOff',
150
+ text: 'Sign off',
151
+ onClick: (queueEntry: QueueEntry) => {
152
+ const dispose = showModal('sign-off-queue-entry-modal', {
153
+ closeModal: () => dispose(),
154
+ queueEntry,
155
+ size: 'sm',
156
+ });
157
+ },
158
+ showIf: (queueEntry: QueueEntry) => {
159
+ return queueEntry.previousQueueEntry !== null;
160
+ },
161
+ },
162
+ };
163
+ }, [defaultStatusConceptUuid, visitQueueNumberAttributeUuid, mutateQueueEntries]);
164
+ return actionPropsByKey;
165
+ }
package/src/index.ts ADDED
@@ -0,0 +1,161 @@
1
+ import { getAsyncLifecycle, defineConfigSchema, getSyncLifecycle } from '@openmrs/esm-framework';
2
+ import { configSchema } from './config-schema';
3
+ import { registryDashboardMeta } from './dashboard-meta/registry-dashboard.meta';
4
+ import { createDashboardLink } from './createDashboardLink';
5
+ import { createDashboardLink as openMrsCreateDashboardLink } from '@openmrs/esm-patient-common-lib';
6
+ import { queueDashboardMeta } from './dashboard-meta/queue-dashboard.meta';
7
+ import { pharmacyDashboardMeta } from './dashboard-meta/pharmacy-dashboard.meta';
8
+ import { triageDashboardMeta } from './dashboard-meta/triage-dashboard.meta';
9
+ import { consultationDashboardMeta } from './dashboard-meta/consultation-dashboard.meta';
10
+ import { dhaWorkflowDashboardMeta } from './dashboard-meta/dha-workflow-dashboard.meta';
11
+ import { accountingDashboardMeta } from './dashboard-meta/accounting-dashboard.meta';
12
+ import { bookingsDashboardMeta } from './dashboard-meta/bookings-dashboard.meta';
13
+ import { serviceQueueAdminDashboardMeta } from './dashboard-meta/service-queue-admin.meta';
14
+ import { admissionsDashboardMeta } from './dashboard-meta/admissions-dashboard.meta';
15
+ import { patientChartAdmissionsMetaData } from './dashboard-meta/inpatient-admissions.meta';
16
+ import { billingDashboardMeta } from './dashboard-meta/billing-dashboard.meta';
17
+
18
+ export const moduleName = '@ampath/esm-dha-workflow-app';
19
+
20
+ const options = {
21
+ featureName: 'Consulation Workflow',
22
+ moduleName,
23
+ };
24
+
25
+ /**
26
+ * This tells the app shell how to obtain translation files: that they
27
+ * are JSON files in the directory `../translations` (which you should
28
+ * see in the directory structure).
29
+ */
30
+ export const importTranslation = require.context('../translations', false, /.json$/, 'lazy');
31
+
32
+ /**
33
+ * This function performs any setup that should happen at microfrontend
34
+ * load-time (such as defining the config schema) and then returns an
35
+ * object which describes how the React application(s) should be
36
+ * rendered.
37
+ */
38
+ export function startupApp() {
39
+ defineConfigSchema(moduleName, configSchema);
40
+ }
41
+
42
+ export const navLinks = getAsyncLifecycle(() => import('./side-nav-menu/nav-links'), {
43
+ featureName: 'side-nav-workflow-link',
44
+ moduleName,
45
+ });
46
+
47
+ /**
48
+ * This named export tells the app shell that the default export of `root.component.tsx`
49
+ * should be rendered when the route matches `root`. The full route
50
+ * will be `openmrsSpaBase() + 'root'`, which is usually
51
+ * `/openmrs/spa/root`.
52
+ */
53
+ export const root = getAsyncLifecycle(() => import('./root.component'), options);
54
+ export const registry = getAsyncLifecycle(() => import('./registry/registry.component'), options);
55
+ export const waitingPatientsExtension = getAsyncLifecycle(
56
+ () => import('./service-queues/metrics/metrics-cards/waiting-patients.extension'),
57
+ options,
58
+ );
59
+ export const attendedToPatientsExtension = getAsyncLifecycle(
60
+ () => import('./service-queues/metrics/metrics-cards/attended-patients.extension'),
61
+ options,
62
+ );
63
+ export const triageWaitingPatientsExtension = getAsyncLifecycle(
64
+ () => import('./triage/metrics/waiting-patients.extension'),
65
+ options,
66
+ );
67
+ export const triageAttendedToPatientsExtension = getAsyncLifecycle(
68
+ () => import('./triage/metrics/attended-patients.extension'),
69
+ options,
70
+ );
71
+
72
+ export const workflowRegistryLink = getAsyncLifecycle(() => import('./widgets/workflow-registry-link.extension'), {
73
+ featureName: 'workflow-registry-link',
74
+ moduleName,
75
+ });
76
+
77
+ export const registryDashboardLink = getSyncLifecycle(createDashboardLink(registryDashboardMeta), options);
78
+
79
+ export const registryExtension = getAsyncLifecycle(() => import('./registry/registry.component'), options);
80
+
81
+ export const queueDashboardLink = getSyncLifecycle(createDashboardLink(queueDashboardMeta), options);
82
+
83
+ export const queueDashboardExtension = getAsyncLifecycle(() => import('./dashboard/dashboard.component'), options);
84
+
85
+ export const pharmacyDashboardLink = getSyncLifecycle(createDashboardLink(pharmacyDashboardMeta), options);
86
+
87
+ export const triageDashboardLink = getSyncLifecycle(createDashboardLink(triageDashboardMeta), options);
88
+
89
+ export const triageQueueExtension = getAsyncLifecycle(() => import('./triage/triage.component'), options);
90
+
91
+ export const consultationDashboardLink = getSyncLifecycle(createDashboardLink(consultationDashboardMeta), options);
92
+
93
+ export const consultationQueue = getAsyncLifecycle(
94
+ () => import('./service-queues/consultation/consultation.component'),
95
+ options,
96
+ );
97
+
98
+ export const dhaWorkflowDashboardLink = getSyncLifecycle(createDashboardLink(dhaWorkflowDashboardMeta), options);
99
+
100
+ export const dhaWorkflowDashboard = getAsyncLifecycle(() => import('./dashboard/dashboard.component'), options);
101
+
102
+ export const accountingDashboardLink = getSyncLifecycle(createDashboardLink(accountingDashboardMeta), options);
103
+
104
+ export const accountingDashboard = getAsyncLifecycle(() => import('./accounting/accounting.component'), options);
105
+
106
+ export const bookingsDashboardLink = getSyncLifecycle(createDashboardLink(bookingsDashboardMeta), options);
107
+
108
+ export const bookings = getAsyncLifecycle(() => import('./bookings/bookings.component'), options);
109
+
110
+ export const mnchQueueDashboardLink = getAsyncLifecycle(() => import('./side-nav-menu/mnch-nav-links'), options);
111
+
112
+ export const MNCHRoot = getAsyncLifecycle(() => import('./mnch/mnch-root'), options);
113
+
114
+ export const serviceQueueAdmin = getAsyncLifecycle(
115
+ () => import('./service-queues/admin/service-queue-admin-dashboard.component'),
116
+ options,
117
+ );
118
+
119
+ export const serviceQueuesAdminLink = getSyncLifecycle(createDashboardLink(serviceQueueAdminDashboardMeta), options);
120
+ export const admissionsDashboardLink = getSyncLifecycle(createDashboardLink(admissionsDashboardMeta), options);
121
+
122
+ export const admissionsDashboard = getAsyncLifecycle(
123
+ () => import('./admissions/admissions-dashboard.component'),
124
+ options,
125
+ );
126
+
127
+ export const serviceQueueBannerComponent = getAsyncLifecycle(
128
+ () => import('./service-queues/extensions/service-queue-patient-banner/service-queue-patient-banner'),
129
+ options,
130
+ );
131
+ export const patientChartAdmissionsLink = getSyncLifecycle(
132
+ openMrsCreateDashboardLink(patientChartAdmissionsMetaData as any),
133
+ options,
134
+ );
135
+ export const patientAdmissionSummary = getAsyncLifecycle(
136
+ () => import('./admissions/inpatient/inpatient-admissions.component'),
137
+ options,
138
+ );
139
+ export const billingDashboardLink = getSyncLifecycle(createDashboardLink(billingDashboardMeta), options);
140
+
141
+ export const billingDashboard = getAsyncLifecycle(
142
+ () => import('./billing/dashboard/billingDashboard.component'),
143
+ options,
144
+ );
145
+
146
+ export const billingRoot = getAsyncLifecycle(() => import('./billing/billing-root'), options);
147
+
148
+ export const createOrderBillFormWorkspace = getAsyncLifecycle(
149
+ () => import('./billing/workspaces/create-order-bill-form-workspace/create-order-bill-form.workspace'),
150
+ options,
151
+ );
152
+
153
+ export const visitBillingForm = getAsyncLifecycle(
154
+ () => import('./billing/extensions/visit-billing/visit-billing.extension'),
155
+ options,
156
+ );
157
+
158
+ export const claims = getAsyncLifecycle(
159
+ () => import('./claims/claims.component'),
160
+ options,
161
+ );
@@ -0,0 +1,13 @@
1
+ import React, { useEffect, useState } from 'react';
2
+ import { ExtensionSlot, WorkspaceContainer } from '@openmrs/esm-framework';
3
+
4
+ const LaboratoryComponent: React.FC = () => {
5
+
6
+ return (
7
+ <div>
8
+ <ExtensionSlot name="laboratory-dashboard-slot" />
9
+ </div>
10
+ );
11
+ };
12
+
13
+ export default LaboratoryComponent;
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+ import { useTranslation } from 'react-i18next';
3
+ import { SideNav } from '@carbon/react';
4
+ import { attach, ExtensionSlot, isDesktop, useLayoutType } from '@openmrs/esm-framework';
5
+ import styles from './left-panel.scss';
6
+
7
+ const LeftPanel: React.FC = () => {
8
+ const { t } = useTranslation();
9
+ const layout = useLayoutType();
10
+
11
+ return (
12
+ isDesktop(layout) && (
13
+ <SideNav className={styles.leftPanel} expanded>
14
+ <ExtensionSlot name="dha-workflow-slot" />
15
+ </SideNav>
16
+ )
17
+ );
18
+ };
19
+
20
+ export default LeftPanel;
@@ -0,0 +1,42 @@
1
+ @use '@carbon/colors';
2
+ @use '@carbon/layout';
3
+ @use '@carbon/type';
4
+
5
+ .leftPanel {
6
+ border-right: 1px solid colors.$gray-20;
7
+ padding-top: layout.$spacing-05;
8
+
9
+ // Left nav menu item
10
+ :global(.cds--side-nav__link) {
11
+ color: colors.$gray-70;
12
+ @include type.type-style('heading-compact-01');
13
+
14
+ &:focus,
15
+ &:hover {
16
+ background-color: colors.$gray-10-hover;
17
+ }
18
+
19
+ // Active menu item
20
+ &:global(.active-left-nav-link) {
21
+ color: colors.$gray-100;
22
+ border-left: layout.$spacing-02 solid var(--brand-01);
23
+ outline: none;
24
+ padding: 0 layout.$spacing-04;
25
+ background-color: colors.$gray-20;
26
+ }
27
+ }
28
+ }
29
+
30
+ /* Desktop */
31
+ :global(.omrs-breakpoint-gt-tablet) {
32
+ :global(.cds--side-nav__link) {
33
+ height: layout.$spacing-07;
34
+ }
35
+ }
36
+
37
+ /* Tablet */
38
+ :global(.omrs-breakpoint-lt-desktop) {
39
+ :global(.cds--side-nav__link) {
40
+ height: layout.$spacing-09;
41
+ }
42
+ }
@@ -0,0 +1,7 @@
1
+ .mnchLayout{
2
+ display: flex;
3
+ flex-direction: column;
4
+ width: 100%;
5
+ row-gap: 10px;
6
+ padding: 2% 2%;
7
+ }
@@ -0,0 +1,28 @@
1
+ import React from 'react';
2
+ import styles from './maternity-queues.component.scss';
3
+ import { Tab, TabList, TabPanel, TabPanels, Tabs } from '@carbon/react';
4
+ import MaternityTriage from './queues/triage/maternity-triage';
5
+ interface MchQueuesProps {}
6
+ const MaternityQueues: React.FC<MchQueuesProps> = () => {
7
+ return (
8
+ <div className={styles.mnchLayout}>
9
+ <div className={styles.mnchHeader}>
10
+ <h4>Maternity</h4>
11
+ </div>
12
+ <div className={styles.mnchContent}>
13
+ <Tabs>
14
+ <TabList contained>
15
+ <Tab>Triage</Tab>
16
+ </TabList>
17
+ <TabPanels>
18
+ <TabPanel>
19
+ <MaternityTriage />
20
+ </TabPanel>
21
+
22
+ </TabPanels>
23
+ </Tabs>
24
+ </div>
25
+ </div>
26
+ );
27
+ };
28
+ export default MaternityQueues;
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import ServiceQueueComponent from '../../../../service-queues/service-queue/service-queue.component';
3
+ import { QUEUE_SERVICE_UUIDS } from '../../../../shared/constants/concepts';
4
+
5
+ interface TriageProps {}
6
+ const MaternityTriage: React.FC<TriageProps> = () => {
7
+ return (
8
+ <>
9
+ <div>
10
+ <ServiceQueueComponent serviceTypeUuid={QUEUE_SERVICE_UUIDS.MATERNITY_TRIAGE_SERVICE_UUID} title="Maternity Triage" />
11
+ </div>
12
+ </>
13
+ );
14
+ };
15
+ export default MaternityTriage;
@@ -0,0 +1,7 @@
1
+ .mnchLayout{
2
+ display: flex;
3
+ flex-direction: column;
4
+ width: 100%;
5
+ row-gap: 10px;
6
+ padding: 2% 2%;
7
+ }
@@ -0,0 +1,32 @@
1
+ import React from 'react';
2
+ import styles from './mch-queues.component.scss';
3
+ import { Tab, TabList, TabPanel, TabPanels, Tabs } from '@carbon/react';
4
+ import MchTriage from './queues/triage/mch-triage';
5
+ import MchConsultation from './queues/consultation/mch-consultation';
6
+ interface MchQueuesProps {}
7
+ const MchQueues: React.FC<MchQueuesProps> = () => {
8
+ return (
9
+ <div className={styles.mnchLayout}>
10
+ <div className={styles.mnchHeader}>
11
+ <h4>MNCH</h4>
12
+ </div>
13
+ <div className={styles.mnchContent}>
14
+ <Tabs>
15
+ <TabList contained>
16
+ <Tab>Triage</Tab>
17
+ <Tab>Consultation</Tab>
18
+ </TabList>
19
+ <TabPanels>
20
+ <TabPanel>
21
+ <MchTriage />
22
+ </TabPanel>
23
+ <TabPanel>
24
+ <MchConsultation />
25
+ </TabPanel>
26
+ </TabPanels>
27
+ </Tabs>
28
+ </div>
29
+ </div>
30
+ );
31
+ };
32
+ export default MchQueues;
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import ServiceQueueComponent from '../../../../service-queues/service-queue/service-queue.component';
3
+ import { QUEUE_SERVICE_UUIDS } from '../../../../shared/constants/concepts';
4
+
5
+ interface MchConsultationProps {}
6
+ const MchConsultation: React.FC<MchConsultationProps> = () => {
7
+ return (
8
+ <>
9
+ <div>
10
+ <ServiceQueueComponent
11
+ serviceTypeUuid={QUEUE_SERVICE_UUIDS.MCH_CLINICAL_CONSULTATION_SERVICE_UUID}
12
+ title="MCH Consultation"
13
+ />
14
+ </div>
15
+ </>
16
+ );
17
+ };
18
+ export default MchConsultation;
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import ServiceQueueComponent from '../../../../service-queues/service-queue/service-queue.component';
3
+ import { QUEUE_SERVICE_UUIDS } from '../../../../shared/constants/concepts';
4
+
5
+ interface TriageProps {}
6
+ const MchTriage: React.FC<TriageProps> = () => {
7
+ return (
8
+ <>
9
+ <div>
10
+ <ServiceQueueComponent serviceTypeUuid={QUEUE_SERVICE_UUIDS.MCH_TRIAGE_SERVICE_UUID} title="MCH Triage" />
11
+ </div>
12
+ </>
13
+ );
14
+ };
15
+ export default MchTriage;
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ import { BrowserRouter, Route, Routes } from 'react-router-dom';
3
+ import MchQueues from './mch/mch-queues.component';
4
+ import MaternityQueues from './maternity/maternity-queues.component';
5
+
6
+ const MNCHRoot: React.FC = () => {
7
+ return (
8
+ <BrowserRouter basename={`${window.spaBase}/home/mnch`}>
9
+ <Routes>
10
+ <Route path="/mch" element={<MchQueues/>} />
11
+ <Route path="/maternity" element={<MaternityQueues />} />
12
+ </Routes>
13
+ </BrowserRouter>
14
+ );
15
+ };
16
+
17
+ export default MNCHRoot;
@@ -0,0 +1,7 @@
1
+ @use '@carbon/type';
2
+ @use '@openmrs/esm-styleguide/src/vars' as *;
3
+
4
+ .subHeading {
5
+ @include type.type-style('heading-compact-01');
6
+ color: $ui-05;
7
+ }
@@ -0,0 +1,52 @@
1
+ import React, { useCallback, useState } from 'react';
2
+ import { Button, ButtonSkeleton, ModalBody, ModalFooter, ModalHeader } from '@carbon/react';
3
+ import { useTranslation } from 'react-i18next';
4
+ import styles from './sign-off-modal.scss';
5
+ import { type QueueEntry } from '../types/types';
6
+
7
+ interface SignOffModalProps {
8
+ queueEntries: Array<QueueEntry>;
9
+ closeModal: () => void;
10
+ }
11
+
12
+ const SignOffModal: React.FC<SignOffModalProps> = ({ queueEntries, closeModal }) => {
13
+ const { t } = useTranslation();
14
+ const [isSubmitting, setIsSubmitting] = useState(false);
15
+
16
+ const handleSignOffRequest = useCallback(() => {
17
+ setIsSubmitting(true);
18
+ }, []);
19
+
20
+ return (
21
+ <div>
22
+ <ModalHeader
23
+ closeModal={closeModal}
24
+ label={t('signOffMessage', 'Sign off message')}
25
+ title={t('signOffMessage', 'Sign off message')}
26
+ />
27
+ <ModalBody>
28
+ <p className={styles.subHeading} id="subHeading">
29
+ {t(
30
+ 'signOffMessage',
31
+ 'Sign off message',
32
+ )}
33
+ .
34
+ </p>
35
+ </ModalBody>
36
+ <ModalFooter>
37
+ <Button kind="secondary" onClick={closeModal}>
38
+ {t('cancel', 'Cancel')}
39
+ </Button>
40
+ {isSubmitting === true ? (
41
+ <ButtonSkeleton />
42
+ ) : (
43
+ <Button kind="danger" onClick={handleSignOffRequest}>
44
+ {t('signOff', 'SignOff')}
45
+ </Button>
46
+ )}
47
+ </ModalFooter>
48
+ </div>
49
+ );
50
+ };
51
+
52
+ export default SignOffModal;
@@ -0,0 +1,13 @@
1
+ import React, { useEffect, useState } from 'react';
2
+ import { ExtensionSlot, WorkspaceContainer } from '@openmrs/esm-framework';
3
+
4
+ const Mortuary: React.FC = () => {
5
+
6
+ return (
7
+ <div>
8
+ <ExtensionSlot name="mortuary-dashboard-slot" />
9
+ </div>
10
+ );
11
+ };
12
+
13
+ export default Mortuary;
@@ -0,0 +1,13 @@
1
+ import React, { useEffect, useState } from 'react';
2
+ import { ExtensionSlot, WorkspaceContainer } from '@openmrs/esm-framework';
3
+
4
+ const PharmacyComponent: React.FC = () => {
5
+
6
+ return (
7
+ <div>
8
+ <ExtensionSlot name="dispensing-dashboard-slot" />
9
+ </div>
10
+ );
11
+ };
12
+
13
+ export default PharmacyComponent;
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+
3
+ interface RegistersProps {}
4
+ const Registers: React.FC<RegistersProps> = () => {
5
+ return <>Registers</>;
6
+ };
7
+
8
+ export default Registers;