@argusoft/medplat-core 1.0.30 → 1.0.32

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 (226) hide show
  1. package/dist/{AccessRights-xrday-L1.js → AccessRights-DBjTQA1-.js} +395 -390
  2. package/dist/AccessRights-DBjTQA1-.js.map +1 -0
  3. package/dist/{AddFeatures-D1sU8RjY.js → AddFeatures-COj4ZTIM.js} +2 -2
  4. package/dist/{AddFeatures-D1sU8RjY.js.map → AddFeatures-COj4ZTIM.js.map} +1 -1
  5. package/dist/AddMenuConfiguration-Creeib5X.js +11223 -0
  6. package/dist/AddMenuConfiguration-Creeib5X.js.map +1 -0
  7. package/dist/AddMenuConfiguration.css +1 -1
  8. package/dist/{BrandsPage-DmRW5bhm-Bk1szrjI.js → BrandsPage-CdcAvaml-ZtVTX6vX.js} +43 -43
  9. package/dist/{BrandsPage-DmRW5bhm-Bk1szrjI.js.map → BrandsPage-CdcAvaml-ZtVTX6vX.js.map} +1 -1
  10. package/dist/{CategoriesPage-BsS5IQh3-B03lWRY5.js → CategoriesPage-BprQEYJw-CclreTv1.js} +109 -102
  11. package/dist/CategoriesPage-BprQEYJw-CclreTv1.js.map +1 -0
  12. package/dist/{ChangePasswordModalCore-BPsJquTS.js → ChangePasswordModalCore-DZGOkbRY.js} +3 -3
  13. package/dist/{ChangePasswordModalCore-BPsJquTS.js.map → ChangePasswordModalCore-DZGOkbRY.js.map} +1 -1
  14. package/dist/ConditionConfig-Bpm6OoV5.js +408 -0
  15. package/dist/ConditionConfig-Bpm6OoV5.js.map +1 -0
  16. package/dist/{DashboardPage-C3bKc5na-sBd9Yqbi.js → DashboardPage-CTiGSx71-CsYohJ5e.js} +32 -32
  17. package/dist/{DashboardPage-C3bKc5na-sBd9Yqbi.js.map → DashboardPage-CTiGSx71-CsYohJ5e.js.map} +1 -1
  18. package/dist/EntityManagement-BGwJGl9k.js +62 -0
  19. package/dist/EntityManagement-BGwJGl9k.js.map +1 -0
  20. package/dist/EventConfig-BY2cgGyx.js +27 -0
  21. package/dist/{EventConfig-BmLemzX3.js.map → EventConfig-BY2cgGyx.js.map} +1 -1
  22. package/dist/EventConfigurations-B-z7xHh_.js +544 -0
  23. package/dist/EventConfigurations-B-z7xHh_.js.map +1 -0
  24. package/dist/EventConfigurations.css +1 -1
  25. package/dist/EventsExceptionModal-DafomIv6.js +188 -0
  26. package/dist/EventsExceptionModal-DafomIv6.js.map +1 -0
  27. package/dist/EventsUi-Dl_yckSA.js +263 -0
  28. package/dist/EventsUi-Dl_yckSA.js.map +1 -0
  29. package/dist/FacilityPicker-BXa2VF7i-Dab_Jwa5.js +112 -0
  30. package/dist/FacilityPicker-BXa2VF7i-Dab_Jwa5.js.map +1 -0
  31. package/dist/{FeatureMenu-DYJmDt7q.js → FeatureMenu-Kc73yPHH.js} +9 -5
  32. package/dist/FeatureMenu-Kc73yPHH.js.map +1 -0
  33. package/dist/{FhirServerList-DuTwnngN.js → FhirServerList-CrIHMAxz.js} +16 -16
  34. package/dist/{FhirServerList-DuTwnngN.js.map → FhirServerList-CrIHMAxz.js.map} +1 -1
  35. package/dist/{FhirServerProfile-CUOwC6Wb.js → FhirServerProfile-D3aYcpwY.js} +8 -8
  36. package/dist/{FhirServerProfile-CUOwC6Wb.js.map → FhirServerProfile-D3aYcpwY.js.map} +1 -1
  37. package/dist/{FhirServerWizard-DZI8Olku.js → FhirServerWizard-Db6Hm4bQ.js} +15 -15
  38. package/dist/{FhirServerWizard-DZI8Olku.js.map → FhirServerWizard-Db6Hm4bQ.js.map} +1 -1
  39. package/dist/{GrantPermissionModal-BDN66Atn.js → GrantPermissionModal-D7iNZd0M.js} +54 -51
  40. package/dist/GrantPermissionModal-D7iNZd0M.js.map +1 -0
  41. package/dist/ImmunizationConfigurationBase-lKsJZMak.js +8060 -0
  42. package/dist/ImmunizationConfigurationBase-lKsJZMak.js.map +1 -0
  43. package/dist/InventoryPage-JadYMCzU-CzJQfQ2A.js +1017 -0
  44. package/dist/InventoryPage-JadYMCzU-CzJQfQ2A.js.map +1 -0
  45. package/dist/LocationWiseExpectedTargetPage-CjKk1aTF.js +1344 -0
  46. package/dist/LocationWiseExpectedTargetPage-CjKk1aTF.js.map +1 -0
  47. package/dist/{ManageDynamicFeature-BU0I45dd.js → ManageDynamicFeature-CuyYfx_P.js} +104 -97
  48. package/dist/ManageDynamicFeature-CuyYfx_P.js.map +1 -0
  49. package/dist/ManageEventConfiguration-DqPbn3Oi.js +1216 -0
  50. package/dist/ManageEventConfiguration-DqPbn3Oi.js.map +1 -0
  51. package/dist/ManageEventConfiguration.css +1 -1
  52. package/dist/ManageRole-CyfpySt9.js +981 -0
  53. package/dist/ManageRole-CyfpySt9.js.map +1 -0
  54. package/dist/{ManageUser-DCFkUMV9.js → ManageUser-Dm0l833u.js} +286 -286
  55. package/dist/{ManageUser-DCFkUMV9.js.map → ManageUser-Dm0l833u.js.map} +1 -1
  56. package/dist/{MemberProfileCard-BdUNgHRB-VywqQdFF.js → MemberProfileCard-01d_jz3w-DYHtbgMX.js} +46 -46
  57. package/dist/{MemberProfileCard-BdUNgHRB-VywqQdFF.js.map → MemberProfileCard-01d_jz3w-DYHtbgMX.js.map} +1 -1
  58. package/dist/MobileAnalytics-C9oc2yAo.js +18399 -0
  59. package/dist/MobileAnalytics-C9oc2yAo.js.map +1 -0
  60. package/dist/MobileMenuManagement-BmzTPXy7.js +231 -0
  61. package/dist/MobileMenuManagement-BmzTPXy7.js.map +1 -0
  62. package/dist/MobileTypeEventConfigModal-DodU3beR.js +752 -0
  63. package/dist/MobileTypeEventConfigModal-DodU3beR.js.map +1 -0
  64. package/dist/{NewServerManagement-Cxe0dV0O.js → NewServerManagement-BdayO78D.js} +368 -352
  65. package/dist/NewServerManagement-BdayO78D.js.map +1 -0
  66. package/dist/OtherTypeEventConfigModal-D_9S50aI.js +1414 -0
  67. package/dist/OtherTypeEventConfigModal-D_9S50aI.js.map +1 -0
  68. package/dist/{PaymentCreatePage-CIVe0P0p-25BQVpOX.js → PaymentCreatePage-D6NZBUC3-DxXf2kvH.js} +58 -58
  69. package/dist/{PaymentCreatePage-CIVe0P0p-25BQVpOX.js.map → PaymentCreatePage-D6NZBUC3-DxXf2kvH.js.map} +1 -1
  70. package/dist/{PaymentsPage-BvPe5Q9F-D2gfziwW.js → PaymentsPage-CHieGNrn-BnYCtqHd.js} +37 -37
  71. package/dist/{PaymentsPage-BvPe5Q9F-D2gfziwW.js.map → PaymentsPage-CHieGNrn-BnYCtqHd.js.map} +1 -1
  72. package/dist/{PermissionsModal-CCYkcKlC.js → PermissionsModal-Dxbkkrqe.js} +18 -18
  73. package/dist/PermissionsModal-Dxbkkrqe.js.map +1 -0
  74. package/dist/{PickupBatchLinesEditor-DHmcAG23-DL2p6IKJ.js → PickupBatchLinesEditor-QPaqFtUO-CY7BShYh.js} +2 -2
  75. package/dist/{PickupBatchLinesEditor-DHmcAG23-DL2p6IKJ.js.map → PickupBatchLinesEditor-QPaqFtUO-CY7BShYh.js.map} +1 -1
  76. package/dist/PickupCreatePage-C7_67u_u-OId8-e2a.js +801 -0
  77. package/dist/PickupCreatePage-C7_67u_u-OId8-e2a.js.map +1 -0
  78. package/dist/{PickupsPage-Ctpghavs-CUp4uIZq.js → PickupsPage-BWblMlic-CWkgeBw0.js} +132 -132
  79. package/dist/PickupsPage-BWblMlic-CWkgeBw0.js.map +1 -0
  80. package/dist/PmGuard-BvUUbU80-BpYNaDzl.js +641 -0
  81. package/dist/PmGuard-BvUUbU80-BpYNaDzl.js.map +1 -0
  82. package/dist/ProductEditPage-Dbq4vUAA-BoBmTPPL.js +1523 -0
  83. package/dist/ProductEditPage-Dbq4vUAA-BoBmTPPL.js.map +1 -0
  84. package/dist/{ProductsPage-CupVmOD4-D45a_hf-.js → ProductsPage-BI22nPb4-CQBjnc-n.js} +44 -43
  85. package/dist/ProductsPage-BI22nPb4-CQBjnc-n.js.map +1 -0
  86. package/dist/PurchaseCreatePage-C0EK9z4w-BQMTsjE7.js +724 -0
  87. package/dist/PurchaseCreatePage-C0EK9z4w-BQMTsjE7.js.map +1 -0
  88. package/dist/{PurchaseRequestDetailPage-Dg_MRY_N-D1bgTEAn.js → PurchaseRequestDetailPage-DhBuOGHZ-CWZPqzt9.js} +428 -418
  89. package/dist/PurchaseRequestDetailPage-DhBuOGHZ-CWZPqzt9.js.map +1 -0
  90. package/dist/{PurchaseRequestsPage-DPAPzpmm-mDH2IrTl.js → PurchaseRequestsPage-Bj9HUMxb-B7-AxT8m.js} +65 -65
  91. package/dist/{PurchaseRequestsPage-DPAPzpmm-mDH2IrTl.js.map → PurchaseRequestsPage-Bj9HUMxb-B7-AxT8m.js.map} +1 -1
  92. package/dist/{PurchasesPage-It1GHiXl-eH4IsF_U.js → PurchasesPage-Djl1AqD_-DXeYFMrX.js} +55 -55
  93. package/dist/{PurchasesPage-It1GHiXl-eH4IsF_U.js.map → PurchasesPage-Djl1AqD_-DXeYFMrX.js.map} +1 -1
  94. package/dist/{RoleManagement-s8iNx2Mu.js → RoleManagement-DVYufwy-.js} +3 -3
  95. package/dist/{RoleManagement-s8iNx2Mu.js.map → RoleManagement-DVYufwy-.js.map} +1 -1
  96. package/dist/Roles-BoNGJhtR.js +19 -0
  97. package/dist/Roles-BoNGJhtR.js.map +1 -0
  98. package/dist/{SaleCreatePage-C9kFmTvm-B3Y0o4CX.js → SaleCreatePage-DHBLmlBr-BlgjVsq6.js} +39 -39
  99. package/dist/{SaleCreatePage-C9kFmTvm-B3Y0o4CX.js.map → SaleCreatePage-DHBLmlBr-BlgjVsq6.js.map} +1 -1
  100. package/dist/{SalesPage-D18DCseD-BxktGDRQ.js → SalesPage-eF9Yr42z-BQ9FlXC3.js} +61 -61
  101. package/dist/{SalesPage-D18DCseD-BxktGDRQ.js.map → SalesPage-eF9Yr42z-BQ9FlXC3.js.map} +1 -1
  102. package/dist/SettingsPage-Cre-UE3r-9ntnLYsQ.js +741 -0
  103. package/dist/SettingsPage-Cre-UE3r-9ntnLYsQ.js.map +1 -0
  104. package/dist/{ShowFlywayQuery-D1y_4A1u.js → ShowFlywayQuery-DIOUdYfG.js} +26 -19
  105. package/dist/{ShowFlywayQuery-D1y_4A1u.js.map → ShowFlywayQuery-DIOUdYfG.js.map} +1 -1
  106. package/dist/{StorageUnitsPage-7EqwuMOI-BwUso1Th.js → StorageUnitsPage-CTEVuemZ-B4osG74N.js} +253 -223
  107. package/dist/StorageUnitsPage-CTEVuemZ-B4osG74N.js.map +1 -0
  108. package/dist/{SubMenu-eEDhZUvh.js → SubMenu-OO2zhKiu.js} +5 -3
  109. package/dist/SubMenu-OO2zhKiu.js.map +1 -0
  110. package/dist/{TableDetails-BtafRxXb.js → TableDetails-Cc40dEUs.js} +272 -267
  111. package/dist/TableDetails-Cc40dEUs.js.map +1 -0
  112. package/dist/{TableList-Dpo6dO7S.js → TableList-B5tX4wII.js} +316 -312
  113. package/dist/TableList-B5tX4wII.js.map +1 -0
  114. package/dist/{TransactionsPage-DrH53pVS-BkhIGB6C.js → TransactionsPage-Zuu7sjID-B-ACzvd1.js} +195 -180
  115. package/dist/TransactionsPage-Zuu7sjID-B-ACzvd1.js.map +1 -0
  116. package/dist/TransferCreatePage-DlT0nCDj-B2SdPgYB.js +635 -0
  117. package/dist/TransferCreatePage-DlT0nCDj-B2SdPgYB.js.map +1 -0
  118. package/dist/TransfersPage-DqaSvHda-G2tFa5Jq.js +600 -0
  119. package/dist/TransfersPage-DqaSvHda-G2tFa5Jq.js.map +1 -0
  120. package/dist/TypeConfiguration-EaFiOzRE.js +114 -0
  121. package/dist/TypeConfiguration-EaFiOzRE.js.map +1 -0
  122. package/dist/UserList-Cf5B-o_1.js +1904 -0
  123. package/dist/UserList-Cf5B-o_1.js.map +1 -0
  124. package/dist/Users-MC7txo1V.js +43 -0
  125. package/dist/{Users-Bpc4Sazd.js.map → Users-MC7txo1V.js.map} +1 -1
  126. package/dist/VaccineEducation-T_UE57Ef.js +231 -0
  127. package/dist/VaccineEducation-T_UE57Ef.js.map +1 -0
  128. package/dist/VaccineEducation.css +1 -0
  129. package/dist/VaccineEducationConfigurator-CWc20_rv.js +50948 -0
  130. package/dist/VaccineEducationConfigurator-CWc20_rv.js.map +1 -0
  131. package/dist/VaccineEducationConfigurator.css +4 -0
  132. package/dist/VaccineEducationList-Ok7_5EFb.js +334 -0
  133. package/dist/VaccineEducationList-Ok7_5EFb.js.map +1 -0
  134. package/dist/VialsPage-LoDaUqVv-DmMXbK8j.js +457 -0
  135. package/dist/VialsPage-LoDaUqVv-DmMXbK8j.js.map +1 -0
  136. package/dist/{constants-ClZJY2x1-MkSWn6TZ.js → constants-BTpJFQe_-CYPZIqQF.js} +166 -56
  137. package/dist/constants-BTpJFQe_-CYPZIqQF.js.map +1 -0
  138. package/dist/dashboardLayoutUtils--xUnoKPa.js +615 -0
  139. package/dist/dashboardLayoutUtils--xUnoKPa.js.map +1 -0
  140. package/dist/index-mfoqII2U.js +524 -0
  141. package/dist/index-mfoqII2U.js.map +1 -0
  142. package/dist/{index-D9YNFPn9.js → index-o8Pyt1Bt.js} +445 -439
  143. package/dist/index-o8Pyt1Bt.js.map +1 -0
  144. package/dist/index.css +1 -1
  145. package/dist/index.js +1 -1
  146. package/dist/index.lib-BySa9-Z-.js +936 -0
  147. package/dist/index.lib-BySa9-Z-.js.map +1 -0
  148. package/dist/listValueStore-5d4vNGQM-WclZ5nBG.js +43 -0
  149. package/dist/listValueStore-5d4vNGQM-WclZ5nBG.js.map +1 -0
  150. package/package.json +5 -1
  151. package/dist/AccessRights-xrday-L1.js.map +0 -1
  152. package/dist/AddMenuConfiguration-e5BVXhmw.js +0 -8547
  153. package/dist/AddMenuConfiguration-e5BVXhmw.js.map +0 -1
  154. package/dist/CategoriesPage-BsS5IQh3-B03lWRY5.js.map +0 -1
  155. package/dist/ConditionConfig-Ddz9halE.js +0 -395
  156. package/dist/ConditionConfig-Ddz9halE.js.map +0 -1
  157. package/dist/ConditionConfig.css +0 -1
  158. package/dist/EntityManagement-CPQL6qBj.js +0 -50
  159. package/dist/EntityManagement-CPQL6qBj.js.map +0 -1
  160. package/dist/EventConfig-BmLemzX3.js +0 -26
  161. package/dist/EventConfigurations-Bzh1qWXU.js +0 -450
  162. package/dist/EventConfigurations-Bzh1qWXU.js.map +0 -1
  163. package/dist/EventsExceptionModal-B2SRrnB1.js +0 -200
  164. package/dist/EventsExceptionModal-B2SRrnB1.js.map +0 -1
  165. package/dist/EventsSkeleton-BIcPks4T.js +0 -61
  166. package/dist/EventsSkeleton-BIcPks4T.js.map +0 -1
  167. package/dist/FacilityPicker-BiZeupmP-CyPHmj6b.js +0 -79
  168. package/dist/FacilityPicker-BiZeupmP-CyPHmj6b.js.map +0 -1
  169. package/dist/FeatureMenu-DYJmDt7q.js.map +0 -1
  170. package/dist/GrantPermissionModal-BDN66Atn.js.map +0 -1
  171. package/dist/ImmunizationConfigurationBase-Di1KO3oW.js +0 -7639
  172. package/dist/ImmunizationConfigurationBase-Di1KO3oW.js.map +0 -1
  173. package/dist/InventoryPage-C_AxSy7A-QLvlL4rE.js +0 -665
  174. package/dist/InventoryPage-C_AxSy7A-QLvlL4rE.js.map +0 -1
  175. package/dist/ManageDynamicFeature-BU0I45dd.js.map +0 -1
  176. package/dist/ManageEventConfiguration-CoYcpjR9.js +0 -1085
  177. package/dist/ManageEventConfiguration-CoYcpjR9.js.map +0 -1
  178. package/dist/ManageRole-CNZBRKGU.js +0 -776
  179. package/dist/ManageRole-CNZBRKGU.js.map +0 -1
  180. package/dist/MobileAnalytics-pQoE8cG1.js +0 -16888
  181. package/dist/MobileAnalytics-pQoE8cG1.js.map +0 -1
  182. package/dist/MobileMenuManagement-Cf8IZlla.js +0 -108
  183. package/dist/MobileMenuManagement-Cf8IZlla.js.map +0 -1
  184. package/dist/MobileTypeEventConfigModal-BeveaX0C.js +0 -783
  185. package/dist/MobileTypeEventConfigModal-BeveaX0C.js.map +0 -1
  186. package/dist/NewServerManagement-Cxe0dV0O.js.map +0 -1
  187. package/dist/OtherTypeEventConfigModal-CM6VkdmY.js +0 -2046
  188. package/dist/OtherTypeEventConfigModal-CM6VkdmY.js.map +0 -1
  189. package/dist/PermissionsModal-CCYkcKlC.js.map +0 -1
  190. package/dist/PickupCreatePage-CB0Sl0Hb-Mmj7zESG.js +0 -783
  191. package/dist/PickupCreatePage-CB0Sl0Hb-Mmj7zESG.js.map +0 -1
  192. package/dist/PickupsPage-Ctpghavs-CUp4uIZq.js.map +0 -1
  193. package/dist/PmGuard-b10TGXEi-G3N0G_Wg.js +0 -599
  194. package/dist/PmGuard-b10TGXEi-G3N0G_Wg.js.map +0 -1
  195. package/dist/ProductEditPage-C1thoKHu-URQaZ6st.js +0 -1302
  196. package/dist/ProductEditPage-C1thoKHu-URQaZ6st.js.map +0 -1
  197. package/dist/ProductsPage-CupVmOD4-D45a_hf-.js.map +0 -1
  198. package/dist/PurchaseCreatePage-YD3NmhPQ-2j4etSjM.js +0 -648
  199. package/dist/PurchaseCreatePage-YD3NmhPQ-2j4etSjM.js.map +0 -1
  200. package/dist/PurchaseRequestDetailPage-Dg_MRY_N-D1bgTEAn.js.map +0 -1
  201. package/dist/Roles-BIyiic67.js +0 -14
  202. package/dist/Roles-BIyiic67.js.map +0 -1
  203. package/dist/SettingsPage-VsxI-ano-DcmtUUEj.js +0 -747
  204. package/dist/SettingsPage-VsxI-ano-DcmtUUEj.js.map +0 -1
  205. package/dist/StorageUnitsPage-7EqwuMOI-BwUso1Th.js.map +0 -1
  206. package/dist/SubMenu-eEDhZUvh.js.map +0 -1
  207. package/dist/TableDetails-BtafRxXb.js.map +0 -1
  208. package/dist/TableList-Dpo6dO7S.js.map +0 -1
  209. package/dist/TransactionsPage-DrH53pVS-BkhIGB6C.js.map +0 -1
  210. package/dist/TransferCreatePage-CuvoMrYH-DTTfHjz-.js +0 -315
  211. package/dist/TransferCreatePage-CuvoMrYH-DTTfHjz-.js.map +0 -1
  212. package/dist/TransfersPage-Cf701t8s-BBbN7cBf.js +0 -476
  213. package/dist/TransfersPage-Cf701t8s-BBbN7cBf.js.map +0 -1
  214. package/dist/TypeConfiguration-3O6ABrK-.js +0 -117
  215. package/dist/TypeConfiguration-3O6ABrK-.js.map +0 -1
  216. package/dist/UserList-DgPxsnj2.js +0 -1129
  217. package/dist/UserList-DgPxsnj2.js.map +0 -1
  218. package/dist/Users-Bpc4Sazd.js +0 -41
  219. package/dist/VialsPage-8oAc1yFv-Cl3FUXBJ.js +0 -321
  220. package/dist/VialsPage-8oAc1yFv-Cl3FUXBJ.js.map +0 -1
  221. package/dist/constants-ClZJY2x1-MkSWn6TZ.js.map +0 -1
  222. package/dist/dashboardLayoutUtils-D1xCAxp3.js +0 -405
  223. package/dist/dashboardLayoutUtils-D1xCAxp3.js.map +0 -1
  224. package/dist/index-D9YNFPn9.js.map +0 -1
  225. package/dist/index.lib-Dn8PMkeD.js +0 -862
  226. package/dist/index.lib-Dn8PMkeD.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.lib-BySa9-Z-.js","sources":["../routes/routes.jsx","../../app-shell/src/store/reducers/immunizationSlice.js","../src/views/ImmunizationConfiguration/utils/validationUtils.js","../src/views/ImmunizationConfiguration/service/ImmunizationUtil.js"],"sourcesContent":["import { lazy } from \"react\";\n\nconst VerifyRoute = lazy(\n () => import(\"@/views/feature-components/VerifyRoute.jsx\"),\n);\nconst Roles = lazy(() => import(\"../src/views/Roles/RoleManagement\"));\nconst QueryBuilder = lazy(\n () => import(\"../src/views/QueryBuilder/QueryBuilder\"),\n);\nconst UserList = lazy(() => import(\"../src/views/Users/UserList\"));\nconst ManageUser = lazy(() => import(\"../src/views/Users/ManageUser\"));\nconst QueryManagement = lazy(\n () => import(\"../src/views/QueryManagement/QueryManagement\"),\n);\nconst FeatureMenu = lazy(() => import(\"../src/views/Features/FeatureMenu\"));\nconst ActivityAnalytics = lazy(() => import(\"../src/views/ActivityAnalytics/index\"));\nconst NewServerManagement = lazy(\n () => import(\"../src/views/Features/NewServerManagement\"),\n);\nconst ManageDynamicFeature = lazy(\n () => import(\"../src/views/Features/ManageDynamicFeature\"),\n);\nconst SecurityAuditLogList = lazy(\n () => import(\"../src/views/SecurityAuditLog/SecurityAuditLogList\"),\n);\nconst EventConfigurations = lazy(\n () => import(\"../src/views/Events/EventConfigurations\"),\n);\nconst ManageEventConfiguration = lazy(\n () => import(\"../src/views/Events/ManageEventConfiguration\"),\n);\nconst EntityManagement = lazy(\n () => import('../src/views/Mobile/EntityManagement/EntityManagement.jsx')\n);\nconst MobileAnalytics = lazy(\n () => import('../src/views/Mobile/Analytics/MobileAnalytics.jsx')\n);\nconst MobileMenuManagement = lazy(\n () => import('../src/views/MobileMenuManagement/MobileMenuManagement')\n);\nconst AddMenuConfiguration = lazy(\n () => import('../src/views/MobileMenuManagement/AddMenuConfiguration')\n);\nconst ManageTranslation = lazy(\n () => import(\"../src/views/Translation/ManageTranslation\"),\n);\nconst WidgetList = lazy(\n () => import(\"../src/views/Widgets/WidgetList\")\n);\nconst NotificationList = lazy(\n () => import(\"../src/views/Notifications/NotificationList\"),\n);\nconst ImmunizationConfigurationsList = lazy(\n () => import(\"../src/views/Immunization/ImmunizationConfigurationsList\"),\n);\nconst ManageImmunization = lazy(\n () => import(\"../src/views/Immunization/manageImmunization\"),\n);\nconst ImmunizationConfiguration = lazy(\n () =>\n import(\"../src/views/ImmunizationConfiguration/ImmunizationConfigurationBase.jsx\"),\n);\nconst VaccineEducationList = lazy(\n () => import(\"../src/views/VaccineEducation/components/VaccineEducationList\"),\n);\nconst VaccineEducationConfigurator = lazy(\n () => import(\"../src/views/VaccineEducation/components/VaccineEducationConfigurator\"),\n);\nconst FhirServerList = lazy(\n () => import(\"../src/views/FhirResource/FhirServerList\"),\n);\nconst FhirServerWizard = lazy(\n () => import(\"../src/views/FhirResource/FhirServerWizard\"),\n);\nconst FhirServerProfile = lazy(\n () => import(\"../src/views/FhirResource/FhirServerProfile\"),\n);\nconst FhirRawResourceList = lazy(\n () => import(\"../src/views/FhirResource/FhirRawResourceList\"),\n);\nconst LocationWiseExpectedTarget = lazy(\n () => import(\"../src/views/LocationWiseExpectedTarget/LocationWiseExpectedTargetPage\"),\n);\n\nconst corecustom2Routes = [\n {\n path: \"medplat/manage/role\",\n element: (\n <VerifyRoute\n headerTitle={\"Roles\"}\n pageTitle={\"General\"}\n url=\"medplat/manage/role\"\n component={Roles}\n />\n ),\n },\n {\n path: \"medplat/manage/query\",\n element: (\n <VerifyRoute\n headerTitle={\"Query Master\"}\n pageTitle={\"General\"}\n url=\"medplat/manage/query\"\n component={QueryBuilder}\n />\n ),\n },\n {\n path: \"medplat/manage/users\",\n element: (\n <VerifyRoute\n headerTitle={\"Users\"}\n pageTitle={\"UserList\"}\n url=\"medplat/manage/users\"\n component={UserList}\n />\n ),\n },\n {\n path: \"medplat/manage/user\",\n element: (\n <VerifyRoute\n headerTitle={\"Users\"}\n pageTitle={\"ManageUser\"}\n url=\"medplat/manage/users\"\n component={ManageUser}\n />\n ),\n },\n {\n path: \"medplat/manage/user/:id\",\n element: (\n <VerifyRoute\n headerTitle={\"Users\"}\n pageTitle={\"General\"}\n url=\"medplat/manage/users\"\n component={ManageUser}\n />\n ),\n },\n {\n path: \"medplat/querymanagement\",\n element: (\n <VerifyRoute\n headerTitle={\"Query Management\"}\n pageTitle={\"General\"}\n url=\"medplat/querymanagement\"\n component={QueryManagement}\n />\n ),\n },\n {\n path: \"medplat/manage/menu\",\n element: (\n <VerifyRoute\n headerTitle={\"Features\"}\n pageTitle={\"General\"}\n url=\"medplat/manage/menu\"\n component={FeatureMenu}\n />\n ),\n },\n {\n path: \"medplat/manage/menu/addfeature\",\n element: (\n <VerifyRoute\n headerTitle={\"Features\"}\n pageTitle={\"General\"}\n url=\"medplat/manage/menu\"\n component={ManageDynamicFeature}\n />\n ),\n },\n {\n path: \"medplat/manage/menu/addDynamicFeature\",\n element: (\n <VerifyRoute\n headerTitle={\"Features\"}\n pageTitle={\"General\"}\n url=\"medplat/manage/menu\"\n component={ManageDynamicFeature}\n />\n ),\n },\n {\n path: \"medplat/notification/all\",\n element: (\n <VerifyRoute\n headerTitle={\"Event Configuration\"}\n pageTitle={\"General\"}\n url=\"medplat/notification/all\"\n component={EventConfigurations}\n />\n ),\n },\n {\n path: \"medplat/views/config\",\n element: (\n <VerifyRoute\n headerTitle={\"Event Configuration\"}\n pageTitle={\"General\"}\n url=\"medplat/notification\"\n component={ManageEventConfiguration}\n />\n ),\n },\n {\n path: \"medplat/views/config/:id\",\n element: (\n <VerifyRoute\n headerTitle={\"Event Configuration\"}\n pageTitle={\"General\"}\n url=\"medplat/notification\"\n component={ManageEventConfiguration}\n />\n ),\n },\n {\n path: \"medplat/admin/newServerManagement\",\n element: (\n <VerifyRoute\n headerTitle={\"Server Management\"}\n url=\"medplat/admin/newServerManagement\"\n component={NewServerManagement}\n />\n ),\n },\n {\n path: 'medplat/admin/mobileEntityManagement',\n element: (\n <VerifyRoute\n pageTitle={'General'}\n url=\"medplat/admin/mobileEntityManagement\"\n component={EntityManagement}\n headerTitle={'Mobile Database Management'}\n />\n ),\n },\n {\n path: 'medplat/admin/mobileAnalytics',\n element: (\n <VerifyRoute\n url=\"medplat/admin/mobileAnalytics\"\n component={MobileAnalytics}\n headerTitle={'Mobile Analytics'}\n />\n ),\n },\n {\n path: 'medplat/admin/mobileMenuManagement',\n element: (\n <VerifyRoute\n url=\"medplat/admin/mobileMenuManagement\"\n component={<MobileMenuManagement />}\n headerTitle={'Mobile Menu Management'}\n />\n ),\n },\n {\n path: 'medplat/admin/mobileMenuManagement/addMenuConfiguration',\n element: <AddMenuConfiguration />,\n },\n {\n path: \"medplat/manage/manageTranslation\",\n element: (\n <VerifyRoute\n headerTitle={\"Manage Translation\"}\n pageTitle={\"General\"}\n url=\"medplat/manage/manageTranslation\"\n component={ManageTranslation}\n />\n ),\n },\n {\n path: \"medplat/manage/managewidgets\",\n element: (\n <VerifyRoute\n headerTitle={\"Widgets\"}\n pageTitle={\"General\"}\n url=\"medplat/manage/manage-widgets\"\n component={WidgetList}\n />\n ),\n },\n {\n path: \"medplat/manage/notification\",\n element: (\n <VerifyRoute\n headerTitle={\"Notification Configuration\"}\n pageTitle={\"General\"}\n url=\"medplat/manage/notification\"\n component={NotificationList}\n />\n ),\n },\n {\n path: \"medplat/manage/immunizationConfiguratorList\",\n element: (\n <VerifyRoute\n headerTitle={\"Immunizations\"}\n pageTitle={\"General\"}\n url=\"medplat/manage/manageTranslation\"\n component={ImmunizationConfigurationsList}\n />\n ),\n },\n {\n path: \"medplat/manage/manageImmunization\",\n element: (\n <VerifyRoute\n headerTitle={\"Immunizations\"}\n pageTitle={\"General\"}\n url=\"medplat/training/question\"\n component={ManageImmunization}\n />\n ),\n },\n {\n path: \"medplat/manage/manageImmunization/:id\",\n element: (\n <VerifyRoute\n headerTitle={\"Immunizations\"}\n pageTitle={\"General\"}\n url=\"medplat/training/question\"\n component={ManageImmunization}\n />\n ),\n },\n {\n path: \"medplat/manage/immunizationConfiguration\",\n element: (\n <VerifyRoute\n headerTitle={\"Immunization Configuration\"}\n pageTitle={\"General\"}\n url=\"medplat/manage/immunizationConfiguration\"\n component={ImmunizationConfiguration}\n />\n ),\n },\n {\n path: \"medplat/manage/vaccineEducation\",\n element: (\n <VerifyRoute\n headerTitle={\"Vaccine Education\"}\n pageTitle={\"General\"}\n url=\"medplat/manage/immunizationConfiguration\"\n component={VaccineEducationList}\n />\n ),\n },\n {\n path: \"medplat/manage/vaccineEducation/:vaccineId\",\n element: (\n <VerifyRoute\n headerTitle={\"Vaccine Education\"}\n pageTitle={\"General\"}\n url=\"medplat/manage/immunizationConfiguration\"\n component={VaccineEducationConfigurator}\n />\n ),\n },\n {\n path: \"medplat/manage/securityAuditLogs\",\n element: (\n <VerifyRoute\n headerTitle={\"Security Audit Logs\"}\n pageTitle={\"Security Audit Logs\"}\n url=\"medplat/manage/securityAuditLogs\"\n component={SecurityAuditLogList}\n />\n ),\n },\n {\n path: \"medplat/manage/activityAnalytics\",\n element: (\n <VerifyRoute\n headerTitle={\"Activity Analytics\"}\n url=\"medplat/manage/activityAnalytics\"\n component={ActivityAnalytics}\n />\n ),\n },\n {\n path: \"medplat/admin/fhirResource\",\n element: (\n <VerifyRoute\n headerTitle={\"FHIR Sync\"}\n pageTitle={\"General\"}\n url=\"medplat/admin/fhirResource\"\n component={FhirServerList}\n />\n ),\n },\n {\n path: \"medplat/admin/fhirResource/new\",\n element: (\n <VerifyRoute\n headerTitle={\"Connect FHIR Server\"}\n pageTitle={\"General\"}\n url=\"medplat/admin/fhirResource\"\n component={FhirServerWizard}\n />\n ),\n },\n {\n path: \"medplat/admin/fhirResource/:serverId\",\n element: (\n <VerifyRoute\n headerTitle={\"FHIR Server\"}\n pageTitle={\"General\"}\n url=\"medplat/admin/fhirResource\"\n component={FhirServerProfile}\n />\n ),\n },\n {\n path: \"medplat/admin/fhirResource/:serverId/staging\",\n element: (\n <VerifyRoute\n headerTitle={\"FHIR Staging Inbox\"}\n pageTitle={\"General\"}\n url=\"medplat/admin/fhirResource\"\n component={FhirRawResourceList}\n />\n ),\n },\n {\n path: \"medplat/manage/locationWiseExpectedTarget\",\n element: (\n <VerifyRoute\n headerTitle={\"Location Wise Expected Target\"}\n pageTitle={\"General\"}\n url=\"medplat/manage/locationWiseExpectedTarget\"\n component={LocationWiseExpectedTarget}\n />\n ),\n },\n];\n\nexport default corecustom2Routes;\n","import { createSlice } from '@reduxjs/toolkit';\n\nconst createInitialState = () => ({\n vaccines: [],\n selectedVaccineIds: [],\n views: [\n {\n id: 'landing',\n name: 'Dashboard',\n },\n {\n id: 'schedule-config',\n name: 'Schedule Config',\n },\n {\n id: 'summary',\n name: 'Configuration Summary',\n },\n ],\n currentViewId: 'summary',\n scheduledVaccines: [],\n baseDateMaster: [],\n recipientMaster: [],\n dbTablesMaster: [],\n filtersMaster: [],\n featureRights: {},\n isConfigLoaded: false,\n validationErrors: {},\n});\n\nconst initialState = createInitialState();\n\nconst upsertByIdOrCode = (items = [], incoming = {}) => {\n const matchIndex = items.findIndex(\n (item) =>\n (incoming.id !== undefined && item?.id === incoming.id) ||\n (incoming.code && item?.code === incoming.code),\n );\n\n if (matchIndex === -1) {\n return [...items, incoming];\n }\n\n return items.map((item, index) =>\n index === matchIndex\n ? {\n ...item,\n ...incoming,\n }\n : item,\n );\n};\n\nconst immunizationSlice = createSlice({\n name: 'immunization',\n initialState,\n reducers: {\n toggleVaccine: (state, action) => {\n const id = action.payload;\n if (!Array.isArray(state.selectedVaccineIds)) state.selectedVaccineIds = [];\n\n const index = state.selectedVaccineIds.indexOf(id);\n if (index > -1) {\n state.selectedVaccineIds.splice(index, 1);\n } else {\n state.selectedVaccineIds.push(id);\n }\n },\n setVaccines: (state, action) => {\n const vaccines = Array.isArray(action.payload) ? action.payload : [];\n state.vaccines = vaccines;\n if (state.selectedVaccineIds.length === 0) {\n state.selectedVaccineIds = vaccines\n .filter((vaccine) => vaccine.isActive)\n .map((vaccine) => vaccine.id);\n }\n },\n setSelectedVaccineIds: (state, action) => {\n state.selectedVaccineIds = action.payload;\n },\n addCustomVaccine: (state, action) => {\n const payload = action.payload || {};\n const {\n name,\n vaccine_name,\n disease,\n target_prevention,\n id,\n baseDateCode,\n base_date_code,\n recipientType,\n recipient_type,\n } = payload;\n const finalName = name || vaccine_name || 'Unnamed Vaccine';\n const finalCategory = disease || target_prevention || 'General';\n\n const vaccines = Array.isArray(state.vaccines) ? state.vaccines : [];\n const validIds = vaccines.map((v) => Number(v?.id)).filter((id) => !Number.isNaN(id));\n const nextId = validIds.length > 0 ? Math.max(...validIds) + 1 : 1;\n\n const finalId = id || nextId;\n const newVaccine = {\n id: finalId,\n name: finalName,\n category: finalCategory,\n doses: 0,\n doseType: 'FIXED',\n scheduleType: 'ROUTINE',\n doseDetails: {},\n regions: [],\n dependencies: [],\n isActive: payload.isActive !== undefined ? payload.isActive : false,\n baseDateCode: baseDateCode || base_date_code || null,\n recipientType: recipientType || recipient_type || '',\n };\n\n if (!Array.isArray(state.vaccines)) state.vaccines = [];\n state.vaccines.push(newVaccine);\n },\n setCurrentView: (state, action) => {\n state.currentViewId = action.payload;\n },\n updateScheduledVaccine: (state, action) => {\n const updatedVaccine = action.payload;\n const index = state.scheduledVaccines.findIndex((v) => v.id === updatedVaccine.id);\n if (index !== -1) {\n state.scheduledVaccines[index] = {\n ...state.scheduledVaccines[index],\n ...updatedVaccine,\n };\n } else {\n state.scheduledVaccines.push(updatedVaccine);\n }\n },\n setBaseDatesMaster: (state, action) => {\n state.baseDateMaster = action.payload;\n },\n setRecipientMaster: (state, action) => {\n state.recipientMaster = action.payload;\n },\n setDbTablesMaster: (state, action) => {\n state.dbTablesMaster = action.payload;\n },\n setFiltersMaster: (state, action) => {\n state.filtersMaster = action.payload;\n },\n upsertBaseDateMasterItem: (state, action) => {\n state.baseDateMaster = upsertByIdOrCode(state.baseDateMaster, action.payload);\n },\n upsertRecipientMasterItem: (state, action) => {\n state.recipientMaster = upsertByIdOrCode(state.recipientMaster, action.payload);\n },\n updateBaseDateMasterStatus: (state, action) => {\n const { code, is_active } = action.payload;\n state.baseDateMaster = state.baseDateMaster.map((item) =>\n item.code === code ? { ...item, is_active } : item,\n );\n },\n upsertFilterMasterItem: (state, action) => {\n state.filtersMaster = upsertByIdOrCode(state.filtersMaster, action.payload);\n },\n updateFilterMasterStatus: (state, action) => {\n const { code, is_active } = action.payload;\n state.filtersMaster = state.filtersMaster.map((item) =>\n item.code === code ? { ...item, is_active } : item,\n );\n },\n setFeatureRights: (state, action) => {\n state.featureRights = action.payload || {};\n },\n setImmunizationConfigLoaded: (state, action) => {\n state.isConfigLoaded = action.payload;\n },\n resetImmunizationState: () => createInitialState(),\n activateSelectedVaccines: (state) => {\n state.vaccines = state.vaccines.map((v) => ({\n ...v,\n isActive: state.selectedVaccineIds.includes(v.id),\n }));\n },\n setVaccineStatus: (state, action) => {\n const { vaccineId, status } = action.payload;\n const vIndex = state.vaccines.findIndex((v) => v.id === vaccineId);\n if (vIndex !== -1) {\n state.vaccines[vIndex].isActive = status;\n }\n\n if (!Array.isArray(state.selectedVaccineIds)) state.selectedVaccineIds = [];\n const sIndex = state.selectedVaccineIds.indexOf(vaccineId);\n if (status && sIndex === -1) {\n state.selectedVaccineIds.push(vaccineId);\n } else if (!status && sIndex !== -1) {\n state.selectedVaccineIds.splice(sIndex, 1);\n }\n },\n setValidationErrors: (state, action) => {\n const { vaccineId, errors } = action.payload;\n state.validationErrors[vaccineId] = errors;\n },\n clearValidationErrors: (state, action) => {\n const vaccineId = action.payload;\n if (vaccineId) {\n delete state.validationErrors[vaccineId];\n } else {\n state.validationErrors = {};\n }\n },\n },\n});\n\nexport const {\n toggleVaccine,\n setVaccines,\n addCustomVaccine,\n setCurrentView,\n updateScheduledVaccine,\n setBaseDatesMaster,\n setRecipientMaster,\n setDbTablesMaster,\n setFiltersMaster,\n upsertBaseDateMasterItem,\n upsertRecipientMasterItem,\n updateBaseDateMasterStatus,\n upsertFilterMasterItem,\n updateFilterMasterStatus,\n setFeatureRights,\n setImmunizationConfigLoaded,\n resetImmunizationState,\n activateSelectedVaccines,\n setSelectedVaccineIds,\n setValidationErrors,\n clearValidationErrors,\n setVaccineStatus,\n} = immunizationSlice.actions;\nexport default immunizationSlice.reducer;\n","export const getDays = (val) => {\n if (!val) return 0;\n if (typeof val === 'string' && val.toLowerCase() === 'birth') return 0;\n return Number.parseInt(val) || 0;\n};\n\nexport const getDaysVal = (val, unit) => {\n if (!val) return 0;\n if (typeof val === 'string' && val.toLowerCase() === 'birth') return 0;\n const num = Number.parseInt(val) || 0;\n if (unit === 'weeks') return num * 7;\n if (unit === 'months') return num * 30;\n if (unit === 'years') return num * 365;\n return num;\n};\n\nexport const isBlankDuration = (val) => val === undefined || val === null || String(val).trim() === '';\n\n// The unit dropdown value that stands in for an open-ended window. It is never\n// persisted — `eligibleTo === null` is the stored fact, and this is derived from it.\nexport const LIFELONG_UNIT = 'lifelong';\n\n// Distinguishes \"eligible for life\" (null) from \"not filled in yet\" (\"\" / undefined),\n// which still has to fail the required check.\nexport const isLifelong = (eligibleTo) => eligibleTo === null;\n\n// Marker used inside the overall-eligibility summary string. Must not contain \"to\",\n// which is what that string is split on for display.\nexport const LIFELONG_ELIGIBILITY = 'LIFELONG';\n\n// `windowInDays` is null for a lifelong dose, meaning there is no ceiling to check against.\nexport const validateOverdueWindow = (dose, perDoseUnits = {}, windowInDays) => {\n const errors = {};\n const hasFrom = !isBlankDuration(dose.overdueFrom);\n const hasTill = !isBlankDuration(dose.overdueTill);\n\n if (!hasFrom) {\n if (hasTill) {\n errors.overdueTill = 'Set Overdue From first';\n }\n return errors;\n }\n\n const fromInDays = getDaysVal(dose.overdueFrom, perDoseUnits.overdueFrom || 'days');\n const tillInDays = getDaysVal(dose.overdueTill, perDoseUnits.overdueTill || 'days');\n\n if (fromInDays <= 0) {\n errors.overdueFrom = 'Must be greater than 0';\n } else if (windowInDays > 0 && fromInDays >= windowInDays) {\n errors.overdueFrom = 'Must be within the eligibility window';\n }\n\n if (!hasTill) {\n errors.overdueTill = 'Overdue Till is required';\n } else if (tillInDays <= fromInDays) {\n errors.overdueTill = 'Must be greater than Overdue From';\n } else if (windowInDays > 0 && tillInDays > windowInDays) {\n errors.overdueTill = 'Must be within the eligibility window';\n }\n\n return errors;\n};\n\nexport const validateDoseDetails = (doseDetails, doseType, doseCount, durationUnits = {}) => {\n if (doseCount === 0) return null;\n const errors = [];\n const details = Array.isArray(doseDetails) ? doseDetails : [doseDetails];\n\n // Global fallback units (used for FIXED, or FLEXIBLE doses missing per-dose units)\n const globalEligibleFromUnit = durationUnits.eligibleFrom || 'days';\n const globalEligibleToUnit = durationUnits.eligibleTo || 'days';\n const globalIntervalUnit = durationUnits.interval || 'days';\n\n // Where the open-ended tail of the series begins, or -1 when nothing is lifelong.\n const firstLifelongIdx = details.findIndex((dose) => isLifelong(dose?.eligibleTo));\n\n details.forEach((dose, idx) => {\n // Use per-dose units if present (FLEXIBLE), otherwise fall back to global (FIXED)\n const perDoseUnits = dose.units || {};\n const eligibleFromUnit = perDoseUnits.eligibleFrom || globalEligibleFromUnit;\n const eligibleToUnit = perDoseUnits.eligibleTo || globalEligibleToUnit;\n const intervalUnit = perDoseUnits.interval || globalIntervalUnit;\n const doseErrors = {};\n const startInDays = getDaysVal(dose.eligibleFrom, eligibleFromUnit);\n const endInDays = getDaysVal(dose.eligibleTo, eligibleToUnit);\n const hasNoEnd = isLifelong(dose.eligibleTo);\n\n if ((dose.eligibleFrom === undefined || dose.eligibleFrom === null || dose.eligibleFrom === '') && idx !== 0) {\n doseErrors.eligibleFrom = 'Eligible From is required';\n }\n\n if (\n !hasNoEnd &&\n (dose.eligibleTo === undefined || dose.eligibleTo === '' || getDaysVal(dose.eligibleTo, eligibleToUnit) === 0)\n ) {\n doseErrors.eligibleTo = 'Eligible To is required';\n }\n\n const isLastFlexibleRow = doseType === 'FLEXIBLE' && idx === details.length - 1;\n\n const isIntervalRequired =\n (doseType === 'FIXED' && doseCount > 1) || (!isLastFlexibleRow && doseType === 'FLEXIBLE');\n\n if (isIntervalRequired) {\n const intervalVal = Number.parseInt(dose.interval) || 0;\n const intervalInDays = getDaysVal(dose.interval, intervalUnit);\n if (\n dose.interval === undefined ||\n dose.interval === null ||\n dose.interval === '' ||\n intervalVal === 0 ||\n dose.interval === '0 days'\n ) {\n doseErrors.interval = 'Interval is required';\n } else if (\n doseType === 'FIXED' &&\n doseCount > 1 &&\n // An open-ended window always has room for every dose.\n !hasNoEnd &&\n (doseCount - 1) * intervalInDays > endInDays - startInDays\n ) {\n doseErrors.interval = `Number of doses not possible in the window. Total interval exceeds available window (${endInDays - startInDays} days).`;\n }\n }\n\n if (!hasNoEnd && endInDays <= startInDays && dose.eligibleFrom && dose.eligibleTo) {\n doseErrors.eligibleTo = 'Must be strictly greater than ELIGIBLE FROM';\n }\n\n // Lifelong runs to the end of the series. A bounded dose sitting behind an open-ended one\n // can be pushed past its own window by an unbounded wait — the series then goes out of\n // scope and every dose after it is missed, so the vaccine can never be completed. The\n // dose table cascades this automatically; this catches configs saved before it existed.\n // Reported last so it wins over the required/ordering messages above, which describe the\n // same field but not the reason it cannot be filled in at all.\n if (doseType === 'FLEXIBLE' && !hasNoEnd && firstLifelongIdx !== -1 && idx > firstLifelongIdx) {\n doseErrors.eligibleTo = 'Doses after a lifelong dose must also be lifelong';\n }\n\n if (doseType === 'FLEXIBLE') {\n // A lifelong dose has no ceiling, so the overdue bounds are only checked against 0.\n Object.assign(doseErrors, validateOverdueWindow(dose, perDoseUnits, hasNoEnd ? null : endInDays - startInDays));\n }\n\n if (idx > 0 && doseType === 'FLEXIBLE') {\n const prevDose = details[idx - 1];\n const prevPerDoseUnits = prevDose.units || {};\n const prevFromUnit = prevPerDoseUnits.eligibleFrom || globalEligibleFromUnit;\n const prevIntervalUnit = prevPerDoseUnits.interval || globalIntervalUnit;\n const prevStartInDays = getDaysVal(prevDose.eligibleFrom, prevFromUnit);\n const prevIntervalDays = getDaysVal(prevDose.interval, prevIntervalUnit);\n if (startInDays < prevStartInDays + prevIntervalDays) {\n doseErrors.eligibleFrom = 'Must be greater than previous ELIGIBLE FROM and INTERVAL';\n }\n\n if (prevDose.isBooster && !dose.isBooster) {\n doseErrors.isBooster = 'A regular dose cannot follow a booster dose';\n }\n }\n\n if (Object.keys(doseErrors).length > 0) {\n errors[idx] = doseErrors;\n }\n });\n\n return errors.length > 0 ? errors : null;\n};\n\nexport const validateDependencies = (dependencies) => {\n const errors = [];\n const seenVaccines = new Set();\n\n dependencies.forEach((dep, idx) => {\n const depErrors = {};\n if (!dep.vaccine) {\n depErrors.vaccine = 'Vaccine selection is required';\n } else {\n if (seenVaccines.has(dep.vaccine)) {\n depErrors.vaccine = 'This vaccine is already added as a dependency';\n }\n seenVaccines.add(dep.vaccine);\n }\n\n const isMinEmpty = dep.minGap === '' || dep.minGap === null || dep.minGap === undefined;\n const isMaxEmpty = dep.maxGap === '' || dep.maxGap === null || dep.maxGap === undefined;\n\n const minGap = getDays(dep.minGap);\n const maxGap = getDays(dep.maxGap);\n\n if (dep.requirement === 'Should be given' || dep.requirement === 'Optional') {\n if (isMinEmpty) {\n depErrors.minGap = 'Gap cannot be empty';\n } else if (minGap <= 0) {\n depErrors.minGap = 'Must be greater than 0';\n }\n\n if (!isMinEmpty && !isMaxEmpty && minGap > 0 && maxGap > 0 && maxGap <= minGap) {\n depErrors.maxGap = 'Max gap must be greater than Min Gap';\n }\n } else {\n // For \"Should not be given\", values can be empty or zero.\n if (!isMinEmpty && minGap < 0) {\n depErrors.minGap = 'Gap cannot be negative';\n }\n if (!isMaxEmpty && maxGap < 0) {\n depErrors.maxGap = 'Gap cannot be negative';\n }\n }\n\n if (Object.keys(depErrors).length > 0) {\n errors[idx] = depErrors;\n }\n });\n\n return errors.some((e) => e && Object.keys(e).length > 0) ? errors : null;\n};\n\nexport const validateCodeSets = (codeSets) => {\n const errors = [];\n const seenTypes = new Set();\n\n (codeSets || []).forEach((cs, idx) => {\n const csErrors = {};\n if (!cs.type) {\n csErrors.type = 'Type is required';\n } else {\n if (seenTypes.has(cs.type)) {\n csErrors.type = 'This type is already added';\n }\n seenTypes.add(cs.type);\n }\n\n if (!cs.value || cs.value.trim() === '') {\n csErrors.value = 'Value is required';\n }\n\n if (Object.keys(csErrors).length > 0) {\n errors[idx] = csErrors;\n }\n });\n\n return errors.some((e) => e && Object.keys(e).length > 0) ? errors : null;\n};\n\n/**\n * The optional repeating booster on a FLEXIBLE schedule. Absent is valid — most vaccines have\n * none — so only a configured one is checked.\n */\n// The booster values carry their unit in the string — \"12 months\" — so the unit is taken\n// from the value itself rather than from a separate units object as a dose's would be.\nconst inDays = (val) => {\n const parts = String(val ?? '').trim().split(/\\s+/);\n return getDaysVal(val, parts.length > 1 ? parts[parts.length - 1] : 'days');\n};\n\nconst validateRecurringBooster = (vaccine) => {\n const booster = vaccine.recurringBooster;\n if (!booster || vaccine.doseType !== 'FLEXIBLE') {\n return null;\n }\n\n const errors = {};\n const from = Number.parseInt(booster.eligibleFrom, 10);\n const interval = Number.parseInt(booster.interval, 10);\n\n if (!(from >= 0)) {\n errors.eligibleFrom = 'Eligible From is required';\n }\n if (!(interval > 0)) {\n errors.interval = 'Interval must be greater than 0';\n }\n // Null is lifelong and always valid; a number has to leave room for at least one dose.\n if (!isLifelong(booster.eligibleTo)) {\n const to = Number.parseInt(booster.eligibleTo, 10);\n if (!(to > 0)) {\n errors.eligibleTo = 'Eligible To is required, or set it to No end';\n } else if (inDays(booster.eligibleTo) <= inDays(booster.eligibleFrom)) {\n errors.eligibleTo = 'Must be strictly greater than Eligible From';\n }\n }\n\n return Object.keys(errors).length > 0 ? errors : null;\n};\n\n/**\n * @param vaccine the draft being saved\n * @param includeSchedule whether this save rebuilds a product's schedule. False when no\n * product is open — a rename or a removal — where the panel's per-product fields are\n * leftovers from whatever was loaded last and validating them would block the save with\n * errors about a schedule nobody edited.\n */\nexport const validateVaccineForm = (vaccine, includeSchedule = true) => {\n const errors = {};\n\n if (!vaccine.name || vaccine.name.trim() === '') {\n errors.name = 'Vaccine Name is required';\n }\n\n if (!vaccine.recipientType) {\n errors.recipientType = 'Recipient Type is required';\n }\n\n if (!vaccine.baseDateCode) {\n errors.baseDateCode = 'Base Date is required';\n }\n\n const codeSetErrors = validateCodeSets(vaccine.codeSets || []);\n if (codeSetErrors) {\n errors.codeSets = codeSetErrors;\n }\n\n if (!includeSchedule) {\n return Object.keys(errors).length > 0 ? errors : null;\n }\n\n const isRecurring = vaccine.doseType === 'RECURRING';\n\n // A recurring schedule has no dose count by definition — the interval decides how many\n // doses there turn out to be, and that depends on the member.\n if (!isRecurring && (!vaccine.doses || vaccine.doses === 0)) {\n errors.doses = 'At least one dose is required';\n }\n\n // A recurring schedule is laid out as a single fixed-style row, so it validates as one dose\n // whatever `doses` happens to hold.\n const doseErrors = validateDoseDetails(\n vaccine.doseDetails,\n isRecurring ? 'FIXED' : vaccine.doseType,\n isRecurring ? 1 : vaccine.doses,\n vaccine.durationUnits\n );\n if (doseErrors) {\n errors.doseDetails = doseErrors;\n }\n\n // Without a repeat there is nothing to generate, so an interval of zero is the one value a\n // recurring schedule cannot hold: it would mean the same dose is available again the instant\n // it is given, forever.\n //\n // doseDetails holds a single dose as a bare object and several as an array — the same\n // duality validateDoseDetails normalises above. Reading [0] alone found nothing on the object\n // form, so the interval read as NaN and the error stood however large the number was.\n const recurringRow = Array.isArray(vaccine.doseDetails)\n ? vaccine.doseDetails[0]\n : vaccine.doseDetails;\n\n if (isRecurring && !(Number.parseInt(recurringRow?.interval, 10) > 0)) {\n errors.doseDetails = {\n ...(errors.doseDetails || {}),\n 0: { ...(errors.doseDetails?.[0] || {}), interval: 'Interval must be greater than 0' },\n };\n }\n\n const boosterErrors = validateRecurringBooster(vaccine);\n if (boosterErrors) {\n errors.recurringBooster = boosterErrors;\n }\n\n const depErrors = validateDependencies(vaccine.dependencies || []);\n if (depErrors) {\n errors.dependencies = depErrors;\n }\n\n return Object.keys(errors).length > 0 ? errors : null;\n};\n","import { execute, executeAll } from \"@/common/services/GlobalApis\";\nimport { api } from \"@/common/interceptors/AxiosInterceptor\";\nimport { LIFELONG_ELIGIBILITY, isLifelong } from \"../utils/validationUtils\";\n\nconst safeParseJson = (value, fallback) => {\n if (value == null) {\n return fallback;\n }\n\n if (typeof value !== \"string\") {\n return value;\n }\n\n try {\n return JSON.parse(value);\n } catch {\n return fallback;\n }\n};\n\nconst toStableId = (...parts) => parts.filter(Boolean).join(\"_\");\n\nconst normaliseEligibilityValue = (value) => {\n // Checked before the null branch below: a lifelong end is a real configured value,\n // not a missing one.\n if (isLifelong(value)) {\n return LIFELONG_ELIGIBILITY;\n }\n\n if (\n value === undefined ||\n value === \"\" ||\n value === \"N.A.\" ||\n value === \"null days\"\n ) {\n return \"N.A.\";\n }\n\n return value;\n};\n\nconst calculateOverallEligibility = (\n doseDetails,\n doseType = \"FLEXIBLE\",\n doses = 1,\n) => {\n // A recurring schedule has no dose count by definition, so the usual \"nothing configured\n // yet\" guard would read every one of them as N.A. Its window is the one thing it does have.\n const isRecurring = doseType === \"RECURRING\";\n\n if (doses === 0 && !isRecurring) {\n return \"N.A.\";\n }\n\n if (!doseDetails) {\n return \"N.A.\";\n }\n\n // One window rather than one per dose. Recurring is FIXED with the count taken away, and\n // both are held as a single row — sometimes a bare object, sometimes an array of one.\n if (doseType === \"FIXED\" || isRecurring) {\n const details = Array.isArray(doseDetails) ? doseDetails[0] : doseDetails;\n if (!details) {\n return \"N.A.\";\n }\n\n const eligibleFrom = normaliseEligibilityValue(details.eligibleFrom);\n const eligibleTo = normaliseEligibilityValue(details.eligibleTo);\n\n if (eligibleFrom === \"N.A.\" && eligibleTo === \"N.A.\") {\n return \"N.A.\";\n }\n\n return `${eligibleFrom} to ${eligibleTo}`;\n }\n\n if (!Array.isArray(doseDetails) || doseDetails.length === 0) {\n return \"N.A.\";\n }\n\n const first = normaliseEligibilityValue(doseDetails[0].eligibleFrom);\n const last = normaliseEligibilityValue(\n doseDetails[doseDetails.length - 1].eligibleTo,\n );\n\n if (first === \"N.A.\" && last === \"N.A.\") {\n return \"N.A.\";\n }\n\n return `${first} to ${last}`;\n};\n\nconst DEFAULT_DURATION_UNITS = {\n eligibleFrom: \"days\",\n eligibleTo: \"days\",\n interval: \"days\",\n};\n\n// A vaccine created but never configured has an empty `schedule`. The screen still needs\n// something to edit, so it gets the same shape a freshly migrated row would have.\nconst buildEmptyScheduleEntry = () => ({\n productId: null,\n noOfDoses: 0,\n doseType: \"FIXED\",\n doseEligibleFrom: undefined,\n doseEligibleTo: undefined,\n minGap: 0,\n durationUnits: { ...DEFAULT_DURATION_UNITS },\n dose: [],\n location: [],\n validations: [],\n});\n\n/**\n * Maps one element of the `schedule` column — the configuration for a single product — into\n * the shape the summary screen edits. With product management disabled there is exactly one\n * such entry, carrying productId null.\n */\nconst mapScheduleEntry = (entry, vaccineId, entryIndex) => {\n const doseTypeLower = String(entry.doseType || \"\").toLowerCase();\n // RECURRING is FIXED with the dose count taken away — one window and one interval — so it\n // is read into the same single-row shape and edited by the same controls.\n const isFixed =\n doseTypeLower === \"fixed\" ||\n doseTypeLower === \"na\" ||\n doseTypeLower === \"recurring\" ||\n !entry.doseType;\n\n const durationUnits = safeParseJson(entry.durationUnits, {\n ...DEFAULT_DURATION_UNITS,\n });\n\n // Not toStableId — it drops falsy parts, which would collapse entry 0 onto the bare id.\n const entryKey = `${vaccineId}s${entryIndex}`;\n\n const doseDetails = isFixed\n ? [\n {\n id: toStableId(\"fixed\", entryKey),\n eligibleFrom:\n entry.doseEligibleFrom !== undefined && entry.doseEligibleFrom !== null\n ? `${entry.doseEligibleFrom} ${durationUnits.eligibleFrom || \"days\"}`\n : \"\",\n // NULL is the stored form of a lifelong window — see the FLEXIBLE branch below.\n eligibleTo:\n entry.doseEligibleTo === null\n ? null\n : entry.doseEligibleTo !== undefined\n ? `${entry.doseEligibleTo} ${durationUnits.eligibleTo || \"days\"}`\n : \"\",\n interval: entry.minGap || 0,\n },\n ]\n : safeParseJson(entry.dose, []).map((dose, index) => {\n const perDoseUnits = {\n eligibleFrom:\n dose.eligible_from_unit || durationUnits.eligibleFrom || \"days\",\n eligibleTo:\n dose.eligible_to_unit || durationUnits.eligibleTo || \"days\",\n interval: dose.interval_unit || durationUnits.interval || \"days\",\n overdueFrom: dose.overdue_from_unit || \"days\",\n overdueTill: dose.overdue_till_unit || \"days\",\n };\n return {\n id: dose.id || toStableId(\"dose\", entryKey, index),\n isBooster:\n dose.isBooster === true ||\n dose.is_booster === true ||\n (typeof dose.dose === \"string\" &&\n dose.dose.toUpperCase().startsWith(\"B\")),\n alias: dose.alias || dose.booster_alias || \"\",\n eligibleFrom:\n dose.eligible_from !== undefined\n ? `${dose.eligible_from} ${perDoseUnits.eligibleFrom}`\n : \"\",\n // NULL is the stored form of a lifelong window; it must survive as null rather\n // than becoming the string \"null days\".\n eligibleTo:\n dose.eligible_to === null\n ? null\n : dose.eligible_to !== undefined\n ? `${dose.eligible_to} ${perDoseUnits.eligibleTo}`\n : \"\",\n overdueFrom:\n dose.overdue_from !== undefined && dose.overdue_from !== null\n ? `${dose.overdue_from} ${perDoseUnits.overdueFrom}`\n : \"\",\n overdueTill:\n dose.overdue_till !== undefined && dose.overdue_till !== null\n ? `${dose.overdue_till} ${perDoseUnits.overdueTill}`\n : \"\",\n interval: dose.min_gap || 0,\n units: perDoseUnits,\n };\n });\n\n const regions = safeParseJson(entry.location, [])\n .filter((location) => location && typeof location === \"object\")\n .map((location, index) => ({\n id: toStableId(\"region\", entryKey, index),\n locationId: location.locationId,\n locationIdArr: location.locationIdArr,\n locationList: location.locationList,\n fullPath: location.locationList?.replaceAll(\" => \", \" → \"),\n }));\n\n const dependencies = safeParseJson(entry.validations, []).map(\n (dependency, index) => ({\n id: toStableId(\"dep\", entryKey, index),\n vaccine: dependency.vaccine || \"\",\n requirement: dependency.requirement || \"Should be given\",\n minGap: Number.parseInt(dependency.minGap, 10) || 0,\n maxGap: Number.parseInt(dependency.maxGap, 10) || 0,\n message: dependency.message || \"\",\n }),\n );\n\n const doses = entry.noOfDoses || 0;\n const doseType = entry.doseType && entry.doseType !== \"NA\" ? entry.doseType : \"FIXED\";\n\n // The optional repeating tail on a FLEXIBLE schedule. Stored with its units alongside each\n // value; read back into the \"12 months\" strings the duration controls edit.\n const booster = entry.recurringBooster\n ? safeParseJson(entry.recurringBooster, null)\n : null;\n const recurringBooster =\n booster && booster.eligibleFrom !== undefined && booster.eligibleFrom !== null\n ? {\n eligibleFrom: `${booster.eligibleFrom} ${booster.eligibleFromUnit || \"days\"}`,\n // NULL is the stored form of a lifelong window, exactly as for a dose.\n eligibleTo:\n booster.eligibleTo === null || booster.eligibleTo === undefined\n ? null\n : `${booster.eligibleTo} ${booster.eligibleToUnit || \"days\"}`,\n interval: `${booster.interval ?? 0} ${booster.intervalUnit || \"days\"}`,\n }\n : null;\n\n return {\n productId: entry.productId ?? null,\n doses,\n doseType,\n doseDetails,\n durationUnits,\n recurringBooster,\n regions,\n dependencies,\n eligibility: calculateOverallEligibility(doseDetails, doseType, doses),\n };\n};\n\nconst mapImmunizationVaccineConfig = (vaccine) => {\n const parsedSchedule = safeParseJson(vaccine.schedule, []);\n const scheduleEntries =\n Array.isArray(parsedSchedule) && parsedSchedule.length > 0\n ? parsedSchedule\n : [buildEmptyScheduleEntry()];\n\n const productSchedules = scheduleEntries.map((entry, index) =>\n mapScheduleEntry(entry || {}, vaccine.id, index),\n );\n\n const parsedFilters = safeParseJson(vaccine.filters, []);\n const filters = Array.isArray(parsedFilters)\n ? parsedFilters\n : parsedFilters?.codes || [];\n\n const parsedCodeSets = safeParseJson(vaccine.code_sets, []);\n const codeSets = Array.isArray(parsedCodeSets) ? parsedCodeSets : [];\n\n // The first entry doubles as the vaccine's headline configuration. With product management\n // off it is the only one, so these top-level fields stay exactly what they always were.\n const [primarySchedule] = productSchedules;\n\n return {\n ...vaccine,\n name: vaccine.vaccine_name || vaccine.name || \"N.A.\",\n category:\n vaccine.target_prevention ||\n vaccine.disease ||\n vaccine.category ||\n \"N.A.\",\n productSchedules,\n doses: primarySchedule.doses,\n doseType: primarySchedule.doseType,\n doseDetails: primarySchedule.doseDetails,\n eligibility: primarySchedule.eligibility,\n isActive: vaccine.is_active !== undefined ? vaccine.is_active : true,\n // True while this vaccine has configuration saved but not yet published. Everything above\n // is already the draft's values — FETCH_IMMUNISATION_MASTER prefers the draft — so this is\n // the only thing telling the screen that what it is showing is not what members see.\n hasUnpublishedChanges: Boolean(vaccine.has_unpublished_changes),\n regions: primarySchedule.regions,\n dependencies: primarySchedule.dependencies,\n filters,\n codeSets,\n durationUnits: primarySchedule.durationUnits,\n baseDateCode: vaccine.base_date_code,\n recipientType: vaccine.recipient_type || \"\",\n scheduleType:\n vaccine.schedule_type === \"NON_ROUTINE\" ? \"NON_ROUTINE\" : \"ROUTINE\",\n };\n};\n\nconst getVaccines = () => {\n return execute({\n code: \"FETCH_IMMUNISATION_MASTER\",\n parameters: {},\n });\n};\n\nconst getBaseDates = () => {\n return execute({\n code: \"FETCH_IMMUNISATION_BASE_DATE\",\n parameters: {},\n });\n};\n\nconst getRecipients = () => {\n return execute({\n code: \"FETCH_IMMUNISATION_RECEPIENT_MASTER\",\n parameters: {},\n });\n};\n\nconst getImmunizationReferenceData = () => {\n return executeAll([\n {\n code: \"FETCH_IMMUNISATION_BASE_DATE\",\n parameters: {},\n sequence: 1,\n },\n {\n code: \"GET_ALL_IMMUNISATION_FILTERS\",\n parameters: {},\n sequence: 2,\n },\n {\n code: \"FETCH_IMMUNISATION_MASTER\",\n parameters: {},\n sequence: 3,\n },\n {\n code: \"FETCH_IMMUNISATION_RECEPIENT_MASTER\",\n parameters: {},\n sequence: 4,\n },\n ]);\n};\n\nconst addImmunization = (data) => {\n return execute({\n code: \"INSERT_IMMUNIZATION_MASTER\",\n parameters: data,\n });\n};\n\nconst updateImmunization = (data) => {\n return execute({\n code: \"UPDATE_IMMUNIZATION_DOSE\",\n ...data,\n });\n};\n\nconst checkImmunizationConfigurationInitiation = (data) => {\n return execute({\n code: \"CHECK_IMMUNIZATION_CONFIGURATION_INITIATION\",\n ...data,\n });\n};\n\nconst updateVaccineStatus = (data) => {\n return execute({\n code: \"UPDATE_IMMUNIZATION_STATUS\",\n ...data,\n });\n};\n\nconst updateVaccineStatusFromArray = (data) => {\n return execute({\n code: \"UPDATE_IMMUNIZATION_STATUS_FOR_ARRAY\",\n ...data,\n });\n};\n\nconst updateImmunizationConfigurationInitiation = (data) => {\n return execute({\n code: \"UPDATE_IMMUNIZATION_CONFIGURATION_INITIATION\",\n ...data,\n });\n};\n\nconst saveBaseDate = (data) => {\n return execute({\n code: \"SAVE_IMMUNISATION_BASE_DATE\",\n parameters: data,\n });\n};\n\nconst saveRecipient = (data) => {\n return execute({\n code: \"SAVE_IMMUNISATION_RECEPIENT_MASTER\",\n parameters: data,\n });\n};\n\nconst updateRecipient = (data) => {\n return execute({\n code: \"UPDATE_IMMUNISATION_RECEPIENT_MASTER\",\n parameters: data,\n });\n};\n\nconst updateBaseDate = (data) => {\n return execute({\n code: \"UPDATE_IMMUNISATION_BASE_DATE\",\n parameters: data,\n });\n};\n\nconst getAllTablesAndColumns = () => {\n return execute({\n code: \"retrieve_all_tables_and_columns\",\n parameters: {},\n });\n};\n\nconst getFilters = () => {\n return execute({\n code: \"GET_ALL_IMMUNISATION_FILTERS\",\n parameters: {},\n });\n};\n\nconst addFilter = (data) => {\n return execute({\n code: \"ADD_IMMUNISATION_FILTER\",\n parameters: data,\n });\n};\n\nconst updateFilter = (data) => {\n return execute({\n code: \"UPDATE_IMMUNISATION_FILTER\",\n parameters: data,\n });\n};\n\nconst getImmunisationV2List = (data) => {\n return api.post(\"/medplatform/v2/immunisation/list\", data);\n};\n\nconst revalidateImmunisationV2List = (data) => {\n return api.post(\"/medplatform/v2/immunisation/revalidate\", data);\n};\n\n/**\n * Tells the configured reviewers that a vaccine's configuration was saved.\n *\n * Only the vaccine name and the list of change descriptions travel: the recipients come from\n * system configuration and the editor's name from the session, neither of which the browser\n * should be able to choose.\n */\nconst notifyConfigChange = (data) => {\n return api.post(\"/medplatform/v2/immunisation/config-change-notification\", data);\n};\n\nexport const ImmunizationUtil = {\n calculateOverallEligibility,\n mapImmunizationVaccineConfig,\n getVaccines,\n getBaseDates,\n getRecipients,\n getImmunizationReferenceData,\n addImmunization,\n updateImmunization,\n checkImmunizationConfigurationInitiation,\n updateVaccineStatus,\n updateVaccineStatusFromArray,\n updateImmunizationConfigurationInitiation,\n saveBaseDate,\n saveRecipient,\n updateRecipient,\n updateBaseDate,\n getAllTablesAndColumns,\n getFilters,\n addFilter,\n updateFilter,\n getImmunisationV2List,\n revalidateImmunisationV2List,\n notifyConfigChange,\n};\n"],"names":["VerifyRoute","lazy","Roles","QueryBuilder","n","UserList","ManageUser","QueryManagement","FeatureMenu","ActivityAnalytics","NewServerManagement","ManageDynamicFeature","SecurityAuditLogList","EventConfigurations","ManageEventConfiguration","EntityManagement","MobileAnalytics","MobileMenuManagement","AddMenuConfiguration","ManageTranslation","WidgetList","NotificationList","ImmunizationConfigurationsList","ManageImmunization","ImmunizationConfiguration","VaccineEducationList","VaccineEducationConfigurator","FhirServerList","FhirServerWizard","FhirServerProfile","FhirRawResourceList","LocationWiseExpectedTarget","corecustom2Routes","jsx","createInitialState","initialState","upsertByIdOrCode","items","incoming","matchIndex","item","index","immunizationSlice","createSlice","state","action","id","vaccines","vaccine","payload","name","vaccine_name","disease","target_prevention","baseDateCode","base_date_code","recipientType","recipient_type","finalName","finalCategory","validIds","v","nextId","newVaccine","updatedVaccine","code","is_active","vaccineId","status","vIndex","sIndex","errors","toggleVaccine","setVaccines","addCustomVaccine","setCurrentView","updateScheduledVaccine","setBaseDatesMaster","setRecipientMaster","setDbTablesMaster","setFiltersMaster","upsertBaseDateMasterItem","upsertRecipientMasterItem","updateBaseDateMasterStatus","upsertFilterMasterItem","updateFilterMasterStatus","setFeatureRights","setImmunizationConfigLoaded","resetImmunizationState","activateSelectedVaccines","setSelectedVaccineIds","setValidationErrors","clearValidationErrors","setVaccineStatus","immunizationSlice_default","getDays","val","getDaysVal","unit","num","isBlankDuration","LIFELONG_UNIT","isLifelong","eligibleTo","LIFELONG_ELIGIBILITY","validateOverdueWindow","dose","perDoseUnits","windowInDays","hasFrom","hasTill","fromInDays","tillInDays","validateDoseDetails","doseDetails","doseType","doseCount","durationUnits","details","globalEligibleFromUnit","globalEligibleToUnit","globalIntervalUnit","firstLifelongIdx","idx","eligibleFromUnit","eligibleToUnit","intervalUnit","doseErrors","startInDays","endInDays","hasNoEnd","isLastFlexibleRow","intervalVal","intervalInDays","prevDose","prevPerDoseUnits","prevFromUnit","prevIntervalUnit","prevStartInDays","prevIntervalDays","validateDependencies","dependencies","seenVaccines","dep","depErrors","isMinEmpty","isMaxEmpty","minGap","maxGap","e","validateCodeSets","codeSets","seenTypes","cs","csErrors","inDays","parts","validateRecurringBooster","booster","from","interval","validateVaccineForm","includeSchedule","codeSetErrors","isRecurring","recurringRow","_a","boosterErrors","safeParseJson","value","fallback","toStableId","normaliseEligibilityValue","calculateOverallEligibility","doses","eligibleFrom","first","last","DEFAULT_DURATION_UNITS","buildEmptyScheduleEntry","mapScheduleEntry","entry","entryIndex","doseTypeLower","isFixed","entryKey","regions","location","dependency","recurringBooster","mapImmunizationVaccineConfig","parsedSchedule","productSchedules","parsedFilters","filters","parsedCodeSets","primarySchedule","getVaccines","execute","getBaseDates","getRecipients","getImmunizationReferenceData","executeAll","addImmunization","data","updateImmunization","checkImmunizationConfigurationInitiation","updateVaccineStatus","updateVaccineStatusFromArray","updateImmunizationConfigurationInitiation","saveBaseDate","saveRecipient","updateRecipient","updateBaseDate","getAllTablesAndColumns","getFilters","addFilter","updateFilter","getImmunisationV2List","api","revalidateImmunisationV2List","notifyConfigChange","ImmunizationUtil"],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { b as m } from "./ImmunizationConfigurationBase-lKsJZMak.js";
2
+ import { c as p, r as d, s as h, n as i, v, t as e, f as y, e as f } from "./constants-BTpJFQe_-CYPZIqQF.js";
3
+ import { useState as b, useEffect as g } from "react";
4
+ var S = [
5
+ f,
6
+ e,
7
+ i,
8
+ d
9
+ ], n = null, r = null, u = /* @__PURE__ */ new Set();
10
+ function a(t, l) {
11
+ return !Array.isArray(t) || t.length === 0 ? l : t.map((o) => ({
12
+ value: o.code,
13
+ label: o.label || o.code
14
+ }));
15
+ }
16
+ function s(t) {
17
+ return {
18
+ productUnits: a(t == null ? void 0 : t[f], y),
19
+ storageUnitTypes: a(t == null ? void 0 : t[e], v),
20
+ sessionSites: a(t == null ? void 0 : t[i], h),
21
+ adjustmentReasons: a(t == null ? void 0 : t[d], p),
22
+ loaded: t != null
23
+ };
24
+ }
25
+ function c() {
26
+ u.forEach((t) => t(n));
27
+ }
28
+ async function w(t = !1) {
29
+ return !t && (n != null && n.loaded) ? n : (!t && r || (r = m(S).then((l) => (n = s(l), r = null, c(), n)).catch((l) => {
30
+ throw r = null, n || (n = s(null), c()), l;
31
+ })), r);
32
+ }
33
+ function j() {
34
+ let [t, l] = b(n ?? s(null));
35
+ return g(() => (u.add(l), !(n != null && n.loaded) && !r ? w().catch(() => {
36
+ }) : n && l(n), () => {
37
+ u.delete(l);
38
+ }), []), t;
39
+ }
40
+ export {
41
+ j as y
42
+ };
43
+ //# sourceMappingURL=listValueStore-5d4vNGQM-WclZ5nBG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listValueStore-5d4vNGQM-WclZ5nBG.js","sources":["../../productManagement/dist/listValueStore-5d4vNGQM.js"],"sourcesContent":["import { U as e } from \"./settingsStore-Df_wGo55.js\";\nimport { c as t, d as n, f as r, h as i, l as a, m as o, p as s, u as c } from \"./constants-BTpJFQe_.js\";\nimport { useEffect as l, useState as u } from \"react\";\n//#region src/utils/listValueStore.js\nvar d = [\n\ts,\n\ti,\n\to,\n\tr\n], f = null, p = null, m = /* @__PURE__ */ new Set();\nfunction h(e, t) {\n\treturn !Array.isArray(e) || e.length === 0 ? t : e.map((e) => ({\n\t\tvalue: e.code,\n\t\tlabel: e.label || e.code\n\t}));\n}\nfunction g(e) {\n\treturn {\n\t\tproductUnits: h(e?.[s], a),\n\t\tstorageUnitTypes: h(e?.[i], n),\n\t\tsessionSites: h(e?.[o], c),\n\t\tadjustmentReasons: h(e?.[r], t),\n\t\tloaded: e != null\n\t};\n}\nfunction _() {\n\tm.forEach((e) => e(f));\n}\nasync function v(t = !1) {\n\treturn !t && f?.loaded ? f : (!t && p || (p = e(d).then((e) => (f = g(e), p = null, _(), f)).catch((e) => {\n\t\tthrow p = null, f || (f = g(null), _()), e;\n\t})), p);\n}\nfunction y() {\n\tlet [e, t] = u(f ?? g(null));\n\treturn l(() => (m.add(t), !f?.loaded && !p ? v().catch(() => {}) : f && t(f), () => {\n\t\tm.delete(t);\n\t}), []), e;\n}\n//#endregion\nexport { y as t };\n\n//# sourceMappingURL=listValueStore-5d4vNGQM.js.map"],"names":["d","s","i","o","r","f","p","m","h","e","t","g","a","n","c","_","v","y","u","l"],"mappings":";;;AAIA,IAAIA,IAAI;AAAA,EACPC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AACD,GAAGC,IAAI,MAAMC,IAAI,MAAMC,IAAoB,oBAAI,IAAG;AAClD,SAASC,EAAEC,GAAGC,GAAG;AAChB,SAAO,CAAC,MAAM,QAAQD,CAAC,KAAKA,EAAE,WAAW,IAAIC,IAAID,EAAE,IAAI,CAACA,OAAO;AAAA,IAC9D,OAAOA,EAAE;AAAA,IACT,OAAOA,EAAE,SAASA,EAAE;AAAA,EACtB,EAAG;AACH;AACA,SAASE,EAAEF,GAAG;AACb,SAAO;AAAA,IACN,cAAcD,EAAEC,KAAAA,gBAAAA,EAAIR,IAAIW,CAAC;AAAA,IACzB,kBAAkBJ,EAAEC,KAAAA,gBAAAA,EAAIP,IAAIW,CAAC;AAAA,IAC7B,cAAcL,EAAEC,KAAAA,gBAAAA,EAAIN,IAAIW,CAAC;AAAA,IACzB,mBAAmBN,EAAEC,KAAAA,gBAAAA,EAAIL,IAAIM,CAAC;AAAA,IAC9B,QAAQD,KAAK;AAAA,EACf;AACA;AACA,SAASM,IAAI;AACZ,EAAAR,EAAE,QAAQ,CAACE,MAAMA,EAAEJ,CAAC,CAAC;AACtB;AACA,eAAeW,EAAE,IAAI,IAAI;AACxB,SAAO,CAAC,MAAKX,KAAA,QAAAA,EAAG,UAASA,KAAK,CAAC,KAAKC,MAAMA,IAAIG,EAAET,CAAC,EAAE,KAAK,CAACS,OAAOJ,IAAIM,EAAEF,CAAC,GAAGH,IAAI,MAAMS,EAAC,GAAIV,EAAE,EAAE,MAAM,CAACI,MAAM;AACzG,UAAMH,IAAI,MAAMD,MAAMA,IAAIM,EAAE,IAAI,GAAGI,EAAC,IAAKN;AAAA,EAC1C,CAAC,IAAIH;AACN;AACA,SAASW,IAAI;AACZ,MAAI,CAACR,GAAGC,CAAC,IAAIQ,EAAEb,KAAKM,EAAE,IAAI,CAAC;AAC3B,SAAOQ,EAAE,OAAOZ,EAAE,IAAIG,CAAC,GAAG,EAACL,KAAA,QAAAA,EAAG,WAAU,CAACC,IAAIU,IAAI,MAAM,MAAM;AAAA,EAAC,CAAC,IAAIX,KAAKK,EAAEL,CAAC,GAAG,MAAM;AACnF,IAAAE,EAAE,OAAOG,CAAC;AAAA,EACX,IAAI,CAAA,CAAE,GAAGD;AACV;"}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "author": "Argusoft",
4
4
  "description": "Medplat Core Module",
5
5
  "main": "dist/index.js",
6
- "version": "1.0.30",
6
+ "version": "1.0.32",
7
7
  "type": "module",
8
8
  "license": "MIT",
9
9
  "exports": {
@@ -51,6 +51,10 @@
51
51
  "@mui/material": "^6",
52
52
  "@mui/icons-material": "^6",
53
53
  "@mui/system": "^6",
54
+ "@dnd-kit/core": "^6",
55
+ "@dnd-kit/sortable": "^8",
56
+ "@dnd-kit/modifiers": "^7",
57
+ "@dnd-kit/utilities": "^3",
54
58
  "@emotion/react": "^11",
55
59
  "@argusoft/medplat-useranalytics": "^1",
56
60
  "@fortawesome/fontawesome-svg-core": "^6",
@@ -1 +0,0 @@
1
- {"version":3,"file":"AccessRights-xrday-L1.js","sources":["../src/views/Features/AccessPanel.jsx","../src/views/Features/AccessRights.jsx"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport { Controller, useForm } from \"react-hook-form\";\nimport { execute } from \"@/common/services/GlobalApis\";\nimport { Autocomplete, Box, Button, TextField } from \"@mui/material\";\nimport { alpha } from \"@mui/material/styles\";\nimport PropTypes from \"prop-types\";\nimport FontAwesomeIcons from \"@/common/fontAwesomeIcons/FontAwesomeIcons\";\nimport CustomAutocomplete, {\n VirtualListbox,\n} from \"@/views/custom-components/CustomAutoComplete\";\nimport useCaching from \"@/hooks/useCaching\";\n\n/**\n * Option count past which a picker is windowed rather than fully rendered.\n * Below this the virtualization machinery costs more than the options do.\n */\nconst VIRTUALIZE_ABOVE = 200;\n\nexport default function AccessPanel({\n translate,\n onSubmit,\n roleList,\n featureData,\n}) {\n const [search, setSearch] = useState(\"\");\n const [debouncedSearch, setDebouncedSearch] = useState(\"\");\n const [userList, setUserList] = useState([]);\n const { control, handleSubmit, reset } = useForm({});\n const { getCachedData } = useCaching();\n\n /** Ids already granted access, as sets, so the pickers filter in O(1) per option. */\n const assignedIds = useMemo(() => {\n const roles = new Set();\n const users = new Set();\n (featureData || []).forEach((item) => {\n if (item?.designationId) roles.add(item.designationId);\n if (item?.userId) users.add(item.userId);\n });\n return { roles, users };\n }, [featureData]);\n\n const newRoleList = useMemo(\n () => roleList.filter((role) => !assignedIds.roles.has(role?.id)),\n [roleList, assignedIds]\n );\n\n /**\n * Debounces the `search` input by 300ms before updating `debouncedSearch`.\n * Ensures user input is throttled to avoid excessive API calls.\n */\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedSearch(search);\n }, 300);\n\n return () => clearTimeout(handler);\n }, [search]);\n\n /**\n * Triggers user list fetching when `debouncedSearch` is updated and non-empty.\n */\n useEffect(() => {\n if (debouncedSearch !== \"\") {\n userListFetch(debouncedSearch);\n }\n }, [debouncedSearch]);\n\n useEffect(() => {\n userListFetch(\"\");\n }, []);\n\n /**\n * Fetches a filtered list of users based on the provided search query.\n *\n * Calls the backend with the given query string, processes the response to ensure\n * only users with valid IDs are included, and maps each user to include a formatted\n * `displayName` used in UI dropdowns.\n *\n * @param {string} query - The search string used to filter users.\n */\n const userListFetch = async (query, currentFeatureData = featureData) => {\n try {\n const fetchUsers = async (searchString) => {\n const { data } = await execute({\n code: \"user_search_for_selectize\",\n parameters: { searchString },\n });\n return data;\n };\n\n // The unfiltered list is reference data — the same payload was refetched\n // on every mount and again after every grant. Keystroke searches stay\n // uncached: they are already debounced and each one is unique.\n const userData = query\n ? await fetchUsers(query)\n : await getCachedData({\n cacheKey: [\"user_search_for_selectize\", \"\"],\n fetchFn: () => fetchUsers(\"\"),\n staleTime: 5 * 60 * 1000,\n cacheTime: 30 * 60 * 1000,\n });\n\n const grantedUserIds =\n currentFeatureData === featureData\n ? assignedIds.users\n : new Set(\n (currentFeatureData || [])\n .map((item) => item?.userId)\n .filter(Boolean)\n );\n\n const newArray = (userData?.result || [])\n .filter((item) => item?.id && !grantedUserIds.has(item.id))\n .map((item) => ({\n ...item,\n displayName:\n `${item.firstName || \"\"} ${item.lastName || \"\"} (${item.userName || \"\"})`.trim(),\n }));\n\n setUserList(newArray);\n } catch (error) {\n console.error(error);\n }\n };\n\n return (\n <Box\n sx={{\n display: \"flex\",\n flexDirection: { xs: \"column\", md: \"row\" },\n alignItems: { xs: \"stretch\", md: \"flex-start\" },\n gap: 1.5,\n flex: 1,\n minWidth: 0,\n }}\n >\n <Box sx={{ flex: 1, minWidth: 0 }}>\n <Controller\n name=\"roles\"\n id=\"roles\"\n control={control}\n defaultValue={null}\n render={({ field: { onChange, value, ref } }) => (\n <Autocomplete\n options={userList}\n size=\"small\"\n // `user_search_for_selectize` returns the whole directory when the\n // search box is empty; window the listbox once that runs long.\n slots={{\n listbox:\n userList.length > VIRTUALIZE_ABOVE ? VirtualListbox : undefined,\n }}\n getOptionLabel={(option) => option.displayName || \"\"}\n isOptionEqualToValue={(option, value) => option.id === value?.id}\n value={value || null}\n onChange={(event, newValue, reason) => {\n if (reason === \"clear\") {\n userListFetch(\"\");\n }\n onChange(newValue);\n }}\n onInputChange={(event, newInputValue, reason) => {\n if (reason === \"input\") {\n setSearch(newInputValue);\n }\n }}\n renderOption={(props, option) => {\n const label = option.displayName || \"\";\n const searchTerm = search.trim();\n\n const index = label\n .toLowerCase()\n .indexOf(searchTerm.toLowerCase());\n if (index === -1) {\n return (\n <li\n {...props}\n key={option.id}\n style={{ lineHeight: 1.5, fontSize: \"14px\" }}\n >\n {label}\n </li>\n );\n }\n\n const beforeMatch = label.substring(0, index);\n const match = label.substring(index, index + searchTerm.length);\n const afterMatch = label.substring(index + searchTerm.length);\n\n return (\n <li\n {...props}\n key={option.id}\n style={{ lineHeight: 1.5, fontSize: \"14px\" }}\n >\n <span>\n {beforeMatch}\n <Box\n component=\"span\"\n sx={{\n fontWeight: 700,\n borderRadius: \"2px\",\n backgroundColor: (theme) =>\n alpha(theme.palette.primary.main, 0.18),\n }}\n >\n {match}\n </Box>\n {afterMatch}\n </span>\n </li>\n );\n }}\n renderInput={(params) => (\n <TextField\n {...params}\n label={translate(\"User\")}\n variant=\"outlined\"\n size=\"small\"\n inputRef={ref}\n />\n )}\n />\n )}\n />\n </Box>\n\n <Box sx={{ flex: 1, minWidth: 0 }}>\n <CustomAutocomplete\n id=\"selectedRoles\"\n name={\"selectedRoles\"}\n options={newRoleList}\n control={control}\n isVirtualized={newRoleList.length > VIRTUALIZE_ABOVE}\n getOptionLabel={(option) => option?.name}\n dataTestId=\"accessrights-select-role\"\n renderInput={(params) => (\n <TextField\n {...params}\n label={translate(\"Role\")}\n variant=\"outlined\"\n size=\"small\"\n />\n )}\n />\n </Box>\n\n <Button\n variant=\"contained\"\n size=\"small\"\n data-testid=\"accessrights-add-button\"\n startIcon={<FontAwesomeIcons iconName=\"faPlus\" />}\n sx={{ flexShrink: 0, alignSelf: { xs: \"flex-end\", md: \"center\" } }}\n onClick={handleSubmit((data) => {\n onSubmit(data);\n\n userListFetch(\"\", [...featureData, { userId: data.roles?.id }]);\n reset();\n })}\n >\n {translate(\"add\")}\n </Button>\n </Box>\n );\n}\n\nAccessPanel.propTypes = {\n translate: PropTypes.any,\n permissionDetailsList: PropTypes.any,\n getPermissionDetails: PropTypes.any,\n onSubmit: PropTypes.any,\n permissionTypes: PropTypes.any,\n roleList: PropTypes.any,\n featureData: PropTypes.any,\n};\n","import {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Box,\n Checkbox,\n Chip,\n FormControlLabel,\n IconButton,\n InputAdornment,\n Menu,\n MenuItem,\n Tooltip,\n Typography,\n} from \"@mui/material\";\nimport PropTypes from \"prop-types\";\nimport CustomConfirmationModal from \"@/views/custom-components/CustomConfirmationModal\";\nimport DebouncedSearchInput from \"@/views/custom-components/DebouncedSearchInput\";\nimport React, {\n lazy,\n Suspense,\n useCallback,\n useEffect,\n useMemo,\n useState,\n useRef,\n} from \"react\";\nimport {\n deleteUserMenuItem,\n getFeatureAccessSummaryV2,\n getFeatureData,\n getFeatureDataV2,\n getFeaturePermissionsForIdentity,\n postMenuItem,\n updateUserMenuItem,\n} from \"../../services/Features\";\nimport { getRoleList, execute } from \"@/common/services/GlobalApis.js\";\nimport \"@/assets/scss/scrollBar.scss\";\nimport { useForm } from \"react-hook-form\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport useTrackEvent from \"@/hooks/useTrackEvent\";\nimport { useTranslateProvider } from \"@/common/languageTranslator/TranslationContext\";\nimport FontAwesomeIcons from \"@/common/fontAwesomeIcons/FontAwesomeIcons\";\nimport AccessPanel from \"./AccessPanel\";\nimport GeneralUtil from \"@/common/services/util/GeneralUtil\";\nimport useCaching from \"@/hooks/useCaching\";\nimport { AccessRightsSkeleton } from \"./Skeletons/FeatureSkeletons\";\n\n// Neither dialog is on screen at first paint, and GrantPermissionModal drags in\n// yup + the date picker, so both stay out of this chunk until they open.\nconst GrantPermissionModal = lazy(() => import(\"./GrantPermissionModal\"));\nconst PermissionsModal = lazy(() => import(\"./PermissionsModal\"));\n\nfunction RowActionMenu({ config, row }) {\n const [anchorEl, setAnchorEl] = useState(null);\n const openMenu = Boolean(anchorEl);\n\n const handleIconClick = (e) => {\n e.stopPropagation(); // keep the row/accordion from toggling\n setAnchorEl(e.currentTarget);\n\n if (typeof config.menuClick === \"function\") {\n config.menuClick(row);\n }\n };\n\n const handleClose = (e) => {\n if (e) {\n e.stopPropagation();\n }\n setAnchorEl(null);\n };\n\n const handleItemClick = (item) => (e) => {\n e.stopPropagation();\n if (typeof item.onClick === \"function\") {\n item.onClick(row);\n }\n setAnchorEl(null);\n };\n\n return (\n <>\n <Tooltip title={config.tooltip}>\n <IconButton\n size=\"small\"\n aria-label={config.tooltip}\n onClick={handleIconClick}\n data-testid={config.dataTestId}\n >\n {config.icon}\n </IconButton>\n </Tooltip>\n\n <Menu\n anchorEl={anchorEl}\n open={openMenu}\n onClose={handleClose}\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"right\" }}\n transformOrigin={{ vertical: \"top\", horizontal: \"right\" }}\n >\n {config.menuItems?.map((item, index) => (\n <MenuItem key={index} onClick={handleItemClick(item)}>\n {item.label}\n </MenuItem>\n ))}\n </Menu>\n </>\n );\n}\n\nRowActionMenu.propTypes = {\n config: PropTypes.any,\n row: PropTypes.any,\n};\n\n/**\n * The `AccessRights` component displays access rights related to a specific sub-menu.\n *@module AccessRights\n * @param {Object} props - The component props.\n * @param {number} props.subMenuId - The ID of the sub-menu for which access rights are displayed or managed.\n * @param {number} props.subMenuGroupName - The name of the sub-menu group.\n */\nexport default function AccessRights({\n subMenuId,\n // subMenuGroupName,\n subMenuFeatureVal,\n // selectedTab,\n parentLoading,\n onNewAPIChange,\n rights,\n}) {\n const formRef = useRef(null);\n const submitRef = useRef(false);\n const trackEvent = useTrackEvent();\n const useLegacySummaryApiRef = useRef(!GeneralUtil.isTecho);\n const { getCachedData } = useCaching();\n const [featureNames, setFeatureNames] = useState([]);\n const [featureData, setFeatureData] = useState([]);\n const [initFeatureData, setinitFeatureData] = useState([]);\n const [roleData, setRoleData] = useState([]);\n const [initialROleData, setInitialRoleData] = useState([]);\n const [feature, setFeature] = useState(\"\");\n const [selectedUser, setSelectedUser] = useState({});\n const [open, setOpen] = useState(false);\n const [openPermissionModal, setOpenPermissionModal] = useState(false);\n const [deletedId, setDeletedId] = useState(\"\");\n const [selectedRow, setSelectedRow] = useState(null);\n const [allData, setAllData] = useState({});\n const [isLoading, setIsLoading] = useState(false);\n const [isNewApi, setIsNewApi] = useState(false);\n const [pendingGrant, setPendingGrant] = useState(null);\n const [permissionList, setPermissionList] = useState([]);\n const [isOpen, setIsOpen] = useState(0);\n const [search, setSearch] = useState(\"\");\n const { translate } = useTranslateProvider();\n const [selectedFeatureName, setSelectedFeatureName] = useState(\"\");\n const [selectedFeatureState, setSelectedFeatureState] = useState([]);\n\n const [expandedChildrenByRow, setExpandedChildrenByRow] = useState(null);\n\n const canUpdate = GeneralUtil.hasCheckRights(\n rights?.[\"update.manage.featurelist\"],\n );\n const canDelete = GeneralUtil.hasCheckRights(\n rights?.[\"delete.manage.featurelist\"],\n );\n\n /**\n * Permission metadata keyed by id. The render walks every permission of\n * every expanded row, so the old linear `find` per checkbox was O(rows ×\n * permissions²).\n */\n const permissionById = useMemo(() => {\n const map = new Map();\n (permissionList || []).forEach((perm) => map.set(String(perm.id), perm));\n return map;\n }, [permissionList]);\n\n /** Backend feature name → display name, for the same reason. */\n const displayNameByFeature = useMemo(() => {\n const map = new Map();\n (featureNames || []).forEach((entry) => {\n if (entry?.feature_name) map.set(entry.feature_name, entry.display_name);\n });\n return map;\n }, [featureNames]);\n\n const getBasicRightId = () => {\n if (!permissionList || permissionList.length === 0) return null;\n const views = permissionList.filter((rights) =>\n rights?.id?.startsWith(\"view\"),\n );\n if (views && views.length > 0) {\n // Case 2: view.report.<uuid> — anchored so candrilldown sub-rights don't match\n const reportUuidView = views.find((item) =>\n /^view\\.report\\.[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(item.id)\n );\n if (reportUuidView) return reportUuidView.id;\n\n // Case 1: view.report — exact match regardless of list order\n if (views.some((item) => item.id === \"view.report\")) return \"view.report\";\n\n // Case 3: view.x.x — three-segment\n const threeSegment = views.filter((item) => item.id.split(\".\").length === 3);\n if (threeSegment.length > 0) {\n return threeSegment[0].id;\n }\n }\n return permissionList[0]?.id;\n };\n\n useEffect(() => {\n let form = formRef.current;\n\n return () => {\n trackEvent(\"conversion_event\", {\n form,\n form_name: \"Access Rights\",\n submit: submitRef.current,\n }); // Use the current ref value\n };\n }, []);\n\n /**\n * Sorts an array of user menu items based on `designationId` and `userId`.\n * @param {Object} data - The data object containing `userMenuItemDtos` to be sorted.\n * @param {Object[]} data.userMenuItemDtos - An array of user menu items to sort.\n * @param {number} [data.userMenuItemDtos[].designationId] - The designation ID of a menu item.\n * @param {number} [data.userMenuItemDtos[].userId] - The user ID of a menu item.\n * @returns {Object[]} The sorted array of user menu items.\n */\n const sortData = (data) => {\n let sortedData;\n sortedData = data.userMenuItemDtos?.toSorted((a, b) => {\n if (a.designationId !== undefined && b.designationId !== undefined) {\n return a.designationId - b.designationId;\n }\n if (a.designationId !== undefined && b.designationId === undefined) {\n return -1;\n }\n if (a.designationId === undefined && b.designationId !== undefined) {\n return 1;\n }\n\n if (a.userId !== undefined && b.userId !== undefined) {\n return a.userId - b.userId;\n }\n if (a.userId !== undefined && b.userId === undefined) {\n return -1;\n }\n if (a.userId === undefined && b.userId !== undefined) {\n return 1;\n }\n\n return 0;\n });\n return sortedData;\n };\n\n /**\n * Handles the deletion of a user menu item and updates the feature data.\n * @async\n * @function handleDelete\n * @returns {Promise<void>} A promise that resolves when the operation is complete.\n * @throws {Error} Throws an error if the deletion or data retrieval fails.\n */\n\n const editUserMenuItem = (data) => {\n data?.userMenuItemDtos.forEach((right) => {\n right.featureJson = extendFeatureJson(\n JSON.parse(data.featureJson || \"{}\"),\n JSON.parse(right.featureJson || \"{}\"),\n );\n if (right.designationId) {\n right.code = \"Role\";\n right.displayName = right.roleName;\n } else {\n right.code = \"User\";\n right.displayName = right.fullName;\n }\n });\n return data;\n };\n\n const handleDelete = async () => {\n try {\n setIsLoading((cur) => !cur);\n if (isNewApi) {\n const response = [];\n Object.entries(JSON.parse(selectedRow?.featureJson)).forEach(\n ([id, value]) => {\n if (value === true) {\n response.push(id);\n }\n },\n );\n\n try {\n await execute({\n code: \"delete_permissions\",\n parameters: {\n permissionList: response,\n roleId: parseInt(selectedRow?.designationId),\n userId: parseInt(selectedRow?.userId),\n },\n });\n showToast({\n type: \"success\",\n message: \"Permission Deleted Successfully\",\n });\n const { data: val } = await getFeatureDataV2(subMenuId);\n newApiData(val);\n } catch {\n showToast({\n type: \"error\",\n message: \"error occurred\",\n });\n }\n } else {\n await deleteUserMenuItem(deletedId);\n let { data } = await getFeatureData(subMenuId);\n if (data?.userMenuItemDtos.length > 0) {\n data = editUserMenuItem(data);\n }\n\n setFeatureData(data.userMenuItemDtos);\n }\n setOpen(false);\n setIsLoading((cur) => !cur);\n } catch (error) {\n showToast({\n type: \"error\",\n message: `Error Deleting data: ${error?.response?.data?.message}`,\n });\n setIsLoading((cur) => !cur);\n setOpen(false);\n }\n };\n\n const diffPermissions = (permissions, featureJson) => {\n const assignedIds = new Set(permissions.map((p) => p.id));\n const response = [];\n\n // Check for grants (in featureJson but not in permissions)\n Object.entries(featureJson).forEach(([id, value]) => {\n if (value === true && !assignedIds.has(id)) {\n response.push({ id, action: \"grant\" });\n }\n });\n\n // Check for revokes (in permissions but not true in featureJson)\n permissions.forEach((p) => {\n if (!featureJson[p.id]) {\n response.push({ id: p.id, action: \"revoke\" });\n }\n });\n\n return response;\n };\n\n const { handleSubmit } = useForm({});\n /**\n * Updates a user menu item and refreshes the feature data.\n * @async\n * @function handleUpdateUserMenuItem\n * @param {Object} params - Parameters to update the user menu item.\n * @returns {Promise<void>} A promise that resolves when the operation is complete.\n * @throws {Error} Logs an error if the update or data retrieval fails.\n */\n\n const handleUpdateUserMenuItem = async (params) => {\n try {\n if (isNewApi) {\n params = { ...params, featureJson: JSON.parse(params?.featureJson) };\n const missing = diffPermissions(\n params.permissions,\n params?.featureJson,\n );\n if (missing[0]?.action === \"grant\") {\n setPendingGrant({\n ...params,\n id: missing[0]?.id,\n });\n setIsOpen(1);\n } else if (missing[0]?.action === \"revoke\") {\n try {\n await execute({\n code: \"revoke_permission\",\n parameters: {\n featureName: missing[0]?.id,\n roleId: parseInt(params?.designationId),\n userId: parseInt(params?.userId),\n },\n });\n showToast({\n type: \"success\",\n message: \"Permission Revoked Successfully\",\n });\n } catch {\n showToast({\n type: \"error\",\n message: \"Error in revoking permission\",\n });\n }\n }\n const { data: val } = await getFeatureDataV2(subMenuId);\n newApiData(val);\n } else {\n await updateUserMenuItem(params);\n }\n } catch (error) {\n showToast({\n type: \"error\",\n message: `Error Updating data: ${error?.response?.data?.message}`,\n });\n }\n };\n\n const handleCheckAllAndNone = async (params) => {\n try {\n params = {\n ...params,\n featureJson: JSON.parse(params?.featureJson),\n };\n\n if (params?.checkAll) {\n const falseKeys = Object.keys(params?.featureJson)\n .filter((key) => params?.featureJson[key] === false)\n .join(\",\");\n\n await execute({\n code: \"grant_permission_bulk\",\n parameters: {\n permission_id_list: falseKeys,\n role_id: parseInt(params?.designationId),\n user_id: parseInt(params?.userId),\n },\n });\n showToast({\n type: \"success\",\n message: \"Permission granted Successfully\",\n });\n }\n const { data: val } = await getFeatureDataV2(subMenuId);\n newApiData(val);\n } catch (error) {\n console.error(error);\n }\n };\n\n /**\n * Submits the selected roles and user data to add a menu item.\n * @async\n * @function onSubmit\n * @returns {Promise<void>} A promise that resolves when the operation is complete.\n * @throws {Error} Displays an error toast if the operation fails.\n */\n\n const onSubmit = async (formVal) => {\n if (!(formVal?.roles || formVal?.selectedRoles)) {\n showToast({\n message: \"Please select either user or role !!\",\n type: \"info\",\n });\n return;\n }\n if (isNewApi && featureNames.length < 1) {\n showToast({\n message: \"Please add permissions first for this feature !!\",\n type: \"info\",\n });\n return;\n }\n\n try {\n const selectedRoleIds =\n formVal?.selectedRoles?.map((item) => item?.id) || [];\n\n const isUserDuplicate = selectedUser?.id\n ? featureData.some((data) => data?.userId === selectedUser?.id)\n : false;\n const isRoleDuplicate =\n selectedRoleIds?.length > 0\n ? featureData.some((data) =>\n selectedRoleIds.includes(data?.designationId),\n )\n : false;\n const isDuplicate = isUserDuplicate || isRoleDuplicate;\n if (!isDuplicate) {\n const ids = selectedRoleIds?.join(\",\");\n const params = {\n userId: formVal?.roles?.id,\n designationId: ids || null,\n };\n const featureName = permissionList.filter((rights) =>\n rights?.id?.startsWith(\"view\"),\n );\n\n if (isNewApi) {\n\n const reportPermissionId = featureName.find(item =>\n /^view\\.report\\.[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(item.id)\n )?.id;\n\n if (reportPermissionId) {\n setPendingGrant({\n ...params,\n id: reportPermissionId\n });\n } else if (featureName.some(item => item.id === \"view.report\")) {\n setPendingGrant({\n ...params,\n id: \"view.report\"\n });\n } else {\n setPendingGrant({\n ...params,\n id:\n featureName\n ?.filter((item) => item.id.split(\".\").length === 3)\n .map((item) => item.id)[0] || permissionList[0]?.id,\n });\n }\n setIsOpen(1);\n const { data: val } = await getFeatureDataV2(subMenuId);\n newApiData(val);\n } else {\n await postMenuItem(subMenuId, params);\n let { data } = await getFeatureData(subMenuId);\n if (data?.userMenuItemDtos.length > 0) {\n if (data?.userMenuItemDtos.length > 0) {\n data = editUserMenuItem(data);\n }\n }\n setFeature(data?.featureJson);\n const sortedData = sortData(data);\n setFeatureData(sortedData);\n const featureList = data.featureJson\n ? Object.keys(JSON.parse(data.featureJson))\n : [];\n if (featureList.length > 0) {\n const { data: features } = await execute({\n code: \"retrieve_display_name_for_feature\",\n parameters: {\n menu_id: subMenuId,\n feature_name_list: featureList,\n },\n });\n setFeatureNames(features.result);\n } else {\n setFeatureNames([]);\n }\n showToast({\n message: \"menu item added successfully\",\n type: \"success\",\n });\n }\n\n submitRef.current = true;\n setSelectedUser({});\n } else {\n showToast({\n message: `Selected User Already found please select another id`,\n type: \"warning\",\n });\n }\n } catch (error) {\n console.error(error);\n showToast({\n message: \"cannot add menu item\",\n type: \"error\",\n });\n }\n };\n\n /**\n * Filters the assigned roles/users by name. The input debounces upstream\n * (`DebouncedSearchInput`), so this runs once the user pauses typing.\n * @function handleSearch\n * @param {string} value - The current value of the search input.\n */\n const handleSearch = useCallback(\n (value) => {\n const searchValue = (value || \"\").toLowerCase();\n setSearch(searchValue);\n\n if (!searchValue) {\n setFeatureData(initFeatureData);\n return;\n }\n\n const filteredData = initFeatureData?.filter((feature) =>\n feature?.designationId\n ? feature.roleName?.toLowerCase().includes(searchValue)\n : feature.fullName?.toLowerCase().includes(searchValue),\n );\n trackEvent(\"search_tracking\", {\n searchTerm: searchValue,\n results_count: filteredData.length,\n search_type: \"Page Search\",\n });\n setFeatureData(filteredData);\n },\n [initFeatureData, trackEvent],\n );\n\n /**\n * Merges a \"default\" feature set with any overrides, and returns the result as a JSON string.\n *\n * For every key in `defaultJson`, if `assignedJson` provides its own value for that key,\n * the assigned value is used; otherwise the default is preserved. Keys in `assignedJson`\n * that aren't in `defaultJson` are ignored.\n *\n * @param {Object<string, any>} defaultJson\n * An object whose keys are the full set of features, each mapped to its default value.\n * @param {Object<string, any>} [assignedJson={}]\n * An object mapping a subset of those same keys to override values. Defaults to `{}`.\n * @returns {string}\n * A JSON‐stringified representation of the merged feature set.\n */\n const extendFeatureJson = (defaultJson, assignedJson = {}) => {\n const newJson = {};\n\n Object.keys(defaultJson).forEach((key) => {\n if (Object.prototype.hasOwnProperty.call(assignedJson, key)) {\n newJson[key] = assignedJson[key];\n } else {\n newJson[key] = defaultJson[key];\n }\n });\n\n return JSON.stringify(newJson);\n };\n\n const buildPermissionMap = (allPermissions, userPermissions) => {\n const userPermissionIds = new Set(userPermissions.map((p) => p.id));\n\n const result = {};\n allPermissions.forEach((p) => {\n result[p.id] = userPermissionIds.has(p.id);\n });\n\n return JSON.stringify(result);\n };\n\n const newApiData = (val) => {\n val?.userMenuItemDtos.forEach((right) => {\n right.id = right?.designationId || right?.userId;\n right.featureJson = buildPermissionMap(\n val?.permissions,\n right?.permissions,\n );\n\n if (right.designationId) {\n right.code = \"Role\";\n right.displayName = right.roleName;\n } else {\n right.code = \"User\";\n right.displayName = right.fullName;\n }\n });\n\n const featureList = [\n ...new Set(val.permissions.map((permission) => permission.id)),\n ];\n setFeatureNames(featureList);\n\n setPermissionList(val?.permissions);\n const sortedData = sortData(val);\n setFeatureData(sortedData);\n setinitFeatureData(sortedData);\n };\n\n /**\n * Effect hook to load initial data when `subMenuId` changes.\n * @function\n * @name useEffect\n * @returns {void}\n * @throws {Error} Logs an error to the console if any of the data fetching operations fail.\n */\n\n useEffect(() => {\n const loadInitialData = async () => {\n try {\n if (subMenuId) {\n setExpandedChildrenByRow(null);\n setExpanded(false);\n setIsLoading((cur) => !cur);\n setSearch(\"\");\n let data, isNewApi;\n if (subMenuFeatureVal) {\n // Names + permission tree only; each row's individual permission grants are\n // fetched on demand when that row is expanded (see handleChange). Falls back to\n // the full-bundle endpoint if this backend doesn't have the lazy-load routes yet.\n if (useLegacySummaryApiRef.current) {\n const res = await getFeatureDataV2(subMenuId);\n data = res.data;\n } else {\n try {\n const res = await getFeatureAccessSummaryV2(subMenuId);\n data = res.data;\n } catch (summaryError) {\n console.error(\"configtypesV2/summary unavailable, falling back to full bundle\", summaryError);\n useLegacySummaryApiRef.current = true;\n const res = await getFeatureDataV2(subMenuId);\n data = res.data;\n }\n }\n isNewApi = true;\n setIsNewApi(true);\n onNewAPIChange({ id: subMenuId, val: true });\n } else {\n const res = await getFeatureData(subMenuId);\n data = res.data;\n isNewApi = false;\n setIsNewApi(false);\n onNewAPIChange({ id: subMenuId, val: false });\n }\n\n if (isNewApi) {\n newApiData(data);\n } else {\n if (data?.userMenuItemDtos.length > 0) {\n data = editUserMenuItem(data);\n }\n setFeature(data?.featureJson);\n const sortedData = sortData(data);\n setFeatureData(sortedData);\n setinitFeatureData(sortedData);\n }\n\n let allRoles = initialROleData;\n if (!roleData || roleData.length === 0) {\n // Reference data: the same role list was refetched every time this\n // pane mounted for a different sub menu.\n const fetchedRoles = await getCachedData({\n cacheKey: [\"roleList\"],\n fetchFn: async () => (await getRoleList()).data,\n staleTime: 5 * 60 * 1000,\n cacheTime: 30 * 60 * 1000,\n });\n setInitialRoleData(fetchedRoles);\n allRoles = fetchedRoles;\n }\n\n let featureList;\n if (isNewApi) {\n featureList = data.permissions.map((permission) => permission.id);\n setFeatureNames(featureList);\n } else {\n featureList = data.featureJson\n ? Object.keys(JSON.parse(data.featureJson))\n : [];\n\n if (featureList.length > 0) {\n const [featuresRes] = await Promise.all([\n await execute({\n code: \"retrieve_display_name_for_feature\",\n parameters: {\n menu_id: subMenuId,\n feature_name_list: featureList,\n },\n }),\n ]);\n setFeatureNames(featuresRes.data?.result);\n } else {\n setFeatureNames([]);\n }\n }\n\n if (allRoles && allRoles.length > 0) {\n if (data.isDynamicFeature) {\n const copyAllRoles = JSON.parse(JSON.stringify(allRoles));\n const filteredRoles = copyAllRoles.filter((role) => {\n const roleType = role.roleType;\n if (roleType === null) return true;\n if (data?.isMobileFeature && data?.isWebFeature) return true;\n if (data.isMobileFeature)\n return roleType === \"MOBILE\" || roleType === \"BOTH\";\n if (data.isWebFeature)\n return roleType === \"WEB\" || roleType === \"BOTH\";\n return false;\n });\n setRoleData(filteredRoles);\n } else {\n setRoleData(allRoles);\n }\n }\n\n setIsLoading((cur) => !cur);\n }\n } catch (error) {\n showToast({\n type: \"error\",\n message: `Error loading initial data: ${error?.response?.data?.message}`,\n });\n setIsLoading((cur) => !cur);\n }\n };\n loadInitialData();\n }, [subMenuId, onNewAPIChange]);\n\n const findPermissionById = useCallback(\n (displayName) => permissionById.get(String(displayName)) || null,\n [permissionById],\n );\n\n /**\n * The right every grant implies; it is rendered disabled so it cannot be\n * revoked on its own. Derived from a filter + regex scan over the whole\n * permission list, so it is resolved once per list rather than once per\n * checkbox.\n */\n const basicRightId = useMemo(\n () => getBasicRightId(),\n [permissionList],\n );\n\n const [expanded, setExpanded] = useState(false);\n\n // Fetches this row's own permission grants the first time it's expanded, instead of\n // every row's permissions being fetched up front when the menu is selected.\n const handleChange = (row) => async (event, isExpanded) => {\n const panel = `panel${row?.id}`;\n // setExpandedChildrenByRow(null);\n setExpanded(isExpanded ? panel : false);\n\n if (isExpanded && isNewApi && row && !row._permissionsLoaded && !useLegacySummaryApiRef.current) {\n try {\n const { data: permissions } = await getFeaturePermissionsForIdentity(subMenuId, {\n userId: row.userId,\n roleId: row.designationId,\n });\n row.permissions = permissions;\n row.featureJson = buildPermissionMap(permissionList, permissions);\n row._permissionsLoaded = true;\n setFeatureData((cur) => [...cur]);\n } catch (error) {\n console.error(error);\n showToast({ type: \"error\", message: \"Error loading permissions for row\" });\n }\n }\n };\n\n /**\n * Renders one permission checkbox (plus its \"view child permissions\" eye,\n * when the permission has children).\n *\n * @param {Object} args\n * @param {Object} args.row - The role/user row the permission belongs to.\n * @param {Object} args.featureState - The row's parsed `featureJson`, parsed once by the caller.\n * @param {string} args.featureKey - The key inside the row's `featureJson`.\n * @param {string} args.lookupKey - The key used to resolve the permission's metadata.\n * @param {number} args.index - Index within the rendered list, for the React key.\n * @param {boolean} args.withModal - Whether the eye toggle also opens `PermissionsModal`.\n */\n const renderPermissionItem = ({\n row,\n featureState,\n featureKey,\n lookupKey,\n index,\n withModal,\n }) => {\n const isChecked = featureState[featureKey] || false;\n const permObj = findPermissionById(lookupKey);\n const hasChildren = (permObj?.child?.length || 0) > 0;\n const isBasicRight = featureKey === basicRightId;\n const isDisabled = !canUpdate || isBasicRight;\n const isChildrenOpen = expandedChildrenByRow?.id === permObj?.id;\n\n const checkbox = (\n <FormControlLabel\n sx={{ mr: 0, minWidth: 0, flex: 1 }}\n control={\n <Checkbox\n size=\"small\"\n disabled={isDisabled}\n checked={isChecked}\n name={featureKey}\n onClick={() => {\n const updatedFeatureState = {\n ...featureState,\n [featureKey]: !isChecked,\n };\n setFeatureData((prev) =>\n prev.map((item) =>\n item.id === row.id\n ? {\n ...item,\n featureJson: JSON.stringify(updatedFeatureState),\n }\n : item,\n ),\n );\n handleUpdateUserMenuItem({\n ...row,\n featureJson: JSON.stringify(updatedFeatureState),\n code: row.designationId ? \"Role\" : \"User\",\n menuConfigId: subMenuId,\n displayName: row.designationId ? row.roleName : row.fullName,\n });\n }}\n />\n }\n label={\n <Typography variant=\"body2\">\n {permObj ? permObj.name : lookupKey}\n </Typography>\n }\n />\n );\n\n return (\n <Box\n key={`featureName-${index}`}\n sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5, minWidth: 0 }}\n >\n {isBasicRight && canUpdate ? (\n <Tooltip\n title={translate(\n \"This is the base right for the sub menu and cannot be changed here.\",\n )}\n >\n <span style={{ display: \"flex\", flex: 1, minWidth: 0 }}>\n {checkbox}\n </span>\n </Tooltip>\n ) : (\n checkbox\n )}\n {hasChildren && (\n <Tooltip\n title={\n isChildrenOpen\n ? translate(\"Close Permissions\")\n : translate(\"View Permissions\")\n }\n >\n <IconButton\n size=\"small\"\n color=\"primary\"\n aria-label={\n isChildrenOpen\n ? translate(\"Close Permissions\")\n : translate(\"View Permissions\")\n }\n onClick={() => {\n if (isChildrenOpen) {\n setExpandedChildrenByRow(null);\n if (withModal) {\n setOpenPermissionModal(false);\n setSelectedFeatureName(\"\");\n setSelectedFeatureState([]);\n }\n return;\n }\n if (withModal) {\n setSelectedFeatureName(featureKey);\n setSelectedFeatureState(featureState);\n setOpenPermissionModal(true);\n }\n setExpandedChildrenByRow(permObj);\n }}\n >\n <FontAwesomeIcons\n iconName={isChildrenOpen ? \"faEyeSlash\" : \"faEye\"}\n size=\"sm\"\n />\n </IconButton>\n </Tooltip>\n )}\n </Box>\n );\n };\n\n const hasAnyPermission =\n featureNames.length > 0 ||\n Object.keys(JSON.parse(feature || \"{}\")).length > 0;\n\n // Both dialogs are code-split, so they must not be in the tree before first\n // use. Once opened they stay mounted, which keeps their close transition —\n // unmounting on close would make them vanish instead of animating out.\n const permissionsModalOpen = Boolean(\n openPermissionModal && expandedChildrenByRow,\n );\n const grantModalOpen = isOpen === 1;\n const permissionsModalUsed = useRef(false);\n const grantModalUsed = useRef(false);\n if (permissionsModalOpen) permissionsModalUsed.current = true;\n if (grantModalOpen) grantModalUsed.current = true;\n\n return (\n <AccessRightsSkeleton isLoading={isLoading || parentLoading}>\n <Box sx={{ width: \"100%\" }}>\n <CustomConfirmationModal\n description={\n selectedRow?.displayName\n ? `Remove all access to this sub menu for ${selectedRow.code === \"Role\" ? \"the role\" : \"\"} ${selectedRow.displayName}? Every right listed below will be revoked.`\n : \"Remove all access to this sub menu? Every right listed below will be revoked.\"\n }\n title={translate(\"Remove access\")}\n open={open && deletedId === selectedRow?.id}\n handleClick={handleDelete}\n handleClose={() => setOpen((cur) => !cur)}\n dataTestId=\"accessrights-delete-modal\"\n />\n <Suspense fallback={null}>\n {permissionsModalUsed.current && (\n <PermissionsModal\n isOpen={permissionsModalOpen}\n onClose={() => {\n setOpenPermissionModal((cur) => !cur);\n setExpandedChildrenByRow(null);\n setSelectedFeatureName(\"\");\n setSelectedFeatureState([]);\n }}\n featureState={selectedFeatureState}\n featureName={selectedFeatureName}\n permissions={expandedChildrenByRow}\n />\n )}\n {grantModalUsed.current && (\n <GrantPermissionModal\n isOpen={grantModalOpen}\n onClose={() => setIsOpen(0)}\n pendingGrant={pendingGrant}\n subMenuId={subMenuId}\n newApiData={newApiData}\n />\n )}\n </Suspense>\n\n {/* ── Toolbar: filter assigned access + grant new access ── */}\n <form ref={formRef} onSubmit={handleSubmit(onSubmit)}>\n <Box\n sx={{\n display: \"flex\",\n flexDirection: { xs: \"column\", lg: \"row\" },\n alignItems: { xs: \"stretch\", lg: \"center\" },\n gap: 2,\n px: 2,\n py: 1.5,\n borderBottom: \"1px solid\",\n borderColor: \"divider\",\n }}\n >\n <DebouncedSearchInput\n value={search}\n onChange={handleSearch}\n placeholder={translate(\"Search roles and users\")}\n autoFocus={false}\n data-testid=\"access-rights-textfield-search\"\n sx={{ width: { xs: \"100%\", lg: 240 }, flexShrink: 0 }}\n slotProps={{\n htmlInput: {\n \"aria-label\": translate(\"Search roles and users\"),\n },\n }}\n inputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <Box sx={{ color: \"text.disabled\", display: \"flex\" }}>\n <FontAwesomeIcons iconName=\"faMagnifyingGlass\" size=\"sm\" />\n </Box>\n </InputAdornment>\n ),\n endAdornment: search ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n aria-label={translate(\"Clear search\")}\n onClick={() => handleSearch(\"\")}\n >\n <FontAwesomeIcons iconName=\"faXmark\" size=\"sm\" />\n </IconButton>\n </InputAdornment>\n ) : null,\n }}\n />\n {canUpdate && (\n <AccessPanel\n translate={translate}\n onSubmit={onSubmit}\n roleList={roleData}\n featureData={featureData}\n />\n )}\n </Box>\n </form>\n\n {/* ── Assigned roles & users ── */}\n {featureData.length === 0 ? (\n <Box\n data-testid=\"accessrights-empty-state\"\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n textAlign: \"center\",\n gap: 1,\n px: 3,\n py: 6,\n }}\n >\n <Box sx={{ color: \"text.disabled\" }}>\n <FontAwesomeIcons iconName=\"faUserShield\" size=\"2x\" />\n </Box>\n <Typography variant=\"subtitle1\" sx={{ fontWeight: 700 }}>\n {search\n ? translate(\"No roles or users match your search\")\n : translate(\"No access granted yet\")}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {search\n ? translate(\"Clear the search to see everyone with access.\")\n : translate(\n \"Pick a user or a role above and select Add to grant access to this sub menu.\",\n )}\n </Typography>\n </Box>\n ) : (\n <Box>\n {featureData.map((row) => (\n <Accordion\n key={row?.id}\n expanded={expanded === `panel${row?.id}`}\n onChange={handleChange(row)}\n // Only one panel is open at a time, so without this every row's\n // full permission grid stays mounted: rows × permissions\n // checkboxes in the DOM for a screen showing one row's worth.\n slotProps={{ transition: { unmountOnExit: true } }}\n >\n <AccordionSummary\n expandIcon={<FontAwesomeIcons iconName=\"faAngleDown\" />}\n aria-controls={`accessrights-panel-${row?.id}-content`}\n id={`accessrights-panel-${row?.id}-header`}\n sx={{\n \"& .MuiAccordionSummary-content\": {\n alignItems: \"center\",\n gap: 1.5,\n minWidth: 0,\n },\n }}\n >\n <Chip\n size=\"small\"\n label={translate(row.code)}\n color={row.code === \"Role\" ? \"primary\" : \"default\"}\n variant=\"outlined\"\n />\n <Typography\n variant=\"body2\"\n noWrap\n sx={{ fontWeight: 600, minWidth: 0 }}\n >\n {row.displayName}\n </Typography>\n <Box\n sx={{\n ml: \"auto\",\n mr: 1,\n display: \"flex\",\n alignItems: \"center\",\n gap: 0.5,\n }}\n >\n {canDelete && (\n <Tooltip title={translate(\"Remove access\")}>\n <IconButton\n size=\"small\"\n color=\"error\"\n aria-label={`${translate(\"Remove access\")}: ${row.displayName}`}\n data-testid=\"accessrights-delete-icon\"\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n setOpen(true);\n setDeletedId(row.id);\n setSelectedRow(row);\n }}\n >\n <FontAwesomeIcons iconName=\"faTrash\" size=\"sm\" />\n </IconButton>\n </Tooltip>\n )}\n {canUpdate && (\n <RowActionMenu\n config={{\n tooltip: translate(\"Bulk actions\"),\n icon: <FontAwesomeIcons iconName=\"faPen\" size=\"sm\" />,\n dataTestId: \"accessrights-edit-icon\",\n menuClick: (row) => {\n setAllData(() => {\n return {\n ...row,\n code: row.designationId ? \"Role\" : \"User\",\n menuConfigId: subMenuId,\n displayName: row.designationId\n ? row.roleName\n : row.fullName,\n };\n });\n },\n menuItems: [\n {\n label: \"Check All\",\n onClick: (row) => {\n if (isNewApi) {\n handleCheckAllAndNone({\n ...row,\n checkAll: true,\n });\n } else {\n let keys = JSON.parse(feature);\n const featureJson =\n featureNames?.length > 0\n ? featureNames.reduce(\n (acc, { feature_name }) => {\n acc[feature_name] = true;\n return acc;\n },\n {},\n )\n : Object.keys(keys).reduce((acc, key) => {\n acc[key] = true;\n return acc;\n }, {});\n setFeatureData((prev) =>\n prev.map((item) =>\n item.id === row.id\n ? {\n ...item,\n featureJson:\n JSON.stringify(featureJson),\n }\n : item,\n ),\n );\n handleUpdateUserMenuItem({\n ...allData,\n featureJson: JSON.stringify(featureJson),\n });\n }\n },\n },\n ],\n }}\n row={row}\n />\n )}\n </Box>\n </AccordionSummary>\n <AccordionDetails id={`accessrights-panel-${row?.id}-content`}>\n {!hasAnyPermission ? (\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n sx={{ fontStyle: \"italic\", px: 1, py: 0.5 }}\n >\n {translate(\"No rights configured for this sub menu yet\")}\n </Typography>\n ) : (\n <Box\n sx={{\n display: \"grid\",\n gridTemplateColumns: {\n xs: \"1fr\",\n sm: \"repeat(2, minmax(0, 1fr))\",\n lg: \"repeat(3, minmax(0, 1fr))\",\n },\n columnGap: 2,\n rowGap: 0.5,\n }}\n >\n {(() => {\n // Parsed once per expanded row instead of once per checkbox.\n const featureState = JSON.parse(row.featureJson || \"{}\");\n\n if (featureNames?.length > 0) {\n return Object.keys(featureState).map(\n (featureName, index) =>\n renderPermissionItem({\n row,\n featureState,\n featureKey: featureName,\n lookupKey:\n displayNameByFeature.get(featureName) ||\n featureName,\n index,\n withModal: true,\n }),\n );\n }\n\n return Object.keys(JSON.parse(feature || \"{}\")).map(\n (key, index) =>\n renderPermissionItem({\n row,\n featureState,\n featureKey: key,\n lookupKey: key,\n index,\n withModal: false,\n }),\n );\n })()}\n </Box>\n )}\n </AccordionDetails>\n </Accordion>\n ))}\n </Box>\n )}\n </Box>\n </AccessRightsSkeleton>\n );\n}\n\nAccessRights.propTypes = {\n subMenuId: PropTypes.any,\n subMenuGroupName: PropTypes.any,\n selectedTab: PropTypes.any,\n parentLoading: PropTypes.any,\n isNewApi: PropTypes.any,\n setIsNewApi: PropTypes.any,\n onNewAPIChange: PropTypes.any,\n subMenuFeatureVal: PropTypes.any,\n rights: PropTypes.any,\n};\n"],"names":["VIRTUALIZE_ABOVE","AccessPanel","translate","onSubmit","roleList","featureData","search","setSearch","useState","debouncedSearch","setDebouncedSearch","userList","setUserList","control","handleSubmit","reset","useForm","getCachedData","useCaching","assignedIds","useMemo","roles","users","item","newRoleList","role","useEffect","handler","userListFetch","query","currentFeatureData","fetchUsers","searchString","data","execute","userData","grantedUserIds","newArray","error","jsxs","Box","jsx","Controller","onChange","value","ref","Autocomplete","VirtualListbox","option","event","newValue","reason","newInputValue","props","label","searchTerm","index","createElement","beforeMatch","match","afterMatch","theme","alpha","params","TextField","CustomAutocomplete","Button","FontAwesomeIcons","_a","PropTypes","GrantPermissionModal","lazy","PermissionsModal","RowActionMenu","config","row","anchorEl","setAnchorEl","openMenu","handleIconClick","e","handleClose","handleItemClick","Fragment","Tooltip","IconButton","Menu","MenuItem","AccessRights","subMenuId","subMenuFeatureVal","parentLoading","onNewAPIChange","rights","formRef","useRef","submitRef","trackEvent","useTrackEvent","useLegacySummaryApiRef","GeneralUtil","featureNames","setFeatureNames","setFeatureData","initFeatureData","setinitFeatureData","roleData","setRoleData","initialROleData","setInitialRoleData","feature","setFeature","selectedUser","setSelectedUser","open","setOpen","openPermissionModal","setOpenPermissionModal","deletedId","setDeletedId","selectedRow","setSelectedRow","allData","setAllData","isLoading","setIsLoading","isNewApi","setIsNewApi","pendingGrant","setPendingGrant","permissionList","setPermissionList","isOpen","setIsOpen","useTranslateProvider","selectedFeatureName","setSelectedFeatureName","selectedFeatureState","setSelectedFeatureState","expandedChildrenByRow","setExpandedChildrenByRow","canUpdate","canDelete","permissionById","map","perm","displayNameByFeature","entry","getBasicRightId","views","reportUuidView","threeSegment","form","sortData","sortedData","a","b","editUserMenuItem","right","extendFeatureJson","handleDelete","cur","response","id","showToast","val","getFeatureDataV2","newApiData","deleteUserMenuItem","getFeatureData","_b","diffPermissions","permissions","featureJson","p","handleUpdateUserMenuItem","missing","_c","_d","updateUserMenuItem","_f","_e","handleCheckAllAndNone","falseKeys","key","formVal","selectedRoleIds","isUserDuplicate","isRoleDuplicate","ids","featureName","reportPermissionId","postMenuItem","featureList","features","handleSearch","useCallback","searchValue","filteredData","defaultJson","assignedJson","newJson","buildPermissionMap","allPermissions","userPermissions","userPermissionIds","result","permission","setExpanded","getFeatureAccessSummaryV2","summaryError","allRoles","fetchedRoles","getRoleList","featuresRes","filteredRoles","roleType","findPermissionById","displayName","basicRightId","expanded","handleChange","isExpanded","panel","getFeaturePermissionsForIdentity","renderPermissionItem","featureState","featureKey","lookupKey","withModal","isChecked","permObj","hasChildren","isBasicRight","isDisabled","isChildrenOpen","checkbox","FormControlLabel","Checkbox","updatedFeatureState","prev","Typography","hasAnyPermission","permissionsModalOpen","grantModalOpen","permissionsModalUsed","grantModalUsed","AccessRightsSkeleton","CustomConfirmationModal","Suspense","DebouncedSearchInput","InputAdornment","Accordion","AccordionSummary","Chip","keys","acc","feature_name","AccordionDetails"],"mappings":"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"}