@kenyaemr/esm-shr-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 (428) hide show
  1. package/.turbo/turbo-build.log +5 -5
  2. package/dist/1072.js +1 -1
  3. package/dist/1072.js.map +1 -1
  4. package/dist/1278.js +1 -0
  5. package/dist/1278.js.map +1 -0
  6. package/dist/15.js +1 -0
  7. package/dist/15.js.map +1 -0
  8. package/dist/1620.js +1 -0
  9. package/dist/1620.js.map +1 -0
  10. package/dist/1789.js +1 -0
  11. package/dist/1789.js.map +1 -0
  12. package/dist/1823.js +1 -0
  13. package/dist/1823.js.map +1 -0
  14. package/dist/1831.js +1 -0
  15. package/dist/1831.js.map +1 -0
  16. package/dist/1844.js +1 -0
  17. package/dist/1844.js.map +1 -0
  18. package/dist/1854.js +1 -0
  19. package/dist/1854.js.map +1 -0
  20. package/dist/1919.js +1 -0
  21. package/dist/1919.js.map +1 -0
  22. package/dist/1946.js +1 -0
  23. package/dist/1946.js.map +1 -0
  24. package/dist/2007.js +1 -1
  25. package/dist/2007.js.map +1 -1
  26. package/dist/2127.js +1 -0
  27. package/dist/2127.js.map +1 -0
  28. package/dist/2146.js +1 -0
  29. package/dist/2146.js.map +1 -0
  30. package/dist/2202.js +1 -0
  31. package/dist/2202.js.map +1 -0
  32. package/dist/2394.js +1 -0
  33. package/dist/2394.js.map +1 -0
  34. package/dist/2468.js +1 -0
  35. package/dist/2468.js.map +1 -0
  36. package/dist/2498.js +1 -0
  37. package/dist/2498.js.map +1 -0
  38. package/dist/2534.js +1 -1
  39. package/dist/2534.js.map +1 -1
  40. package/dist/2556.js +1 -0
  41. package/dist/2556.js.map +1 -0
  42. package/dist/26.js +1 -0
  43. package/dist/26.js.map +1 -0
  44. package/dist/{2561.js → 2648.js} +1 -1
  45. package/dist/2648.js.map +1 -0
  46. package/dist/2709.js +1 -0
  47. package/dist/2709.js.map +1 -0
  48. package/dist/2744.js +1 -0
  49. package/dist/2744.js.map +1 -0
  50. package/dist/2823.js +1 -0
  51. package/dist/2823.js.map +1 -0
  52. package/dist/2840.js +1 -0
  53. package/dist/2840.js.map +1 -0
  54. package/dist/2842.js +1 -0
  55. package/dist/2842.js.map +1 -0
  56. package/dist/2916.js +1 -0
  57. package/dist/2916.js.map +1 -0
  58. package/dist/2924.js +1 -0
  59. package/dist/2924.js.map +1 -0
  60. package/dist/3137.js +1 -0
  61. package/dist/3137.js.map +1 -0
  62. package/dist/3219.js +1 -0
  63. package/dist/3219.js.map +1 -0
  64. package/dist/3285.js +1 -0
  65. package/dist/3285.js.map +1 -0
  66. package/dist/3302.js +1 -0
  67. package/dist/3302.js.map +1 -0
  68. package/dist/3335.js +1 -0
  69. package/dist/3335.js.map +1 -0
  70. package/dist/3378.js +1 -0
  71. package/dist/3378.js.map +1 -0
  72. package/dist/3504.js +1 -0
  73. package/dist/3504.js.map +1 -0
  74. package/dist/356.js +1 -0
  75. package/dist/356.js.map +1 -0
  76. package/dist/3569.js +1 -0
  77. package/dist/3569.js.map +1 -0
  78. package/dist/3580.js +1 -0
  79. package/dist/3580.js.map +1 -0
  80. package/dist/3690.js +1 -0
  81. package/dist/3690.js.map +1 -0
  82. package/dist/3723.js +1 -0
  83. package/dist/3723.js.map +1 -0
  84. package/dist/3745.js +1 -0
  85. package/dist/3745.js.map +1 -0
  86. package/dist/3796.js +1 -0
  87. package/dist/3796.js.map +1 -0
  88. package/dist/3813.js +1 -0
  89. package/dist/3813.js.map +1 -0
  90. package/dist/3847.js +1 -0
  91. package/dist/3847.js.map +1 -0
  92. package/dist/393.js +6 -0
  93. package/dist/393.js.map +1 -0
  94. package/dist/3953.js +1 -0
  95. package/dist/3953.js.map +1 -0
  96. package/dist/4178.js +1 -1
  97. package/dist/4178.js.map +1 -1
  98. package/dist/4212.js +1 -0
  99. package/dist/4212.js.map +1 -0
  100. package/dist/4308.js +1 -1
  101. package/dist/4308.js.map +1 -1
  102. package/dist/4487.js +11 -0
  103. package/dist/4487.js.map +1 -0
  104. package/dist/4588.js +1 -0
  105. package/dist/4588.js.map +1 -0
  106. package/dist/4637.js +1 -1
  107. package/dist/4637.js.map +1 -1
  108. package/dist/466.js +1 -1
  109. package/dist/466.js.map +1 -1
  110. package/dist/4711.js +1 -0
  111. package/dist/4711.js.map +1 -0
  112. package/dist/4759.js +1 -0
  113. package/dist/4759.js.map +1 -0
  114. package/dist/4817.js +1 -0
  115. package/dist/4817.js.map +1 -0
  116. package/dist/4818.js +1 -0
  117. package/dist/4818.js.map +1 -0
  118. package/dist/500.js +1 -0
  119. package/dist/500.js.map +1 -0
  120. package/dist/5086.js +1 -1
  121. package/dist/5086.js.map +1 -1
  122. package/dist/5117.js +1 -0
  123. package/dist/5117.js.map +1 -0
  124. package/dist/5256.js +1 -0
  125. package/dist/5256.js.map +1 -0
  126. package/dist/5262.js +1 -0
  127. package/dist/5262.js.map +1 -0
  128. package/dist/5362.js +1 -0
  129. package/dist/5362.js.map +1 -0
  130. package/dist/5366.js +1 -0
  131. package/dist/5366.js.map +1 -0
  132. package/dist/5567.js +1 -0
  133. package/dist/5567.js.map +1 -0
  134. package/dist/5598.js +1 -0
  135. package/dist/5598.js.map +1 -0
  136. package/dist/5676.js +1 -1
  137. package/dist/5676.js.map +1 -1
  138. package/dist/5731.js +5 -0
  139. package/dist/5731.js.map +1 -0
  140. package/dist/5821.js +1 -0
  141. package/dist/5821.js.map +1 -0
  142. package/dist/5825.js +1 -0
  143. package/dist/5825.js.map +1 -0
  144. package/dist/5932.js +1 -0
  145. package/dist/5932.js.map +1 -0
  146. package/dist/5941.js +1 -0
  147. package/dist/5941.js.map +1 -0
  148. package/dist/6104.js +1 -1
  149. package/dist/6104.js.map +1 -1
  150. package/dist/6273.js +1 -0
  151. package/dist/6273.js.map +1 -0
  152. package/dist/6337.js +1 -0
  153. package/dist/6337.js.map +1 -0
  154. package/dist/6357.js +1 -0
  155. package/dist/6357.js.map +1 -0
  156. package/dist/6427.js +1 -1
  157. package/dist/6427.js.map +1 -1
  158. package/dist/6478.js +7 -0
  159. package/dist/6478.js.map +1 -0
  160. package/dist/6479.js +1 -1
  161. package/dist/6479.js.map +1 -1
  162. package/dist/6508.js +1 -0
  163. package/dist/6508.js.map +1 -0
  164. package/dist/6567.js +1 -0
  165. package/dist/6567.js.map +1 -0
  166. package/dist/6570.js +1 -0
  167. package/dist/6570.js.map +1 -0
  168. package/dist/6634.js +1 -0
  169. package/dist/6634.js.map +1 -0
  170. package/dist/6688.js +1 -0
  171. package/dist/6688.js.map +1 -0
  172. package/dist/6698.js +1 -0
  173. package/dist/6698.js.map +1 -0
  174. package/dist/682.js +1 -1
  175. package/dist/682.js.map +1 -1
  176. package/dist/689.js +1 -1
  177. package/dist/689.js.map +1 -1
  178. package/dist/7085.js +1 -0
  179. package/dist/7085.js.map +1 -0
  180. package/dist/740.js +1 -0
  181. package/dist/740.js.map +1 -0
  182. package/dist/7478.js +1 -1
  183. package/dist/7478.js.map +1 -1
  184. package/dist/7539.js +1 -0
  185. package/dist/7539.js.map +1 -0
  186. package/dist/7686.js +1 -0
  187. package/dist/7686.js.map +1 -0
  188. package/dist/7782.js +1 -0
  189. package/dist/7782.js.map +1 -0
  190. package/dist/7808.js +1 -0
  191. package/dist/7808.js.map +1 -0
  192. package/dist/781.js +1 -1
  193. package/dist/781.js.map +1 -1
  194. package/dist/8183.js +1 -0
  195. package/dist/8183.js.map +1 -0
  196. package/dist/8196.js +1 -1
  197. package/dist/8196.js.map +1 -1
  198. package/dist/820.js +1 -0
  199. package/dist/820.js.map +1 -0
  200. package/dist/8240.js +1 -1
  201. package/dist/8240.js.map +1 -1
  202. package/dist/8455.js +1 -0
  203. package/dist/8455.js.map +1 -0
  204. package/dist/8472.js +1 -0
  205. package/dist/8472.js.map +1 -0
  206. package/dist/8521.js +1 -0
  207. package/dist/8521.js.map +1 -0
  208. package/dist/8602.js +1 -0
  209. package/dist/8602.js.map +1 -0
  210. package/dist/8607.js +1 -0
  211. package/dist/8607.js.map +1 -0
  212. package/dist/8743.js +1 -0
  213. package/dist/8743.js.map +1 -0
  214. package/dist/8762.js +1 -0
  215. package/dist/8762.js.map +1 -0
  216. package/dist/8812.js +1 -0
  217. package/dist/8812.js.map +1 -0
  218. package/dist/8985.js +1 -0
  219. package/dist/8985.js.map +1 -0
  220. package/dist/9.js +1 -0
  221. package/dist/9.js.map +1 -0
  222. package/dist/901.js +1 -0
  223. package/dist/901.js.map +1 -0
  224. package/dist/9011.js +1 -1
  225. package/dist/9011.js.map +1 -1
  226. package/dist/9087.js +1 -0
  227. package/dist/9087.js.map +1 -0
  228. package/dist/9148.js +1 -0
  229. package/dist/9148.js.map +1 -0
  230. package/dist/9168.js +1 -0
  231. package/dist/9168.js.map +1 -0
  232. package/dist/935.js +1 -0
  233. package/dist/935.js.map +1 -0
  234. package/dist/9425.js +1 -1
  235. package/dist/9520.js +1 -1
  236. package/dist/9520.js.map +1 -1
  237. package/dist/9547.js +1 -0
  238. package/dist/9547.js.map +1 -0
  239. package/dist/9549.js +1 -0
  240. package/dist/9549.js.map +1 -0
  241. package/dist/9612.js +1 -0
  242. package/dist/9612.js.map +1 -0
  243. package/dist/9621.js +1 -0
  244. package/dist/9621.js.map +1 -0
  245. package/dist/9774.js +1 -0
  246. package/dist/9774.js.map +1 -0
  247. package/dist/9800.js +1 -0
  248. package/dist/9800.js.map +1 -0
  249. package/dist/9806.js +1 -0
  250. package/dist/9806.js.map +1 -0
  251. package/dist/9885.js +1 -0
  252. package/dist/9885.js.map +1 -0
  253. package/dist/992.js +1 -0
  254. package/dist/992.js.map +1 -0
  255. package/dist/kenyaemr-esm-shr-app.js +6 -5
  256. package/dist/kenyaemr-esm-shr-app.js.buildmanifest.json +1495 -598
  257. package/dist/kenyaemr-esm-shr-app.js.map +1 -1
  258. package/dist/main.js +6 -5
  259. package/dist/main.js.map +1 -1
  260. package/dist/routes.json +1 -1
  261. package/package.json +2 -2
  262. package/src/config-schema.ts +6 -6
  263. package/src/hooks/usePatient.ts +23 -9
  264. package/src/hooks/useSHRSummary.ts +1 -3
  265. package/src/index.ts +1 -4
  266. package/src/referrals/dependents/dependents.component.tsx +8 -1
  267. package/src/referrals/referral-reasons/referral-reasons.component.tsx +2 -2
  268. package/src/referrals/referral-tabs/referrals-tabs.component.tsx +9 -2
  269. package/src/referrals/referrals-actions.component.tsx +66 -7
  270. package/src/referrals/referrals.component.tsx +2 -2
  271. package/src/routes.json +92 -78
  272. package/src/shr-summary/shr-summary.component.tsx +12 -35
  273. package/src/shr-summary/shr-summary.resource.ts +74 -74
  274. package/src/shr-summary/tables/shr-summary-table.component.tsx +53 -23
  275. package/src/utils/function.tsx +9 -4
  276. package/src/workspace/referral-workspace.resource.ts +1 -2
  277. package/src/workspace/referral.workspace.scss +4 -2
  278. package/src/workspace/referrals.workspace.component.tsx +190 -183
  279. package/translations/am.json +4 -2
  280. package/translations/en.json +4 -2
  281. package/translations/fr.json +4 -2
  282. package/translations/sw.json +4 -2
  283. package/tsconfig.json +1 -1
  284. package/dist/1172.js +0 -1
  285. package/dist/1172.js.map +0 -1
  286. package/dist/132.js +0 -1
  287. package/dist/132.js.map +0 -1
  288. package/dist/1525.js +0 -1
  289. package/dist/1525.js.map +0 -1
  290. package/dist/1729.js +0 -17
  291. package/dist/1729.js.map +0 -1
  292. package/dist/1761.js +0 -1
  293. package/dist/1761.js.map +0 -1
  294. package/dist/1809.js +0 -7
  295. package/dist/1809.js.map +0 -1
  296. package/dist/1866.js +0 -1
  297. package/dist/1866.js.map +0 -1
  298. package/dist/1962.js +0 -1
  299. package/dist/1962.js.map +0 -1
  300. package/dist/2045.js +0 -1
  301. package/dist/2045.js.map +0 -1
  302. package/dist/2163.js +0 -1
  303. package/dist/2163.js.map +0 -1
  304. package/dist/2267.js +0 -1
  305. package/dist/2267.js.map +0 -1
  306. package/dist/235.js +0 -1
  307. package/dist/235.js.map +0 -1
  308. package/dist/2561.js.map +0 -1
  309. package/dist/2564.js +0 -1
  310. package/dist/2564.js.map +0 -1
  311. package/dist/2810.js +0 -2
  312. package/dist/2810.js.map +0 -1
  313. package/dist/2867.js +0 -1
  314. package/dist/2867.js.map +0 -1
  315. package/dist/3040.js +0 -1
  316. package/dist/3228.js +0 -1
  317. package/dist/3228.js.map +0 -1
  318. package/dist/329.js +0 -1
  319. package/dist/329.js.map +0 -1
  320. package/dist/3491.js +0 -1
  321. package/dist/3491.js.map +0 -1
  322. package/dist/3509.js +0 -1
  323. package/dist/3509.js.map +0 -1
  324. package/dist/3576.js +0 -1
  325. package/dist/3576.js.map +0 -1
  326. package/dist/4146.js +0 -1
  327. package/dist/4146.js.map +0 -1
  328. package/dist/4224.js +0 -1
  329. package/dist/4224.js.map +0 -1
  330. package/dist/4402.js +0 -1
  331. package/dist/4402.js.map +0 -1
  332. package/dist/4724.js +0 -1
  333. package/dist/4724.js.map +0 -1
  334. package/dist/4972.js +0 -1
  335. package/dist/4972.js.map +0 -1
  336. package/dist/509.js +0 -1
  337. package/dist/509.js.map +0 -1
  338. package/dist/5096.js +0 -1
  339. package/dist/5096.js.map +0 -1
  340. package/dist/5119.js +0 -1
  341. package/dist/5119.js.map +0 -1
  342. package/dist/5159.js +0 -13
  343. package/dist/5159.js.map +0 -1
  344. package/dist/5361.js +0 -1
  345. package/dist/5361.js.map +0 -1
  346. package/dist/5576.js +0 -1
  347. package/dist/5576.js.map +0 -1
  348. package/dist/5600.js +0 -1
  349. package/dist/5600.js.map +0 -1
  350. package/dist/5604.js +0 -1
  351. package/dist/5604.js.map +0 -1
  352. package/dist/5633.js +0 -1
  353. package/dist/5633.js.map +0 -1
  354. package/dist/5809.js +0 -1
  355. package/dist/5809.js.map +0 -1
  356. package/dist/5882.js +0 -1
  357. package/dist/5939.js +0 -5
  358. package/dist/5939.js.map +0 -1
  359. package/dist/6004.js +0 -1
  360. package/dist/6004.js.map +0 -1
  361. package/dist/6121.js +0 -3
  362. package/dist/6121.js.map +0 -1
  363. package/dist/6129.js +0 -1
  364. package/dist/6129.js.map +0 -1
  365. package/dist/6137.js +0 -1
  366. package/dist/6137.js.map +0 -1
  367. package/dist/6232.js +0 -1
  368. package/dist/6232.js.map +0 -1
  369. package/dist/6356.js +0 -1
  370. package/dist/6356.js.map +0 -1
  371. package/dist/6548.js +0 -1
  372. package/dist/6548.js.map +0 -1
  373. package/dist/6571.js +0 -1
  374. package/dist/6571.js.map +0 -1
  375. package/dist/6589.js +0 -1
  376. package/dist/6589.js.map +0 -1
  377. package/dist/6626.js +0 -1
  378. package/dist/6626.js.map +0 -1
  379. package/dist/6643.js +0 -1
  380. package/dist/6643.js.map +0 -1
  381. package/dist/6721.js +0 -1
  382. package/dist/6721.js.map +0 -1
  383. package/dist/6868.js +0 -1
  384. package/dist/6868.js.map +0 -1
  385. package/dist/7127.js +0 -1
  386. package/dist/7177.js +0 -1
  387. package/dist/7177.js.map +0 -1
  388. package/dist/7402.js +0 -1
  389. package/dist/7402.js.map +0 -1
  390. package/dist/7419.js +0 -1
  391. package/dist/7419.js.map +0 -1
  392. package/dist/7544.js +0 -1
  393. package/dist/7544.js.map +0 -1
  394. package/dist/7560.js +0 -1
  395. package/dist/7560.js.map +0 -1
  396. package/dist/8179.js +0 -6
  397. package/dist/8179.js.map +0 -1
  398. package/dist/8189.js +0 -1
  399. package/dist/8189.js.map +0 -1
  400. package/dist/8249.js +0 -1
  401. package/dist/8249.js.map +0 -1
  402. package/dist/8502.js +0 -1
  403. package/dist/8502.js.map +0 -1
  404. package/dist/8512.js +0 -1
  405. package/dist/8512.js.map +0 -1
  406. package/dist/8522.js +0 -1
  407. package/dist/8522.js.map +0 -1
  408. package/dist/8633.js +0 -1
  409. package/dist/8633.js.map +0 -1
  410. package/dist/8775.js +0 -11
  411. package/dist/8775.js.map +0 -1
  412. package/dist/8776.js +0 -1
  413. package/dist/8776.js.map +0 -1
  414. package/dist/8869.js +0 -1
  415. package/dist/8869.js.map +0 -1
  416. package/dist/887.js +0 -1
  417. package/dist/887.js.map +0 -1
  418. package/dist/8927.js +0 -1
  419. package/dist/8927.js.map +0 -1
  420. package/dist/916.js +0 -1
  421. package/dist/9355.js +0 -1
  422. package/dist/9355.js.map +0 -1
  423. package/dist/9675.js +0 -1
  424. package/dist/9675.js.map +0 -1
  425. package/dist/9931.js +0 -1
  426. package/dist/9931.js.map +0 -1
  427. package/jest.config.js +0 -3
  428. package/src/shr-summary/shr-authorization-form.workspace.tsx +0 -149
@@ -1,41 +1,41 @@
1
- import React, { useState, useEffect, useMemo } from 'react';
1
+ import React, { useMemo, useState } from 'react';
2
2
  import { useTranslation } from 'react-i18next';
3
+ import { z } from 'zod';
3
4
  import {
4
- Column,
5
- Form,
6
- Stack,
7
- Search,
5
+ Button,
8
6
  ButtonSet,
7
+ Column,
9
8
  ComboBox,
10
- Button,
11
- Tile,
12
- TextArea,
9
+ Form,
13
10
  InlineLoading,
11
+ Search,
12
+ Stack,
14
13
  Tag,
14
+ TextArea,
15
+ Tile,
15
16
  } from '@carbon/react';
16
- import { ExtensionSlot, showSnackbar, useSession, useConfig, formatDate, formatDatetime } from '@openmrs/esm-framework';
17
- import { z } from 'zod';
18
- import PatientInfo from './referral-patient-info.component';
19
- import styles from './referral.workspace.scss';
20
- import { Hospital, Close } from '@carbon/react/icons';
21
- import {
22
- useFacilities,
23
- useReasons,
24
- useSendReferralToArtDirectory,
25
- useSystemSetting,
26
- } from './referral-workspace.resource';
17
+ import { Close, Hospital } from '@carbon/react/icons';
18
+ import { ExtensionSlot, formatDate, formatDatetime, showSnackbar, Workspace2 } from '@openmrs/esm-framework';
27
19
  import usePatient from '../hooks/usePatient';
28
- import { type Concept, type Facility, type ReferralPayload } from '../types';
29
20
  import { FacilityReferralFormData, facilityReferralSchema, ValidationErrors } from '../schema';
21
+ import { type Concept, type Facility, type ReferralPayload } from '../types';
30
22
  import {
31
- getPatientName,
32
- getPatientGender,
33
- getPatientIdentifiers,
34
23
  formatBirthDate,
35
24
  getPatientAddress,
36
25
  getPatientDeathInfo,
26
+ getPatientGender,
27
+ getPatientIdentifiers,
28
+ getPatientName,
37
29
  getPhoneNumber,
38
30
  } from '../utils/function';
31
+ import PatientInfo from './referral-patient-info.component';
32
+ import {
33
+ useFacilities,
34
+ useReasons,
35
+ useSendReferralToArtDirectory,
36
+ useSystemSetting,
37
+ } from './referral-workspace.resource';
38
+ import styles from './referral.workspace.scss';
39
39
 
40
40
  interface FacilityReferralProps {
41
41
  closeWorkspace: () => void;
@@ -234,7 +234,7 @@ const FacilityReferralForm: React.FC<FacilityReferralProps> = ({ closeWorkspace,
234
234
  showSnackbar({
235
235
  kind: 'error',
236
236
  title: t('referError', 'Referral Failed'),
237
- subtitle: t('referErrorDetails', error.message || 'An unexpected error occurred'),
237
+ subtitle: t('referErrorDetails', String(error.message) || 'An unexpected error occurred'),
238
238
  timeoutInMs: 6000,
239
239
  });
240
240
  } finally {
@@ -301,171 +301,178 @@ const FacilityReferralForm: React.FC<FacilityReferralProps> = ({ closeWorkspace,
301
301
  ]);
302
302
 
303
303
  return (
304
- <Form className={styles.form} onSubmit={onSubmit}>
305
- <Stack gap={4} className={styles.grid}>
306
- <h3 className={styles.formTitle}>{t('facilityReferral', 'Facility Referral')}</h3>
307
-
308
- <Column>
309
- <ComboBox
310
- id="referral-type"
311
- titleText={t('referralType', 'Referral Type')}
312
- items={['Facility to Facility']}
313
- onChange={({ selectedItem }) => {
314
- setReferralType(selectedItem);
315
- }}
316
- placeholder={t('selectReferralType', 'Select referral type')}
317
- selectedItem={referralType}
318
- invalid={!!validationErrors.referralType}
319
- invalidText={validationErrors.referralType}
320
- />
321
- </Column>
322
-
323
- {referralType && (
324
- <>
325
- <Column>
326
- <h4 className={styles.sectionHeader}>{t('destinationFacility', 'Destination Facility')}</h4>
327
- {!selectedFacility ? (
328
- <>
329
- <Search
330
- size="lg"
331
- placeholder={t('searchFacility', 'Search for facility')}
332
- labelText={t('search', 'Search')}
333
- value={facilitySearchTerm}
334
- onChange={(e) => {
335
- const value = e.target.value;
336
- setFacilitySearchTerm(value);
337
- }}
338
- />
339
- {facilitySearchTerm && facilities?.length > 0 && (
340
- <div className={styles.searchResults}>
341
- {facilities.map((facility) => (
342
- <Tile
343
- key={facility.uuid}
344
- className={styles.resultTile}
345
- onClick={() => handleFacilitySelect(facility)}>
346
- <div className={styles.tileContent}>
347
- <Hospital size={20} className={styles.illustrationPictogram} />
348
- <div className={styles.facilityInfo}>
349
- <strong>{facility.name}</strong>
350
- <div>MFL: {facility.attributes?.[0]?.value || 'N/A'}</div>
351
- </div>
352
- </div>
353
- </Tile>
354
- ))}
355
- </div>
356
- )}
357
- </>
358
- ) : (
359
- <Tile className={styles.selectedItem}>
360
- <div className={styles.tileContent}>
361
- <Hospital size={20} className={styles.illustrationPictogram} />
362
- <div className={styles.facilityInfo}>
363
- <strong>{selectedFacility.name}</strong>
364
- <div>MFL: {selectedFacility.attributes?.[0]?.value || 'N/A'}</div>
365
- </div>
366
- <Button
367
- hasIconOnly
368
- renderIcon={Close}
369
- iconDescription={t('remove', 'Remove')}
370
- kind="ghost"
371
- onClick={() => {
372
- setSelectedFacility(null);
304
+ <Workspace2 title={t('referralForm', 'Referral Form')}>
305
+ <Form className={styles.form} onSubmit={onSubmit}>
306
+ <Stack gap={4} className={styles.grid}>
307
+ <h3 className={styles.formTitle}>{t('facilityReferral', 'Facility Referral')}</h3>
308
+
309
+ <Column>
310
+ <ComboBox
311
+ id="referral-type"
312
+ titleText={t('referralType', 'Referral Type')}
313
+ items={['Facility to Facility']}
314
+ onChange={({ selectedItem }) => {
315
+ setReferralType(selectedItem);
316
+ }}
317
+ placeholder={t('selectReferralType', 'Select referral type')}
318
+ selectedItem={referralType}
319
+ invalid={!!validationErrors.referralType}
320
+ invalidText={validationErrors.referralType}
321
+ />
322
+ </Column>
323
+
324
+ {referralType && (
325
+ <>
326
+ <Column>
327
+ <h4 className={styles.sectionHeader}>{t('destinationFacility', 'Destination Facility')}</h4>
328
+ {!selectedFacility ? (
329
+ <>
330
+ <Search
331
+ size="lg"
332
+ placeholder={t('searchFacility', 'Search for facility')}
333
+ labelText={t('search', 'Search')}
334
+ value={facilitySearchTerm}
335
+ onChange={(e) => {
336
+ const value = e.target.value;
337
+ setFacilitySearchTerm(value);
373
338
  }}
374
339
  />
340
+ {facilitySearchTerm && facilities?.length > 0 && (
341
+ <div className={styles.searchResults}>
342
+ {facilities.map((facility) => (
343
+ <Tile
344
+ key={facility.uuid}
345
+ className={styles.resultTile}
346
+ onClick={() => handleFacilitySelect(facility)}>
347
+ <div className={styles.tileContent}>
348
+ <Hospital size={20} className={styles.illustrationPictogram} />
349
+ <div className={styles.facilityInfo}>
350
+ <strong>{facility.name}</strong>
351
+ <div>MFL: {facility.attributes?.[0]?.value || 'N/A'}</div>
352
+ </div>
353
+ </div>
354
+ </Tile>
355
+ ))}
356
+ </div>
357
+ )}
358
+ </>
359
+ ) : (
360
+ <Tile className={styles.selectedItem}>
361
+ <div className={styles.tileContent}>
362
+ <Hospital size={20} className={styles.illustrationPictogram} />
363
+ <div className={styles.facilityInfo}>
364
+ <strong>{selectedFacility.name}</strong>
365
+ <div>MFL: {selectedFacility.attributes?.[0]?.value || 'N/A'}</div>
366
+ </div>
367
+ <Button
368
+ hasIconOnly
369
+ renderIcon={Close}
370
+ iconDescription={t('remove', 'Remove')}
371
+ kind="ghost"
372
+ onClick={() => {
373
+ setSelectedFacility(null);
374
+ }}
375
+ />
376
+ </div>
377
+ </Tile>
378
+ )}
379
+ {validationErrors.selectedFacility && (
380
+ <div className={styles.errorMessage}>{validationErrors.selectedFacility}</div>
381
+ )}
382
+ </Column>
383
+
384
+ <Column>
385
+ <h4 className={styles.sectionHeader}>{t('patient', 'Patient')}</h4>
386
+ {patientSelected && patientUuid ? (
387
+ <PatientInfo patientUuid={patientUuid} />
388
+ ) : (
389
+ <ExtensionSlot
390
+ name="patient-search-bar-slot"
391
+ state={{
392
+ selectPatientAction: selectPatient,
393
+ buttonProps: { kind: 'primary' },
394
+ }}
395
+ />
396
+ )}
397
+ {validationErrors.patientUuid && (
398
+ <div className={styles.errorMessage}>{validationErrors.patientUuid}</div>
399
+ )}
400
+ </Column>
401
+
402
+ <Column>
403
+ <h4 className={styles.sectionHeader}>{t('referralReasons', 'Referral Reasons')}</h4>
404
+ <Search
405
+ size="lg"
406
+ placeholder={t('searchReasons', 'Search for referral reasons')}
407
+ labelText={t('search', 'Search')}
408
+ value={reasonSearchTerm}
409
+ onChange={(e) => {
410
+ const value = e.target.value;
411
+ setReasonSearchTerm(value);
412
+ }}
413
+ />
414
+ {reasonSearchTerm && reasons?.length > 0 && (
415
+ <div className={styles.searchResults}>
416
+ {reasons.map((reason) => (
417
+ <Tile key={reason.uuid} className={styles.resultTile} onClick={() => handleReasonSelect(reason)}>
418
+ {reason.name.name}
419
+ </Tile>
420
+ ))}
421
+ </div>
422
+ )}
423
+ {selectedReasons.length > 0 && (
424
+ <div className={styles.selectedItems}>
425
+ {selectedReasons.map((reason) => (
426
+ <Tag
427
+ key={reason.uuid}
428
+ size="lg"
429
+ type="gray"
430
+ filter
431
+ onClose={() => handleRemoveReason(reason.uuid)}>
432
+ {reason.name.name}
433
+ </Tag>
434
+ ))}
375
435
  </div>
376
- </Tile>
377
- )}
378
- {validationErrors.selectedFacility && (
379
- <div className={styles.errorMessage}>{validationErrors.selectedFacility}</div>
380
- )}
381
- </Column>
382
-
383
- <Column>
384
- <h4 className={styles.sectionHeader}>{t('patient', 'Patient')}</h4>
385
- {patientSelected && patientUuid ? (
386
- <PatientInfo patientUuid={patientUuid} />
387
- ) : (
388
- <ExtensionSlot
389
- name="patient-search-bar-slot"
390
- state={{
391
- selectPatientAction: selectPatient,
392
- buttonProps: { kind: 'primary' },
436
+ )}
437
+ {validationErrors.selectedReasons && (
438
+ <div className={styles.errorMessage}>{validationErrors.selectedReasons}</div>
439
+ )}
440
+ </Column>
441
+ <Column>
442
+ <h4 className={styles.sectionHeader}>{t('clinicalNotes', 'Clinical Notes')}</h4>
443
+ <TextArea
444
+ labelText={t('clinicalNotes', 'Clinical Notes')}
445
+ rows={4}
446
+ value={clinicalNotes}
447
+ onChange={(e) => {
448
+ const value = e.target.value;
449
+ setClinicalNotes(value);
450
+
451
+ if (validationErrors.clinicalNotes) {
452
+ setValidationErrors((prev) => ({ ...prev, clinicalNotes: undefined }));
453
+ }
393
454
  }}
455
+ invalid={!!validationErrors.clinicalNotes}
456
+ invalidText={validationErrors.clinicalNotes}
394
457
  />
395
- )}
396
- {validationErrors.patientUuid && (
397
- <div className={styles.errorMessage}>{validationErrors.patientUuid}</div>
398
- )}
399
- </Column>
400
-
401
- <Column>
402
- <h4 className={styles.sectionHeader}>{t('referralReasons', 'Referral Reasons')}</h4>
403
- <Search
404
- size="lg"
405
- placeholder={t('searchReasons', 'Search for referral reasons')}
406
- labelText={t('search', 'Search')}
407
- value={reasonSearchTerm}
408
- onChange={(e) => {
409
- const value = e.target.value;
410
- setReasonSearchTerm(value);
411
- }}
412
- />
413
- {reasonSearchTerm && reasons?.length > 0 && (
414
- <div className={styles.searchResults}>
415
- {reasons.map((reason) => (
416
- <Tile key={reason.uuid} className={styles.resultTile} onClick={() => handleReasonSelect(reason)}>
417
- {reason.name.name}
418
- </Tile>
419
- ))}
420
- </div>
421
- )}
422
- {selectedReasons.length > 0 && (
423
- <div className={styles.selectedItems}>
424
- {selectedReasons.map((reason) => (
425
- <Tag key={reason.uuid} size="lg" type="gray" filter onClose={() => handleRemoveReason(reason.uuid)}>
426
- {reason.name.name}
427
- </Tag>
428
- ))}
429
- </div>
430
- )}
431
- {validationErrors.selectedReasons && (
432
- <div className={styles.errorMessage}>{validationErrors.selectedReasons}</div>
433
- )}
434
- </Column>
435
- <Column>
436
- <h4 className={styles.sectionHeader}>{t('clinicalNotes', 'Clinical Notes')}</h4>
437
- <TextArea
438
- labelText={t('clinicalNotes', 'Clinical Notes')}
439
- rows={4}
440
- value={clinicalNotes}
441
- onChange={(e) => {
442
- const value = e.target.value;
443
- setClinicalNotes(value);
444
-
445
- if (validationErrors.clinicalNotes) {
446
- setValidationErrors((prev) => ({ ...prev, clinicalNotes: undefined }));
447
- }
448
- }}
449
- invalid={!!validationErrors.clinicalNotes}
450
- invalidText={validationErrors.clinicalNotes}
451
- />
452
- </Column>
453
- </>
454
- )}
455
- </Stack>
456
- <ButtonSet className={styles.buttonSet}>
457
- <Button kind="secondary" onClick={closeWorkspace} disabled={isSubmitting}>
458
- {t('cancel', 'Cancel')}
459
- </Button>
460
- <Button kind="primary" type="submit" disabled={isSubmitting || !isFormValid || isLoadingPatient}>
461
- {isSubmitting ? (
462
- <InlineLoading description={t('submitting', 'Submitting...')} />
463
- ) : (
464
- t('submitReferral', 'Submit Referral')
458
+ </Column>
459
+ </>
465
460
  )}
466
- </Button>
467
- </ButtonSet>
468
- </Form>
461
+ </Stack>
462
+ <ButtonSet className={styles.buttonSet}>
463
+ <Button kind="secondary" onClick={closeWorkspace} disabled={isSubmitting}>
464
+ {t('cancel', 'Cancel')}
465
+ </Button>
466
+ <Button kind="primary" type="submit" disabled={isSubmitting || !isFormValid || isLoadingPatient}>
467
+ {isSubmitting ? (
468
+ <InlineLoading description={t('submitting', 'Submitting...')} />
469
+ ) : (
470
+ t('submitReferral', 'Submit Referral')
471
+ )}
472
+ </Button>
473
+ </ButtonSet>
474
+ </Form>
475
+ </Workspace2>
469
476
  );
470
477
  };
471
478
 
@@ -2,6 +2,7 @@
2
2
  "actions": "ድርጊቶች",
3
3
  "allergen": "አለርጂ",
4
4
  "allergies": "አለርጂዎች",
5
+ "authorizeFailed": "Authorization failed",
5
6
  "birthdate": "የትውልድ ቀን",
6
7
  "cancel": "ይቅር",
7
8
  "Category": "ምድብ",
@@ -26,16 +27,18 @@
26
27
  "fromCommunity": "ከማህበረሰብ",
27
28
  "fromFacility": "ከተቋም",
28
29
  "gender": "ፆታ",
30
+ "hieDependants": "HIE Dependants",
29
31
  "labresults": "የላብራቶሪ ውጤቶች",
30
32
  "loading": "በመጫን ላይ...",
31
33
  "medications": "መድሃኒቶች",
32
34
  "missingNupiIdentiferMessage": "ታካሚው ብሔራዊ የታካሚ ልዩ መለያ (NUPI) የለውም። ሪፈራሎቻቸውን ለማግኘት ታካሚውን በደንበኛ መዝገብ ቤት ያስመዝግቡ።",
33
35
  "name": "ስም",
34
- "noDependentsFoundFromHIE": "ከHIE ምንም ጥገኞች አልተገኙም",
35
36
  "noRecordsToDisplay": "ወደዚህ ተቋም ምንም አዲስ ሪፈራሎች የሉም",
36
37
  "noSHRRecords": "የSHR መዝገቦች አልተሳቡም",
37
38
  "nupi": "UPI",
38
39
  "onsetDate": "የጀመረበት ቀን",
40
+ "otpFailed": "Failed to send OTP",
41
+ "otpVerificationSuccessMessage": "OTP Vefification succesfull",
39
42
  "patient": "Patient",
40
43
  "patientDataMissing": "Patient Data Missing",
41
44
  "patientDataNotLoaded": "Patient data could not be loaded. Please try selecting the patient again.",
@@ -51,7 +54,6 @@
51
54
  "reaction": "ምላሽ",
52
55
  "reasonCode": "የምክንያት ኮድ",
53
56
  "referError": "የተቋም ሪፈራል ስህተት",
54
- "referErrorDetails": "",
55
57
  "referral": "ሪፈራሎች",
56
58
  "referralDate": "የሪፈራል ቀን",
57
59
  "referralError": "ሪፈራል በማስተናገድ ላይ ስህተት",
@@ -2,6 +2,7 @@
2
2
  "actions": "Actions",
3
3
  "allergen": "Allergen",
4
4
  "allergies": "Allergies",
5
+ "authorizeFailed": "Authorization failed",
5
6
  "birthdate": "Birth Date",
6
7
  "cancel": "Cancel",
7
8
  "Category": "Category",
@@ -26,16 +27,18 @@
26
27
  "fromCommunity": "From Community",
27
28
  "fromFacility": "From Facility",
28
29
  "gender": "Gender",
30
+ "hieDependants": "HIE Dependants",
29
31
  "labresults": "labResults",
30
32
  "loading": "Loading...",
31
33
  "medications": "Medications",
32
34
  "missingNupiIdentiferMessage": "The patient is missing national patient unique identifier (NUPI). Please register the patient with the client registry to retrieve their referrals.",
33
35
  "name": "Name",
34
- "noDependentsFoundFromHIE": "No dependents found from HIE",
35
36
  "noRecordsToDisplay": "There are no new referrals to this facility",
36
37
  "noSHRRecords": "SHR Records have not been pulled",
37
38
  "nupi": "UPI",
38
39
  "onsetDate": "Onset Date",
40
+ "otpFailed": "Failed to send OTP",
41
+ "otpVerificationSuccessMessage": "OTP Vefification succesfull",
39
42
  "patient": "Patient",
40
43
  "patientDataMissing": "Patient Data Missing",
41
44
  "patientDataNotLoaded": "Patient data could not be loaded. Please try selecting the patient again.",
@@ -51,7 +54,6 @@
51
54
  "reaction": "Reaction",
52
55
  "reasonCode": "Reason Code",
53
56
  "referError": "Facility Referal Error",
54
- "referErrorDetails": "",
55
57
  "referral": "Referrals",
56
58
  "referralDate": "Referral Date",
57
59
  "referralError": "Error processing referral",
@@ -2,6 +2,7 @@
2
2
  "actions": "Actions",
3
3
  "allergen": "Allergène",
4
4
  "allergies": "Allergies",
5
+ "authorizeFailed": "Authorization failed",
5
6
  "birthdate": "Date de naissance",
6
7
  "cancel": "Annuler",
7
8
  "Category": "Catégorie",
@@ -26,16 +27,18 @@
26
27
  "fromCommunity": "De la communauté",
27
28
  "fromFacility": "De l'établissement",
28
29
  "gender": "Sexe",
30
+ "hieDependants": "HIE Dependants",
29
31
  "labresults": "Résultats de laboratoire",
30
32
  "loading": "Chargement...",
31
33
  "medications": "Médicaments",
32
34
  "missingNupiIdentiferMessage": "Le patient n'a pas d'identifiant national unique (NUPI). Veuillez enregistrer le patient dans le registre des clients pour récupérer ses références.",
33
35
  "name": "Nom",
34
- "noDependentsFoundFromHIE": "Aucun dépendant trouvé dans le HIE",
35
36
  "noRecordsToDisplay": "Il n'y a aucune nouvelle référence pour cet établissement",
36
37
  "noSHRRecords": "Les enregistrements SHR n'ont pas été récupérés",
37
38
  "nupi": "UPI",
38
39
  "onsetDate": "Date de début",
40
+ "otpFailed": "Failed to send OTP",
41
+ "otpVerificationSuccessMessage": "OTP Vefification succesfull",
39
42
  "patient": "Patient",
40
43
  "patientDataMissing": "Données du patient manquantes",
41
44
  "patientDataNotLoaded": "Les données du patient n'ont pas pu être chargées. Veuillez essayer de sélectionner à nouveau le patient.",
@@ -51,7 +54,6 @@
51
54
  "reaction": "Réaction",
52
55
  "reasonCode": "Code de raison",
53
56
  "referError": "Erreur de référence de l'établissement",
54
- "referErrorDetails": "",
55
57
  "referral": "Références",
56
58
  "referralDate": "Date de référence",
57
59
  "referralError": "Erreur lors du traitement de la référence",
@@ -2,6 +2,7 @@
2
2
  "actions": "Actions",
3
3
  "allergen": "Allergen",
4
4
  "allergies": "Allergies",
5
+ "authorizeFailed": "Authorization failed",
5
6
  "birthdate": "Date of birth",
6
7
  "cancel": "Cancel",
7
8
  "Category": "Category",
@@ -26,16 +27,18 @@
26
27
  "fromCommunity": "From Community",
27
28
  "fromFacility": "From Facility",
28
29
  "gender": "Gender",
30
+ "hieDependants": "HIE Dependants",
29
31
  "labresults": "labResults",
30
32
  "loading": "Loading...",
31
33
  "medications": "Medications",
32
34
  "missingNupiIdentiferMessage": "The patient is missing national patient unique identifier (NUPI). Please register the patient with the client registry to retrieve their referrals.",
33
35
  "name": "Name",
34
- "noDependentsFoundFromHIE": "No dependents found from HIE",
35
36
  "noRecordsToDisplay": "There are no new referrals to this facility",
36
37
  "noSHRRecords": "SHR Records have not been pulled",
37
38
  "nupi": "UPI",
38
39
  "onsetDate": "Onset Date",
40
+ "otpFailed": "Failed to send OTP",
41
+ "otpVerificationSuccessMessage": "OTP Vefification succesfull",
39
42
  "patient": "Patient",
40
43
  "patientDataMissing": "Patient Data Missing",
41
44
  "patientDataNotLoaded": "Patient data could not be loaded. Please try selecting the patient again.",
@@ -51,7 +54,6 @@
51
54
  "reaction": "Reaction",
52
55
  "reasonCode": "Reason Code",
53
56
  "referError": "Facility Referral Error",
54
- "referErrorDetails": "",
55
57
  "referral": "Referrals",
56
58
  "referralDate": "Referral Date",
57
59
  "referralError": "Error processing referral",
package/tsconfig.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "extends": "../../tsconfig.json",
3
3
  "include": ["src/**/*"],
4
- "exclude": ["src/**/*.test.tsx", "src/**/*.outdated.tsx"]
4
+ "exclude": ["src/**/*.test.ts", "src/**/*.test.tsx", "src/**/*.outdated.tsx"]
5
5
  }