@kenyaemr/esm-express-workflow-app 5.4.4-pre.43 → 5.4.4-pre.430

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 (627) hide show
  1. package/.turbo/turbo-build.log +14 -7
  2. package/dist/1084.js +1 -0
  3. package/dist/1084.js.map +1 -0
  4. package/dist/1278.js +1 -0
  5. package/dist/1278.js.map +1 -0
  6. package/dist/1324.js +1 -0
  7. package/dist/1324.js.map +1 -0
  8. package/dist/1375.js +66 -0
  9. package/dist/1375.js.map +1 -0
  10. package/dist/1402.js +1 -0
  11. package/dist/1402.js.map +1 -0
  12. package/dist/1442.js +1 -0
  13. package/dist/1442.js.map +1 -0
  14. package/dist/1520.js +1 -0
  15. package/dist/1520.js.map +1 -0
  16. package/dist/1559.js +1 -0
  17. package/dist/1559.js.map +1 -0
  18. package/dist/1593.js +1 -0
  19. package/dist/1593.js.map +1 -0
  20. package/dist/162.js +1 -0
  21. package/dist/162.js.map +1 -0
  22. package/dist/1620.js +1 -0
  23. package/dist/1620.js.map +1 -0
  24. package/dist/1658.js +1 -0
  25. package/dist/1658.js.map +1 -0
  26. package/dist/1659.js +1 -0
  27. package/dist/1659.js.map +1 -0
  28. package/dist/1789.js +1 -0
  29. package/dist/1789.js.map +1 -0
  30. package/dist/1827.js +1 -0
  31. package/dist/1827.js.map +1 -0
  32. package/dist/1831.js +1 -0
  33. package/dist/1831.js.map +1 -0
  34. package/dist/1854.js +1 -0
  35. package/dist/1854.js.map +1 -0
  36. package/dist/196.js +1 -0
  37. package/dist/196.js.map +1 -0
  38. package/dist/2127.js +1 -0
  39. package/dist/2127.js.map +1 -0
  40. package/dist/2152.js +1 -0
  41. package/dist/2152.js.map +1 -0
  42. package/dist/2202.js +1 -0
  43. package/dist/2202.js.map +1 -0
  44. package/dist/221.js +1 -0
  45. package/dist/221.js.map +1 -0
  46. package/dist/2269.js +1 -0
  47. package/dist/2269.js.map +1 -0
  48. package/dist/2293.js +1 -0
  49. package/dist/2293.js.map +1 -0
  50. package/dist/234.js +1 -0
  51. package/dist/234.js.map +1 -0
  52. package/dist/2412.js +1 -1
  53. package/dist/2412.js.map +1 -1
  54. package/dist/2466.js +1 -0
  55. package/dist/2466.js.map +1 -0
  56. package/dist/2534.js +1 -1
  57. package/dist/2534.js.map +1 -1
  58. package/dist/2553.js +1 -0
  59. package/dist/2553.js.map +1 -0
  60. package/dist/2556.js +1 -0
  61. package/dist/2556.js.map +1 -0
  62. package/dist/2648.js +1 -0
  63. package/dist/2648.js.map +1 -0
  64. package/dist/274.js +1 -0
  65. package/dist/274.js.map +1 -0
  66. package/dist/2788.js +1 -0
  67. package/dist/2788.js.map +1 -0
  68. package/dist/2842.js +1 -0
  69. package/dist/2842.js.map +1 -0
  70. package/dist/2874.js +1 -0
  71. package/dist/2874.js.map +1 -0
  72. package/dist/2916.js +1 -0
  73. package/dist/2916.js.map +1 -0
  74. package/dist/2947.js +1 -1
  75. package/dist/2947.js.map +1 -1
  76. package/dist/3012.js +1 -0
  77. package/dist/3012.js.map +1 -0
  78. package/dist/3087.js +1 -0
  79. package/dist/3087.js.map +1 -0
  80. package/dist/3335.js +1 -0
  81. package/dist/3335.js.map +1 -0
  82. package/dist/3378.js +1 -0
  83. package/dist/3378.js.map +1 -0
  84. package/dist/3504.js +1 -0
  85. package/dist/3504.js.map +1 -0
  86. package/dist/3509.js +1 -1
  87. package/dist/3509.js.map +1 -1
  88. package/dist/356.js +1 -0
  89. package/dist/356.js.map +1 -0
  90. package/dist/3690.js +1 -0
  91. package/dist/3690.js.map +1 -0
  92. package/dist/371.js +1 -0
  93. package/dist/371.js.map +1 -0
  94. package/dist/3747.js +1 -0
  95. package/dist/3747.js.map +1 -0
  96. package/dist/3819.js +1 -0
  97. package/dist/3819.js.map +1 -0
  98. package/dist/3820.js +1 -0
  99. package/dist/3820.js.map +1 -0
  100. package/dist/3910.js +1 -0
  101. package/dist/3910.js.map +1 -0
  102. package/dist/393.js +6 -0
  103. package/dist/393.js.map +1 -0
  104. package/dist/3933.js +1 -0
  105. package/dist/3933.js.map +1 -0
  106. package/dist/3989.js +1 -0
  107. package/dist/3989.js.map +1 -0
  108. package/dist/3995.js +1 -0
  109. package/dist/3995.js.map +1 -0
  110. package/dist/4032.js +1 -0
  111. package/dist/4032.js.map +1 -0
  112. package/dist/4145.js +1 -1
  113. package/dist/4145.js.map +1 -1
  114. package/dist/4178.js +1 -1
  115. package/dist/4178.js.map +1 -1
  116. package/dist/4191.js +1 -0
  117. package/dist/4191.js.map +1 -0
  118. package/dist/4212.js +1 -0
  119. package/dist/4212.js.map +1 -0
  120. package/dist/4215.js +1 -0
  121. package/dist/4215.js.map +1 -0
  122. package/dist/4523.js +1 -0
  123. package/dist/4523.js.map +1 -0
  124. package/dist/4588.js +1 -0
  125. package/dist/4588.js.map +1 -0
  126. package/dist/4617.js +1 -0
  127. package/dist/4617.js.map +1 -0
  128. package/dist/466.js +1 -1
  129. package/dist/466.js.map +1 -1
  130. package/dist/4688.js +1 -0
  131. package/dist/{7288.js.map → 4688.js.map} +1 -1
  132. package/dist/470.js +1 -0
  133. package/dist/470.js.map +1 -0
  134. package/dist/4759.js +1 -0
  135. package/dist/4759.js.map +1 -0
  136. package/dist/4818.js +1 -1
  137. package/dist/4818.js.map +1 -1
  138. package/dist/5086.js +1 -1
  139. package/dist/5086.js.map +1 -1
  140. package/dist/5093.js +1 -0
  141. package/dist/5093.js.map +1 -0
  142. package/dist/5097.js +1 -0
  143. package/dist/5097.js.map +1 -0
  144. package/dist/510.js +1 -0
  145. package/dist/510.js.map +1 -0
  146. package/dist/5117.js +1 -0
  147. package/dist/5117.js.map +1 -0
  148. package/dist/5279.js +1 -0
  149. package/dist/5279.js.map +1 -0
  150. package/dist/5434.js +1 -0
  151. package/dist/5434.js.map +1 -0
  152. package/dist/5514.js +1 -0
  153. package/dist/5514.js.map +1 -0
  154. package/dist/5568.js +1 -0
  155. package/dist/5568.js.map +1 -0
  156. package/dist/5576.js +1 -1
  157. package/dist/5576.js.map +1 -1
  158. package/dist/5630.js +1 -0
  159. package/dist/5630.js.map +1 -0
  160. package/dist/5676.js +1 -1
  161. package/dist/5676.js.map +1 -1
  162. package/dist/5695.js +1 -0
  163. package/dist/5695.js.map +1 -0
  164. package/dist/5697.js +1 -1
  165. package/dist/5697.js.map +1 -1
  166. package/dist/5728.js +1 -0
  167. package/dist/5728.js.map +1 -0
  168. package/dist/5809.js +1 -1
  169. package/dist/5809.js.map +1 -1
  170. package/dist/585.js +1 -0
  171. package/dist/585.js.map +1 -0
  172. package/dist/5887.js +1 -0
  173. package/dist/5887.js.map +1 -0
  174. package/dist/5958.js +1 -0
  175. package/dist/5958.js.map +1 -0
  176. package/dist/5964.js +1 -0
  177. package/dist/5964.js.map +1 -0
  178. package/dist/6008.js +1 -0
  179. package/dist/602.js +1 -0
  180. package/dist/602.js.map +1 -0
  181. package/dist/6020.js +1 -0
  182. package/dist/6020.js.map +1 -0
  183. package/dist/6161.js +1 -0
  184. package/dist/6161.js.map +1 -0
  185. package/dist/6273.js +1 -0
  186. package/dist/6273.js.map +1 -0
  187. package/dist/6337.js +1 -0
  188. package/dist/6337.js.map +1 -0
  189. package/dist/6427.js +1 -1
  190. package/dist/6427.js.map +1 -1
  191. package/dist/6429.js +1 -0
  192. package/dist/6429.js.map +1 -0
  193. package/dist/6478.js +7 -0
  194. package/dist/6478.js.map +1 -0
  195. package/dist/6508.js +1 -0
  196. package/dist/6508.js.map +1 -0
  197. package/dist/6634.js +1 -0
  198. package/dist/6634.js.map +1 -0
  199. package/dist/6767.js +1 -0
  200. package/dist/6767.js.map +1 -0
  201. package/dist/6783.js +1 -0
  202. package/dist/6783.js.map +1 -0
  203. package/dist/6868.js +1 -1
  204. package/dist/6868.js.map +1 -1
  205. package/dist/688.js +1 -0
  206. package/dist/688.js.map +1 -0
  207. package/dist/689.js +1 -1
  208. package/dist/689.js.map +1 -1
  209. package/dist/694.js +1 -0
  210. package/dist/694.js.map +1 -0
  211. package/dist/6987.js +1 -0
  212. package/dist/6987.js.map +1 -0
  213. package/dist/7061.js +1 -0
  214. package/dist/7061.js.map +1 -0
  215. package/dist/7078.js +1 -0
  216. package/dist/7078.js.map +1 -0
  217. package/dist/710.js +1 -0
  218. package/dist/710.js.map +1 -0
  219. package/dist/7128.js +1 -0
  220. package/dist/7128.js.map +1 -0
  221. package/dist/7209.js +1 -0
  222. package/dist/7209.js.map +1 -0
  223. package/dist/7424.js +1 -0
  224. package/dist/7424.js.map +1 -0
  225. package/dist/770.js +1 -0
  226. package/dist/770.js.map +1 -0
  227. package/dist/7707.js +1 -0
  228. package/dist/7707.js.map +1 -0
  229. package/dist/7784.js +1 -0
  230. package/dist/7784.js.map +1 -0
  231. package/dist/781.js +1 -1
  232. package/dist/781.js.map +1 -1
  233. package/dist/7824.js +1 -0
  234. package/dist/7824.js.map +1 -0
  235. package/dist/7832.js +1 -0
  236. package/dist/7832.js.map +1 -0
  237. package/dist/8178.js +1 -0
  238. package/dist/8178.js.map +1 -0
  239. package/dist/820.js +1 -0
  240. package/dist/820.js.map +1 -0
  241. package/dist/8224.js +1 -0
  242. package/dist/8224.js.map +1 -0
  243. package/dist/8225.js +1 -0
  244. package/dist/8225.js.map +1 -0
  245. package/dist/8240.js +1 -1
  246. package/dist/8240.js.map +1 -1
  247. package/dist/8258.js +1 -0
  248. package/dist/8258.js.map +1 -0
  249. package/dist/8702.js +1 -0
  250. package/dist/8702.js.map +1 -0
  251. package/dist/8725.js +1 -0
  252. package/dist/8725.js.map +1 -0
  253. package/dist/8762.js +1 -0
  254. package/dist/8762.js.map +1 -0
  255. package/dist/8763.js +1 -0
  256. package/dist/8763.js.map +1 -0
  257. package/dist/8815.js +1 -0
  258. package/dist/8815.js.map +1 -0
  259. package/dist/8882.js +1 -0
  260. package/dist/8882.js.map +1 -0
  261. package/dist/8924.js +1 -1
  262. package/dist/8924.js.map +1 -1
  263. package/dist/8937.js +1 -0
  264. package/dist/8937.js.map +1 -0
  265. package/dist/9.js +1 -1
  266. package/dist/9.js.map +1 -1
  267. package/dist/9061.js +1 -0
  268. package/dist/9061.js.map +1 -0
  269. package/dist/9087.js +1 -0
  270. package/dist/9087.js.map +1 -0
  271. package/dist/9301.js +1 -0
  272. package/dist/9301.js.map +1 -0
  273. package/dist/9324.js +1 -0
  274. package/dist/9324.js.map +1 -0
  275. package/dist/9497.js +1 -0
  276. package/dist/9497.js.map +1 -0
  277. package/dist/9520.js +1 -1
  278. package/dist/9520.js.map +1 -1
  279. package/dist/9526.js +1 -0
  280. package/dist/9526.js.map +1 -0
  281. package/dist/9621.js +1 -0
  282. package/dist/9621.js.map +1 -0
  283. package/dist/9676.js +17 -0
  284. package/dist/9676.js.map +1 -0
  285. package/dist/977.js +1 -0
  286. package/dist/977.js.map +1 -0
  287. package/dist/9771.js +1 -0
  288. package/dist/9771.js.map +1 -0
  289. package/dist/9806.js +1 -0
  290. package/dist/9806.js.map +1 -0
  291. package/dist/989.js +1 -0
  292. package/dist/989.js.map +1 -0
  293. package/dist/kenyaemr-esm-express-workflow-app.js +6 -5
  294. package/dist/kenyaemr-esm-express-workflow-app.js.buildmanifest.json +1407 -809
  295. package/dist/kenyaemr-esm-express-workflow-app.js.map +1 -1
  296. package/dist/main.js +22 -5
  297. package/dist/main.js.map +1 -1
  298. package/dist/routes.json +1 -1
  299. package/package.json +4 -6
  300. package/src/components/admissions/admissions-dashboard.component.tsx +2 -2
  301. package/src/components/anaesthetic/anaesthetic-dashboard.meta.ts +8 -0
  302. package/src/components/anaesthetic/anaesthetic-data-form.component.tsx +442 -0
  303. package/src/components/anaesthetic/anaesthetic-data-form.scss +278 -0
  304. package/src/components/anaesthetic/anaesthetic-link.component.tsx +21 -0
  305. package/src/components/anaesthetic/anaesthetic.component.tsx +618 -0
  306. package/src/components/anaesthetic/anaesthetic.resource.ts +1503 -0
  307. package/src/components/anaesthetic/anaesthetic.scss +1885 -0
  308. package/src/components/anaesthetic/forms/anaesthetic-form.component.tsx +304 -0
  309. package/src/components/anaesthetic/forms/anaesthetic-record-form.component.tsx +707 -0
  310. package/src/components/anaesthetic/forms/icd11-diagnosis-search.component.tsx +178 -0
  311. package/src/components/anaesthetic/forms/icd11-diagnosis-search.scss +126 -0
  312. package/src/components/anaesthetic/forms/index.ts +2 -0
  313. package/src/components/anaesthetic/forms/interoperative-record-drug-given-form.component.tsx +231 -0
  314. package/src/components/anaesthetic/forms/post-operative-summary-form.component.tsx +171 -0
  315. package/src/components/anaesthetic/forms/time-picker-dropdown.component.tsx +202 -0
  316. package/src/components/anaesthetic/forms/time-picker-dropdown.scss +107 -0
  317. package/src/components/anaesthetic/forms/time-picker-with-clock.component.tsx +174 -0
  318. package/src/components/anaesthetic/forms/time-picker-with-clock.scss +178 -0
  319. package/src/components/anaesthetic/forms/useAnaestheticData.ts +16 -0
  320. package/src/components/anaesthetic/graphs/anaesthetic-graph-wrapper.component.tsx +266 -0
  321. package/src/components/anaesthetic/graphs/anaesthetic-graph.component.tsx +185 -0
  322. package/src/components/anaesthetic/graphs/index.ts +2 -0
  323. package/src/components/anaesthetic/graphs/interoperative-record-drug-given-graph-wrapper.component.tsx +197 -0
  324. package/src/components/anaesthetic/graphs/interoperative-record-drug-given-graph.component.tsx +93 -0
  325. package/src/components/anaesthetic/resources/anaesthetic-amniotic-fluid.resource.ts +277 -0
  326. package/src/components/anaesthetic/resources/anaesthetic-form.resource.ts +716 -0
  327. package/src/components/anaesthetic/resources/anaesthetic.resource.ts +378 -0
  328. package/src/components/anaesthetic/types/index.ts +1349 -0
  329. package/src/components/consultation/clinical-encounter/clinical-encounter.component.tsx +4 -20
  330. package/src/components/consultation/clinical-encounter/encounter-details.component.tsx +9 -9
  331. package/src/components/consultation/clinical-encounter/encounter-details.test.tsx +19 -18
  332. package/src/components/consultation/consultation.utils.tsx +1 -1
  333. package/src/components/consultation/dashboard.component.tsx +0 -2
  334. package/src/components/consultation/index.ts +1 -1
  335. package/src/components/consultation/tabs/index.ts +67 -0
  336. package/src/components/facility-dashboard/components/header/home-header.component.tsx +8 -13
  337. package/src/components/laboratory/index.ts +11 -0
  338. package/src/components/laboratory/lab-table.component.tsx +46 -12
  339. package/src/components/laboratory/laboratory-tabs.component.tsx +3 -17
  340. package/src/components/mch/dashboard.component.tsx +0 -2
  341. package/src/components/mch/mch.component.tsx +1 -3
  342. package/src/components/pharmacy/index.ts +1 -1
  343. package/src/components/pharmacy/orders/pharmacy-orders.component.tsx +44 -6
  344. package/src/components/pharmacy/orders/pharmacy-orders.test.tsx +8 -7
  345. package/src/components/pharmacy/pharmacy-tabs.component.tsx +4 -20
  346. package/src/components/pharmacy/tabs/index.ts +21 -0
  347. package/src/components/preauth/index.ts +22 -0
  348. package/src/components/preauth/preauth-dashboard.component.tsx +20 -0
  349. package/src/components/procedures/index.ts +16 -0
  350. package/src/components/procedures/procedure-queues/index.ts +13 -0
  351. package/src/components/procedures/procedure-queues/procedure-form-extras.component.tsx +33 -0
  352. package/src/components/procedures/procedure-queues/procedure-form-extras.scss +5 -0
  353. package/src/components/procedures/procedure-queues/procedure-queues.component.tsx +35 -0
  354. package/src/components/procedures/procedure-queues/procedure-queues.resources.ts +37 -0
  355. package/src/components/procedures/procedure-queues/procedure-room-tabs.component.tsx +80 -0
  356. package/src/components/procedures/procedure-queues/procedure-rooms.scss +13 -0
  357. package/src/components/procedures/procedure-queues/queue-procedure-tabs.component.tsx +34 -0
  358. package/src/components/procedures/procedure-queues/summary-cards.component.tsx +81 -0
  359. package/src/components/procedures/procedure-queues/summary-cards.scss +35 -0
  360. package/src/components/procedures/procedures-table.component.tsx +77 -19
  361. package/src/components/procedures/procedures-tabs.component.test.tsx +57 -0
  362. package/src/components/procedures/procedures-tabs.component.tsx +3 -18
  363. package/src/components/radiology-and-imaging/index.ts +11 -0
  364. package/src/components/radiology-and-imaging/radiology-and-imaging-table.component.tsx +73 -21
  365. package/src/components/radiology-and-imaging/radiology-and-imaging.component.tsx +3 -19
  366. package/src/components/registration/card/HIE-card/hie-card.component.tsx +32 -44
  367. package/src/components/registration/card/Local-card/local-card.component.tsx +22 -24
  368. package/src/components/registration/checkin-form-extra/checkin-form-extra.extension.tsx +8 -2
  369. package/src/components/registration/checkin-form-extra/queue-fields.component.tsx +18 -19
  370. package/src/components/registration/dependants/dependants.component.tsx +37 -60
  371. package/src/components/registration/dependants/dependants.resource.ts +75 -46
  372. package/src/components/registration/end-visit-modal/end-visit-dialog.modal.tsx +320 -0
  373. package/src/components/registration/end-visit-modal/end-visit-dialog.scss +12 -0
  374. package/src/components/registration/end-visit-modal/end-visit.resource.tsx +59 -0
  375. package/src/components/registration/end-visit-modal/sha-end-visit.resource.ts +285 -0
  376. package/src/components/registration/search-bar/search-bar.resource.ts +32 -93
  377. package/src/components/registration/start-visit-form/hooks/useDefaultFacilityLocation.tsx +15 -0
  378. package/src/components/registration/start-visit-form/hooks/useDefaultVisitLocation.tsx +24 -0
  379. package/src/components/registration/start-visit-form/hooks/useOfflineVisitType.tsx +18 -0
  380. package/src/components/registration/start-visit-form/hooks/useRecommendedVisitTypes.tsx +36 -0
  381. package/src/components/registration/start-visit-form/hooks/useVisitAttributeType.tsx +102 -0
  382. package/src/components/registration/start-visit-form/overflow-menu-extension/custom-end-active-visit.extension.tsx +44 -0
  383. package/src/components/registration/start-visit-form/overflow-menu-extension/overflow-menu-item.extension.tsx +67 -0
  384. package/src/components/registration/start-visit-form/overflow-menu-extension/overflow-menu-item.scss +3 -0
  385. package/src/components/registration/start-visit-form/start-visit-workspace/base-visit-type.component.tsx +126 -0
  386. package/src/components/registration/start-visit-form/start-visit-workspace/base-visit-type.scss +75 -0
  387. package/src/components/registration/start-visit-form/start-visit-workspace/exported-visit-form.workspace.tsx +778 -0
  388. package/src/components/registration/start-visit-form/start-visit-workspace/location-selector.component.tsx +86 -0
  389. package/src/components/registration/start-visit-form/start-visit-workspace/recommended-visit-type.component.tsx +32 -0
  390. package/src/components/registration/start-visit-form/start-visit-workspace/visit-attribute-type.component.tsx +257 -0
  391. package/src/components/registration/start-visit-form/start-visit-workspace/visit-attribute-type.scss +5 -0
  392. package/src/components/registration/start-visit-form/start-visit-workspace/visit-date-time.component.tsx +193 -0
  393. package/src/components/registration/start-visit-form/start-visit-workspace/visit-form.resource.ts +390 -0
  394. package/src/components/registration/start-visit-form/start-visit-workspace/visit-form.scss +144 -0
  395. package/src/components/registration/start-visit-form/visit-form-workspace/visit-form.workspace.tsx +48 -0
  396. package/src/components/registration/type/index.ts +101 -0
  397. package/src/components/reports/index.ts +1 -0
  398. package/src/components/triage/dashboard.component.tsx +0 -2
  399. package/src/config-schema.ts +476 -0
  400. package/src/hooks/useOrders.tsx +2 -2
  401. package/src/hooks/useServiceQueues.tsx +1 -1
  402. package/src/index.ts +81 -15
  403. package/src/routes.json +298 -32
  404. package/src/shared/dashboard-link/dashboard-link.component.tsx +11 -8
  405. package/src/shared/orders/OrderTable.scss +7 -0
  406. package/src/shared/orders/OrderTable.tsx +68 -8
  407. package/src/shared/orders/print-order/print-order.component.tsx +158 -0
  408. package/src/shared/orders/print-order/print-order.scss +225 -0
  409. package/src/shared/orders/print-prescription/print-prescription.component.tsx +65 -0
  410. package/src/shared/orders/print-prescription/print-prescription.resource.ts +45 -0
  411. package/src/shared/orders/print-prescription/print-prescription.scss +25 -0
  412. package/src/shared/otp-verification/index.ts +112 -29
  413. package/src/shared/otp-verification/otp-verification.modal.tsx +1110 -122
  414. package/src/shared/otp-verification/otp-verification.scss +374 -0
  415. package/src/shared/patient-chart/patient-summary-dashboard/patient-summary-dashboard.component.tsx +5 -84
  416. package/src/shared/pin-put/pinput.component.test.tsx +7 -6
  417. package/src/shared/tabs/create-tab-extension.tsx +33 -0
  418. package/src/shared/tabs/extension-tabs.component.tsx +51 -33
  419. package/src/shared/utils/index.ts +140 -5
  420. package/src/types/index.ts +12 -0
  421. package/translations/am.json +443 -131
  422. package/translations/en.json +327 -15
  423. package/translations/fr.json +372 -63
  424. package/translations/sw.json +347 -35
  425. package/tsconfig.json +1 -0
  426. package/dist/1049.js +0 -1
  427. package/dist/1049.js.map +0 -1
  428. package/dist/1072.js +0 -1
  429. package/dist/1072.js.map +0 -1
  430. package/dist/1091.js +0 -1
  431. package/dist/1091.js.map +0 -1
  432. package/dist/1172.js +0 -1
  433. package/dist/1172.js.map +0 -1
  434. package/dist/132.js +0 -1
  435. package/dist/132.js.map +0 -1
  436. package/dist/1354.js +0 -1
  437. package/dist/1354.js.map +0 -1
  438. package/dist/1704.js +0 -1
  439. package/dist/1704.js.map +0 -1
  440. package/dist/1729.js +0 -17
  441. package/dist/1729.js.map +0 -1
  442. package/dist/1757.js +0 -1
  443. package/dist/1757.js.map +0 -1
  444. package/dist/1761.js +0 -1
  445. package/dist/1761.js.map +0 -1
  446. package/dist/1809.js +0 -7
  447. package/dist/1809.js.map +0 -1
  448. package/dist/1842.js +0 -1
  449. package/dist/1874.js +0 -1
  450. package/dist/1874.js.map +0 -1
  451. package/dist/1962.js +0 -1
  452. package/dist/1962.js.map +0 -1
  453. package/dist/2007.js +0 -1
  454. package/dist/2007.js.map +0 -1
  455. package/dist/2024.js +0 -1
  456. package/dist/2024.js.map +0 -1
  457. package/dist/2045.js +0 -1
  458. package/dist/2045.js.map +0 -1
  459. package/dist/2163.js +0 -1
  460. package/dist/2163.js.map +0 -1
  461. package/dist/2191.js +0 -1
  462. package/dist/2191.js.map +0 -1
  463. package/dist/2267.js +0 -1
  464. package/dist/2267.js.map +0 -1
  465. package/dist/231.js +0 -1
  466. package/dist/231.js.map +0 -1
  467. package/dist/236.js +0 -1
  468. package/dist/236.js.map +0 -1
  469. package/dist/2367.js +0 -1
  470. package/dist/2367.js.map +0 -1
  471. package/dist/2463.js +0 -1
  472. package/dist/2463.js.map +0 -1
  473. package/dist/2561.js +0 -1
  474. package/dist/2561.js.map +0 -1
  475. package/dist/2810.js +0 -2
  476. package/dist/2810.js.map +0 -1
  477. package/dist/2867.js +0 -1
  478. package/dist/2867.js.map +0 -1
  479. package/dist/2909.js +0 -1
  480. package/dist/2909.js.map +0 -1
  481. package/dist/2949.js +0 -1
  482. package/dist/2949.js.map +0 -1
  483. package/dist/3040.js +0 -1
  484. package/dist/3119.js +0 -1
  485. package/dist/3119.js.map +0 -1
  486. package/dist/3215.js +0 -1
  487. package/dist/3215.js.map +0 -1
  488. package/dist/322.js +0 -1
  489. package/dist/322.js.map +0 -1
  490. package/dist/3228.js +0 -1
  491. package/dist/3228.js.map +0 -1
  492. package/dist/330.js +0 -1
  493. package/dist/330.js.map +0 -1
  494. package/dist/3472.js +0 -1
  495. package/dist/3472.js.map +0 -1
  496. package/dist/351.js +0 -1
  497. package/dist/351.js.map +0 -1
  498. package/dist/3576.js +0 -1
  499. package/dist/3576.js.map +0 -1
  500. package/dist/397.js +0 -1
  501. package/dist/397.js.map +0 -1
  502. package/dist/4007.js +0 -66
  503. package/dist/4007.js.map +0 -1
  504. package/dist/4200.js +0 -1
  505. package/dist/4200.js.map +0 -1
  506. package/dist/4224.js +0 -1
  507. package/dist/4224.js.map +0 -1
  508. package/dist/43.js +0 -1
  509. package/dist/43.js.map +0 -1
  510. package/dist/4308.js +0 -1
  511. package/dist/4308.js.map +0 -1
  512. package/dist/4399.js +0 -1
  513. package/dist/4399.js.map +0 -1
  514. package/dist/4505.js +0 -1
  515. package/dist/4505.js.map +0 -1
  516. package/dist/4724.js +0 -1
  517. package/dist/4724.js.map +0 -1
  518. package/dist/498.js +0 -1
  519. package/dist/498.js.map +0 -1
  520. package/dist/509.js +0 -1
  521. package/dist/509.js.map +0 -1
  522. package/dist/5096.js +0 -1
  523. package/dist/5096.js.map +0 -1
  524. package/dist/5159.js +0 -13
  525. package/dist/5159.js.map +0 -1
  526. package/dist/5184.js +0 -1
  527. package/dist/5184.js.map +0 -1
  528. package/dist/5270.js +0 -1
  529. package/dist/5270.js.map +0 -1
  530. package/dist/5361.js +0 -1
  531. package/dist/5361.js.map +0 -1
  532. package/dist/5537.js +0 -1
  533. package/dist/5537.js.map +0 -1
  534. package/dist/566.js +0 -1
  535. package/dist/566.js.map +0 -1
  536. package/dist/5733.js +0 -1
  537. package/dist/5733.js.map +0 -1
  538. package/dist/5854.js +0 -1
  539. package/dist/5854.js.map +0 -1
  540. package/dist/5882.js +0 -1
  541. package/dist/6004.js +0 -1
  542. package/dist/6004.js.map +0 -1
  543. package/dist/6121.js +0 -3
  544. package/dist/6121.js.map +0 -1
  545. package/dist/6137.js +0 -1
  546. package/dist/6137.js.map +0 -1
  547. package/dist/6356.js +0 -1
  548. package/dist/6356.js.map +0 -1
  549. package/dist/6571.js +0 -1
  550. package/dist/6571.js.map +0 -1
  551. package/dist/6721.js +0 -1
  552. package/dist/6721.js.map +0 -1
  553. package/dist/6858.js +0 -1
  554. package/dist/6858.js.map +0 -1
  555. package/dist/6925.js +0 -1
  556. package/dist/6925.js.map +0 -1
  557. package/dist/6960.js +0 -1
  558. package/dist/6960.js.map +0 -1
  559. package/dist/7085.js +0 -1
  560. package/dist/7085.js.map +0 -1
  561. package/dist/7127.js +0 -1
  562. package/dist/7176.js +0 -1
  563. package/dist/7176.js.map +0 -1
  564. package/dist/7237.js +0 -1
  565. package/dist/7237.js.map +0 -1
  566. package/dist/725.js +0 -1
  567. package/dist/725.js.map +0 -1
  568. package/dist/7288.js +0 -1
  569. package/dist/7329.js +0 -1
  570. package/dist/7329.js.map +0 -1
  571. package/dist/7334.js +0 -1
  572. package/dist/7334.js.map +0 -1
  573. package/dist/7461.js +0 -1
  574. package/dist/7461.js.map +0 -1
  575. package/dist/7517.js +0 -1
  576. package/dist/7517.js.map +0 -1
  577. package/dist/7837.js +0 -1
  578. package/dist/7837.js.map +0 -1
  579. package/dist/8103.js +0 -1
  580. package/dist/8103.js.map +0 -1
  581. package/dist/8110.js +0 -1
  582. package/dist/8110.js.map +0 -1
  583. package/dist/8179.js +0 -6
  584. package/dist/8179.js.map +0 -1
  585. package/dist/8189.js +0 -1
  586. package/dist/8189.js.map +0 -1
  587. package/dist/8209.js +0 -1
  588. package/dist/8209.js.map +0 -1
  589. package/dist/8249.js +0 -1
  590. package/dist/8249.js.map +0 -1
  591. package/dist/8285.js +0 -1
  592. package/dist/8285.js.map +0 -1
  593. package/dist/8470.js +0 -1
  594. package/dist/8470.js.map +0 -1
  595. package/dist/8502.js +0 -1
  596. package/dist/8502.js.map +0 -1
  597. package/dist/866.js +0 -1
  598. package/dist/866.js.map +0 -1
  599. package/dist/8889.js +0 -11
  600. package/dist/8889.js.map +0 -1
  601. package/dist/8990.js +0 -1
  602. package/dist/8990.js.map +0 -1
  603. package/dist/8994.js +0 -1
  604. package/dist/8994.js.map +0 -1
  605. package/dist/9049.js +0 -1
  606. package/dist/9049.js.map +0 -1
  607. package/dist/9054.js +0 -1
  608. package/dist/9054.js.map +0 -1
  609. package/dist/916.js +0 -1
  610. package/dist/9231.js +0 -1
  611. package/dist/9231.js.map +0 -1
  612. package/dist/9408.js +0 -1
  613. package/dist/9408.js.map +0 -1
  614. package/dist/9425.js +0 -1
  615. package/dist/9466.js +0 -1
  616. package/dist/9466.js.map +0 -1
  617. package/dist/9919.js +0 -1
  618. package/dist/9919.js.map +0 -1
  619. package/dist/9931.js +0 -1
  620. package/dist/9931.js.map +0 -1
  621. package/jest.config.js +0 -3
  622. package/src/shared/orders/OrdersTabs.tsx +0 -58
  623. package/src/shared/patient-chart/patient-chart.component.tsx +0 -61
  624. package/src/shared/patient-chart/patient-chart.resources.ts +0 -180
  625. package/src/shared/patient-chart/patient-chart.scss +0 -15
  626. package/src/shared/patient-chart/useInitialize.ts +0 -24
  627. /package/src/shared/{patient-chart/patient-summary-dashboard → tabs}/patient-summary-dashboard.scss +0 -0
@@ -0,0 +1,57 @@
1
+ import { render, screen } from '@testing-library/react';
2
+ import { beforeEach, describe, expect, it, vi, type MockedFunction } from 'vitest';
3
+ import '@testing-library/jest-dom';
4
+ import { usePatientOrders } from '../../hooks/useOrders';
5
+ import ProceduresTabs from './procedures-tabs.component';
6
+ import type { fhir } from '@openmrs/esm-framework';
7
+
8
+ vi.mock('@openmrs/esm-framework', () => ({
9
+ useConfig: vi.fn(() => ({
10
+ proceduresConceptClassUuid: 'procedures-concept-class-uuid',
11
+ imagingOrderTypeUuid: 'imaging-order-type-uuid',
12
+ })),
13
+ ExtensionSlot: () => <div data-testid="extension-slot" />,
14
+ }));
15
+
16
+ vi.mock('../../hooks/useOrders', () => ({
17
+ usePatientOrders: vi.fn(),
18
+ }));
19
+
20
+ vi.mock('./procedures-table.component', () => ({
21
+ default: () => <div data-testid="procedures-orders-table">Procedures Orders Table</div>,
22
+ }));
23
+
24
+ vi.mock('../anaesthetic/anaesthetic.component', () => ({
25
+ default: () => <div data-testid="anaesthetic-tab-content">Anaesthetic Content</div>,
26
+ }));
27
+
28
+ const mockUsePatientOrders = usePatientOrders as MockedFunction<typeof usePatientOrders>;
29
+
30
+ describe('ProceduresTabs', () => {
31
+ const mockPatient: fhir.Patient = {
32
+ resourceType: 'Patient',
33
+ id: 'test-patient-uuid',
34
+ name: [{ given: ['John'], family: 'Doe' }],
35
+ };
36
+
37
+ beforeEach(() => {
38
+ vi.clearAllMocks();
39
+ mockUsePatientOrders.mockReturnValue({
40
+ data: [],
41
+ isLoading: false,
42
+ error: undefined,
43
+ mutate: vi.fn(),
44
+ isValidating: false,
45
+ });
46
+ });
47
+
48
+ it('renders Orders, Results and Anaesthetic tabs', () => {
49
+ render(<ProceduresTabs patientUuid="test-patient-uuid" patient={mockPatient} />);
50
+
51
+ const tabs = screen.getAllByRole('tab');
52
+ expect(tabs).toHaveLength(3);
53
+ expect(screen.getByRole('tab', { name: 'Orders' })).toBeInTheDocument();
54
+ expect(screen.getByRole('tab', { name: 'Results' })).toBeInTheDocument();
55
+ expect(screen.getByRole('tab', { name: 'Anaesthetic' })).toBeInTheDocument();
56
+ });
57
+ });
@@ -1,28 +1,13 @@
1
1
  import React from 'react';
2
- import { useConfig } from '@openmrs/esm-framework';
3
2
 
4
- import OrdersTabs from '../../shared/orders/OrdersTabs';
5
- import LabTable from './procedures-table.component';
6
- import { ExpressWorkflowConfig } from '../../config-schema';
3
+ import ExtensionTabs from '../../shared/tabs/extension-tabs.component';
7
4
 
8
5
  type ProceduresTabsProps = {
9
6
  patientUuid: string;
10
- patient: fhir.Patient;
11
7
  };
12
8
 
13
- const ProceduresTabs: React.FC<ProceduresTabsProps> = ({ patientUuid, patient }) => {
14
- const { proceduresConceptClassUuid, imagingOrderTypeUuid } = useConfig<ExpressWorkflowConfig>();
15
- return (
16
- <OrdersTabs
17
- patientUuid={patientUuid}
18
- patient={patient}
19
- basePath="procedures"
20
- resultsSlotName="ewf-procedures-results-slot"
21
- orderTypeUuid={imagingOrderTypeUuid}
22
- filter={(order) => order.concept?.conceptClass?.uuid === proceduresConceptClassUuid}
23
- Table={({ orders }) => <LabTable orders={orders} />}
24
- />
25
- );
9
+ const ProceduresTabs: React.FC<ProceduresTabsProps> = ({ patientUuid }) => {
10
+ return <ExtensionTabs extensionSlotName="patient-procedure-tabs-slot" patientUuid={patientUuid} />;
26
11
  };
27
12
 
28
13
  export default ProceduresTabs;
@@ -23,3 +23,14 @@ export const radiologyAndImagingLeftPanelLink = getAsyncLifecycle(
23
23
  })),
24
24
  options,
25
25
  );
26
+
27
+ // t("results", "Results")
28
+ export const patientImagingOrdersResults = getAsyncLifecycle(
29
+ () => import('../../shared/tabs/create-tab-extension').then((mod) => ({ default: mod.createTabExtension() })),
30
+ options,
31
+ );
32
+ // t("order", "Orders")
33
+ export const patientImagingOrdersTab = getAsyncLifecycle(
34
+ () => import('../../components/radiology-and-imaging/radiology-and-imaging-table.component'),
35
+ options,
36
+ );
@@ -1,35 +1,78 @@
1
- import React from 'react';
2
- import { parseDate, formatDatetime, useConfig } from '@openmrs/esm-framework';
3
- import { CardHeader, EmptyState, useLaunchWorkspaceRequiringVisit } from '@openmrs/esm-patient-common-lib';
4
- import { Add } from '@carbon/react/icons';
5
- import { Layer } from '@carbon/react';
1
+ import React, { useMemo } from 'react';
6
2
  import { useTranslation } from 'react-i18next';
3
+ import { DataTableSkeleton, Layer } from '@carbon/react';
4
+ import { ErrorState, FHIRResource, useConfig } from '@openmrs/esm-framework';
5
+ import { EmptyState, useLaunchWorkspaceRequiringVisit, usePatientChartStore } from '@openmrs/esm-patient-common-lib';
7
6
  import OrderTable from '../../shared/orders/OrderTable';
8
-
9
- import { type Order } from '../../types/order/order';
10
7
  import { type ExpressWorkflowConfig } from '../../config-schema';
8
+ import { usePatientOrders } from '../../hooks/useOrders';
11
9
  import styles from './radiology-and-imaging.scss';
10
+ import { getPatientPrintFields } from '../../shared/utils';
12
11
 
13
12
  type RadiologyAndImagingTableProps = {
14
- orders: Order[];
13
+ patientUuid: string;
14
+ patient: fhir.Patient;
15
15
  };
16
- const RadiologyAndImagingTable: React.FC<RadiologyAndImagingTableProps> = ({ orders }) => {
16
+
17
+ const RadiologyAndImagingTable: React.FC<RadiologyAndImagingTableProps> = ({ patientUuid, patient }) => {
17
18
  const { t } = useTranslation();
18
- const { imagingOrderTypeUuid, imagingOrderableConceptSets } = useConfig<ExpressWorkflowConfig>();
19
+ const { imagingOrderTypeUuid, imagingOrderableConceptSets, imagingConceptClassUuid } =
20
+ useConfig<ExpressWorkflowConfig>();
21
+ const {
22
+ data: orders,
23
+ isLoading,
24
+ error,
25
+ mutate: mutateOrders,
26
+ } = usePatientOrders(patientUuid, 'any', imagingOrderTypeUuid, undefined, undefined);
27
+
28
+ const filteredOrders = useMemo(
29
+ () => orders?.filter((order) => order.concept?.conceptClass?.uuid === imagingConceptClassUuid),
30
+ [imagingConceptClassUuid, orders],
31
+ );
32
+
33
+ const { mutateVisitContext, visitContext } = usePatientChartStore(patientUuid);
34
+
35
+ const windowProps = useMemo(() => ({ encounterUuid: filteredOrders?.[0]?.encounter?.uuid }), [filteredOrders]);
36
+ const groupProps = useMemo(
37
+ () => ({
38
+ patient,
39
+ patientUuid,
40
+ visitContext: visitContext,
41
+ mutateVisitContext: () => {
42
+ mutateOrders();
43
+ mutateVisitContext();
44
+ },
45
+ }),
46
+ [patient, patientUuid, visitContext, mutateOrders, mutateVisitContext],
47
+ );
48
+
49
+ const launchAddLabOrder = useLaunchWorkspaceRequiringVisit(patientUuid, 'order-basket');
50
+
51
+ const { patientName, patientId, patientAge } = getPatientPrintFields(patient);
19
52
 
20
- const launchAddLabOrder = useLaunchWorkspaceRequiringVisit('add-imaging-order');
53
+ if (isLoading) {
54
+ return <DataTableSkeleton />;
55
+ }
56
+
57
+ if (error) {
58
+ return <ErrorState headerTitle={t('radiologyAndImagingOrders', 'Radiology & Imaging Orders')} error={error} />;
59
+ }
21
60
 
22
- if (orders?.length === 0) {
61
+ if (filteredOrders?.length === 0) {
23
62
  return (
24
63
  <Layer>
25
64
  <EmptyState
26
65
  displayText={t('orders', 'Orders')}
27
66
  headerTitle={t('radiologyAndImagingOrders', 'Radiology and Imaging Orders')}
28
67
  launchForm={() =>
29
- launchAddLabOrder({
30
- orderTypeUuid: imagingOrderTypeUuid,
31
- orderableConceptSets: imagingOrderableConceptSets,
32
- })
68
+ launchAddLabOrder(
69
+ {
70
+ orderTypeUuid: imagingOrderTypeUuid,
71
+ orderableConceptSets: imagingOrderableConceptSets,
72
+ },
73
+ windowProps,
74
+ groupProps,
75
+ )
33
76
  }
34
77
  />
35
78
  </Layer>
@@ -39,17 +82,26 @@ const RadiologyAndImagingTable: React.FC<RadiologyAndImagingTableProps> = ({ ord
39
82
  return (
40
83
  <OrderTable
41
84
  title={t('radiologyAndImagingOrders', 'Radiology & Imaging Orders')}
42
- orders={orders}
85
+ orders={filteredOrders ?? []}
43
86
  onAdd={() =>
44
- launchAddLabOrder({
45
- orderTypeUuid: imagingOrderTypeUuid,
46
- orderableConceptSets: imagingOrderableConceptSets,
47
- })
87
+ launchAddLabOrder(
88
+ {
89
+ orderTypeUuid: imagingOrderTypeUuid,
90
+ orderableConceptSets: imagingOrderableConceptSets,
91
+ },
92
+ windowProps,
93
+ groupProps,
94
+ )
48
95
  }
49
96
  containerClassName={styles.labTableContainer}
50
97
  tableCellClassName={styles.tableCell}
51
98
  priorityPillClassName={styles.priorityPill}
52
99
  statusPillClassName={styles.statusPill}
100
+ module="@kenyaemr/esm-imaging-orders-app"
101
+ orderType="radiology"
102
+ patientName={patientName}
103
+ patientId={patientId}
104
+ patientAge={patientAge}
53
105
  />
54
106
  );
55
107
  };
@@ -1,28 +1,12 @@
1
1
  import React from 'react';
2
- import { useConfig } from '@openmrs/esm-framework';
3
- import OrdersTabs from '../../shared/orders/OrdersTabs';
4
- import LabTable from './radiology-and-imaging-table.component';
5
- import { ExpressWorkflowConfig } from '../../config-schema';
2
+ import ExtensionTabs from '../../shared/tabs/extension-tabs.component';
6
3
 
7
4
  type RadiologyAndImagingTabsProps = {
8
5
  patientUuid: string;
9
- patient: fhir.Patient;
10
6
  };
11
- const imagingRadiologyConceptClassUuid = '8caa332c-efe4-4025-8b18-3398328e1323';
12
7
 
13
- const RadiologyAndImagingTabs: React.FC<RadiologyAndImagingTabsProps> = ({ patientUuid, patient }) => {
14
- const { imagingOrderTypeUuid } = useConfig<ExpressWorkflowConfig>();
15
- return (
16
- <OrdersTabs
17
- patientUuid={patientUuid}
18
- patient={patient}
19
- basePath="radiology-and-imaging"
20
- resultsSlotName="ewf-radiology-and-imaging-results-slot"
21
- orderTypeUuid={imagingOrderTypeUuid}
22
- filter={(order) => order.concept?.conceptClass?.uuid === imagingRadiologyConceptClassUuid}
23
- Table={({ orders }) => <LabTable orders={orders} />}
24
- />
25
- );
8
+ const RadiologyAndImagingTabs: React.FC<RadiologyAndImagingTabsProps> = ({ patientUuid }) => {
9
+ return <ExtensionTabs extensionSlotName="patient-imaging-tabs-slot" patientUuid={patientUuid} />;
26
10
  };
27
11
 
28
12
  export default RadiologyAndImagingTabs;
@@ -7,13 +7,21 @@ import styles from '../card.scss';
7
7
  import DependentsComponent from '../../dependants/dependants.component';
8
8
  import { LocalResponse, type HIEBundleResponse, type EligibilityResponse } from '../../type';
9
9
  import { hasDependents } from '../../helper';
10
- import { launchWorkspace, PatientPhoto, showModal, navigate, closeWorkspace } from '@openmrs/esm-framework';
10
+ import {
11
+ launchWorkspace2,
12
+ launchWorkspaceGroup2,
13
+ PatientPhoto,
14
+ showModal,
15
+ navigate,
16
+ type Visit,
17
+ } from '@openmrs/esm-framework';
11
18
  import { EnhancedPatientBannerPatientInfo } from '../../patient-banner/patient-banner.component';
12
19
  import { findExistingLocalPatient, registerOrLaunchHIEPatient } from '../../search-bar/search-bar.resource';
13
20
  import { launchOtpVerificationModal } from '../../../../shared/otp-verification';
14
21
  import { otpManager, useOtpSource, cleanupAllOTPs } from './hie-card.resource';
15
22
  import { useMultipleActiveVisits } from '../../dependants/dependants.resource';
16
23
  import { sanitizePhoneNumber } from '../../../../shared/utils';
24
+ import { VisitFormProps } from '../../start-visit-form/visit-form-workspace/visit-form.workspace';
17
25
 
18
26
  interface HIEDisplayCardProps {
19
27
  bundle: HIEBundleResponse;
@@ -140,6 +148,25 @@ const HIEDisplayCard: React.FC<HIEDisplayCardProps> = ({
140
148
  return '254700000000';
141
149
  };
142
150
 
151
+ const launchCheckInWorkspace = async (patient: any, patientUuid: string) => {
152
+ await launchWorkspaceGroup2('ewf-patient-chart', {
153
+ patient,
154
+ patientUuid,
155
+ visitContext: null as unknown as Visit,
156
+ mutateVisitContext: () => {},
157
+ });
158
+
159
+ launchWorkspace2<VisitFormProps, {}, {}>(
160
+ 'custom-start-visit-workspace-form',
161
+ {
162
+ openedFrom: 'registration-check-in',
163
+ showPatientHeader: false,
164
+ },
165
+ {},
166
+ null,
167
+ );
168
+ };
169
+
143
170
  const handleOTPRequest = (patientUuid: string) => {
144
171
  setOtpRequestedFor((prev) => new Set(prev).add(patientUuid));
145
172
  };
@@ -170,9 +197,7 @@ const HIEDisplayCard: React.FC<HIEDisplayCardProps> = ({
170
197
  if (!otpSource) {
171
198
  throw new Error('OTP source not configured. Please contact your administrator.');
172
199
  }
173
-
174
200
  otpManager.setOtpSource(otpSource);
175
-
176
201
  await otpManager.requestOTP(sanitizedPhone, patientName, otpExpiryMinutes, searchedNationalId, patientUuid);
177
202
  } catch (error) {
178
203
  throw error;
@@ -184,9 +209,7 @@ const HIEDisplayCard: React.FC<HIEDisplayCardProps> = ({
184
209
  if (!otpSource) {
185
210
  throw new Error('OTP source not configured. Please contact your administrator.');
186
211
  }
187
-
188
212
  otpManager.setOtpSource(otpSource);
189
-
190
213
  const isValid = await otpManager.verifyOTP(sanitizedPhone, otp, patientUuid);
191
214
  if (!isValid) {
192
215
  throw new Error('OTP verification failed');
@@ -312,21 +335,7 @@ const HIEDisplayCard: React.FC<HIEDisplayCardProps> = ({
312
335
  <Button
313
336
  kind="secondary"
314
337
  size="sm"
315
- onClick={() => {
316
- const localPatientName =
317
- localPatient?.person?.personName?.display ||
318
- `${localPatient?.person?.personName?.givenName || ''} ${
319
- localPatient?.person?.personName?.middleName || ''
320
- } ${localPatient?.person?.personName?.familyName || ''}`.trim() ||
321
- patientName;
322
-
323
- launchWorkspace('start-visit-workspace-form', {
324
- patientUuid: localPatient.uuid,
325
- workspaceTitle: t('startVisitWorkspaceTitle', 'Start Visit for {{patientName}}', {
326
- patientName: localPatientName,
327
- }),
328
- });
329
- }}>
338
+ onClick={() => launchCheckInWorkspace(localPatient, localPatient.uuid)}>
330
339
  {t('checkIn', 'Check In')}
331
340
  </Button>
332
341
  )}
@@ -345,27 +354,8 @@ const HIEDisplayCard: React.FC<HIEDisplayCardProps> = ({
345
354
  kind="secondary"
346
355
  size="sm"
347
356
  onClick={async () => {
348
- const localPatient = await registerOrLaunchHIEPatient(patient, t);
349
- launchWorkspace('start-visit-workspace-form', {
350
- patientUuid: localPatient.uuid,
351
- workspaceTitle: t('checkInPatientWorkspaceTitle', 'Check in patient'),
352
- closeWorkspace: () => {
353
- closeWorkspace('start-visit-workspace-form', {
354
- onWorkspaceClose: () => {
355
- navigate({ to: `\${openmrsSpaBase}/patient/${localPatient.uuid}/chart` });
356
- },
357
- ignoreChanges: true,
358
- });
359
- },
360
- closeWorkspaceWithSavedChanges: () => {
361
- closeWorkspace('start-visit-workspace-form', {
362
- onWorkspaceClose: () => {
363
- navigate({ to: `\${openmrsSpaBase}/patient/${localPatient.uuid}/chart` });
364
- },
365
- ignoreChanges: true,
366
- });
367
- },
368
- });
357
+ const registeredPatient = await registerOrLaunchHIEPatient(patient, t);
358
+ await launchCheckInWorkspace(registeredPatient, registeredPatient.uuid);
369
359
  }}>
370
360
  {t('checkIn', 'Check In')}
371
361
  </Button>
@@ -376,9 +366,7 @@ const HIEDisplayCard: React.FC<HIEDisplayCardProps> = ({
376
366
  iconDescription={showDependents ? 'Hide dependents' : 'Show dependents'}
377
367
  kind="tertiary"
378
368
  size="sm"
379
- onClick={() => {
380
- toggleDependentsVisibility(patientKey);
381
- }}
369
+ onClick={() => toggleDependentsVisibility(patientKey)}
382
370
  renderIcon={showDependents ? ChevronUp : ChevronDown}>
383
371
  {showDependents
384
372
  ? t('hideDependents', 'Hide dependents')
@@ -5,7 +5,7 @@ import { useTranslation } from 'react-i18next';
5
5
  import classNames from 'classnames';
6
6
  import styles from '../card.scss';
7
7
  import { LocalResponse, type HIEBundleResponse, type EligibilityResponse } from '../../type';
8
- import { launchWorkspace, PatientPhoto, showModal, closeWorkspace, navigate } from '@openmrs/esm-framework';
8
+ import { launchWorkspace2, launchWorkspaceGroup2, PatientPhoto, showModal, type Visit } from '@openmrs/esm-framework';
9
9
  import { EnhancedPatientBannerPatientInfo } from '../../patient-banner/patient-banner.component';
10
10
  import { convertLocalPatientToFHIR, getNationalIdFromPatient, hasDependents } from '../../helper';
11
11
  import { launchOtpVerificationModal } from '../../../../shared/otp-verification';
@@ -13,6 +13,7 @@ import DependentsComponent from '../../dependants/dependants.component';
13
13
  import { useMultipleActiveVisits } from '../../dependants/dependants.resource';
14
14
  import { otpManager, useOtpSource, cleanupAllOTPs } from '../HIE-card/hie-card.resource';
15
15
  import { sanitizePhoneNumber } from '../../../../shared/utils';
16
+ import { VisitFormProps } from '../../start-visit-form/visit-form-workspace/visit-form.workspace';
16
17
 
17
18
  interface LocalPatientCardProps {
18
19
  localSearchResults: LocalResponse;
@@ -46,7 +47,6 @@ const LocalPatientCard: React.FC<LocalPatientCardProps> = ({
46
47
  }
47
48
  }, [otpSource]);
48
49
 
49
- // Clean up OTPs when component unmounts
50
50
  useEffect(() => {
51
51
  return () => {
52
52
  cleanupAllOTPs();
@@ -114,6 +114,25 @@ const LocalPatientCard: React.FC<LocalPatientCardProps> = ({
114
114
  return '254700000000';
115
115
  }, []);
116
116
 
117
+ const launchCheckInWorkspace = async (patient: any, patientUuid: string) => {
118
+ const groupProps = {
119
+ patient,
120
+ patientUuid,
121
+ visitContext: null as unknown as Visit,
122
+ mutateVisitContext: () => {},
123
+ };
124
+
125
+ launchWorkspace2<VisitFormProps, {}, {}>(
126
+ 'custom-start-visit-workspace-form',
127
+ {
128
+ openedFrom: 'registration-check-in',
129
+ showPatientHeader: false,
130
+ },
131
+ {},
132
+ groupProps,
133
+ );
134
+ };
135
+
117
136
  const handleOTPRequest = useCallback((patientUuid: string) => {
118
137
  setOtpRequestedFor((prev) => new Set(prev).add(patientUuid));
119
138
  }, []);
@@ -141,9 +160,7 @@ const LocalPatientCard: React.FC<LocalPatientCardProps> = ({
141
160
  if (!otpSource) {
142
161
  throw new Error('OTP source not configured. Please contact your administrator.');
143
162
  }
144
-
145
163
  otpManager.setOtpSource(otpSource);
146
-
147
164
  await otpManager.requestOTP(sanitizedPhone, patientName, otpExpiryMinutes, searchedNationalId, patientUuid);
148
165
  } catch (error) {
149
166
  throw error;
@@ -155,9 +172,7 @@ const LocalPatientCard: React.FC<LocalPatientCardProps> = ({
155
172
  if (!otpSource) {
156
173
  throw new Error('OTP source not configured. Please contact your administrator.');
157
174
  }
158
-
159
175
  otpManager.setOtpSource(otpSource);
160
-
161
176
  const isValid = await otpManager.verifyOTP(sanitizedPhone, otp, patientUuid);
162
177
  if (!isValid) {
163
178
  throw new Error('OTP verification failed');
@@ -207,7 +222,6 @@ const LocalPatientCard: React.FC<LocalPatientCardProps> = ({
207
222
  const hasActiveVisit = !!activeVisit;
208
223
 
209
224
  const hiePatientData: any = findHIEPatientData(localPatient);
210
-
211
225
  const patientHasDependents: boolean = hiePatientData ? hasDependents(hiePatientData) : false;
212
226
  const showDependents: boolean = showDependentsForPatient.has(patientUuid);
213
227
 
@@ -230,7 +244,6 @@ const LocalPatientCard: React.FC<LocalPatientCardProps> = ({
230
244
  <div className={styles.patientAvatar} role="img">
231
245
  <PatientPhoto patientUuid={patientUuid} patientName={patientName} />
232
246
  </div>
233
-
234
247
  <EnhancedPatientBannerPatientInfo
235
248
  patient={fhirPatient}
236
249
  renderedFrom="local-search"
@@ -291,22 +304,7 @@ const LocalPatientCard: React.FC<LocalPatientCardProps> = ({
291
304
  <Button
292
305
  kind="primary"
293
306
  size="sm"
294
- onClick={() => {
295
- launchWorkspace('start-visit-workspace-form', {
296
- patientUuid: patientUuid,
297
- workspaceTitle: t('checkInPatientWorkspaceTitle', 'Check in patient'),
298
- closeWorkspace: () => {
299
- closeWorkspace('start-visit-workspace-form', {
300
- ignoreChanges: true,
301
- });
302
- },
303
- closeWorkspaceWithSavedChanges: () => {
304
- closeWorkspace('start-visit-workspace-form', {
305
- ignoreChanges: true,
306
- });
307
- },
308
- });
309
- }}>
307
+ onClick={() => launchCheckInWorkspace(localPatient, patientUuid)}>
310
308
  {t('checkIn', 'Check In')}
311
309
  </Button>
312
310
  )}
@@ -13,6 +13,7 @@ export interface CheckinFormExtraExtensionProps {
13
13
  isDHAWorkflow: boolean;
14
14
  };
15
15
  patientUuid: string;
16
+ visitStatus: string;
16
17
  }
17
18
 
18
19
  /**
@@ -20,9 +21,14 @@ export interface CheckinFormExtraExtensionProps {
20
21
  * It is used slotted into the patient-chart's start visit form
21
22
  */
22
23
  const CheckinFormExtraExtension: React.FC<CheckinFormExtraExtensionProps> = (props) => {
23
- const { setVisitFormCallbacks, visitFormOpenedFrom, patientChartConfig } = props;
24
+ const { setVisitFormCallbacks, visitFormOpenedFrom, patientChartConfig, visitStatus } = props;
24
25
  if (patientChartConfig.isDHAWorkflow || visitFormOpenedFrom == 'service-queues-add-patient') {
25
- return <QueueFields setOnSubmit={(onSubmit) => setVisitFormCallbacks({ onVisitCreatedOrUpdated: onSubmit })} />;
26
+ return (
27
+ <QueueFields
28
+ setOnSubmit={(onSubmit) => setVisitFormCallbacks({ onVisitCreatedOrUpdated: onSubmit })}
29
+ visitStatus={visitStatus}
30
+ />
31
+ );
26
32
  } else {
27
33
  return <></>;
28
34
  }
@@ -1,12 +1,4 @@
1
- import {
2
- InlineNotification,
3
- RadioButton,
4
- RadioButtonGroup,
5
- RadioButtonSkeleton,
6
- Select,
7
- SelectItem,
8
- SelectSkeleton,
9
- } from '@carbon/react';
1
+ import { InlineNotification, RadioButton, RadioButtonGroup, Select, SelectItem, SelectSkeleton } from '@carbon/react';
10
2
  import { ResponsiveWrapper, showSnackbar, useConfig, useSession, type Visit } from '@openmrs/esm-framework';
11
3
  import React, { useCallback, useEffect, useMemo, useState } from 'react';
12
4
  import { useTranslation } from 'react-i18next';
@@ -16,21 +8,23 @@ import { ExpressWorkflowConfig } from '../../../config-schema';
16
8
 
17
9
  export interface QueueFieldsProps {
18
10
  setOnSubmit(onSubmit: (visit: Visit) => Promise<any>);
11
+ visitStatus: string;
19
12
  }
20
13
 
21
- const PATIENT_CATEGORIES = [
22
- { id: 'triage', name: 'Triage' },
23
- { id: 'walk-in', name: 'Walk-in' },
24
- ];
25
-
26
14
  /**
27
15
  * This component contains form fields for starting a patient's queue entry.
28
16
  */
29
- const QueueFields: React.FC<QueueFieldsProps> = ({ setOnSubmit }) => {
17
+ const QueueFields: React.FC<QueueFieldsProps> = ({ setOnSubmit, visitStatus }) => {
30
18
  const { t } = useTranslation();
19
+ const patientCategory = useMemo(
20
+ () => [
21
+ { id: 'triage', name: t('triage', 'Triage') },
22
+ { id: 'walk-in', name: t('walkIn', 'Walk-in') },
23
+ ],
24
+ [t],
25
+ );
31
26
  const { queueRooms, isLoading: isLoadingQueueRooms } = useQueueRooms();
32
27
  const { sessionLocation } = useSession();
33
-
34
28
  const {
35
29
  visitQueueNumberAttributeUuid,
36
30
  triageServiceConceptUuid,
@@ -84,7 +78,7 @@ const QueueFields: React.FC<QueueFieldsProps> = ({ setOnSubmit }) => {
84
78
 
85
79
  const onSubmit = useCallback(
86
80
  (visit: Visit) => {
87
- if (selectedQueueRoom) {
81
+ if (selectedQueueRoom && visitStatus !== 'past') {
88
82
  const selectedRoom = filteredQueueRooms.find((room) => room.uuid === selectedQueueRoom);
89
83
  const queueUuid = selectedRoom?.queue?.uuid;
90
84
 
@@ -140,6 +134,7 @@ const QueueFields: React.FC<QueueFieldsProps> = ({ setOnSubmit }) => {
140
134
  sessionLocation.uuid,
141
135
  filteredQueueRooms,
142
136
  t,
137
+ visitStatus,
143
138
  ],
144
139
  );
145
140
 
@@ -157,6 +152,10 @@ const QueueFields: React.FC<QueueFieldsProps> = ({ setOnSubmit }) => {
157
152
  }
158
153
  }, [filteredQueueRooms, selectedQueueRoom]);
159
154
 
155
+ if (visitStatus === 'past') {
156
+ return null;
157
+ }
158
+
160
159
  return (
161
160
  <div>
162
161
  <section className={styles.section}>
@@ -169,7 +168,7 @@ const QueueFields: React.FC<QueueFieldsProps> = ({ setOnSubmit }) => {
169
168
  orientation="vertical"
170
169
  valueSelected={selectedCategory}
171
170
  onChange={(value) => setSelectedCategory(String(value))}>
172
- {PATIENT_CATEGORIES.map((category) => (
171
+ {patientCategory.map((category) => (
173
172
  <RadioButton
174
173
  key={category.id}
175
174
  className={styles.radioButtonOption}
@@ -218,4 +217,4 @@ const QueueFields: React.FC<QueueFieldsProps> = ({ setOnSubmit }) => {
218
217
  );
219
218
  };
220
219
 
221
- export default QueueFields;
220
+ export default React.memo(QueueFields);