@ampath/esm-reports-app 1.0.0-next.8 → 1.0.0-next.80

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 (302) hide show
  1. package/dist/0.css +1 -0
  2. package/dist/0.css.map +1 -0
  3. package/dist/0.js +1 -0
  4. package/dist/0.js.map +1 -0
  5. package/dist/197.js +1 -1
  6. package/dist/282.js +1 -1
  7. package/dist/282.js.map +1 -1
  8. package/dist/295.css +1 -0
  9. package/dist/295.css.map +1 -0
  10. package/dist/295.js +1 -0
  11. package/dist/295.js.map +1 -0
  12. package/dist/299.js +2 -0
  13. package/dist/299.js.LICENSE.txt +3 -0
  14. package/dist/299.js.map +1 -0
  15. package/dist/300.js +1 -1
  16. package/dist/311.js +1 -1
  17. package/dist/311.js.map +1 -1
  18. package/dist/335.js +1 -1
  19. package/dist/353.js +1 -1
  20. package/dist/353.js.map +1 -1
  21. package/dist/354.js +2 -0
  22. package/dist/354.js.LICENSE.txt +20 -0
  23. package/dist/354.js.map +1 -0
  24. package/dist/410.js +1 -0
  25. package/dist/410.js.map +1 -0
  26. package/dist/457.js +2 -0
  27. package/dist/457.js.LICENSE.txt +261 -0
  28. package/dist/457.js.map +1 -0
  29. package/dist/478.js +1 -1
  30. package/dist/478.js.map +1 -1
  31. package/dist/480.js +1 -0
  32. package/dist/540.js +1 -1
  33. package/dist/540.js.map +1 -1
  34. package/dist/55.js +1 -1
  35. package/dist/600.js +2 -0
  36. package/dist/600.js.LICENSE.txt +35 -0
  37. package/dist/600.js.map +1 -0
  38. package/dist/652.js +1 -1
  39. package/dist/757.js +1 -0
  40. package/dist/757.js.map +1 -0
  41. package/dist/781.js +1 -0
  42. package/dist/781.js.map +1 -0
  43. package/dist/961.js +1 -1
  44. package/dist/961.js.map +1 -1
  45. package/dist/99.js +1 -1
  46. package/dist/99.js.map +1 -0
  47. package/dist/ampath-esm-reports-app.js +1 -1
  48. package/dist/ampath-esm-reports-app.js.map +1 -1
  49. package/dist/routes.json +1 -1
  50. package/package.json +4 -2
  51. package/src/common/daily-summary-table.tsx +55 -0
  52. package/src/common/linelist-table/index.ts +3 -0
  53. package/src/common/linelist-table/linelist-columns.ts +48 -0
  54. package/src/common/linelist-table/linelist-table.component.tsx +442 -0
  55. package/src/common/linelist-table/linelist-table.scss +306 -0
  56. package/src/common/linelist-table/linelist-table.test.tsx +120 -0
  57. package/src/common/linelist-table/use-all-rows.ts +93 -0
  58. package/src/common/linelist-table/use-column-layout.ts +123 -0
  59. package/src/common/report-error/index.ts +1 -0
  60. package/src/common/report-error/show-report-error.ts +25 -0
  61. package/src/common/report-filters/date-range.ts +137 -0
  62. package/src/common/report-filters/index.ts +4 -0
  63. package/src/common/report-filters/report-filters.component.tsx +317 -99
  64. package/src/common/report-filters/report-filters.scss +264 -32
  65. package/src/common/report-filters/types.ts +79 -0
  66. package/src/common/report-filters/use-restore-period.ts +43 -0
  67. package/src/common/report-header/index.ts +1 -0
  68. package/src/common/report-header/use-location-details.ts +58 -0
  69. package/src/common/report-page/download-sheet-pdf.ts +225 -0
  70. package/src/common/report-page/index.ts +3 -0
  71. package/src/common/report-page/report-page.component.tsx +32 -0
  72. package/src/common/report-page/report-page.scss +45 -0
  73. package/src/common/report-page/use-page-scale.ts +60 -0
  74. package/src/common/report-placeholder/has-report-data.ts +15 -0
  75. package/src/common/report-placeholder/index.ts +3 -0
  76. package/src/common/report-placeholder/report-placeholder.component.tsx +81 -0
  77. package/src/common/report-placeholder/report-placeholder.scss +48 -0
  78. package/src/common/report-placeholder/use-generated-location.ts +62 -0
  79. package/src/common/report-register/index.ts +6 -0
  80. package/src/common/report-register/register-columns.ts +46 -0
  81. package/src/common/report-register/register-layout.component.tsx +265 -0
  82. package/src/common/report-register/register-layout.scss +150 -0
  83. package/src/common/report-register/register-table.scss +71 -0
  84. package/src/common/report-register/report-parents.ts +29 -0
  85. package/src/common/report-register/rows-to-csv.ts +89 -0
  86. package/src/common/report-register/use-location-name.ts +54 -0
  87. package/src/common/report-register/use-patient-list.ts +92 -0
  88. package/src/common/report-skeleton/index.ts +1 -0
  89. package/src/common/report-skeleton/report-skeleton.component.tsx +46 -0
  90. package/src/common/report-skeleton/report-skeleton.scss +29 -0
  91. package/src/config-schema.ts +9 -1
  92. package/src/dashboard/report-catalog.ts +191 -0
  93. package/src/dashboard/reports-dasboard.tsx +189 -18
  94. package/src/dashboard/reports-dashboard.module.scss +357 -14
  95. package/src/index.ts +13 -1
  96. package/src/registers/moh-240/moh-240-register.scss +41 -0
  97. package/src/registers/moh-240/moh-240.component.test.tsx +166 -0
  98. package/src/registers/moh-240/moh-240.component.tsx +164 -0
  99. package/src/registers/moh-267/moh-267-register.component.tsx +407 -0
  100. package/src/registers/moh-267/moh-267-register.scss +298 -0
  101. package/src/registers/moh-267/moh-267-summary.ts +102 -0
  102. package/src/registers/moh-267/moh-267.component.tsx +94 -0
  103. package/src/registers/moh-267/moh-267.types.ts +47 -0
  104. package/src/registers/moh-362/moh-362-lab-register.component.tsx +551 -0
  105. package/src/registers/moh-362/moh-362-lab-register.scss +412 -0
  106. package/src/registers/moh-362/moh-362-linkage-register.component.tsx +215 -0
  107. package/src/registers/moh-362/moh-362-linkage-register.scss +91 -0
  108. package/src/registers/moh-362/moh-362.component.tsx +117 -0
  109. package/src/registers/moh-362/moh-362.scss +11 -0
  110. package/src/registers/moh-362/moh-362.types.ts +87 -0
  111. package/src/registers/presumptive-tb/presumptive-tb-register.component.tsx +391 -0
  112. package/src/registers/presumptive-tb/presumptive-tb-register.scss +262 -0
  113. package/src/registers/presumptive-tb/presumptive-tb.component.tsx +92 -0
  114. package/src/registers/presumptive-tb/presumptive-tb.types.ts +88 -0
  115. package/src/registers/register-catalog.ts +202 -0
  116. package/src/registers/register-file-name.ts +18 -0
  117. package/src/registers/tb-lab-register/tb-lab-register-table.component.tsx +116 -0
  118. package/src/registers/tb-lab-register/tb-lab-register-table.scss +123 -0
  119. package/src/registers/tb-lab-register/tb-lab-register.columns.ts +164 -0
  120. package/src/registers/tb-lab-register/tb-lab-register.component.test.tsx +232 -0
  121. package/src/registers/tb-lab-register/tb-lab-register.component.tsx +153 -0
  122. package/src/registers/tb4/tb4-parts.tsx +164 -0
  123. package/src/registers/tb4/tb4-patient-sheet.component.tsx +418 -0
  124. package/src/registers/tb4/tb4-register.scss +282 -0
  125. package/src/registers/tb4/tb4-treatment-sheet.component.tsx +349 -0
  126. package/src/registers/tb4/tb4.component.tsx +120 -0
  127. package/src/registers/tb4/tb4.types.ts +129 -0
  128. package/src/reports/acf-summary/acf-summary-form.component.tsx +176 -0
  129. package/src/reports/acf-summary/acf-summary-linelist.component.tsx +86 -0
  130. package/src/reports/acf-summary/acf-summary.component.tsx +97 -0
  131. package/src/reports/acf-summary/acf-summary.counts.ts +37 -0
  132. package/src/reports/acf-summary/acf-summary.scss +162 -0
  133. package/src/reports/datatable-wrapper/datatable-wrapper.component.tsx +63 -48
  134. package/src/reports/moh-240/moh-240-header.component.tsx +62 -0
  135. package/src/reports/moh-240/moh-240.columns.ts +113 -0
  136. package/src/reports/moh-240/moh-240.component.tsx +72 -9
  137. package/src/reports/moh-240/moh-240.scss +40 -0
  138. package/src/reports/moh-240/sub-reports/moh-240-register.component.tsx +31 -37
  139. package/src/reports/moh-240/sub-reports/page-summary.component.tsx +143 -106
  140. package/src/reports/moh-505/moh-505-header.component.tsx +67 -0
  141. package/src/reports/moh-505/moh-505.component.tsx +441 -0
  142. package/src/reports/moh-505/moh-505.scss +117 -0
  143. package/src/reports/moh-705B/moh-204b-register.component.tsx +246 -0
  144. package/src/reports/moh-705B/moh-204b.columns.ts +39 -0
  145. package/src/reports/moh-705B/moh-705b.component.tsx +659 -0
  146. package/src/reports/moh-705B/moh-705b.scss +172 -0
  147. package/src/reports/moh-705a/moh-705a.component.tsx +661 -0
  148. package/src/reports/moh-705a/moh-705a.scss +172 -0
  149. package/src/reports/moh-705a/registers/moh-204a-register.component.tsx +331 -0
  150. package/src/reports/moh-705a/registers/moh-204a.columns.ts +57 -0
  151. package/src/reports/moh-705a/type.ts +6 -0
  152. package/src/reports/moh-706/moh-706-header.component.tsx +66 -0
  153. package/src/reports/moh-706/moh-706.component.tsx +150 -24
  154. package/src/reports/moh-706/moh-706.scss +119 -11
  155. package/src/reports/moh-706/sub-reports/bacteriology/bacteriology.component.tsx +35 -28
  156. package/src/reports/moh-706/sub-reports/blood-chemistry/blood-chemistry.component.tsx +229 -305
  157. package/src/reports/moh-706/sub-reports/haematology/haematology.component.tsx +26 -19
  158. package/src/reports/moh-706/sub-reports/histology-and-cytology/histology-and-cytology.component.tsx +23 -23
  159. package/src/reports/moh-706/sub-reports/parasitology/parasitology.component.tsx +25 -18
  160. package/src/reports/moh-706/sub-reports/serology/serology.component.tsx +21 -14
  161. package/src/reports/moh-706/sub-reports/specimen-referral-to-higher-levels/specimen-referral-to-higher-levels.component.tsx +2 -2
  162. package/src/reports/moh-706/sub-reports/urine-analysis/urine-analysis.component.tsx +27 -20
  163. package/src/reports/moh-710/moh-710.component.tsx +815 -632
  164. package/src/reports/moh-710/moh-710.scss +142 -21
  165. package/src/reports/moh-710/registers/moh-413/moh-413-columns.ts +22 -0
  166. package/src/reports/moh-710/registers/moh-413/moh-413.component.tsx +140 -0
  167. package/src/reports/moh-710/registers/moh-413/moh-413.scss +64 -0
  168. package/src/reports/moh-710/registers/moh-510/moh-510.columns.ts +40 -0
  169. package/src/reports/moh-710/registers/moh-510/moh-510.component.tsx +191 -0
  170. package/src/reports/moh-710/registers/moh-510/moh-510.scss +130 -0
  171. package/src/reports/moh-710/registers/moh-511-710-register.component.tsx +268 -0
  172. package/src/reports/moh-710/registers/moh-511-710.columns.ts +52 -0
  173. package/src/reports/moh-710/registers/type.ts +31 -0
  174. package/src/reports/moh-711/moh-711.component.tsx +153 -1269
  175. package/src/reports/moh-711/moh711.scss +135 -20
  176. package/src/reports/moh-711/registers/moh-333-register.component.tsx +680 -0
  177. package/src/reports/moh-711/registers/moh-333.columns.ts +119 -0
  178. package/src/reports/moh-711/registers/moh-405-register.component.tsx +566 -0
  179. package/src/reports/moh-711/registers/moh-405.columns.ts +120 -0
  180. package/src/reports/moh-711/registers/moh-406-register.component.tsx +581 -0
  181. package/src/reports/moh-711/registers/moh-406.columns.ts +133 -0
  182. package/src/reports/moh-711/registers/moh-407-register.component.tsx +157 -0
  183. package/src/reports/moh-711/registers/moh-407.columns.ts +24 -0
  184. package/src/reports/moh-711/registers/moh-407.scss +64 -0
  185. package/src/reports/moh-711/registers/moh-510-register.component.tsx +55 -0
  186. package/src/reports/moh-711/registers/moh-511-register.component.tsx +270 -0
  187. package/src/reports/moh-711/registers/moh-511.columns.ts +59 -0
  188. package/src/reports/moh-711/registers/moh-512-columns.ts +94 -0
  189. package/src/reports/moh-711/registers/moh-512.component.tsx +191 -0
  190. package/src/reports/moh-711/registers/moh-512.scss +64 -0
  191. package/src/reports/moh-711/registers/tb-register-columns.ts +17 -0
  192. package/src/reports/moh-711/registers/tb-register.component.tsx +96 -0
  193. package/src/reports/moh-711/registers/tb-register.scss +64 -0
  194. package/src/reports/moh-711/registers/type.ts +192 -0
  195. package/src/reports/moh-711/sections/anc.component.tsx +159 -0
  196. package/src/reports/moh-711/sections/cervical-cancer.component.tsx +148 -0
  197. package/src/reports/moh-711/sections/chanis.component.tsx +389 -0
  198. package/src/reports/moh-711/sections/family-planning.component.tsx +299 -0
  199. package/src/reports/moh-711/sections/gbv.component.tsx +115 -0
  200. package/src/reports/moh-711/sections/maternity.component.tsx +321 -0
  201. package/src/reports/moh-711/sections/medical-social-work.component.tsx +73 -0
  202. package/src/reports/moh-711/sections/other.component.tsx +47 -0
  203. package/src/reports/moh-711/sections/physiotherapy.component.tsx +61 -0
  204. package/src/reports/moh-711/sections/pnc.component.tsx +127 -0
  205. package/src/reports/moh-711/sections/post-abortion.component.tsx +42 -0
  206. package/src/reports/moh-711/sections/rehabilitation.component.tsx +57 -0
  207. package/src/reports/moh-711/sections/report-compiled-by.component.tsx +50 -0
  208. package/src/reports/moh-711/sections/tb-screening.component.tsx +94 -0
  209. package/src/reports/moh-717/moh-717.component.tsx +149 -985
  210. package/src/reports/moh-717/moh717.scss +217 -21
  211. package/src/reports/moh-717/registers/nutrition-register.component.tsx +48 -0
  212. package/src/reports/moh-717/sections/finance.component.tsx +42 -0
  213. package/src/reports/moh-717/sections/inpatient.component.tsx +374 -0
  214. package/src/reports/moh-717/sections/maternity.component.tsx +126 -0
  215. package/src/reports/moh-717/sections/medical-records.component.tsx +35 -0
  216. package/src/reports/moh-717/sections/mortuary.component.tsx +43 -0
  217. package/src/reports/moh-717/sections/operations.component.tsx +53 -0
  218. package/src/reports/moh-717/sections/orthopaedic-trauma.component.tsx +98 -0
  219. package/src/reports/moh-717/sections/outpatient.component.tsx +597 -0
  220. package/src/reports/moh-717/sections/pharmacy.component.tsx +43 -0
  221. package/src/reports/moh-717/sections/preparedby.component.tsx +52 -0
  222. package/src/reports/moh-717/sections/special-services.component.tsx +114 -0
  223. package/src/reports/moh-729b/moh-729b-form.component.tsx +385 -0
  224. package/src/reports/moh-729b/moh-729b-linelist.component.tsx +205 -0
  225. package/src/reports/moh-729b/moh-729b-summary.component.tsx +258 -0
  226. package/src/reports/moh-729b/moh-729b-summary.config.ts +229 -0
  227. package/src/reports/moh-729b/moh-729b.component.tsx +157 -0
  228. package/src/reports/moh-729b/moh-729b.config.ts +235 -0
  229. package/src/reports/moh-729b/moh-729b.scss +276 -0
  230. package/src/reports/moh-729b/moh-729b.types.ts +111 -0
  231. package/src/reports/moh-731/linelist/moh-731-indicators.ts +1122 -0
  232. package/src/reports/moh-731/linelist/moh-731-linelist-sections.ts +472 -0
  233. package/src/reports/moh-731/linelist/moh-731-linelist.component.tsx +102 -0
  234. package/src/reports/moh-731/linelist/use-open-moh-731-linelist.ts +50 -0
  235. package/src/reports/moh-731/moh-731.component.tsx +269 -0
  236. package/src/reports/moh-731/moh-731.scss +496 -0
  237. package/src/reports/moh-731/registers/moh-366.columns.ts +38 -0
  238. package/src/reports/moh-731/registers/moh-366.component.tsx +471 -0
  239. package/src/reports/moh-731/registers/prep-register.component.tsx +284 -0
  240. package/src/reports/moh-731/registers/prep.columns.ts +34 -0
  241. package/src/reports/moh-731/sections/hiv-and-tb-treatment.component.tsx +1206 -0
  242. package/src/reports/moh-731/sections/hiv-testing-and-pre-exposure.component.tsx +727 -0
  243. package/src/reports/moh-731/sections/pmtct.component.tsx +572 -0
  244. package/src/reports/moh-731/summary/moh-731-summary.component.tsx +313 -0
  245. package/src/reports/moh-731/summary/moh-731-summary.config.ts +527 -0
  246. package/src/reports/moh-731/summary/moh-731-summary.scss +247 -0
  247. package/src/reports/moh-740/moh-740.component.scss +202 -0
  248. package/src/reports/moh-740/moh-740.component.tsx +1332 -0
  249. package/src/reports/moh-740/moh-740.resource.ts +54 -0
  250. package/src/reports/moh-740/registers/moh-222-daily-register/moh-222-daily-register.tsx +149 -0
  251. package/src/reports/moh-740/registers/moh-270-permanent-register/moh-270-permanent-register.tsx +123 -0
  252. package/src/reports/moh-740/registers/moh-740-patient-list.scss +0 -0
  253. package/src/reports/moh-740/registers/moh-740-patient-list.tsx +60 -0
  254. package/src/reports/moh-740/registers/moh-740.columns.ts +54 -0
  255. package/src/reports/moh-740/shared/data-cell/data-cell.scss +6 -0
  256. package/src/reports/moh-740/shared/data-cell/data-cell.tsx +23 -0
  257. package/src/reports/moh-740/shared/utils/indicator-register-map.ts +159 -0
  258. package/src/reports/moh-740/types/index.ts +223 -0
  259. package/src/reports/moh-745/moh-745.component.tsx +2058 -0
  260. package/src/reports/moh-745/moh-745.scss +142 -0
  261. package/src/reports/moh-745/registers/moh-412-register.component.tsx +249 -0
  262. package/src/reports/moh-745/registers/moh-412.columns.ts +52 -0
  263. package/src/reports/moh-745/registers/type.ts +223 -0
  264. package/src/reports/table-wrapper/table-row-mapper.component.tsx +20 -5
  265. package/src/reports/table-wrapper/table-wrapper.component.tsx +23 -14
  266. package/src/reports/table-wrapper/table-wrapper.scss +1 -16
  267. package/src/resources/moh-267.resource.ts +27 -0
  268. package/src/resources/moh-362.resource.ts +27 -0
  269. package/src/resources/moh-505.resource.ts +69 -0
  270. package/src/resources/moh-705.resource.ts +118 -0
  271. package/src/resources/moh-706.resource.ts +80 -0
  272. package/src/resources/moh-710.resource.ts +60 -9
  273. package/src/resources/moh-711.resource.ts +206 -9
  274. package/src/resources/moh-717.resource.ts +26 -9
  275. package/src/resources/moh-729b.resource.ts +25 -0
  276. package/src/resources/moh-731.resource.ts +90 -0
  277. package/src/resources/moh-745.resource.ts +76 -0
  278. package/src/resources/patient-list-page.ts +66 -0
  279. package/src/resources/presumptive-tb.resource.ts +27 -0
  280. package/src/root.component.tsx +79 -8
  281. package/src/root.scss +36 -0
  282. package/src/routes.json +3 -1
  283. package/src/utils/format-indicator.ts +39 -0
  284. package/src/utils/get-base-url.ts +39 -7
  285. package/src/utils/utils.ts +30 -1
  286. package/tsconfig.json +1 -1
  287. package/webpack.config.js +22 -1
  288. package/dist/138.js +0 -2
  289. package/dist/138.js.LICENSE.txt +0 -20
  290. package/dist/138.js.map +0 -1
  291. package/dist/184.js +0 -2
  292. package/dist/184.js.LICENSE.txt +0 -14
  293. package/dist/184.js.map +0 -1
  294. package/dist/205.js +0 -1
  295. package/dist/205.js.map +0 -1
  296. package/dist/812.js +0 -1
  297. package/dist/812.js.map +0 -1
  298. package/dist/879.js +0 -1
  299. package/dist/879.js.map +0 -1
  300. package/dist/ampath-esm-reports-app.js.buildmanifest.json +0 -539
  301. package/dist/main.js +0 -1
  302. package/dist/main.js.map +0 -1
@@ -0,0 +1,270 @@
1
+ import { Table, TableBody, TableHead, TableHeader, TableRow } from '@carbon/react';
2
+ import React from 'react';
3
+ import { useLocation, useNavigate, useSearchParams } from 'react-router-dom';
4
+
5
+ import styles from '../../../common/report-register/register-table.scss';
6
+ import { getMoh511PatientList } from '../../../resources/moh-711.resource';
7
+ import { moh511Columns } from './type';
8
+ import classNames from 'classnames';
9
+ import { moh511ExportColumns } from './moh-511.columns';
10
+ import { RegisterLayout, usePatientList } from '../../../common/report-register';
11
+
12
+ const Moh511Register: React.FC = () => {
13
+ const [searchParams] = useSearchParams();
14
+ const location = useLocation();
15
+
16
+ const startDate = searchParams.get('startDate');
17
+ const endDate = searchParams.get('endDate');
18
+ const locationUuids = searchParams.get('locationUuids');
19
+ const indicator = searchParams.get('indicator');
20
+ const reportName = location.state?.reportName || '';
21
+
22
+ const {
23
+ rows: patientlist,
24
+ total,
25
+ isTotalExact,
26
+ isLoading,
27
+ page,
28
+ pageSize,
29
+ onPageChange,
30
+ fetchAll,
31
+ } = usePatientList(
32
+ ({ startIndex, limit }) =>
33
+ getMoh511PatientList({
34
+ startDate,
35
+ endDate,
36
+ locationUuids,
37
+ indicator,
38
+ reportName,
39
+ startIndex,
40
+ limit,
41
+ }),
42
+ [startDate, endDate, locationUuids, indicator, reportName],
43
+ );
44
+
45
+ return (
46
+ <RegisterLayout
47
+ parentLabel="MOH-711 Report"
48
+ parentPath="/moh-711"
49
+ title="MOH 511 Register"
50
+ isLoading={isLoading}
51
+ isEmpty={patientlist.length === 0}
52
+ page={page}
53
+ pageSize={pageSize}
54
+ total={total}
55
+ isTotalExact={isTotalExact}
56
+ onPageChange={onPageChange}
57
+ fetchAll={fetchAll}
58
+ columns={moh511ExportColumns}
59
+ >
60
+ <Table className={classNames(`${styles.table}`, `${styles.tableBordered}`, `${styles.tableStriped}`)}>
61
+ <TableHead>
62
+ <TableRow>
63
+ <TableHeader>Serial No.</TableHeader>
64
+ <TableHeader>
65
+ Date.
66
+ <br />
67
+ (DD:MM:YYYY)
68
+ </TableHeader>
69
+ <TableHeader>
70
+ CWC No.
71
+ <br />
72
+ (New Visit)
73
+ </TableHeader>
74
+ <TableHeader>
75
+ CWC No.
76
+ <br />
77
+ (Revisit)
78
+ </TableHeader>
79
+ <TableHeader>
80
+ BIRTH NOTIFICATION
81
+ <br /> (NUMBER)
82
+ </TableHeader>
83
+ <TableHeader>Full Names (Three names)</TableHeader>
84
+ <TableHeader>Age</TableHeader>
85
+ <TableHeader>Sex</TableHeader>
86
+ <TableHeader>
87
+ County/Sub-
88
+ <br />
89
+ county
90
+ </TableHeader>
91
+ <TableHeader>
92
+ Village /Estate / <br />
93
+ Landmark
94
+ </TableHeader>
95
+ <TableHeader>
96
+ Telephone
97
+ <br />
98
+ number
99
+ </TableHeader>
100
+ <TableHeader>Weight in Kgs</TableHeader>
101
+ <TableHeader>
102
+ Weight
103
+ <br />
104
+ categories:
105
+ <br />
106
+ (1=Normal
107
+ <br />
108
+ 2=UW
109
+ <br />
110
+ 3=SUW
111
+ <br />
112
+ 4=OW
113
+ <br />
114
+ 5=Obese)
115
+ </TableHeader>
116
+ <TableHeader>Height / Length in cm</TableHeader>
117
+ <TableHeader>
118
+ Height/Length
119
+ <br />
120
+ categories:
121
+ <br />
122
+ (1=Normal
123
+ <br />
124
+ 2=Stunted
125
+ <br />
126
+ 3=Sev.
127
+ <br />
128
+ Stunted)
129
+ <br />
130
+ </TableHeader>
131
+ <TableHeader>
132
+ MUAC
133
+ <br />
134
+ 1.Green
135
+ <br />
136
+ 2.Yellow
137
+ <br />
138
+ 3.Red
139
+ </TableHeader>
140
+ <TableHeader>
141
+ Exclusive <br /> Breast feeding <br />
142
+ (less than 6<br /> months)(Y/N)
143
+ </TableHeader>
144
+ <TableHeader>
145
+ Vitamin A
146
+ <br />
147
+ supplimentation:
148
+ <br />
149
+ (6-59 months) (1=6-
150
+ <br />
151
+ 11 months, 2=12-59
152
+ <br />
153
+ months, 3=Not
154
+ <br />
155
+ supplimented)
156
+ </TableHeader>
157
+ <TableHeader>Dewormed (Y/N)</TableHeader>
158
+ <TableHeader>
159
+ MNPs supplimentation:(6-23
160
+ <br />
161
+ children)
162
+ </TableHeader>
163
+ <TableHeader>
164
+ Childs assessed for <br />
165
+ Developmental milestones <br />
166
+ including 1st Haed control ,2=
167
+ <br />
168
+ sitting, 3=talking
169
+ </TableHeader>
170
+ <TableHeader>
171
+ Any Danger Signs
172
+ <br />
173
+ 1.Unable to breastfeed
174
+ <br />
175
+ 2.Unable to drink
176
+ <br />
177
+ 3.Vomits everything
178
+ <br />
179
+ 4.Bloody diarrhoea
180
+ <br />
181
+ 5.Has oedema <br />
182
+ 6.Has convulsions
183
+ </TableHeader>
184
+ <TableHeader>Any Disability</TableHeader>
185
+ <TableHeader>Immunization status up to date(Y/N)</TableHeader>
186
+ <TableHeader>LLIN gievn to under 1 years(Y/N)</TableHeader>
187
+ <TableHeader>
188
+ Follow up for: <br />
189
+ 1=Nutrition service
190
+ <br />
191
+ 2=Rehabilitation service
192
+ </TableHeader>
193
+ <TableHeader>
194
+ 1=referred from CU; 2= <br />
195
+ referred from another H/F;
196
+ <br />
197
+ 3=Not applicable
198
+ </TableHeader>
199
+ <TableHeader>
200
+ 1=referred to CU; 2= <br />
201
+ referred to another H/F;
202
+ <br />
203
+ 3=Not applicable
204
+ </TableHeader>
205
+ <TableHeader>
206
+ Reason for referral <br />
207
+ ....specify
208
+ </TableHeader>
209
+ <TableHeader>REMARKS</TableHeader>
210
+ </TableRow>
211
+ <TableRow>
212
+ <TableHeader>A</TableHeader>
213
+ <TableHeader>B</TableHeader>
214
+ <TableHeader>C</TableHeader>
215
+ <TableHeader>D</TableHeader>
216
+ <TableHeader>E</TableHeader>
217
+ <TableHeader>F</TableHeader>
218
+ <TableHeader>G</TableHeader>
219
+ <TableHeader>H</TableHeader>
220
+ <TableHeader>I</TableHeader>
221
+ <TableHeader>J</TableHeader>
222
+ <TableHeader>K</TableHeader>
223
+ <TableHeader>L</TableHeader>
224
+ <TableHeader>M</TableHeader>
225
+ <TableHeader>N</TableHeader>
226
+ <TableHeader>O</TableHeader>
227
+ <TableHeader>P</TableHeader>
228
+ <TableHeader>Q</TableHeader>
229
+ <TableHeader>R</TableHeader>
230
+ <TableHeader>S</TableHeader>
231
+ <TableHeader>T</TableHeader>
232
+ <TableHeader>U</TableHeader>
233
+ <TableHeader>V</TableHeader>
234
+ <TableHeader>W</TableHeader>
235
+ <TableHeader>X</TableHeader>
236
+ <TableHeader>Y</TableHeader>
237
+ <TableHeader>Z</TableHeader>
238
+ <TableHeader>AA</TableHeader>
239
+ <TableHeader>AB</TableHeader>
240
+ <TableHeader>AC</TableHeader>
241
+ <TableHeader>AD</TableHeader>
242
+ </TableRow>
243
+ </TableHead>
244
+ <TableBody>
245
+ {patientlist?.length > 0 ? (
246
+ patientlist.map((patient, index) => (
247
+ <TableRow key={index}>
248
+ {moh511Columns.map((col) => (
249
+ <td key={col}>
250
+ {col === 'serial_no'
251
+ ? index + 1
252
+ : col === 'visit_date'
253
+ ? new Date(patient?.[col]).toLocaleDateString('en-GB')
254
+ : (patient?.[col] ?? '')}
255
+ </td>
256
+ ))}
257
+ </TableRow>
258
+ ))
259
+ ) : (
260
+ <TableRow>
261
+ <td colSpan={moh511Columns.length}>No data available</td>
262
+ </TableRow>
263
+ )}
264
+ </TableBody>
265
+ </Table>
266
+ </RegisterLayout>
267
+ );
268
+ };
269
+
270
+ export default Moh511Register;
@@ -0,0 +1,59 @@
1
+ import { type RegisterColumn } from '../../../common/report-register';
2
+
3
+ /**
4
+ * MOH 511 as the register prints it: one column per cell, in the order they appear.
5
+ */
6
+ export const moh511ExportColumns: RegisterColumn[] = [
7
+ { header: 'Serial No. - A', value: (row) => row.serial_no ?? '' },
8
+ { header: 'Date. (DD:MM:YYYY) - B', value: (row) => row.visit_date ?? '' },
9
+ { header: 'CWC No. (New Visit) - C', value: (row) => row.cwc_number_new ?? '' },
10
+ { header: 'CWC No. (Revisit) - D', value: (row) => row.cwc_number_revisit ?? '' },
11
+ { header: 'BIRTH NOTIFICATION (NUMBER) - E', value: (row) => row.birth_notification_number ?? '' },
12
+ { header: 'Full Names (Three names) - F', value: (row) => row.full_name ?? '' },
13
+ { header: 'Age - G', value: (row) => row.age ?? '' },
14
+ { header: 'Sex - H', value: (row) => row.sex ?? '' },
15
+ { header: 'County/Sub- county - I', value: (row) => row.county_sub_county ?? '' },
16
+ { header: 'Village /Estate / Landmark - J', value: (row) => row.village_estate_landmark ?? '' },
17
+ { header: 'Telephone number - K', value: (row) => row.phone_number ?? '' },
18
+ { header: 'Weight in Kgs - L', value: (row) => row.weight_kg ?? '' },
19
+ { header: 'Weight categories: (1=Normal 2=UW 3=SUW 4=OW 5=Obese) - M', value: (row) => row.weight_category ?? '' },
20
+ { header: 'Height / Length in cm - N', value: (row) => row.height ?? '' },
21
+ {
22
+ header: 'Height/Length categories: (1=Normal 2=Stunted 3=Sev. Stunted) - O',
23
+ value: (row) => row.height_category ?? '',
24
+ },
25
+ { header: 'MUAC 1.Green 2.Yellow 3.Red - P', value: (row) => row.muac ?? '' },
26
+ {
27
+ header: 'Exclusive Breast feeding (less than 6 months)(Y/N) - Q',
28
+ value: (row) => row.exclusive_breastfeeding_less_6_months ?? '',
29
+ },
30
+ {
31
+ header: 'Vitamin A supplimentation: (6-59 months) (1=6- 11 months, 2=12-59 months, 3=Not supplimented) - R',
32
+ value: (row) => row.vitamin_A_supplementation ?? '',
33
+ },
34
+ { header: 'Dewormed (Y/N) - S', value: (row) => row.dewormed ?? '' },
35
+ { header: 'MNPs supplimentation:(6-23 children) - T', value: (row) => row.mnps_supplimentation ?? '' },
36
+ {
37
+ header: 'Childs assessed for Developmental milestones including 1st Haed control ,2= sitting, 3=talking - U',
38
+ value: (row) => row.developmental_milestones ?? '',
39
+ },
40
+ {
41
+ header:
42
+ 'Any Danger Signs 1.Unable to breastfeed 2.Unable to drink 3.Vomits everything 4.Bloody diarrhoea 5.Has oedema 6.Has convulsions - V',
43
+ value: (row) => row.danger_signs ?? '',
44
+ },
45
+ { header: 'Any Disability - W', value: (row) => row.disability ?? '' },
46
+ { header: 'Immunization status up to date(Y/N) - X', value: (row) => row.immunization_status_up_to_date ?? '' },
47
+ { header: 'LLIN gievn to under 1 years(Y/N) - Y', value: (row) => row.llin_supplimentation_given ?? '' },
48
+ { header: 'Follow up for: 1=Nutrition service 2=Rehabilitation service - Z', value: (row) => row.follow_up ?? '' },
49
+ {
50
+ header: '1=referred from CU; 2= referred from another H/F; 3=Not applicable - AA',
51
+ value: (row) => row.referred_from ?? '',
52
+ },
53
+ {
54
+ header: '1=referred to CU; 2= referred to another H/F; 3=Not applicable - AB',
55
+ value: (row) => row.referred_to ?? '',
56
+ },
57
+ { header: 'Reason for referral ....specify - AC', value: (row) => row.reason_for_referral ?? '' },
58
+ { header: 'REMARKS - AD', value: (row) => row.remarks ?? '' },
59
+ ];
@@ -0,0 +1,94 @@
1
+ import { type RegisterColumn } from '../../../common/report-register/register-columns';
2
+
3
+ /**
4
+ * MOH 512 Family Planning (FP) Register as it prints: one column per cell, A to AS, in the
5
+ * order they appear. Values read the aliases of moh_512_patient_list_template.
6
+ *
7
+ * Columns without a corresponding template alias export blank until the template exposes
8
+ * the required field.
9
+ */
10
+ export const moh512ExportColumns: RegisterColumn[] = [
11
+ { header: 'Date (DD/MM/YYYY) - A', value: (row) => row.date ?? '' },
12
+ { header: 'Client Number - B', value: (row) => row.cr_id ?? row.amrs_id ?? '' },
13
+ { header: 'Name of Client - C', value: (row) => row.name_of_client ?? '' },
14
+ { header: 'Client Type - D', value: (row) => row.client_type ?? '' },
15
+ { header: '1st Ever User of Contraceptive - E', value: (row) => row.first_ever_use_of_contraceptive ?? '' },
16
+ { header: 'Age - F', value: (row) => row.age ?? '' },
17
+ { header: 'Sex - G', value: (row) => row.sex ?? '' },
18
+ { header: 'Disability Status - H', value: (row) => row.disability_status ?? '' },
19
+ { header: 'Telephone Number - I', value: (row) => row.phone_number ?? '' },
20
+ { header: 'Village / Estate / Landmark - J', value: (row) => row.village_estate_landmark ?? '' },
21
+ { header: 'Counselled for FP - K', value: (row) => row.counselled_on_fp ?? '' },
22
+
23
+ // Combined oral contraceptive pills
24
+ {
25
+ header: 'COC Type of Visit - L',
26
+ value: (row) => row.type_of_visit_for_method_combined_oral_contraceptive ?? '',
27
+ },
28
+ {
29
+ header: 'COC Qty Disp. (Cycles) - M',
30
+ value: (row) => row.quantity_dispensed_combined_oral_contraceptive ?? '',
31
+ },
32
+
33
+ // Progestin only pills
34
+ { header: 'POP Type of Visit - N', value: (row) => row.type_of_visit_for_method_progestine ?? '' },
35
+ { header: 'POP Qty Disp. (Cycles) - O', value: (row) => row.quantity_dispensed_progestine ?? '' },
36
+
37
+ // Emergency contraceptive pill
38
+ {
39
+ header: 'Emergency Contraceptive Doses Disp. - P',
40
+ value: (row) => row.quantity_dispensed_emergency_contraceptive_pills ?? '',
41
+ },
42
+
43
+ // Injectables (DMPA)
44
+ { header: 'Injectables Type of Visit - Q', value: () => '' },
45
+ { header: 'DMPA IM Qty Disp. (Vials) - R', value: () => '' },
46
+ { header: 'DMPA SC Qty Disp. (Vials) - S', value: () => '' },
47
+
48
+ // Implants: the register has one type-of-visit column for all implants
49
+ {
50
+ header: 'Implants Type of Visit - T',
51
+ value: (row) => row.type_of_visit_for_method_1_rod ?? row.type_of_visit_for_method_2_rod ?? '',
52
+ },
53
+ { header: 'Qty Disp. 1 Rod (Sets) - U', value: (row) => row.quantity_dispensed_1_rod ?? '' },
54
+ { header: 'Qty Disp. 2 Rods, 3 yrs (Sets) - V', value: () => '' },
55
+ { header: 'Qty Disp. 2 Rods, 5 yrs (Sets) - W', value: () => '' },
56
+
57
+ // IUDs
58
+ { header: 'IUD Type of Visit - X', value: (row) => row.type_of_visit_for_method_iud ?? '' },
59
+ { header: 'IUD Qty Disp. Non-Hormonal (Sets) - Y', value: (row) => row.quantity_dispensed_non_hormonal ?? '' },
60
+ { header: 'IUD Qty Disp. Hormonal (Sets) - Z', value: (row) => row.quantity_dispensed_hormonal ?? '' },
61
+ { header: 'Reasons for LARC Removal - AA', value: (row) => row.reason_for_larc_removal ?? '' },
62
+
63
+ // Condoms
64
+ { header: 'Condom Clients - AB', value: (row) => row.type_of_condom ?? '' },
65
+ { header: 'Qty Disp. Male Condoms - AC', value: (row) => row.quantity_dispensed_male_condoms ?? '' },
66
+ { header: 'Qty Disp. Female Condoms - AD', value: (row) => row.quantity_dispensed_female_condoms ?? '' },
67
+
68
+ { header: 'VSC (BTL or Vasectomy) - AE', value: (row) => row.voluntary_surgical_contraception ?? '' },
69
+
70
+ // Natural FP
71
+ { header: 'Counselled on Natural FP - AF', value: (row) => row.counseled_on_natural_fp ?? '' },
72
+ { header: 'Cycle Beads Given - AG', value: (row) => row.given_cycle_beads ?? '' },
73
+
74
+ { header: 'Timing of PPFP - AH', value: (row) => row.received_post_partum_fp ?? '' },
75
+ { header: 'TB Screening - AI', value: (row) => row.tb_screening ?? '' },
76
+
77
+ // HIV testing
78
+ { header: 'Counselled for HIV - AJ', value: (row) => row.counselled_on_hiv ?? '' },
79
+ { header: 'Counselled and Tested for HIV - AK', value: (row) => row.tested_for_hiv ?? '' },
80
+ { header: 'HIV Status - AL', value: (row) => row.hiv_results ?? '' },
81
+
82
+ { header: 'IPV or Reproductive Coercion - AM', value: (row) => row.intimate_partner_violence ?? '' },
83
+
84
+ // Cervical cancer screening
85
+ { header: 'Cervical Cancer Screened - AN', value: (row) => row.screened_for_cervical_cancer ?? '' },
86
+ { header: 'Cervical Cancer Results - AO', value: (row) => row.cervical_cancer_screening_result ?? '' },
87
+
88
+ // Referrals
89
+ { header: 'Referral From - AP', value: (row) => row.referral_from ?? '' },
90
+ { header: 'Referral To - AQ', value: (row) => row.referral_to ?? '' },
91
+ { header: 'Reason for Referral - AR', value: (row) => row.reason_for_referral ?? '' },
92
+
93
+ { header: 'Remarks - AS', value: (row) => row.comments ?? '' },
94
+ ];
@@ -0,0 +1,191 @@
1
+ import React, { useState } from 'react';
2
+ import { useLocation, useSearchParams } from 'react-router-dom';
3
+ import { RegisterLayout, usePatientList } from '../../../common/report-register';
4
+ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@carbon/react';
5
+ import classNames from 'classnames';
6
+ import dayjs from 'dayjs';
7
+ import { useSession } from '@openmrs/esm-framework';
8
+
9
+ import styles from './moh-512.scss';
10
+ import { moh512ExportColumns } from './moh-512-columns';
11
+ import { getMoh512PatientList } from '../../../resources/moh-711.resource';
12
+ import { ReportFiltersComponent, type ReportPeriod } from '../../../common/report-filters';
13
+
14
+ interface Moh512RegisterComponentProps {}
15
+
16
+ const Moh512RegisterComponent: React.FC<Moh512RegisterComponentProps> = () => {
17
+ const [searchParams, setSearchParams] = useSearchParams();
18
+ const location = useLocation();
19
+ const session = useSession();
20
+
21
+ const from = searchParams.get('from');
22
+ const isDrilldown = Boolean(from);
23
+ const [generatedPeriod, setGeneratedPeriod] = useState<{ startDate: string; endDate: string } | null>(() => {
24
+ const startDate = searchParams.get('startDate');
25
+ const endDate = searchParams.get('endDate');
26
+ return !isDrilldown && startDate && endDate ? { startDate, endDate } : null;
27
+ });
28
+ const isGenerated = isDrilldown || Boolean(generatedPeriod);
29
+
30
+ const startDate = generatedPeriod?.startDate ?? searchParams.get('startDate');
31
+ const endDate = generatedPeriod?.endDate ?? searchParams.get('endDate');
32
+ const locationUuids = searchParams.get('locationUuids') ?? session?.sessionLocation?.uuid ?? '';
33
+ const indicator = searchParams.get('indicator');
34
+ const reportName = location.state?.reportName || '';
35
+
36
+ const {
37
+ rows: patientlist,
38
+ total,
39
+ isTotalExact,
40
+ isLoading,
41
+ page,
42
+ pageSize,
43
+ onPageChange,
44
+ fetchAll,
45
+ } = usePatientList(
46
+ ({ startIndex, limit }) => {
47
+ if (!isDrilldown && !generatedPeriod) {
48
+ return Promise.resolve({ results: [], total: 0, isTotalExact: true });
49
+ }
50
+
51
+ return getMoh512PatientList({
52
+ startDate,
53
+ endDate,
54
+ locationUuids,
55
+ indicator,
56
+ reportName,
57
+ startIndex,
58
+ limit,
59
+ });
60
+ },
61
+ [startDate, endDate, locationUuids, indicator, reportName, isDrilldown, generatedPeriod],
62
+ );
63
+
64
+ const generate = ({ startDate, endDate }: ReportPeriod) => {
65
+ setGeneratedPeriod({ startDate, endDate });
66
+ setSearchParams((currentParams) => {
67
+ const nextParams = new URLSearchParams(currentParams);
68
+ nextParams.set('startDate', startDate);
69
+ nextParams.set('endDate', endDate);
70
+ if (!nextParams.has('locationUuids') && locationUuids) {
71
+ nextParams.set('locationUuids', locationUuids);
72
+ }
73
+ return nextParams;
74
+ });
75
+ };
76
+
77
+ const columns = [
78
+ { key: 'date', label: 'Date' },
79
+ { key: 'cr_id', label: 'Client Number' },
80
+ { key: 'name_of_client', label: 'Name of Client' },
81
+ { key: 'client_type', label: 'Client Type' },
82
+ { key: 'first_ever_use_of_contraceptive', label: '1st Ever User of Contraceptive' },
83
+ { key: 'age', label: 'Age' },
84
+ { key: 'sex', label: 'Sex' },
85
+ { key: 'disability_status', label: 'Disability Status' },
86
+ { key: 'phone_number', label: 'Telephone Number' },
87
+ { key: 'village_estate_landmark', label: 'Village/Estate/Landmark' },
88
+ { key: 'counselled_on_fp', label: 'Counselled on FP' },
89
+ { key: 'type_of_visit_for_method_combined_oral_contraceptive', label: 'COC Visit Type' },
90
+ { key: 'quantity_dispensed_combined_oral_contraceptive', label: 'COC Quantity' },
91
+ { key: 'type_of_visit_for_method_progestine', label: 'POP Visit Type' },
92
+ { key: 'quantity_dispensed_progestine', label: 'POP Quantity' },
93
+ { key: 'quantity_dispensed_emergency_contraceptive_pills', label: 'Emergency Contraceptive Doses' },
94
+ { key: 'type_of_visit_for_method_1_rod', label: '1 Rod Visit Type' },
95
+ { key: 'quantity_dispensed_1_rod', label: '1 Rod (Sets)' },
96
+ { key: 'type_of_visit_for_method_2_rod', label: '2 Rods Visit Type' },
97
+ { key: 'quantity_dispensed_2_rod', label: '2 Rods (Sets)' },
98
+ { key: 'type_of_visit_for_method_iud', label: 'IUD Visit Type' },
99
+ { key: 'quantity_dispensed_non_hormonal', label: 'Non-Hormonal IUD (Sets)' },
100
+ { key: 'quantity_dispensed_hormonal', label: 'Hormonal IUD (Sets)' },
101
+ { key: 'reason_for_larc_removal', label: 'Reason for LARC Removal' },
102
+ { key: 'type_of_condom', label: 'Condom Client Sex' },
103
+ { key: 'quantity_dispensed_male_condoms', label: 'Male Condoms' },
104
+ { key: 'quantity_dispensed_female_condoms', label: 'Female Condoms' },
105
+ { key: 'voluntary_surgical_contraception', label: 'VSC' },
106
+ { key: 'counseled_on_natural_fp', label: 'Natural FP' },
107
+ { key: 'given_cycle_beads', label: 'Cycle Beads Given' },
108
+ { key: 'received_post_partum_fp', label: 'Timing of PPFP' },
109
+ { key: 'tb_screening', label: 'TB Screening' },
110
+ { key: 'counselled_on_hiv', label: 'Counselled for HIV' },
111
+ { key: 'tested_for_hiv', label: 'Counselled and Tested for HIV' },
112
+ { key: 'hiv_results', label: 'HIV Status' },
113
+ { key: 'intimate_partner_violence', label: 'IPV/Reproductive Coercion' },
114
+ { key: 'screened_for_cervical_cancer', label: 'Cervical Cancer Screened' },
115
+ { key: 'cervical_cancer_screening_result', label: 'Cervical Cancer Result' },
116
+ { key: 'referral_from', label: 'Referral From' },
117
+ { key: 'referral_to', label: 'Referral To' },
118
+ { key: 'reason_for_referral', label: 'Reason for Referral' },
119
+ { key: 'comments', label: 'Remarks' },
120
+ ];
121
+
122
+ return (
123
+ <>
124
+ {!isDrilldown && (
125
+ <ReportFiltersComponent
126
+ reportName="MOH 512 Register"
127
+ mode="range"
128
+ onGenerate={generate}
129
+ isLoading={isLoading}
130
+ isReportGenerated={Boolean(generatedPeriod)}
131
+ generatedPeriod={generatedPeriod ?? undefined}
132
+ backLink={{ label: 'All registers', to: '/?tab=registers' }}
133
+ />
134
+ )}
135
+ <RegisterLayout
136
+ parentLabel={isDrilldown ? 'MOH-711 Report' : 'All registers'}
137
+ parentPath={isDrilldown ? '/moh-711' : '/?tab=registers'}
138
+ title="MOH 512 Register"
139
+ isLoading={isLoading}
140
+ isEmpty={isGenerated && patientlist.length === 0}
141
+ page={page}
142
+ pageSize={pageSize}
143
+ total={total}
144
+ isTotalExact={isTotalExact}
145
+ onPageChange={onPageChange}
146
+ fetchAll={isGenerated ? fetchAll : undefined}
147
+ columns={moh512ExportColumns}
148
+ >
149
+ {isGenerated && (
150
+ <div className={styles.tableContainer}>
151
+ <Table className={classNames(styles.table, styles.tableBordered, styles.tableStriped)}>
152
+ <TableHead>
153
+ <TableRow>
154
+ {columns.map((column) => (
155
+ <TableHeader key={column.key}>{column.label}</TableHeader>
156
+ ))}
157
+ </TableRow>
158
+ </TableHead>
159
+
160
+ <TableBody>
161
+ {isLoading ? (
162
+ <TableRow>
163
+ <TableCell colSpan={columns.length}>Loading register...</TableCell>
164
+ </TableRow>
165
+ ) : patientlist.length === 0 ? (
166
+ <TableRow>
167
+ <TableCell colSpan={columns.length}>No records found.</TableCell>
168
+ </TableRow>
169
+ ) : (
170
+ patientlist.map((patient, index) => (
171
+ <TableRow key={patient.person_id || patient.id || index}>
172
+ {columns.map((column) => (
173
+ <TableCell key={column.key}>
174
+ {column.key === 'date' && patient[column.key]
175
+ ? dayjs(patient[column.key]).format('YYYY-MM-DD')
176
+ : (patient[column.key] ?? '')}
177
+ </TableCell>
178
+ ))}
179
+ </TableRow>
180
+ ))
181
+ )}
182
+ </TableBody>
183
+ </Table>
184
+ </div>
185
+ )}
186
+ </RegisterLayout>
187
+ </>
188
+ );
189
+ };
190
+
191
+ export default Moh512RegisterComponent;
@@ -0,0 +1,64 @@
1
+ @use '@openmrs/esm-styleguide/src/vars' as *;
2
+
3
+
4
+ .tableContainer {
5
+ width: 100%;
6
+ }
7
+
8
+ /* Sized to content rather than to the frame, so a long value -- a full name,
9
+ say -- widens its own column instead of wrapping. `.tableScroll` in the
10
+ layout scrolls when the table outgrows the page. */
11
+
12
+ .table {
13
+ width: auto;
14
+ min-width: 100%;
15
+ margin: 0;
16
+ font-size: 0.75rem;
17
+ border-collapse: collapse;
18
+ }
19
+
20
+ .tableBordered td,
21
+ .tableBordered th {
22
+ padding: 0.125rem 0.5rem;
23
+ font-size: 0.75rem;
24
+ line-height: 1.3;
25
+ border: 1px solid $ui-04;
26
+ }
27
+
28
+ .tableBordered th {
29
+ font-weight: 600;
30
+ color: $color-gray-100;
31
+ background-color: $ui-01;
32
+ /* headings carry deliberate line breaks, so they wrap where the markup says */
33
+ white-space: normal;
34
+ }
35
+
36
+ .tableBordered td {
37
+ white-space: nowrap;
38
+ }
39
+
40
+ /* Long prose columns (diagnoses, referrals, comments) wrap inside a bounded
41
+ width instead of stretching the row past the fold. */
42
+ .tableBordered td.wrapCell {
43
+ white-space: normal;
44
+ min-width: 8rem;
45
+ max-width: 16rem;
46
+ overflow-wrap: anywhere;
47
+ }
48
+
49
+ .tableStriped tbody tr:nth-of-type(odd) {
50
+ background-color: $ui-01;
51
+ }
52
+
53
+ .tableStriped tbody tr:hover {
54
+ background-color: $brand-primary-10;
55
+ }
56
+
57
+ .textCentre {
58
+ text-align: center;
59
+ }
60
+
61
+ .verticalText {
62
+ writing-mode: vertical-rl;
63
+ transform: rotate(180deg);
64
+ }