@kenyaemr/esm-express-workflow-app 5.4.3 → 5.4.4-pre.100

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 (388) hide show
  1. package/.turbo/turbo-build.log +7 -12
  2. package/dist/1074.js +1 -0
  3. package/dist/1074.js.map +1 -0
  4. package/dist/12.js +17 -0
  5. package/dist/12.js.map +1 -0
  6. package/dist/1311.js +1 -0
  7. package/dist/1311.js.map +1 -0
  8. package/dist/1323.js +1 -0
  9. package/dist/1323.js.map +1 -0
  10. package/dist/1469.js +1 -0
  11. package/dist/1469.js.map +1 -0
  12. package/dist/1506.js +13 -0
  13. package/dist/1506.js.map +1 -0
  14. package/dist/1562.js +1 -0
  15. package/dist/1562.js.map +1 -0
  16. package/dist/1760.js +1 -0
  17. package/dist/1760.js.map +1 -0
  18. package/dist/1780.js +1 -0
  19. package/dist/1780.js.map +1 -0
  20. package/dist/1804.js +1 -0
  21. package/dist/1804.js.map +1 -0
  22. package/dist/1884.js +1 -0
  23. package/dist/1884.js.map +1 -0
  24. package/dist/1972.js +1 -0
  25. package/dist/1972.js.map +1 -0
  26. package/dist/1990.js +1 -0
  27. package/dist/1990.js.map +1 -0
  28. package/dist/2016.js +1 -0
  29. package/dist/2016.js.map +1 -0
  30. package/dist/2024.js +1 -0
  31. package/dist/2024.js.map +1 -0
  32. package/dist/2153.js +1 -0
  33. package/dist/2153.js.map +1 -0
  34. package/dist/216.js +1 -0
  35. package/dist/216.js.map +1 -0
  36. package/dist/2225.js +1 -0
  37. package/dist/2225.js.map +1 -0
  38. package/dist/2294.js +1 -0
  39. package/dist/2294.js.map +1 -0
  40. package/dist/2345.js +1 -0
  41. package/dist/2345.js.map +1 -0
  42. package/dist/2499.js +1 -0
  43. package/dist/2499.js.map +1 -0
  44. package/dist/2500.js +1 -0
  45. package/dist/2500.js.map +1 -0
  46. package/dist/2586.js +1 -0
  47. package/dist/2586.js.map +1 -0
  48. package/dist/2625.js +1 -0
  49. package/dist/2625.js.map +1 -0
  50. package/dist/2685.js +1 -0
  51. package/dist/2685.js.map +1 -0
  52. package/dist/2809.js +1 -0
  53. package/dist/2809.js.map +1 -0
  54. package/dist/2851.js +1 -0
  55. package/dist/2851.js.map +1 -0
  56. package/dist/2881.js +1 -0
  57. package/dist/2881.js.map +1 -0
  58. package/dist/2948.js +1 -0
  59. package/dist/2948.js.map +1 -0
  60. package/dist/2968.js +1 -0
  61. package/dist/2968.js.map +1 -0
  62. package/dist/2978.js +1 -0
  63. package/dist/2978.js.map +1 -0
  64. package/dist/2998.js +1 -0
  65. package/dist/2998.js.map +1 -0
  66. package/dist/3089.js +1 -0
  67. package/dist/3089.js.map +1 -0
  68. package/dist/3548.js +1 -0
  69. package/dist/3548.js.map +1 -0
  70. package/dist/3567.js +1 -0
  71. package/dist/3567.js.map +1 -0
  72. package/dist/3569.js +1 -0
  73. package/dist/3569.js.map +1 -0
  74. package/dist/3571.js +1 -0
  75. package/dist/3571.js.map +1 -0
  76. package/dist/3691.js +1 -0
  77. package/dist/3691.js.map +1 -0
  78. package/dist/3730.js +1 -0
  79. package/dist/3730.js.map +1 -0
  80. package/dist/3923.js +1 -0
  81. package/dist/3923.js.map +1 -0
  82. package/dist/3963.js +1 -0
  83. package/dist/3963.js.map +1 -0
  84. package/dist/4024.js +1 -0
  85. package/dist/4024.js.map +1 -0
  86. package/dist/405.js +1 -0
  87. package/dist/405.js.map +1 -0
  88. package/dist/4071.js +1 -0
  89. package/dist/4071.js.map +1 -0
  90. package/dist/4271.js +1 -0
  91. package/dist/4271.js.map +1 -0
  92. package/dist/4296.js +1 -0
  93. package/dist/4296.js.map +1 -0
  94. package/dist/4337.js +1 -0
  95. package/dist/4337.js.map +1 -0
  96. package/dist/4432.js +1 -0
  97. package/dist/4432.js.map +1 -0
  98. package/dist/4581.js +1 -0
  99. package/dist/4581.js.map +1 -0
  100. package/dist/4637.js +11 -0
  101. package/dist/4637.js.map +1 -0
  102. package/dist/4666.js +1 -0
  103. package/dist/4666.js.map +1 -0
  104. package/dist/4680.js +1 -0
  105. package/dist/4680.js.map +1 -0
  106. package/dist/4735.js +1 -0
  107. package/dist/4735.js.map +1 -0
  108. package/dist/4737.js +1 -0
  109. package/dist/4737.js.map +1 -0
  110. package/dist/4744.js +1 -0
  111. package/dist/4744.js.map +1 -0
  112. package/dist/4795.js +1 -0
  113. package/dist/4795.js.map +1 -0
  114. package/dist/4813.js +2 -0
  115. package/dist/4813.js.map +1 -0
  116. package/dist/4818.js +1 -0
  117. package/dist/4818.js.map +1 -0
  118. package/dist/4858.js +1 -0
  119. package/dist/4858.js.map +1 -0
  120. package/dist/487.js +1 -0
  121. package/dist/487.js.map +1 -0
  122. package/dist/4970.js +1 -0
  123. package/dist/4970.js.map +1 -0
  124. package/dist/5038.js +1 -0
  125. package/dist/5038.js.map +1 -0
  126. package/dist/5202.js +1 -0
  127. package/dist/5202.js.map +1 -0
  128. package/dist/5491.js +1 -0
  129. package/dist/5491.js.map +1 -0
  130. package/dist/5592.js +1 -0
  131. package/dist/5592.js.map +1 -0
  132. package/dist/5669.js +1 -0
  133. package/dist/5669.js.map +1 -0
  134. package/dist/586.js +1 -0
  135. package/dist/586.js.map +1 -0
  136. package/dist/5932.js +1 -0
  137. package/dist/5932.js.map +1 -0
  138. package/dist/5995.js +1 -0
  139. package/dist/5995.js.map +1 -0
  140. package/dist/6258.js +1 -0
  141. package/dist/6258.js.map +1 -0
  142. package/dist/629.js +1 -0
  143. package/dist/629.js.map +1 -0
  144. package/dist/6328.js +1 -0
  145. package/dist/6328.js.map +1 -0
  146. package/dist/6355.js +1 -0
  147. package/dist/6355.js.map +1 -0
  148. package/dist/6419.js +1 -0
  149. package/dist/6419.js.map +1 -0
  150. package/dist/644.js +1 -0
  151. package/dist/644.js.map +1 -0
  152. package/dist/6456.js +1 -0
  153. package/dist/6466.js +3 -0
  154. package/dist/6466.js.map +1 -0
  155. package/dist/655.js +1 -0
  156. package/dist/655.js.map +1 -0
  157. package/dist/6798.js +66 -0
  158. package/dist/6798.js.map +1 -0
  159. package/dist/6910.js +1 -0
  160. package/dist/6910.js.map +1 -0
  161. package/dist/6925.js +1 -0
  162. package/dist/6925.js.map +1 -0
  163. package/dist/70.js +1 -0
  164. package/dist/70.js.map +1 -0
  165. package/dist/7201.js +1 -0
  166. package/dist/7201.js.map +1 -0
  167. package/dist/7234.js +1 -0
  168. package/dist/7234.js.map +1 -0
  169. package/dist/7261.js +1 -0
  170. package/dist/7261.js.map +1 -0
  171. package/dist/7326.js +1 -0
  172. package/dist/7359.js +1 -0
  173. package/dist/7487.js +1 -0
  174. package/dist/7487.js.map +1 -0
  175. package/dist/7591.js +1 -0
  176. package/dist/7591.js.map +1 -0
  177. package/dist/7607.js +1 -0
  178. package/dist/7701.js +1 -0
  179. package/dist/7701.js.map +1 -0
  180. package/dist/7717.js +1 -0
  181. package/dist/7717.js.map +1 -0
  182. package/dist/7739.js +1 -0
  183. package/dist/7739.js.map +1 -0
  184. package/dist/7788.js +1 -0
  185. package/dist/7788.js.map +1 -0
  186. package/dist/7819.js +1 -0
  187. package/dist/7819.js.map +1 -0
  188. package/dist/7971.js +1 -0
  189. package/dist/7971.js.map +1 -0
  190. package/dist/7983.js +1 -0
  191. package/dist/7983.js.map +1 -0
  192. package/dist/807.js +1 -0
  193. package/dist/807.js.map +1 -0
  194. package/dist/8159.js +7 -0
  195. package/dist/8159.js.map +1 -0
  196. package/dist/8338.js +1 -0
  197. package/dist/8338.js.map +1 -0
  198. package/dist/845.js +1 -0
  199. package/dist/845.js.map +1 -0
  200. package/dist/8570.js +1 -0
  201. package/dist/8570.js.map +1 -0
  202. package/dist/8661.js +1 -0
  203. package/dist/8661.js.map +1 -0
  204. package/dist/87.js +1 -0
  205. package/dist/87.js.map +1 -0
  206. package/dist/8727.js +1 -0
  207. package/dist/8766.js +1 -0
  208. package/dist/8766.js.map +1 -0
  209. package/dist/8828.js +1 -0
  210. package/dist/8828.js.map +1 -0
  211. package/dist/8860.js +1 -0
  212. package/dist/8860.js.map +1 -0
  213. package/dist/8911.js +1 -0
  214. package/dist/8911.js.map +1 -0
  215. package/dist/8930.js +1 -0
  216. package/dist/8930.js.map +1 -0
  217. package/dist/8971.js +1 -0
  218. package/dist/8971.js.map +1 -0
  219. package/dist/9124.js +1 -0
  220. package/dist/9124.js.map +1 -0
  221. package/dist/9157.js +1 -0
  222. package/dist/9157.js.map +1 -0
  223. package/dist/9182.js +1 -0
  224. package/dist/921.js +1 -0
  225. package/dist/921.js.map +1 -0
  226. package/dist/9212.js +1 -0
  227. package/dist/9212.js.map +1 -0
  228. package/dist/9255.js +1 -0
  229. package/dist/9255.js.map +1 -0
  230. package/dist/9257.js +1 -0
  231. package/dist/9257.js.map +1 -0
  232. package/dist/9316.js +1 -0
  233. package/dist/9316.js.map +1 -0
  234. package/dist/9333.js +1 -0
  235. package/dist/9333.js.map +1 -0
  236. package/dist/9404.js +1 -0
  237. package/dist/9404.js.map +1 -0
  238. package/dist/9446.js +1 -0
  239. package/dist/9446.js.map +1 -0
  240. package/dist/9447.js +1 -0
  241. package/dist/9447.js.map +1 -0
  242. package/dist/9449.js +1 -0
  243. package/dist/9449.js.map +1 -0
  244. package/dist/9535.js +1 -0
  245. package/dist/9535.js.map +1 -0
  246. package/dist/9606.js +1 -0
  247. package/dist/9606.js.map +1 -0
  248. package/dist/973.js +1 -0
  249. package/dist/973.js.map +1 -0
  250. package/dist/9845.js +1 -0
  251. package/dist/9845.js.map +1 -0
  252. package/dist/kenyaemr-esm-express-workflow-app.js +5 -5
  253. package/dist/kenyaemr-esm-express-workflow-app.js.buildmanifest.json +3004 -175
  254. package/dist/kenyaemr-esm-express-workflow-app.js.map +1 -1
  255. package/dist/main.js +5 -114
  256. package/dist/main.js.map +1 -1
  257. package/dist/routes.json +1 -1
  258. package/package.json +6 -7
  259. package/rspack.config.js +1 -1
  260. package/src/components/accounting/index.tsx +11 -10
  261. package/src/components/admissions/index.tsx +11 -10
  262. package/src/components/appointments/index.ts +10 -8
  263. package/src/components/consultation/clinical-encounter/encounter-details.component.tsx +9 -9
  264. package/src/components/consultation/clinical-encounter/encounter-details.test.tsx +19 -18
  265. package/src/components/consultation/consultation-context.tsx +19 -0
  266. package/src/components/consultation/consultation-summary-cards.component.tsx +124 -0
  267. package/src/components/consultation/consultation.component.tsx +41 -268
  268. package/src/components/consultation/consultation.resource.ts +67 -24
  269. package/src/components/consultation/consultation.scss +5 -0
  270. package/src/components/consultation/consultation.utils.tsx +222 -0
  271. package/src/components/consultation/dashboard.component.tsx +0 -2
  272. package/src/components/consultation/index.ts +27 -20
  273. package/src/components/facility-dashboard/index.tsx +10 -9
  274. package/src/components/laboratory/index.ts +11 -10
  275. package/src/components/laboratory/lab-table.component.tsx +22 -8
  276. package/src/components/laboratory/laboratory-tabs.component.tsx +2 -2
  277. package/src/components/mch/dashboard.component.tsx +0 -2
  278. package/src/components/mch/index.tsx +10 -9
  279. package/src/components/mch/mch.consultation.component.tsx +27 -15
  280. package/src/components/mch/mch.triage.component.tsx +42 -33
  281. package/src/components/pharmacy/index.ts +20 -18
  282. package/src/components/pharmacy/orders/pharmacy-orders.component.tsx +35 -13
  283. package/src/components/pharmacy/orders/pharmacy-orders.test.tsx +8 -7
  284. package/src/components/procedures/index.ts +11 -10
  285. package/src/components/procedures/procedures-table.component.tsx +44 -13
  286. package/src/components/procedures/procedures-tabs.component.tsx +2 -2
  287. package/src/components/radiology-and-imaging/index.ts +14 -10
  288. package/src/components/radiology-and-imaging/radiology-and-imaging-table.component.tsx +35 -15
  289. package/src/components/radiology-and-imaging/radiology-and-imaging.component.tsx +2 -2
  290. package/src/components/registration/card/HIE-card/hie-card.component.tsx +32 -44
  291. package/src/components/registration/card/Local-card/local-card.component.tsx +22 -24
  292. package/src/components/registration/dependants/dependants.component.tsx +32 -60
  293. package/src/components/registration/dependants/dependants.resource.ts +79 -50
  294. package/src/components/registration/helper/index.ts +4 -0
  295. package/src/components/registration/index.ts +10 -9
  296. package/src/components/registration/search-bar/search-bar.resource.ts +32 -93
  297. package/src/components/registration/start-visit-form/hooks/useDefaultFacilityLocation.tsx +15 -0
  298. package/src/components/registration/start-visit-form/hooks/useDefaultVisitLocation.tsx +24 -0
  299. package/src/components/registration/start-visit-form/hooks/useOfflineVisitType.tsx +18 -0
  300. package/src/components/registration/start-visit-form/hooks/useRecommendedVisitTypes.tsx +36 -0
  301. package/src/components/registration/start-visit-form/hooks/useVisitAttributeType.tsx +102 -0
  302. package/src/components/registration/start-visit-form/overflow-menu-extension/overflow-menu-item.extension.tsx +55 -0
  303. package/src/components/registration/start-visit-form/overflow-menu-extension/overflow-menu-item.scss +3 -0
  304. package/src/components/registration/start-visit-form/start-visit-workspace/base-visit-type.component.tsx +126 -0
  305. package/src/components/registration/start-visit-form/start-visit-workspace/base-visit-type.scss +75 -0
  306. package/src/components/registration/start-visit-form/start-visit-workspace/exported-visit-form.workspace.tsx +743 -0
  307. package/src/components/registration/start-visit-form/start-visit-workspace/location-selector.component.tsx +86 -0
  308. package/src/components/registration/start-visit-form/start-visit-workspace/recommended-visit-type.component.tsx +32 -0
  309. package/src/components/registration/start-visit-form/start-visit-workspace/visit-attribute-type.component.tsx +257 -0
  310. package/src/components/registration/start-visit-form/start-visit-workspace/visit-attribute-type.scss +5 -0
  311. package/src/components/registration/start-visit-form/start-visit-workspace/visit-date-time.component.tsx +193 -0
  312. package/src/components/registration/start-visit-form/start-visit-workspace/visit-form.resource.ts +383 -0
  313. package/src/components/registration/start-visit-form/start-visit-workspace/visit-form.scss +166 -0
  314. package/src/components/registration/start-visit-form/visit-form-workspace/visit-form.workspace.tsx +55 -0
  315. package/src/components/reports/index.ts +10 -9
  316. package/src/components/triage/dashboard.component.tsx +0 -2
  317. package/src/components/triage/index.ts +10 -9
  318. package/src/components/triage/triage.component.tsx +92 -42
  319. package/src/components/triage/triage.resource.ts +56 -50
  320. package/src/components/triage/triage.scss +6 -0
  321. package/src/config-schema.ts +91 -0
  322. package/src/hooks/useServiceQueues.tsx +95 -25
  323. package/src/index.ts +32 -13
  324. package/src/routes.json +53 -254
  325. package/src/shared/orders/OrdersTabs.tsx +8 -3
  326. package/src/shared/patient-chart/patient-chart.resources.ts +8 -12
  327. package/src/shared/patient-chart/patient-summary-dashboard/patient-summary-dashboard.component.tsx +1 -2
  328. package/src/shared/pin-put/pinput.component.test.tsx +7 -6
  329. package/src/shared/queue/queue-entry/queue-entry-table.component.tsx +99 -88
  330. package/src/shared/queue/queue-entry/queue-entry-table.scss +4 -0
  331. package/src/shared/queue/queue-summary-cards.component.tsx +32 -0
  332. package/src/shared/queue/queue-tab.component.tsx +182 -70
  333. package/src/shared/queue/queue-tab.scss +1 -0
  334. package/src/shared/queue/queue-workflow-context.tsx +90 -0
  335. package/src/shared/tabs/extension-tabs.component.tsx +9 -6
  336. package/src/shared/utils/index.ts +1 -2
  337. package/src/types/index.ts +17 -2
  338. package/translations/am.json +64 -13
  339. package/translations/en.json +59 -8
  340. package/translations/sw.json +58 -7
  341. package/dist/127.js +0 -1
  342. package/dist/200.js +0 -1
  343. package/dist/200.js.map +0 -1
  344. package/dist/24.js +0 -1
  345. package/dist/24.js.map +0 -1
  346. package/dist/267.js +0 -1
  347. package/dist/267.js.map +0 -1
  348. package/dist/285.js +0 -1
  349. package/dist/285.js.map +0 -1
  350. package/dist/329.js +0 -1
  351. package/dist/329.js.map +0 -1
  352. package/dist/40.js +0 -1
  353. package/dist/466.js +0 -1
  354. package/dist/466.js.map +0 -1
  355. package/dist/472.js +0 -66
  356. package/dist/472.js.map +0 -1
  357. package/dist/490.js +0 -1
  358. package/dist/490.js.map +0 -1
  359. package/dist/54.js +0 -1
  360. package/dist/54.js.map +0 -1
  361. package/dist/689.js +0 -1
  362. package/dist/689.js.map +0 -1
  363. package/dist/697.js +0 -1
  364. package/dist/697.js.map +0 -1
  365. package/dist/704.js +0 -1
  366. package/dist/704.js.map +0 -1
  367. package/dist/710.js +0 -1
  368. package/dist/710.js.map +0 -1
  369. package/dist/729.js +0 -17
  370. package/dist/729.js.map +0 -1
  371. package/dist/805.js +0 -37
  372. package/dist/805.js.map +0 -1
  373. package/dist/847.js +0 -1
  374. package/dist/847.js.map +0 -1
  375. package/dist/85.js +0 -1
  376. package/dist/85.js.map +0 -1
  377. package/dist/882.js +0 -1
  378. package/dist/91.js +0 -1
  379. package/dist/91.js.map +0 -1
  380. package/dist/916.js +0 -1
  381. package/dist/994.js +0 -1
  382. package/dist/994.js.map +0 -1
  383. package/dist/998.js +0 -1
  384. package/dist/998.js.map +0 -1
  385. package/jest.config.js +0 -3
  386. package/src/shared/patient-chart/patient-chart.component.tsx +0 -61
  387. package/src/shared/patient-chart/patient-chart.scss +0 -15
  388. package/src/shared/patient-chart/useInitialize.ts +0 -24
package/src/routes.json CHANGED
@@ -2,341 +2,140 @@
2
2
  "$schema": "https://json.openmrs.org/routes.schema.json",
3
3
  "backendDependencies": {
4
4
  "fhir2": ">=1.2",
5
- "webservices.rest": ">=2.24.0"
5
+ "webservices.rest": ">=2.24.0"
6
6
  },
7
7
  "pages": [
8
- {
9
- "component": "root",
10
- "route": "express-workflow"
11
- },
12
- {
13
- "component": "queuesAdminHome",
14
- "route": "queues-admin"
15
- },
16
- {
17
- "component": "appointmentsDashboard",
18
- "route": "appointments"
19
- }
8
+ { "component": "root", "route": "express-workflow" },
9
+ { "component": "queuesAdminHome", "route": "queues-admin" },
10
+ { "component": "@kenyaemr/esm-appointments-app#appointmentsDashboard", "route": "appointments" }
20
11
  ],
21
12
  "extensions": [
22
13
  {
23
14
  "component": "appointmentsDashboardLink",
24
15
  "name": "appointments-dashboard-link",
25
16
  "slot": "appointments-left-panel-slot",
26
- "meta": {
27
- "name": "appointments",
28
- "slot": "appointments-dashboard-slot",
29
- "title": "Appointments"
30
- }
17
+ "meta": { "name": "appointments", "slot": "appointments-dashboard-slot", "title": "Appointments" }
31
18
  },
32
19
  {
33
20
  "component": "admissionsLeftPanelLink",
34
21
  "name": "admissions-dashboard-link",
35
22
  "slot": "express-workflow-left-panel-slot",
36
23
  "order": 9,
37
- "meta": {
38
- "name": "admissions",
39
- "slot": "admissions-dashboard-slot",
40
- "title": "Admissions"
41
- }
42
- },
43
- {
44
- "component": "admissionsDashboard",
45
- "name": "admissions-dashboard",
46
- "slot": "admissions-dashboard-slot"
24
+ "meta": { "name": "admissions", "slot": "admissions-dashboard-slot", "title": "Admissions" }
47
25
  },
26
+ { "component": "admissionsDashboard", "name": "admissions-dashboard", "slot": "admissions-dashboard-slot" },
48
27
  {
49
28
  "component": "consultationLeftPanelLink",
50
29
  "name": "consultation-dashboard-link",
51
30
  "slot": "homepage-dashboard-slot",
52
31
  "order": 3,
53
- "meta": {
54
- "name": "consultation",
55
- "slot": "consultation-dashboard-slot",
56
- "title": "Consultation"
57
- }
58
- },
59
- {
60
- "component": "consultationDashboard",
61
- "name": "consultation-dashboard",
62
- "slot": "consultation-dashboard-slot"
32
+ "meta": { "name": "consultation", "slot": "consultation-dashboard-slot", "title": "Consultation" }
63
33
  },
34
+ { "component": "consultationDashboard", "name": "consultation-dashboard", "slot": "consultation-dashboard-slot" },
64
35
  {
65
36
  "component": "facilityLeftPanelLink",
66
37
  "name": "facility-dashboard-link",
67
38
  "slot": "homepage-dashboard-slot",
68
39
  "order": 0,
69
- "meta": {
70
- "name": "dashboard",
71
- "slot": "facility-dashboard-slot",
72
- "title": "Dashboard"
73
- }
74
- },
75
- {
76
- "component": "facilityDashboard",
77
- "name": "facility-dashboard",
78
- "slot": "facility-dashboard-slot"
40
+ "meta": { "name": "dashboard", "slot": "facility-dashboard-slot", "title": "Dashboard" }
79
41
  },
42
+ { "component": "facilityDashboard", "name": "facility-dashboard", "slot": "facility-dashboard-slot" },
80
43
  {
81
44
  "component": "mchLeftPanelLink",
82
45
  "name": "mch-dashboard-link",
83
46
  "slot": "homepage-dashboard-slot",
84
- "meta": {
85
- "name": "mch",
86
- "slot": "mch-dashboard-slot",
87
- "title": "MCH"
88
- }
89
- },
90
- {
91
- "component": "mchDashboard",
92
- "name": "mch-dashboard",
93
- "slot": "mch-dashboard-slot"
47
+ "meta": { "name": "mch", "slot": "mch-dashboard-slot", "title": "MCH" }
94
48
  },
49
+ { "component": "mchDashboard", "name": "mch-dashboard", "slot": "mch-dashboard-slot" },
95
50
  {
96
51
  "component": "registrationLeftPanelLink",
97
52
  "name": "registration-dashboard-link",
98
53
  "slot": "homepage-dashboard-slot",
99
- "meta": {
100
- "name": "registration",
101
- "slot": "registration-dashboard-slot",
102
- "title": "Registration"
103
- }
104
- },
105
- {
106
- "component": "registrationDashboard",
107
- "name": "registration-dashboard",
108
- "slot": "registration-dashboard-slot"
54
+ "meta": { "name": "registration", "slot": "registration-dashboard-slot", "title": "Registration" }
109
55
  },
56
+ { "component": "registrationDashboard", "name": "registration-dashboard", "slot": "registration-dashboard-slot" },
110
57
  {
111
58
  "component": "triageLeftPanelLink",
112
59
  "name": "triage-dashboard-link",
113
60
  "slot": "homepage-dashboard-slot",
114
- "meta": {
115
- "name": "triage",
116
- "slot": "triage-dashboard-slot",
117
- "title": "Triage"
118
- }
119
- },
120
- {
121
- "component": "triageDashboard",
122
- "name": "triage-dashboard",
123
- "slot": "triage-dashboard-slot"
124
- },
125
- {
126
- "name": "custom-visit-form-queue-fields",
127
- "component": "checkinFormExtraExtension",
128
- "slot":"visit-form-bottom-slot",
129
- "order": 0
61
+ "meta": { "name": "triage", "slot": "triage-dashboard-slot", "title": "Triage" }
130
62
  },
63
+ { "component": "triageDashboard", "name": "triage-dashboard", "slot": "triage-dashboard-slot" },
64
+ { "name": "custom-visit-form-queue-fields", "component": "checkinFormExtraExtension", "slot": "visit-form-bottom-slot", "order": 0 },
131
65
  {
132
66
  "component": "reportsDashboardLink",
133
67
  "name": "reports-homepage-dashboard-link",
134
68
  "slot": "homepage-dashboard-slot",
135
- "meta": {
136
- "name": "reports",
137
- "slot": "reports-homepage-dashboard-slot",
138
- "title": "Reports"
139
- }
140
- },
141
- {
142
- "component": "reportsDashboard",
143
- "name": "reports-dashboard",
144
- "slot": "reports-homepage-dashboard-slot"
69
+ "meta": { "name": "reports", "slot": "reports-homepage-dashboard-slot", "title": "Reports" }
145
70
  },
71
+ { "component": "reportsDashboard", "name": "reports-dashboard", "slot": "reports-homepage-dashboard-slot" },
146
72
  {
147
73
  "name": "pharmacy-homepage-dashboard-link",
148
74
  "component": "pharmacyLink",
149
75
  "slot": "homepage-dashboard-slot",
150
- "meta": {
151
- "name": "pharmacy",
152
- "title": "Pharmacy",
153
- "path": "pharmacy",
154
- "slot": "pharmacy-homepage-dashboard-slot"
155
- }
156
- },
157
- {
158
- "name": "pharmacy-homepage-dashboard",
159
- "component": "pharmacy",
160
- "slot": "pharmacy-homepage-dashboard-slot",
161
- "online": true,
162
- "offline": false
163
- },
164
- {
165
- "name": "ewf-pharmacy-orders-dashboard",
166
- "component": "pharmacyOrders",
167
- "slot": "ewf-orders-slot",
168
- "online": true,
169
- "offline": false
170
- },
171
- {
172
- "name": "patient-summary-dashboard",
173
- "component": "patientSummaryDashboard",
174
- "slot": "patient-chart-summary-dashboard-slot"
76
+ "meta": { "name": "pharmacy", "title": "Pharmacy", "path": "pharmacy", "slot": "pharmacy-homepage-dashboard-slot" }
175
77
  },
78
+ { "name": "pharmacy-homepage-dashboard", "component": "pharmacy", "slot": "pharmacy-homepage-dashboard-slot", "online": true, "offline": false },
79
+ { "name": "ewf-pharmacy-orders-dashboard", "component": "pharmacyOrders", "slot": "ewf-orders-slot", "online": true, "offline": false },
80
+ { "name": "patient-summary-dashboard", "component": "patientSummaryDashboard", "slot": "patient-chart-summary-dashboard-slot" },
176
81
  {
177
82
  "name": "ewf-clinical-encounter-link",
178
83
  "component": "clinicalEncounterLink",
179
84
  "slot": "patient-chart-dashboard-slot",
180
- "meta": {
181
- "name": "ewf-clinical-encounter",
182
- "title": "Clinical Encounter",
183
- "slot": "ewf-patient-chart-clinical-encounter-slot",
184
- "path": "clinical-encounter",
185
- "layoutMode": "anchored",
186
- "hideDashboardTitle": true
187
- }
85
+ "meta": { "name": "ewf-clinical-encounter", "title": "Clinical Encounter", "slot": "ewf-patient-chart-clinical-encounter-slot", "path": "clinical-encounter", "layoutMode": "anchored", "hideDashboardTitle": true }
188
86
  },
87
+ { "name": "ewf-clinical-encounter-dashboard", "component": "clinicalEncounter", "slot": "ewf-patient-chart-clinical-encounter-slot", "online": true, "offline": false },
189
88
  {
190
- "name": "ewf-clinical-encounter-dashboard",
191
- "component": "clinicalEncounter",
192
- "slot": "ewf-patient-chart-clinical-encounter-slot",
193
- "online": true,
194
- "offline": false
195
- },
196
- {
197
89
  "name": "ewf-laboratory-dashboard-link",
198
90
  "component": "laboratoryLeftPanelLink",
199
91
  "slot": "patient-chart-dashboard-slot",
200
- "meta": {
201
- "name": "ewf-laboratory",
202
- "title": "Lab Orders",
203
- "path": "laboratory",
204
- "slot": "ewf-patient-chart-laboratory-dashboard-slot",
205
- "layoutMode": "anchored",
206
- "hideDashboardTitle": true
207
- }
208
- },
209
- {
210
- "name": "ewf-laboratory-dashboard",
211
- "component": "laboratoryDashboard",
212
- "slot": "ewf-patient-chart-laboratory-dashboard-slot",
213
- "online": true,
214
- "offline": false
92
+ "meta": { "name": "ewf-laboratory", "title": "Lab Orders", "path": "laboratory", "slot": "ewf-patient-chart-laboratory-dashboard-slot", "layoutMode": "anchored", "hideDashboardTitle": true }
215
93
  },
94
+ { "name": "ewf-laboratory-dashboard", "component": "laboratoryDashboard", "slot": "ewf-patient-chart-laboratory-dashboard-slot", "online": true, "offline": false },
216
95
  {
217
96
  "name": "ewf-radiology-and-imaging-dashboard-link",
218
97
  "component": "radiologyAndImagingLeftPanelLink",
219
98
  "slot": "patient-chart-dashboard-slot",
220
- "meta": {
221
- "name": "ewf-radiology-and-imaging",
222
- "title": "Radiology and Imaging",
223
- "path": "radiology-and-imaging",
224
- "slot": "ewf-patient-chart-radiology-and-imaging-dashboard-slot",
225
- "layoutMode": "anchored",
226
- "hideDashboardTitle": true
227
- }
228
- },
229
- {
230
- "name": "ewf-radiology-and-imaging-dashboard",
231
- "component": "radiologyAndImagingDashboard",
232
- "slot": "ewf-patient-chart-radiology-and-imaging-dashboard-slot",
233
- "online": true,
234
- "offline": false
99
+ "meta": { "name": "ewf-radiology-and-imaging", "title": "Radiology and Imaging", "path": "radiology-and-imaging", "slot": "ewf-patient-chart-radiology-and-imaging-dashboard-slot", "layoutMode": "anchored", "hideDashboardTitle": true }
235
100
  },
101
+ { "name": "ewf-radiology-and-imaging-dashboard", "component": "radiologyAndImagingDashboard", "slot": "ewf-patient-chart-radiology-and-imaging-dashboard-slot", "online": true, "offline": false },
236
102
  {
237
103
  "name": "ewf-procedures-dashboard-link",
238
104
  "component": "proceduresLeftPanelLink",
239
105
  "slot": "patient-chart-dashboard-slot",
240
- "meta": {
241
- "name": "ewf-procedures",
242
- "title": "Procedures",
243
- "path": "procedures",
244
- "slot": "ewf-patient-chart-procedures-dashboard-slot",
245
- "layoutMode": "anchored",
246
- "hideDashboardTitle": true
247
- }
248
- },
249
- {
250
- "name": "ewf-procedures-dashboard",
251
- "component": "proceduresDashboard",
252
- "slot": "ewf-patient-chart-procedures-dashboard-slot",
253
- "online": true,
254
- "offline": false
106
+ "meta": { "name": "ewf-procedures", "title": "Procedures", "path": "procedures", "slot": "ewf-patient-chart-procedures-dashboard-slot", "layoutMode": "anchored", "hideDashboardTitle": true }
255
107
  },
108
+ { "name": "ewf-procedures-dashboard", "component": "proceduresDashboard", "slot": "ewf-patient-chart-procedures-dashboard-slot", "online": true, "offline": false },
256
109
  {
257
110
  "name": "ewf-pharmacy-dashboard-link",
258
111
  "component": "pharmacyPatientChartDashboardLink",
259
112
  "slot": "patient-chart-dashboard-slot",
260
- "meta": {
261
- "name": "ewf-pharmacy",
262
- "title": "Prescription",
263
- "path": "pharmacy",
264
- "slot": "ewf-patient-chart-pharmacy-dashboard-slot",
265
- "layoutMode": "anchored",
266
- "hideDashboardTitle": true
267
- }
268
- },
269
-
270
- {
271
- "name": "ewf-pharmacy-dashboard",
272
- "component": "pharmacyTabs",
273
- "slot": "ewf-patient-chart-pharmacy-dashboard-slot",
274
- "online": true,
275
- "offline": false
276
- },
277
- {"name": "ewf-admissions-dashboard-link",
278
- "component": "admissionsDashboardLink",
279
- "slot": "patient-chart-dashboard-slot",
280
- "meta": {
281
- "name": "ewf-admissions",
282
- "title": "In-patient",
283
- "path": "admissions",
284
- "slot": "ewf-patient-chart-admissions-dashboard-slot",
285
- "layoutMode": "anchored",
286
- "hideDashboardTitle": true
287
- }
288
- },
289
- {
290
- "name": "ewf-admissions-dashboard",
291
- "component": "admissionsDashboard",
292
- "slot": "ewf-patient-chart-admissions-dashboard-slot",
293
- "online": true,
294
- "offline": false
113
+ "meta": { "name": "ewf-pharmacy", "title": "Prescription", "path": "pharmacy", "slot": "ewf-patient-chart-pharmacy-dashboard-slot", "layoutMode": "anchored", "hideDashboardTitle": true }
295
114
  },
115
+ { "name": "ewf-pharmacy-dashboard", "component": "pharmacyTabs", "slot": "ewf-patient-chart-pharmacy-dashboard-slot", "online": true, "offline": false },
296
116
  {
297
- "name": "ewf-homepage-dashboard-link",
298
- "component": "homepageDashboardLink",
117
+ "name": "ewf-admissions-dashboard-link",
118
+ "component": "admissionsDashboardLink",
299
119
  "slot": "patient-chart-dashboard-slot",
300
- "order": 0
120
+ "meta": { "name": "ewf-admissions", "title": "In-patient", "path": "admissions", "slot": "ewf-patient-chart-admissions-dashboard-slot", "layoutMode": "anchored", "hideDashboardTitle": true }
301
121
  },
302
- {
303
- "name": "ewf-encounter-details-dashboard",
304
- "component": "encounterDetails",
305
- "slot": "ewf-clinical-encounter-slot",
306
- "online": true,
307
- "offline": false
308
- }
122
+ { "name": "ewf-admissions-dashboard", "component": "admissionsDashboard", "slot": "ewf-patient-chart-admissions-dashboard-slot", "online": true, "offline": false },
123
+ { "name": "ewf-homepage-dashboard-link", "component": "homepageDashboardLink", "slot": "patient-chart-dashboard-slot", "order": 0 },
124
+ { "name": "ewf-encounter-details-dashboard", "component": "encounterDetails", "slot": "ewf-clinical-encounter-slot", "online": true, "offline": false },
125
+ { "name": "custom-start-visit-overflow-menu-item", "slot": "patient-actions-slot", "component": "customStartVisitOverflowMenuItem", "online": true, "offline": true }
309
126
  ],
310
-
311
- "workspaces": [
312
- {
313
- "name": "express-workflow-workspace",
314
- "component": "expressWorkflowWorkspace",
315
- "title": "Express Workflow Workspace",
316
- "type": "workspace",
317
- "canMaximize": true,
318
- "canHide": true
319
- }
127
+ "workspaces2": [
128
+ { "name": "custom-start-visit-workspace-form", "component": "visitFormWorkspace", "window": "ewf-start-visit" }
320
129
  ],
321
- "modals": [
322
- {
323
- "component": "otpVerificationModal",
324
- "name": "otp-verification-modal"
325
- }, {
326
- "component": "facilityDashboardAuthorizationModal",
327
- "name": "facility-dashboard-authorization-form-modal"
328
- }
130
+ "workspaceWindows2": [
131
+ { "name": "ewf-start-visit", "group": "ewf-patient-chart", "width": "wider"
132
+ }
329
133
  ],
330
- "workspaceGroups": [
331
- {
332
- "name": "express-workflow",
333
- "members": [
334
- "add-drug-order",
335
- "order-basket",
336
- "add-lab-order",
337
- "express-workflow-workspace",
338
- "start-visit-workspace-form"
339
- ]
340
- }
134
+ "workspaceGroups2": [
135
+ { "name": "ewf-patient-chart", "scopePattern": "/patient/([^/]+)/chart" }
136
+ ],
137
+ "modals": [
138
+ { "component": "otpVerificationModal", "name": "otp-verification-modal" },
139
+ { "component": "facilityDashboardAuthorizationModal", "name": "facility-dashboard-authorization-form-modal" }
341
140
  ]
342
- }
141
+ }
@@ -13,7 +13,7 @@ type OrdersTabsProps = {
13
13
  resultsSlotName: string;
14
14
  orderTypeUuid: string;
15
15
  filter?: (o: Order) => boolean;
16
- Table: React.ComponentType<{ orders: Order[] }>;
16
+ Table: React.ComponentType<{ orders: Order[]; mutateOrders: () => void }>;
17
17
  };
18
18
 
19
19
  export const OrdersTabs: React.FC<OrdersTabsProps> = ({
@@ -27,7 +27,12 @@ export const OrdersTabs: React.FC<OrdersTabsProps> = ({
27
27
  }) => {
28
28
  const { t } = useTranslation();
29
29
  const state = useMemo(() => ({ patientUuid, patient, basePath }), [patientUuid, patient, basePath]);
30
- const { data: orders, isLoading, error } = usePatientOrders(patientUuid, 'any', orderTypeUuid, undefined, undefined);
30
+ const {
31
+ data: orders,
32
+ isLoading,
33
+ error,
34
+ mutate: mutateOrders,
35
+ } = usePatientOrders(patientUuid, 'any', orderTypeUuid, undefined, undefined);
31
36
 
32
37
  const filteredOrders = useMemo(() => (filter ? orders?.filter(filter) ?? [] : orders ?? []), [filter, orders]);
33
38
 
@@ -44,7 +49,7 @@ export const OrdersTabs: React.FC<OrdersTabsProps> = ({
44
49
  </TabList>
45
50
  <TabPanels>
46
51
  <TabPanel>
47
- <Table orders={filteredOrders} />
52
+ <Table orders={filteredOrders} mutateOrders={mutateOrders} />
48
53
  </TabPanel>
49
54
  <TabPanel>
50
55
  <ExtensionSlot state={state} name={resultsSlotName} />
@@ -3,17 +3,15 @@ import { useTranslation } from 'react-i18next';
3
3
  import {
4
4
  AssignedExtension,
5
5
  FetchResponse,
6
- type Location,
7
6
  openmrsFetch,
8
7
  restBaseUrl,
9
8
  useAssignedExtensions,
10
9
  useConfig,
11
10
  useEmrConfiguration,
12
- usePatient,
13
11
  useVisit,
14
12
  } from '@openmrs/esm-framework';
15
13
  import { ExpressWorkflowConfig } from '../../config-schema';
16
- import useSWR from 'swr';
14
+ import useSWRImmutable from 'swr/immutable';
17
15
 
18
16
  export const usePatientChartTabs = (navigationPath: string, patientUuid: string, patient?: fhir.Patient) => {
19
17
  const { t } = useTranslation();
@@ -99,11 +97,10 @@ export const usePatientChartTabs = (navigationPath: string, patientUuid: string,
99
97
  * }
100
98
  */
101
99
  export const useCurrentPatientAdmissionEncounter = (patientUuid: string) => {
100
+ // TODO: use visit context store instead of useVisit. This is happening on every mount of the patient chart dashboard. Which is not efficient.
102
101
  const { currentVisit, error: visitError, isLoading: isLoadingVisit, mutate: mutateVisit } = useVisit(patientUuid);
103
102
  const { emrConfiguration, isLoadingEmrConfiguration, errorFetchingEmrConfiguration } = useEmrConfiguration();
104
- const { inPatientVisitTypeUuid } = useConfig<{ inPatientVisitTypeUuid: string }>({
105
- externalModuleName: '@kenyaemr/esm-ward-app',
106
- });
103
+ const { inPatientVisitTypeUuid } = useConfig<ExpressWorkflowConfig>();
107
104
  // Admission or Tranfer encounter depending on wether patient was transfered or admitted directly
108
105
  const latestAdmisionEncounter = useMemo(() => {
109
106
  return currentVisit?.encounters?.find(
@@ -138,8 +135,7 @@ export const useCurrentPatientAdmissionEncounter = (patientUuid: string) => {
138
135
  * Show partography component when patient is a female patient, admitted to labour ward
139
136
  * @param patientUuid string
140
137
  */
141
- export const useShowPatography = (patientUuid: string) => {
142
- const { patient, isLoading: isLoadingPatient, error: patientError } = usePatient(patientUuid);
138
+ export const useShowPatography = (patient: fhir.Patient) => {
143
139
  const isFemale = patient?.gender?.toLowerCase() === 'female';
144
140
 
145
141
  const {
@@ -147,7 +143,7 @@ export const useShowPatography = (patientUuid: string) => {
147
143
  error: admissionError,
148
144
  isLoading: isloadingAdmission,
149
145
  isPatientAdmitted,
150
- } = useCurrentPatientAdmissionEncounter(patientUuid);
146
+ } = useCurrentPatientAdmissionEncounter(patient?.id);
151
147
  const {
152
148
  error: tagsError,
153
149
  isLoading: isloadingTags,
@@ -160,8 +156,8 @@ export const useShowPatography = (patientUuid: string) => {
160
156
  );
161
157
 
162
158
  return {
163
- isLoading: isLoadingPatient || isLoadingPatient || isloadingAdmission || isloadingTags,
164
- error: patientError ?? admissionError ?? tagsError,
159
+ isLoading: isloadingAdmission || isloadingTags,
160
+ error: admissionError ?? tagsError,
165
161
  showPartography: isFemale && isPatientAdmitted && admissionLocationIsLabourWard,
166
162
  };
167
163
  };
@@ -171,7 +167,7 @@ type Tag = { uuid: string; display: string; name: string; description: string };
171
167
  const useAdmissionLocationTags = (locationUuid?: string) => {
172
168
  const rep = 'custom:(tags:(uuid,display,name,description))';
173
169
  const url = `${restBaseUrl}/location/${locationUuid}?v=${rep}`;
174
- const { data, error, isLoading, mutate } = useSWR<FetchResponse<{ tags: Array<Tag> }>>(
170
+ const { data, error, isLoading, mutate } = useSWRImmutable<FetchResponse<{ tags: Array<Tag> }>>(
175
171
  locationUuid ? url : null,
176
172
  openmrsFetch,
177
173
  );
@@ -13,7 +13,6 @@ import {
13
13
  import { useTranslation } from 'react-i18next';
14
14
  import styles from './patient-summary-dashboard.scss';
15
15
  import ExtensionTabs, { ExtensionTabItem } from '../../tabs/extension-tabs.component';
16
- import { useSearchParams } from 'react-router-dom';
17
16
  import { useShowPatography } from '../patient-chart.resources';
18
17
 
19
18
  type PatientSummaryDashboardProps = {
@@ -24,7 +23,7 @@ type PatientSummaryDashboardProps = {
24
23
  const PatientSummaryDashboard: React.FC<PatientSummaryDashboardProps> = ({ patientUuid, patient }) => {
25
24
  const { t } = useTranslation();
26
25
  const state = useMemo(() => ({ patientUuid, patient }), [patientUuid, patient]);
27
- const { showPartography } = useShowPatography(patientUuid);
26
+ const { showPartography } = useShowPatography(patient);
28
27
  const items: Array<ExtensionTabItem> = [
29
28
  {
30
29
  label: t('patientSummary', 'Patient Summary'),
@@ -1,17 +1,18 @@
1
1
  import React from 'react';
2
2
  import { render, screen } from '@testing-library/react';
3
3
  import userEvent from '@testing-library/user-event';
4
+ import { vi } from 'vitest';
4
5
  import PinPut from './pinput.component';
5
6
 
6
7
  describe('PinPut Component', () => {
7
8
  const defaultProps = {
8
9
  value: '',
9
- onChange: jest.fn(),
10
+ onChange: vi.fn(),
10
11
  numInputs: 5,
11
12
  };
12
13
 
13
14
  beforeEach(() => {
14
- jest.clearAllMocks();
15
+ vi.clearAllMocks();
15
16
  });
16
17
 
17
18
  it('renders with default props', () => {
@@ -37,7 +38,7 @@ describe('PinPut Component', () => {
37
38
  });
38
39
 
39
40
  it('calls onChange when input value changes', async () => {
40
- const onChange = jest.fn();
41
+ const onChange = vi.fn();
41
42
  const user = userEvent.setup();
42
43
 
43
44
  render(<PinPut {...defaultProps} onChange={onChange} />);
@@ -109,7 +110,7 @@ describe('PinPut Component', () => {
109
110
  });
110
111
 
111
112
  it('calls onComplete when all inputs are filled', async () => {
112
- const onComplete = jest.fn();
113
+ const onComplete = vi.fn();
113
114
 
114
115
  // Test with a pre-filled value that matches the number of inputs
115
116
  render(<PinPut {...defaultProps} numInputs={3} onComplete={onComplete} value="123" />);
@@ -119,7 +120,7 @@ describe('PinPut Component', () => {
119
120
  });
120
121
 
121
122
  it('calls onFocus when input gains focus', async () => {
122
- const onFocus = jest.fn();
123
+ const onFocus = vi.fn();
123
124
  const user = userEvent.setup();
124
125
 
125
126
  render(<PinPut {...defaultProps} onFocus={onFocus} />);
@@ -131,7 +132,7 @@ describe('PinPut Component', () => {
131
132
  });
132
133
 
133
134
  it('calls onBlur when input loses focus', async () => {
134
- const onBlur = jest.fn();
135
+ const onBlur = vi.fn();
135
136
  const user = userEvent.setup();
136
137
 
137
138
  render(<PinPut {...defaultProps} onBlur={onBlur} />);