@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":"ManageRole-CyfpySt9.js","sources":["../src/views/Roles/Skeletons/ManageRoleSkeleton.jsx","../src/views/Roles/useRoleCode.js","../src/views/Roles/ManageRole.jsx"],"sourcesContent":["import PropTypes from \"prop-types\";\nimport React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { getUseSkeleton } from \"@/store/reducers/SkeletonReducer\";\n\nconst ManageRoleSkeleton = ({ children, isLoading }) => {\n const useSkeleton = useSelector(getUseSkeleton);\n if (!useSkeleton) {\n return children;\n }\n if (!isLoading) return children;\n\n return (\n <div className=\"pt-6 h-[88vh]\">\n {/* Header Skeleton */}\n <div className=\"px-8 pt-2 pb-4 flex items-center justify-between\">\n <div className=\"bg-gray-300 animate-pulse rounded-md w-32 h-8\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-full w-10 h-10\"></div>\n </div>\n\n {/* Form Content Skeleton */}\n <div className=\"px-8 pb-8 space-y-6 overflow-y-auto max-h-[80vh]\">\n {/* Top Grid: Role Name, Max Position, Max Health Infra */}\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-4\">\n {[1, 2, 3].map((i) => (\n <div key={i} className=\"space-y-1.5\">\n <div className=\"h-4 bg-gray-300 rounded w-1/3 mb-2 animate-pulse\"></div>\n <div className=\"h-10 bg-gray-300 rounded animate-pulse w-full\"></div>\n </div>\n ))}\n </div>\n\n {/* Location Required Toggle */}\n <div className=\"flex items-center gap-6 w-full\">\n <div className=\"w-full\">\n <div className=\"h-4 bg-gray-300 rounded w-1/4 mb-2 animate-pulse\"></div>\n <div className=\"h-8 bg-gray-300 rounded-full w-16 animate-pulse\"></div>\n </div>\n </div>\n\n {/* Location Select (Conditional placeholder) & Manage Role */}\n <div className=\"space-y-4\">\n {[1, 2].map((i) => (\n <div key={i} className=\"space-y-1.5\">\n <div className=\"h-4 bg-gray-300 rounded w-1/4 mb-2 animate-pulse\"></div>\n <div className=\"h-10 bg-gray-300 rounded animate-pulse w-full\"></div>\n </div>\n ))}\n\n {/* Middle Grid: Role Type & Manage Team */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {[1, 2].map((i) => (\n <div key={i} className=\"space-y-1.5\">\n <div className=\"h-4 bg-gray-300 rounded w-1/3 mb-2 animate-pulse\"></div>\n <div className=\"h-10 bg-gray-300 rounded animate-pulse w-full\"></div>\n </div>\n ))}\n </div>\n\n {/* Health Infra & Category */}\n {[1, 2].map((i) => (\n <div key={i} className=\"space-y-1.5\">\n <div className=\"h-4 bg-gray-300 rounded w-1/3 mb-2 animate-pulse\"></div>\n <div className=\"h-10 bg-gray-300 rounded animate-pulse w-full\"></div>\n </div>\n ))}\n </div>\n\n {/* Bottom Section: Bank Details & Self Manage */}\n <div className=\"flex items-center gap-6\">\n {/* Bank Details (Toggle style) */}\n <div className=\"w-[60%]\">\n <div className=\"h-4 bg-gray-300 rounded w-1/3 mb-2 animate-pulse\"></div>\n <div className=\"h-8 bg-gray-300 rounded-full w-16 animate-pulse\"></div>\n </div>\n {/* Self Manage (Checkbox style) */}\n <div className=\"w-[40%] flex items-center gap-2\">\n <div className=\"h-5 w-5 bg-gray-300 rounded animate-pulse\"></div>\n <div className=\"h-4 bg-gray-300 rounded w-1/3 animate-pulse\"></div>\n </div>\n </div>\n\n {/* Mandatory Fields Checkboxes */}\n <div className=\"space-y-2\">\n <div className=\"h-4 bg-gray-300 rounded w-1/4 mb-2 animate-pulse\"></div>\n <div className=\"flex flex-wrap gap-4\">\n {[1, 2, 3, 4].map((i) => (\n <div key={i} className=\"flex items-center gap-2\">\n <div className=\"h-5 w-5 bg-gray-300 rounded animate-pulse\"></div>\n <div className=\"h-4 w-16 bg-gray-300 rounded animate-pulse\"></div>\n </div>\n ))}\n </div>\n </div>\n </div>\n\n {/* Footer Buttons */}\n <div className=\"flex items-center justify-end gap-3 pt-6 px-8 pb-4 border-t border-slate-100\">\n <div className=\"h-9 w-20 bg-gray-300 rounded animate-pulse\"></div>\n <div className=\"h-9 w-24 bg-gray-300 rounded animate-pulse\"></div>\n </div>\n </div>\n );\n};\n\nexport default ManageRoleSkeleton;\n\nManageRoleSkeleton.propTypes = {\n children: PropTypes.any,\n isLoading: PropTypes.any,\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { getRoleCodesByPrefix } from \"../../services/Roles\";\n\nexport const ROLE_CODE_MAX_LENGTH = 50;\n\n// A role code is capital letters grouped by single underscores, nothing else.\nexport const ROLE_CODE_PATTERN = /^[A-Z]+(_[A-Z]+)*$/;\n\n// Digits are not allowed in a role code, so a collision suffix is spelled out.\nconst COLLISION_SUFFIXES = [\n \"TWO\",\n \"THREE\",\n \"FOUR\",\n \"FIVE\",\n \"SIX\",\n \"SEVEN\",\n \"EIGHT\",\n \"NINE\",\n \"TEN\",\n];\n\nconst LOOKUP_DEBOUNCE_MS = 400;\n\n/**\n * Derives a role code from a role name, e.g. \"Asha Worker 2\" -> \"ASHA_WORKER\".\n * @param {string} name - The role name.\n * @returns {string} The derived role code.\n */\nexport const buildRoleCodeFromName = (name = \"\") =>\n name\n .toUpperCase()\n .replace(/[^A-Z]+/g, \"_\")\n .replace(/^_+|_+$/g, \"\")\n .slice(0, ROLE_CODE_MAX_LENGTH)\n .replace(/_+$/g, \"\");\n\n/**\n * Strips everything a role code may not contain, so the field stays valid while\n * the user is still typing. Underscores are kept as typed.\n * @param {string} value - The raw field value.\n * @returns {string} The sanitised role code.\n */\nexport const sanitizeRoleCode = (value = \"\") =>\n value\n .toUpperCase()\n .replace(/[^A-Z_]/g, \"\")\n .slice(0, ROLE_CODE_MAX_LENGTH);\n\n/**\n * Joins a base and a suffix within the length limit. The base is trimmed rather\n * than the joined string, so the suffix always survives whole and the result\n * never ends on the underscore left behind by the cut.\n * @param {string} base - The code derived from the role name.\n * @param {string} suffix - The spelled-out collision suffix.\n * @returns {string} The candidate code, or \"\" when no room is left for a base.\n */\nconst joinWithSuffix = (base, suffix) => {\n const room = ROLE_CODE_MAX_LENGTH - suffix.length - 1;\n const trimmed = base.slice(0, Math.max(room, 0)).replace(/_+$/g, \"\");\n return trimmed ? `${trimmed}_${suffix}` : \"\";\n};\n\n/**\n * Picks the first free code from the base and its spelled-out suffixes.\n * @param {string} base - The code derived from the role name.\n * @param {Map<string, Object>} taken - Existing codes keyed by upper-cased code.\n * @param {number|string|null} roleId - Id of the role being edited, if any.\n * @returns {string} A free role code, or \"\" when every candidate is taken.\n */\nconst pickAvailableRoleCode = (base, taken, roleId) => {\n const isFree = (candidate) => {\n const match = taken.get(candidate);\n return !match || match.roleId === roleId;\n };\n\n if (isFree(base)) {\n return base;\n }\n return (\n COLLISION_SUFFIXES.map((suffix) => joinWithSuffix(base, suffix)).find(\n (candidate) => candidate && isFree(candidate),\n ) ?? \"\"\n );\n};\n\n/**\n * Drives the Role Code field: generates a code from the role name until the\n * user edits the field themselves, and checks availability against the roles\n * already holding a code.\n *\n * @param {Object} params - Hook parameters.\n * @param {string} params.name - Current value of the Role Name field.\n * @param {string} params.code - Current value of the Role Code field.\n * @param {number|string|null} params.roleId - Id of the role being edited.\n * @param {boolean} params.isLocked - True when the role already has a code.\n * @param {boolean} params.isOpen - True while the manage role modal is open.\n * @param {Function} params.setValue - react-hook-form setValue.\n * @param {Function} params.trigger - react-hook-form trigger.\n * @returns {Object} Availability status, the checker and the manual-edit marker.\n */\nconst useRoleCode = ({\n name,\n code,\n roleId,\n isLocked,\n isOpen,\n setValue,\n trigger,\n}) => {\n const takenCodesRef = useRef(new Map());\n const manuallyEditedRef = useRef(false);\n // Increments per lookup, so a slow response cannot overwrite a newer one.\n const lookupSeqRef = useRef(0);\n const [status, setStatus] = useState({ state: \"idle\", message: \"\" });\n\n // A fresh modal starts generating from the role name again.\n useEffect(() => {\n if (!isOpen) {\n manuallyEditedRef.current = false;\n takenCodesRef.current = new Map();\n setStatus({ state: \"idle\", message: \"\" });\n }\n }, [isOpen]);\n\n /**\n * Reads the roles already holding a code with the given prefix.\n * @param {string} prefix - The code to look up.\n * @returns {Promise<Map<string, Object>|null>} The taken codes, or null when a\n * newer lookup started while this one was still in flight.\n */\n const lookup = useCallback(async (prefix) => {\n const seq = lookupSeqRef.current + 1;\n lookupSeqRef.current = seq;\n const { data } = await getRoleCodesByPrefix(prefix);\n if (seq !== lookupSeqRef.current) {\n return null;\n }\n const taken = new Map();\n (data?.result ?? []).forEach((row) => {\n if (row?.roleCode) {\n taken.set(row.roleCode.trim().toUpperCase(), row);\n }\n });\n takenCodesRef.current = taken;\n return taken;\n }, []);\n\n /**\n * Tells whether a code is free. Reads the last lookup, so it stays in sync\n * with the debounced effects below and can be called from the Yup schema.\n */\n const isCodeAvailable = useCallback(\n (value) => {\n const match = takenCodesRef.current.get((value ?? \"\").toUpperCase());\n return !match || match.roleId === roleId;\n },\n [roleId],\n );\n\n const markAsManuallyEdited = useCallback(() => {\n manuallyEditedRef.current = true;\n }, []);\n\n // Generate from the role name, until the user takes over the code field.\n useEffect(() => {\n if (!isOpen || isLocked || manuallyEditedRef.current) {\n return undefined;\n }\n const base = buildRoleCodeFromName(name);\n if (!base) {\n takenCodesRef.current = new Map();\n setValue(\"code\", \"\");\n setStatus({ state: \"idle\", message: \"\" });\n return undefined;\n }\n setStatus({ state: \"checking\", message: \"Checking availability...\" });\n const timer = setTimeout(async () => {\n try {\n const taken = await lookup(base);\n if (!taken) {\n return;\n }\n const suggestion = pickAvailableRoleCode(base, taken, roleId);\n setValue(\"code\", suggestion);\n setStatus(\n suggestion\n ? {\n state: \"available\",\n message: \"System generated, you can change it\",\n }\n : {\n state: \"taken\",\n message: \"Could not generate a free code, please enter one\",\n },\n );\n trigger(\"code\");\n } catch (error) {\n console.error(error);\n setStatus({\n state: \"error\",\n message: \"Could not verify Role Code availability\",\n });\n }\n }, LOOKUP_DEBOUNCE_MS);\n return () => clearTimeout(timer);\n }, [name, isOpen, isLocked, roleId, lookup, setValue, trigger]);\n\n // Check what the user typed themselves.\n useEffect(() => {\n if (!isOpen || isLocked || !manuallyEditedRef.current) {\n return undefined;\n }\n if (!code) {\n takenCodesRef.current = new Map();\n setStatus({ state: \"idle\", message: \"\" });\n return undefined;\n }\n setStatus({ state: \"checking\", message: \"Checking availability...\" });\n const timer = setTimeout(async () => {\n try {\n const taken = await lookup(code);\n if (!taken) {\n return;\n }\n const match = taken.get(code.toUpperCase());\n setStatus(\n match && match.roleId !== roleId\n ? {\n state: \"taken\",\n message: `Already used by \"${match.roleName}\"`,\n }\n : { state: \"available\", message: \"Role Code is available\" },\n );\n trigger(\"code\");\n } catch (error) {\n console.error(error);\n setStatus({\n state: \"error\",\n message: \"Could not verify Role Code availability\",\n });\n }\n }, LOOKUP_DEBOUNCE_MS);\n return () => clearTimeout(timer);\n }, [code, isOpen, isLocked, roleId, lookup, trigger]);\n\n return { status, isCodeAvailable, markAsManuallyEdited };\n};\n\nexport default useRoleCode;\n","import { useState, useEffect, useRef } from \"react\";\nimport {\n Alert,\n Box,\n Modal,\n Button,\n FormControl,\n FormGroup,\n IconButton,\n Tooltip,\n // Typography,\n} from \"@mui/material\";\nimport useTrackEvent from \"@/hooks/useTrackEvent\";\nimport { postRole, putRole, getRoleById } from \"../../services/Roles\";\nimport {\n getLocationTypes,\n execute,\n getRoleList,\n} from \"@/common/services/GlobalApis\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport { useForm } from \"react-hook-form\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport \"@/assets/scss/scrollBar.scss\";\n\nimport { FormItem } from \"@/views/custom-components/FormItem.jsx\";\nimport * as Yup from \"yup\";\nimport CustomTextField from \"@/views/custom-components/CustomTextField\";\nimport CustomDropdown from \"@/views/custom-components/CustomDropdown\";\nimport CustomCheckBox from \"@/views/custom-components/CustomCheckBox\";\n// import CustomRadioGroup from \"@/views/custom-components/CustomRadioComponent\";\nimport CustomAutocomplete from \"@/views/custom-components/CustomAutoComplete\";\nimport { useTranslateProvider } from \"@/common/languageTranslator/TranslationContext\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faXmark, faCircleInfo } from \"@fortawesome/free-solid-svg-icons\";\nimport GeneralUtil from \"@/common/services/util/GeneralUtil\";\nimport implementationConfig from \"@/common/config/implementationConfig\";\nimport PropTypes from \"prop-types\";\nimport CustomToggleSwitch from \"@/views/custom-components/CustomToggleSwitch\";\nimport ManageRoleSkeleton from \"./Skeletons/ManageRoleSkeleton.jsx\";\nimport useRoleCode, {\n ROLE_CODE_MAX_LENGTH,\n ROLE_CODE_PATTERN,\n sanitizeRoleCode,\n} from \"./useRoleCode.js\";\n\nconst roleTypes = [{ name: \"WEB\" }, { name: \"MOBILE\" }, { name: \"BOTH\" }];\n\n// Two-factor authentication method. Any TOTP authenticator app works (Google, Microsoft, Authy, ...).\nconst twoFactorTypes = [\n { label: \"Authenticator App\", value: \"AUTHENTICATOR_APP\" },\n];\n\n/**\n * ManageRole Component\n * @module ManageRole\n * @param {Object} props - The component props.\n * @param {function} props.setData - A function to update the role data in the parent component.\n * @param {string} props.selectedId - The ID of the currently selected role, used for updates.\n * @param {boolean} props.isUpdate - A flag indicating whether the component is in update mode (true) or create mode (false).\n * @returns {JSX.Element} - The rendered component for managing roles.\n */\n\nconst ManageRole = ({\n selectedId,\n isUpdate,\n open,\n setOpen,\n isRoleListModified,\n}) => {\n const formRef = useRef(null);\n const submitRef = useRef(false);\n const trackEvent = useTrackEvent();\n const [formData, setFormData] = useState({});\n const [isLoading, setIsLoading] = useState(false);\n const isCodeLocked = Boolean(isUpdate && formData?.roleData?.code);\n // Editing an existing role that has never had a code: saving will assign one\n // for the first time, so this deserves more than the quiet helper text below.\n const isFirstTimeCodeAssignment = isUpdate && !isCodeLocked;\n const isCodeAvailableRef = useRef(() => true);\n const validationSchema = Yup.object().shape({\n name: Yup.string().required(\"Enter Role Name\"),\n code: isCodeLocked\n ? Yup.string().notRequired()\n : Yup.string()\n .required(\"Enter Role Code\")\n .max(\n ROLE_CODE_MAX_LENGTH,\n `Role Code cannot be longer than ${ROLE_CODE_MAX_LENGTH} characters`,\n )\n // One message per rule, so the error names the actual problem.\n .test(\"role-code-format\", \"Enter a valid Role Code\", function (value) {\n if (!value) {\n return true;\n }\n if (/[^A-Z_]/.test(value)) {\n return this.createError({\n message:\n \"Role Code can contain capital letters and underscores only\",\n });\n }\n if (value.startsWith(\"_\")) {\n return this.createError({\n message: \"Role Code cannot start with an underscore\",\n });\n }\n if (value.endsWith(\"_\")) {\n return this.createError({\n message: \"Role Code cannot end with an underscore\",\n });\n }\n if (value.includes(\"__\")) {\n return this.createError({\n message: \"Role Code cannot contain two underscores in a row\",\n });\n }\n return ROLE_CODE_PATTERN.test(value);\n })\n .test(\n \"role-code-available\",\n \"This Role Code is already in use\",\n (value) => isCodeAvailableRef.current(value),\n ),\n locationTypes: Yup.array().when(\"isLocationRequired\", {\n is: true,\n then: (schema) =>\n schema.min(1, \"Select Location Type\").required(\"Select Location Type\"),\n otherwise: (schema) => schema.notRequired(),\n }),\n roleType: implementationConfig.role.showRoleType\n ? Yup.string().required(\"Select Role Type\")\n : Yup.string().notRequired(),\n isBankDetailsRequired:\n implementationConfig.role.showBankDetailsRequired\n ? Yup.boolean().nullable().defined(\"Please Select a Value\")\n : Yup.boolean().notRequired(),\n healthInfrastructureIds: Yup.array().when(\"isHealthInfraMandatory\", {\n is: true,\n then: (schema) =>\n schema\n .min(1, \"Select Health Infrastructure Type\")\n .required(\"Select Health Infrastructure Type\"),\n otherwise: (schema) => schema.notRequired(),\n }),\n twoFactorType: Yup.string().when(\"isTwoFactorEnabled\", {\n is: true,\n then: (schema) => schema.required(\"Select Authentication Method\"),\n otherwise: (schema) => schema.notRequired().nullable(),\n }),\n });\n\n const {\n control,\n handleSubmit,\n formState: { errors, isSubmitting },\n setValue,\n // getValues,\n watch,\n reset,\n trigger,\n } = useForm({\n defaultValues: {\n name: \"\",\n locationTypes: [],\n maxPosition: \"\",\n maxHealthInfra: \"\",\n roleType: \"\",\n isLastNameMandatory: false,\n isAadharNumMandatory: false,\n isEmailMandatory: false,\n isContactNumMandatory: false,\n isConvoxIdMandatory: false,\n isHealthInfraMandatory: false,\n isGeolocationMandatory: false,\n roleIds: [],\n canManageRoleIds: [],\n manageByTeamTypeIds: [],\n canSelfManage: false,\n healthInfrastructureIds: [],\n categoryIds: [],\n isBankDetailsRequired: false,\n isBankDetailsMandatory: false,\n isTwoFactorEnabled: false,\n twoFactorType: \"\",\n id: \"\",\n code: \"\",\n description: \"\",\n createdBy: \"\",\n state: \"\",\n createdOn: \"\",\n assignedFeatureList: \"\",\n assignedFeatures: \"\",\n isSmagTrainedMandatory: \"\",\n isLocationRequired: true,\n isNodalMandatory: false,\n },\n resolver: yupResolver(validationSchema),\n mode: \"onChange\",\n shouldUnregister: false,\n });\n\n const bankDetails = watch(\"isBankDetailsRequired\");\n const isTwoFactorEnabled = watch(\"isTwoFactorEnabled\");\n const roleType = watch(\"roleType\");\n // 2FA (Google Authenticator) only applies to web logins, so it is offered for WEB and BOTH role types.\n const showTwoFactorSetting = roleType === \"WEB\" || roleType === \"BOTH\";\n const locTypes = watch(\"locationTypes\");\n const { translate } = useTranslateProvider();\n const locationDetailsWatcher = watch(\"isLocationRequired\");\n const isHealthInfraMandatory = watch(\"isHealthInfraMandatory\");\n const roleName = watch(\"name\");\n const roleCode = watch(\"code\");\n\n const {\n status: roleCodeStatus,\n isCodeAvailable,\n markAsManuallyEdited,\n } = useRoleCode({\n name: roleName,\n code: roleCode,\n roleId: selectedId,\n isLocked: isCodeLocked,\n isOpen: open !== 0,\n setValue,\n trigger,\n });\n isCodeAvailableRef.current = isCodeAvailable;\n\n const mandatoryFields = [\n { label: \"Email\", value: \"isEmailMandatory\" },\n { label: \"Aadhar Number\", value: \"isAadharNumMandatory\" },\n { label: \"Contact Number\", value: \"isContactNumMandatory\" },\n { label: \"Convox Id\", value: \"isConvoxIdMandatory\" },\n { label: \"Last Name\", value: \"isLastNameMandatory\" },\n { label: \"Health Infrastructure\", value: \"isHealthInfraMandatory\" },\n { label: \"GeoLocation\", value: \"isGeolocationMandatory\" },\n { label: \"Smag Trained\", value: \"isSmagTrainedMandatory\" },\n { label: \"Nodal\", value: \"isNodalMandatory\" },\n { label: \"PFMS Code\", value: \"isPfmsCodeMandatory\" },\n { label: \"SNA Beneficiary ID\", value: \"isSnaBeneficiaryIdMandatory\" },\n ].filter((field) => {\n if (implementationConfig.role.mandatoryFieldsToExclude?.length > 0) {\n return !implementationConfig.role.mandatoryFieldsToExclude.includes(field.value);\n }\n return true;\n });\n /**\n * Closes the form modal and optionally resets the form.\n * @method handleClose\n * @returns {void}\n */\n\n const handleClose = () => {\n setOpen(0);\n reset();\n trackEvent(\"conversion_event\", {\n form: formRef.current,\n form_name: \"Manage Role\",\n submit: submitRef.current,\n });\n trackEvent(\"button_click\", {\n button_name: \"add role close button\",\n button_type: \"cancel\",\n button_id: \"managerole-close-button\",\n });\n };\n\n /**\n * Adds a new field value to the current list of values for a given field.\n * @method handleAddFields\n * @param {Object} value - The new value to be added to the field.\n * @param {string} name - The name of the field to which the new value should be added.\n * @returns {void}\n */\n\n const handleAddFields = (e, value, name) => {\n setValue(name, value);\n };\n\n /**\n * Handles the submission of role data by sending a POST request to create or update a role.\n *\n * @async\n * @function onSubmit\n * @param {Object} params - The role data to be submitted.\n * @param {string} [params.id] - The unique identifier of the role (to be deleted if not an update).\n * @param {string} [params.state] - The state of the role (to be deleted if not an update).\n * @param {string} [params.createdOn] - The creation timestamp of the role (to be deleted if not an update).\n * @param {string} [params.createdBy] - The creator of the role (to be deleted if not an update).\n * @param {string} [params.code] - The code associated with the role (to be deleted if not an update).\n * @param {string} [params.description] - The description of the role (to be deleted if not an update).\n * @param {boolean} [params.assignedFeatures] - Whether features are assigned (to be deleted if not an update).\n * @param {boolean} [params.isSmagTrainedMandatory] - Whether SMAG training is mandatory (to be deleted if not an update).\n * @param {boolean} [params.isBankDetailsRequired] - Whether bank details are required (to be deleted if not an update).\n * @param {boolean} [params.isBankDetailsMandatory] - Whether bank details are mandatory (to be deleted if not an update).\n * @param {Array<Object>} params.roleIds - List of role IDs.\n * @param {Array<Object>} params.manageByTeamTypeIds - List of team type IDs for management.\n * @param {Array<Object>} params.healthInfrastructureIds - List of health infrastructure IDs.\n * @param {Array<Object>} params.categoryIds - List of category IDs.\n *\n * @throws {Error} Throws an error if the role cannot be added.\n *\n * @returns {Promise<void>} - A Promise that resolves when the role has been successfully submitted.\n */\n\n const onSubmit = async (params) => {\n try {\n trackEvent(\"button_click\", {\n button_name: isUpdate ? \"update role button\" : \"add role button\",\n button_type: \"submit\",\n button_id: \"managerole-add-button\",\n });\n\n delete params.bankDetailsRequired;\n delete params.bankDetailsMandatory;\n\n // 2FA only applies to web (WEB/BOTH); a MOBILE-only role must never carry 2FA settings.\n if (params.roleType !== \"WEB\" && params.roleType !== \"BOTH\") {\n params.isTwoFactorEnabled = false;\n }\n // When 2FA is turned off, don't send a stale type selection.\n if (!params.isTwoFactorEnabled) {\n params.twoFactorType = null;\n } else if (!params.twoFactorType) {\n // Only one 2FA method exists (authenticator app); default it when 2FA is enabled.\n params.twoFactorType = \"AUTHENTICATOR_APP\";\n }\n\n if (!isUpdate) {\n delete params.id;\n delete params.state;\n delete params.createdOn;\n delete params.createdBy;\n delete params.description;\n delete params.assignedFeatures;\n\n // delete params.isSmagTrainedMandatory;\n delete params.assignedFeatureList;\n }\n // A locked code is sent back exactly as stored; a new one is normalised.\n if (!isCodeLocked) {\n params.code = params.code?.trim().toUpperCase();\n }\n params.roleIds = params.roleIds.map((item) => item?.id);\n params.canManageRoleIds = params.canManageRoleIds.map((item) => item?.id);\n params.manageByTeamTypeIds = params.manageByTeamTypeIds.map(\n (item) => item?.id,\n );\n params.healthInfrastructureIds = params.healthInfrastructureIds.map(\n (item) => item?.id,\n );\n // params.maxHealthInfra = parseInt(params.maxHealthInfra) || null;\n // params.maxPosition = parseInt(params.maxPosition) || null;\n params.categoryIds = params.categoryIds.map((item) => item?.id);\n params.locationTypes =\n params.isLocationRequired === true ? params.locationTypes : [];\n delete params.isLocationRequired;\n params.manageByRoleIds = params.roleIds;\n isUpdate ? await putRole(params) : await postRole(params);\n showToast({\n type: \"success\",\n message: `Role ${isUpdate ? \"Updated\" : \"Added\"} Successfully`,\n });\n submitRef.current = true;\n handleClose();\n isRoleListModified();\n } catch (error) {\n showToast({\n type: \"error\",\n message: `Role Cannot be added: ${error?.response?.data?.message}`,\n });\n }\n };\n\n /**\n * Fetches and updates form data based on the selected role ID and initializes additional data needed for the form.\n *\n * This effect runs when the `selectedId` dependency changes. It retrieves role data by ID, updates the form fields\n * with the fetched role data, and sets additional data such as roles, location types, manage team types,\n * categories, and health infrastructure types.\n *\n * @async\n * @function useEffect\n */\n\n useEffect(() => {\n const fetchData = async () => {\n try {\n setIsLoading((cur) => !cur);\n\n const env = GeneralUtil.getEnv();\n\n if (open !== 0) {\n const [roles, locationData, manageTeam, category, healthInfraType] =\n await Promise.all([\n getRoleList(),\n getLocationTypes(),\n execute({\n code: \"team_all_types_for_roles\",\n parameters: {},\n }),\n execute({\n code: \"retrieve_field_values_for_form_field\",\n parameters: {\n form: \"WEB\",\n fieldKey: \"role_catg\",\n },\n }),\n execute({\n code: \"retrieve_field_values_for_form_field\",\n parameters: {\n form: \"WEB\",\n fieldKey: \"infra_type\",\n },\n }),\n ]);\n\n setFormData((cur) => {\n return {\n ...cur,\n roles: roles.data,\n locationData: locationData.data,\n manageTeam: manageTeam?.data?.result,\n category: category?.data?.result,\n healthInfraType: healthInfraType?.data?.result,\n };\n });\n\n if (selectedId) {\n const { data: roleData } = await getRoleById(selectedId);\n setFormData((cur) => {\n return { ...cur, roleData, env };\n });\n Object.keys(roleData).map((key) => setValue(key, roleData[key]));\n setValue(\"isBankDetailsRequired\", roleData.isBankDetailsRequired);\n setValue(\"isBankDetailsMandatory\", roleData.isBankDetailsMandatory);\n const {\n manageByTeamTypeIds,\n healthInfrastructureIds,\n roleIds,\n categoryIds,\n } = roleData;\n setValue(\n \"manageByTeamTypeIds\",\n manageByTeamTypeIds\n ? manageByTeamTypeIds.map((item) =>\n manageTeam.data.result?.find((cur) => cur?.id === item),\n )\n : [],\n );\n setValue(\n \"healthInfrastructureIds\",\n healthInfrastructureIds\n ? healthInfrastructureIds\n .map((item) =>\n healthInfraType.data.result?.find(\n (cur) => cur?.id === item,\n ),\n )\n .filter((item) => item !== undefined)\n : [],\n );\n setValue(\n \"categoryIds\",\n categoryIds\n ? categoryIds.map((item) =>\n category.data.result?.find((cur) => cur?.id === item),\n )\n : [],\n );\n setValue(\n \"roleIds\",\n roleIds\n ? roleIds\n .map((item) => roles.data?.find((cur) => cur?.id === item))\n .filter((role) => role !== undefined)\n : [],\n );\n setValue(\n \"canManageRoleIds\",\n roleData.canManageRoleIds\n ? roleData.canManageRoleIds\n .map((item) => roles.data?.find((cur) => cur?.id === item))\n .filter((role) => role !== undefined)\n : [],\n );\n if (roleData.locationTypes.length > 0) {\n setValue(\"isLocationRequired\", true);\n } else {\n setValue(\"isLocationRequired\", false);\n }\n }\n }\n\n setIsLoading((cur) => !cur);\n } catch (error) {\n showToast({\n message: `Error in manage role :${error?.message}`,\n type: \"error\",\n });\n setIsLoading((cur) => !cur);\n }\n };\n fetchData();\n }, [selectedId, open]);\n\n return (\n <Modal\n open={open !== 0}\n onClose={handleClose}\n data-testid=\"managerole-modal\"\n >\n <div className=\"mt-10 fixed inset-0 z-[100] flex items-center justify-center p-4 animate-in fade-in duration-200\">\n <Box\n className=\"w-full max-w-2xl rounded-[2.5rem] shadow-2xl shadow-blue-900/10 overflow-hidden flex flex-col animate-in zoom-in-95 duration-300\"\n sx={{ bgcolor: (theme) => theme.palette.custom.customBackground }}\n >\n <ManageRoleSkeleton isLoading={isLoading}>\n <div className=\"px-8 pt-8 pb-4 flex items-center justify-between\">\n <div>\n <Box\n component=\"h2\"\n className=\"text-2xl font-bold text-customBlue\"\n sx={{ color: \"text.primary\" }}\n >\n {!isUpdate ? \"Add New Role\" : \"Update Role\"}\n </Box>\n </div>\n <IconButton\n size=\"small\"\n onClick={handleClose}\n className=\"w-10 h-10 rounded-full bg-slate-100 flex items-center justify-center text-slate-400 hover:bg-slate-200 hover:text-slate-600 transition-all\"\n data-testid=\"managerole-close-icon\"\n >\n <FontAwesomeIcon icon={faXmark} size=\"lg\" />\n </IconButton>\n </div>\n <form\n onSubmit={handleSubmit(onSubmit)}\n ref={formRef}\n className=\"px-8 pb-8 space-y-6 overflow-y-auto max-h-[80vh]\"\n >\n <div className=\"space-y-4\">\n {isFirstTimeCodeAssignment && (\n <Alert\n severity=\"warning\"\n data-testid=\"managerole-legacy-code-alert\"\n >\n This role does not have a Role Code yet. A code has been\n generated below — review or edit it before saving, as it\n cannot be changed once this role is saved with a code.\n </Alert>\n )}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <FormControl variant=\"outlined\">\n <div className=\"space-y-1.5\">\n <FormItem label=\"Role Name\">\n <CustomTextField\n placeholder={\"Role Name\"}\n name=\"name\"\n id=\"name\"\n errors={errors}\n control={control}\n dataTestId=\"managerole-role-name-field\"\n />\n </FormItem>\n </div>\n </FormControl>\n <FormControl variant=\"outlined\">\n <div className=\"space-y-1.5\">\n <FormItem\n label=\"Role Code\"\n required={!isCodeLocked}\n additionalLabel={\n <Tooltip\n arrow\n placement=\"top\"\n title={\n isCodeLocked\n ? \"This role already has a saved Role Code. Once a Role Code is set it can never be changed, so this field is locked.\"\n : \"Auto-generated from the Role Name (capital letters and underscores only) as you type. Edit it yourself at any time — once you do, it stops following the Role Name. After you save this role, its Role Code becomes permanent and this field will be locked on every future edit.\"\n }\n >\n <Box\n component=\"span\"\n className=\"cursor-help\"\n sx={{ color: \"info.main\", display: \"inline-flex\" }}\n data-testid=\"managerole-role-code-info-icon\"\n >\n <FontAwesomeIcon icon={faCircleInfo} size=\"sm\" />\n </Box>\n </Tooltip>\n }\n >\n <CustomTextField\n placeholder={\"ROLE_CODE\"}\n name=\"code\"\n id=\"code\"\n errors={errors}\n control={control}\n disabled={isCodeLocked}\n successMessage={\n isCodeLocked ? \"\" : roleCodeStatus.message\n }\n inputProps={{ maxLength: ROLE_CODE_MAX_LENGTH }}\n onChange={(e) => {\n markAsManuallyEdited();\n setValue(\"code\", sanitizeRoleCode(e.target.value), {\n shouldValidate: true,\n });\n }}\n dataTestId=\"managerole-role-code-field\"\n />\n </FormItem>\n </div>\n </FormControl>\n </div>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <FormControl variant=\"outlined\">\n <div className=\"space-y-1.5\">\n <FormItem\n label=\"Max Position\"\n tooltip=\"This is the maximum no of users that can be created at one location of this role type\"\n >\n <CustomTextField\n name=\"maxPosition\"\n id=\"maxPosition\"\n errors={errors}\n control={control}\n rules={{\n maxLength: 3,\n pattern: /^\\d{1,3}$/,\n }}\n inputProps={{\n maxLength: 3,\n inputMode: \"numeric\",\n pattern: \"[0-9]*\",\n onInput: (e) => {\n e.target.value = e.target.value.replace(/\\D/g, \"\");\n },\n }}\n dataTestId=\"managerole-max-position-field\"\n />\n </FormItem>\n </div>\n </FormControl>\n {implementationConfig.role.showMaxHealthData && (\n <FormControl variant=\"outlined\">\n <div className=\"space-y-1.5\">\n <FormItem label=\"Max Health Infrastructure\">\n <CustomTextField\n name=\"maxHealthInfra\"\n id=\"maxHealthInfra\"\n control={control}\n errors={errors}\n rules={{\n maxLength: 3,\n pattern: /^\\d{1,3}$/,\n }}\n inputProps={{\n maxLength: 3,\n inputMode: \"numeric\",\n pattern: \"[0-9]*\",\n onInput: (e) => {\n e.target.value = e.target.value.replace(\n /\\D/g,\n \"\",\n );\n },\n }}\n dataTestId=\"managerole-max-health-infra-field\"\n />\n </FormItem>\n </div>\n </FormControl>\n )}\n </div>\n </div>\n <div className=\"flex items-center gap-6 w-full\">\n <FormControl\n variant=\"outlined\"\n className=\"flex flex-row items-center w-full \"\n >\n <FormItem\n label=\"Location Required\"\n required={true}\n direction={\"row\"}\n >\n <CustomToggleSwitch\n control={control}\n name=\"isLocationRequired\"\n options={[\n { label: \"Yes\", value: true },\n { label: \"No\", value: false },\n ]}\n errors={errors}\n />\n {/* <CustomRadioGroup\n name=\"isLocationRequired\"\n errors={errors}\n control={control}\n options={[\n { label: \"Yes\", value: true },\n { label: \"No\", value: false },\n ]}\n direction=\"row\"\n dataTestId=\"managerole-location-details-radio\"\n className={\"m-0\"}\n /> */}\n </FormItem>\n </FormControl>\n </div>\n <div className=\"space-y-4\">\n {(locationDetailsWatcher === true || isSubmitting) && (\n <>\n <div className=\"space-y-1.5\">\n <FormItem\n label=\"Location\"\n required={true}\n tooltip=\"The OU level where users of this role perform their job function\"\n >\n <CustomAutocomplete\n id=\"locationTypes\"\n control={control}\n name=\"locationTypes\"\n options={formData.locationData}\n value={locTypes?.map((locationType) =>\n formData.locationData?.find(\n (location) =>\n location.type === locationType?.type,\n ),\n )}\n errors={errors}\n getOptionLabel={(option) => option?.name}\n dataTestId=\"managerole-location-type-select\"\n checkEquality=\"type\"\n onChange={(e, val) =>\n handleAddFields(e, val, \"locationTypes\")\n }\n />\n </FormItem>\n </div>\n </>\n )}\n <div className=\"space-y-1.5\">\n <FormItem\n label=\"Can Manage Role\"\n tooltip=\"Please select the roles that shall be managed by this role\"\n >\n <CustomAutocomplete\n name=\"roleIds\"\n id=\"roleIds\"\n errors={errors}\n control={control}\n dataTestId=\"managerole-manage-role-select\"\n options={formData.roles}\n onChange={(e, val) => handleAddFields(e, val, \"roleIds\")}\n getOptionLabel={(options) => options?.name}\n />\n </FormItem>\n </div>\n {implementationConfig.role.showManagedFrom && (\n <div className=\"space-y-1.5\">\n <FormItem\n label=\"Managed From\"\n tooltip=\"Please select the roles that can manage this role\"\n >\n <CustomAutocomplete\n name=\"canManageRoleIds\"\n id=\"canManageRoleIds\"\n errors={errors}\n control={control}\n dataTestId=\"managerole-managed-by-role-select\"\n options={formData.roles}\n onChange={(e, val) =>\n handleAddFields(e, val, \"canManageRoleIds\")\n }\n getOptionLabel={(options) => options?.name}\n />\n </FormItem>\n </div>\n )}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {implementationConfig.role.showRoleType && (\n <div className=\"space-y-1.5\">\n <FormItem\n label=\"Role Type\"\n tooltip=\"Please select Role Type\"\n required={true}\n >\n <CustomDropdown\n control={control}\n id=\"roleType\"\n name=\"roleType\"\n options={roleTypes}\n displayName=\"name\"\n optionValue=\"name\"\n errors={errors}\n dataTestId=\"managerole-role-type-dropdown\"\n />\n </FormItem>\n </div>\n )}\n {implementationConfig.role.showCanManageTeam && (\n <div className=\"space-y-1.5\">\n <FormItem\n label=\"Can Manage Team\"\n tooltip=\"Please select the teams that shall be managed by this role\"\n >\n <CustomAutocomplete\n control={control}\n name=\"manageByTeamTypeIds\"\n id=\"manageByTeamTypeIds\"\n errors={errors}\n options={formData.manageTeam}\n dataTestId=\"managerole-manage-team-select\"\n onChange={(e, val) =>\n handleAddFields(e, val, \"manageByTeamTypeIds\")\n }\n getOptionLabel={(options) => options?.type}\n />\n </FormItem>\n </div>\n )}\n </div>\n <div className=\"space-y-4\">\n <div className=\"space-y-1.5\">\n <FormItem\n label=\"Select Health Infrastructure type\"\n tooltip=\"Please select the institute to be associated with the role\"\n required={isHealthInfraMandatory}\n >\n <CustomAutocomplete\n options={formData.healthInfraType}\n errors={errors}\n name=\"healthInfrastructureIds\"\n id=\"healthInfrastructureIds\"\n dataTestId=\"managerole-health-infrastructure-select\"\n control={control}\n onChange={(e, val) =>\n handleAddFields(e, val, \"healthInfrastructureIds\")\n }\n getOptionLabel={(option) => option?.value}\n />\n </FormItem>\n </div>\n </div>\n {implementationConfig.role.showCategoryIds && (\n <>\n <div className=\"space-y-4\">\n <div className=\"space-y-1.5\">\n <FormItem\n label=\"Category\"\n tooltip=\"Please select the category to be associated with the role\"\n >\n <CustomAutocomplete\n id=\"categoryIds\"\n name=\"categoryIds\"\n errors={errors}\n options={formData.category}\n dataTestId=\"managerole-role-category-select\"\n control={control}\n onChange={(e, val) =>\n handleAddFields(e, val, \"categoryIds\")\n }\n getOptionLabel={(option) => option?.value}\n />\n </FormItem>\n </div>\n </div>\n </>\n )}\n </div>\n <div className=\"flex items-center gap-6\">\n {implementationConfig.role.showBankDetailsRequired && (\n <FormControl\n variant=\"outlined\"\n className=\"flex flex-row items-center w-[60%] \"\n >\n <FormItem\n label=\"Bank Details Required\"\n tooltip=\"Select if bank details are required for this role\"\n required={true}\n labelWidth=\"50%\"\n childrenWidth=\"50%\"\n direction=\"row\"\n >\n <CustomToggleSwitch\n control={control}\n name=\"isBankDetailsRequired\"\n options={[\n { label: \"Yes\", value: true },\n { label: \"No\", value: false },\n ]}\n errors={errors}\n />\n </FormItem>\n </FormControl>\n )}\n {!isUpdate && (\n <>\n <FormControl variant=\"outlined \" className=\"w-[40%]\">\n <div className=\"flex items-center gap-2\">\n <label className=\"text-sm font-medium text-gray-700\">\n Self Manage\n </label>\n <CustomCheckBox\n name=\"canSelfManage\"\n control={control}\n isFullWidth={false}\n data-testid=\"managerole-self-manage-checkbox\"\n />\n </div>\n </FormControl>\n </>\n )}\n </div>\n {showTwoFactorSetting && (\n <div className=\"flex items-center gap-6 w-full\">\n <FormControl\n variant=\"outlined\"\n className=\"flex flex-row items-center w-[50%]\"\n >\n <FormItem\n label=\"Two-Factor Authentication\"\n tooltip=\"Require users of this role to use a two-factor authentication app\"\n labelWidth=\"60%\"\n childrenWidth=\"40%\"\n direction=\"row\"\n >\n <CustomToggleSwitch\n control={control}\n name=\"isTwoFactorEnabled\"\n options={[\n { label: \"Yes\", value: true },\n { label: \"No\", value: false },\n ]}\n errors={errors}\n />\n </FormItem>\n </FormControl>\n {isTwoFactorEnabled === true && (\n <FormControl variant=\"outlined\" className=\"w-[50%]\">\n <FormItem\n label=\"Authentication Method\"\n tooltip=\"Select which authentication method users of this role will use\"\n required={true}\n >\n <CustomDropdown\n control={control}\n id=\"twoFactorType\"\n name=\"twoFactorType\"\n options={twoFactorTypes}\n displayName=\"label\"\n optionValue=\"value\"\n errors={errors}\n dataTestId=\"managerole-two-factor-type-dropdown\"\n />\n </FormItem>\n </FormControl>\n )}\n </div>\n )}\n <div className=\"flex items-center gap-6\">\n <FormControl\n variant=\"outlined\"\n className=\"flex flex-col items-start justify-between\"\n >\n <FormItem\n label=\"Mandatory Fields\"\n tooltip=\"These fields are Mandatory when creating users of this role type\"\n >\n <FormGroup row>\n {mandatoryFields?.map((field) => (\n <CustomCheckBox\n key={field.value}\n control={control}\n name={field.value}\n label={field.label}\n isFullWidth={false}\n data-testid={`managerole-mandatory-field-${field.value}`}\n />\n ))}\n {bankDetails === true && (\n <CustomCheckBox\n name=\"isBankDetailsMandatory\"\n control={control}\n label=\"Bank Details\"\n isFullWidth={false}\n data-testid=\"managerole-bank-details-mandatory-checkbox\"\n />\n )}\n </FormGroup>\n </FormItem>\n </FormControl>\n </div>\n <Box\n className=\"flex items-center justify-end gap-3 pt-6 border-t\"\n sx={{ borderColor: \"divider\" }}\n >\n <Button\n variant=\"contained\"\n color=\"secondary\"\n size=\"small\"\n onClick={handleClose}\n data-testid=\"managerole-close-button\"\n >\n {translate(\"Close\")}\n </Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n size=\"small\"\n type=\"submit\"\n disabled={roleCodeStatus.state === \"checking\"}\n data-testid=\"managerole-submit-button\"\n >\n {!isUpdate\n ? `${translate(\"Add Role\")}`\n : `${translate(\"Update Role\")}`}\n </Button>\n </Box>\n </form>\n </ManageRoleSkeleton>\n </Box>\n </div>\n </Modal>\n );\n};\n\nexport default ManageRole;\n\nManageRole.propTypes = {\n isUpdate: PropTypes.bool,\n role: PropTypes.object,\n onClose: PropTypes.func,\n open: PropTypes.bool,\n setOpen: PropTypes.func,\n selectedId: PropTypes.string,\n isRoleListModified: PropTypes.bool,\n};\n"],"names":["ManageRoleSkeleton","children","isLoading","useSelector","getUseSkeleton","jsxs","jsx","i","PropTypes","ROLE_CODE_MAX_LENGTH","ROLE_CODE_PATTERN","COLLISION_SUFFIXES","LOOKUP_DEBOUNCE_MS","buildRoleCodeFromName","name","sanitizeRoleCode","value","joinWithSuffix","base","suffix","room","trimmed","pickAvailableRoleCode","taken","roleId","isFree","candidate","match","useRoleCode","code","isLocked","isOpen","setValue","trigger","takenCodesRef","useRef","manuallyEditedRef","lookupSeqRef","status","setStatus","useState","useEffect","lookup","useCallback","prefix","seq","data","getRoleCodesByPrefix","row","isCodeAvailable","markAsManuallyEdited","timer","suggestion","error","roleTypes","twoFactorTypes","ManageRole","selectedId","isUpdate","open","setOpen","isRoleListModified","formRef","submitRef","trackEvent","useTrackEvent","formData","setFormData","setIsLoading","isCodeLocked","_a","isFirstTimeCodeAssignment","isCodeAvailableRef","validationSchema","Yup","schema","implementationConfig","control","handleSubmit","errors","isSubmitting","watch","reset","useForm","yupResolver","bankDetails","isTwoFactorEnabled","roleType","showTwoFactorSetting","locTypes","translate","useTranslateProvider","locationDetailsWatcher","isHealthInfraMandatory","roleName","roleCode","roleCodeStatus","mandatoryFields","field","handleClose","handleAddFields","onSubmit","params","item","putRole","postRole","showToast","_c","_b","cur","env","GeneralUtil","roles","locationData","manageTeam","category","healthInfraType","getRoleList","getLocationTypes","execute","roleData","getRoleById","key","manageByTeamTypeIds","healthInfrastructureIds","roleIds","categoryIds","role","Modal","Box","theme","IconButton","FontAwesomeIcon","faXmark","Alert","FormControl","FormItem","CustomTextField","Tooltip","faCircleInfo","CustomToggleSwitch","Fragment","CustomAutocomplete","locationType","location","option","val","options","CustomDropdown","CustomCheckBox","FormGroup","Button"],"mappings":"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"}