@argusoft/medplat-core 1.0.28 → 1.0.30

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 (229) hide show
  1. package/dist/AccessRights-xrday-L1.js +1023 -0
  2. package/dist/AccessRights-xrday-L1.js.map +1 -0
  3. package/dist/AddEditQueryBuilder-D-iQiVIe.js +365 -0
  4. package/dist/AddEditQueryBuilder-D-iQiVIe.js.map +1 -0
  5. package/dist/{AddFeatures-C0Z29oSd.js → AddFeatures-D1sU8RjY.js} +2 -2
  6. package/dist/{AddFeatures-C0Z29oSd.js.map → AddFeatures-D1sU8RjY.js.map} +1 -1
  7. package/dist/AddLabelModal-Bq-wRqv9.js +631 -0
  8. package/dist/AddLabelModal-Bq-wRqv9.js.map +1 -0
  9. package/dist/AddMenuConfiguration-e5BVXhmw.js +8547 -0
  10. package/dist/AddMenuConfiguration-e5BVXhmw.js.map +1 -0
  11. package/dist/{AddRoleDrawer-CQdzQZLb.js → AddRoleDrawer-0gqAK8N0.js} +62 -63
  12. package/dist/AddRoleDrawer-0gqAK8N0.js.map +1 -0
  13. package/dist/AppModal-CCtrQ5Tr.js +394 -0
  14. package/dist/AppModal-CCtrQ5Tr.js.map +1 -0
  15. package/dist/BrandsPage-DmRW5bhm-Bk1szrjI.js +387 -0
  16. package/dist/BrandsPage-DmRW5bhm-Bk1szrjI.js.map +1 -0
  17. package/dist/CategoriesPage-BsS5IQh3-B03lWRY5.js +391 -0
  18. package/dist/CategoriesPage-BsS5IQh3-B03lWRY5.js.map +1 -0
  19. package/dist/{ChangePasswordModalCore-CDxkeIIM.js → ChangePasswordModalCore-BPsJquTS.js} +1606 -1611
  20. package/dist/ChangePasswordModalCore-BPsJquTS.js.map +1 -0
  21. package/dist/{ConditionConfig-DSsgGEXS.js → ConditionConfig-Ddz9halE.js} +2 -2
  22. package/dist/ConditionConfig-Ddz9halE.js.map +1 -0
  23. package/dist/DashboardPage-C3bKc5na-sBd9Yqbi.js +435 -0
  24. package/dist/DashboardPage-C3bKc5na-sBd9Yqbi.js.map +1 -0
  25. package/dist/{EntityManagement-GaYsBTvf.js → EntityManagement-CPQL6qBj.js} +2 -2
  26. package/dist/{EntityManagement-GaYsBTvf.js.map → EntityManagement-CPQL6qBj.js.map} +1 -1
  27. package/dist/EventConfig-BmLemzX3.js +26 -0
  28. package/dist/EventConfig-BmLemzX3.js.map +1 -0
  29. package/dist/{EventConfigurations-kNtAj_WM.js → EventConfigurations-Bzh1qWXU.js} +31 -30
  30. package/dist/{EventConfigurations-kNtAj_WM.js.map → EventConfigurations-Bzh1qWXU.js.map} +1 -1
  31. package/dist/{EventsExceptionModal-D4Bf1ilS.js → EventsExceptionModal-B2SRrnB1.js} +2 -2
  32. package/dist/{EventsExceptionModal-D4Bf1ilS.js.map → EventsExceptionModal-B2SRrnB1.js.map} +1 -1
  33. package/dist/EventsSkeleton-BIcPks4T.js +61 -0
  34. package/dist/EventsSkeleton-BIcPks4T.js.map +1 -0
  35. package/dist/FacilityPicker-BiZeupmP-CyPHmj6b.js +79 -0
  36. package/dist/FacilityPicker-BiZeupmP-CyPHmj6b.js.map +1 -0
  37. package/dist/FeatureMenu-DYJmDt7q.js +521 -0
  38. package/dist/FeatureMenu-DYJmDt7q.js.map +1 -0
  39. package/dist/Features-Dne21RWu.js +14 -0
  40. package/dist/Features-Dne21RWu.js.map +1 -0
  41. package/dist/{FhirServerList-Dkq7Kbes.js → FhirServerList-DuTwnngN.js} +19 -19
  42. package/dist/{FhirServerList-Dkq7Kbes.js.map → FhirServerList-DuTwnngN.js.map} +1 -1
  43. package/dist/{FhirServerWizard-Db6Hm4bQ.js → FhirServerWizard-DZI8Olku.js} +15 -15
  44. package/dist/{FhirServerWizard-Db6Hm4bQ.js.map → FhirServerWizard-DZI8Olku.js.map} +1 -1
  45. package/dist/FlywayQuery-CQygj51V.js +179 -0
  46. package/dist/FlywayQuery-CQygj51V.js.map +1 -0
  47. package/dist/{ManageNotification-CaBAOhji.js → Google-DQxMfbaL.js} +1725 -2652
  48. package/dist/{ManageNotification-CaBAOhji.js.map → Google-DQxMfbaL.js.map} +1 -1
  49. package/dist/GrantPermissionModal-BDN66Atn.js +236 -0
  50. package/dist/GrantPermissionModal-BDN66Atn.js.map +1 -0
  51. package/dist/ImmunizationConfigurationBase-Di1KO3oW.js +7639 -0
  52. package/dist/ImmunizationConfigurationBase-Di1KO3oW.js.map +1 -0
  53. package/dist/ImmunizationConfigurationBase.css +1 -1
  54. package/dist/ImmunizationConfigurationsList-TZcLDEci.js +369 -0
  55. package/dist/ImmunizationConfigurationsList-TZcLDEci.js.map +1 -0
  56. package/dist/InventoryPage-C_AxSy7A-QLvlL4rE.js +665 -0
  57. package/dist/InventoryPage-C_AxSy7A-QLvlL4rE.js.map +1 -0
  58. package/dist/LanguagesModal-B3NTebYT.js +352 -0
  59. package/dist/LanguagesModal-B3NTebYT.js.map +1 -0
  60. package/dist/ManageDynamicFeature-BU0I45dd.js +4475 -0
  61. package/dist/ManageDynamicFeature-BU0I45dd.js.map +1 -0
  62. package/dist/{ManageEventConfiguration-DV3I5POA.js → ManageEventConfiguration-CoYcpjR9.js} +465 -397
  63. package/dist/ManageEventConfiguration-CoYcpjR9.js.map +1 -0
  64. package/dist/ManageNotification-C5MhV77Q.js +934 -0
  65. package/dist/ManageNotification-C5MhV77Q.js.map +1 -0
  66. package/dist/{ManageRole-CGYfglpo.js → ManageRole-CNZBRKGU.js} +32 -30
  67. package/dist/ManageRole-CNZBRKGU.js.map +1 -0
  68. package/dist/ManageTranslation-vRiptUAP.js +833 -0
  69. package/dist/ManageTranslation-vRiptUAP.js.map +1 -0
  70. package/dist/ManageTranslation.css +1 -1
  71. package/dist/{ManageUser-AY1EUDLI.js → ManageUser-DCFkUMV9.js} +1722 -1586
  72. package/dist/ManageUser-DCFkUMV9.js.map +1 -0
  73. package/dist/MemberProfileCard-BdUNgHRB-VywqQdFF.js +272 -0
  74. package/dist/MemberProfileCard-BdUNgHRB-VywqQdFF.js.map +1 -0
  75. package/dist/MobileAnalytics-pQoE8cG1.js +16888 -0
  76. package/dist/MobileAnalytics-pQoE8cG1.js.map +1 -0
  77. package/dist/MobileMenuManagement-Cf8IZlla.js +108 -0
  78. package/dist/MobileMenuManagement-Cf8IZlla.js.map +1 -0
  79. package/dist/{MobileTypeEventConfigModal-BxLympIO.js → MobileTypeEventConfigModal-BeveaX0C.js} +2 -2
  80. package/dist/MobileTypeEventConfigModal-BeveaX0C.js.map +1 -0
  81. package/dist/NotificationFlywayQuery-BAHVjf6N.js +247 -0
  82. package/dist/NotificationFlywayQuery-BAHVjf6N.js.map +1 -0
  83. package/dist/{NotificationList-C3Vb_jKU.js → NotificationList-DEyRZEuM.js} +109 -110
  84. package/dist/NotificationList-DEyRZEuM.js.map +1 -0
  85. package/dist/{OtherTypeEventConfigModal-BeG1GrUi.js → OtherTypeEventConfigModal-CM6VkdmY.js} +570 -478
  86. package/dist/OtherTypeEventConfigModal-CM6VkdmY.js.map +1 -0
  87. package/dist/PaymentCreatePage-CIVe0P0p-25BQVpOX.js +482 -0
  88. package/dist/PaymentCreatePage-CIVe0P0p-25BQVpOX.js.map +1 -0
  89. package/dist/PaymentsPage-BvPe5Q9F-D2gfziwW.js +157 -0
  90. package/dist/PaymentsPage-BvPe5Q9F-D2gfziwW.js.map +1 -0
  91. package/dist/PermissionsModal-CCYkcKlC.js +151 -0
  92. package/dist/PermissionsModal-CCYkcKlC.js.map +1 -0
  93. package/dist/PickupBatchLinesEditor-DHmcAG23-DL2p6IKJ.js +119 -0
  94. package/dist/PickupBatchLinesEditor-DHmcAG23-DL2p6IKJ.js.map +1 -0
  95. package/dist/PickupCreatePage-CB0Sl0Hb-Mmj7zESG.js +783 -0
  96. package/dist/PickupCreatePage-CB0Sl0Hb-Mmj7zESG.js.map +1 -0
  97. package/dist/PickupsPage-Ctpghavs-CUp4uIZq.js +818 -0
  98. package/dist/PickupsPage-Ctpghavs-CUp4uIZq.js.map +1 -0
  99. package/dist/PmGuard-b10TGXEi-G3N0G_Wg.js +599 -0
  100. package/dist/PmGuard-b10TGXEi-G3N0G_Wg.js.map +1 -0
  101. package/dist/ProductEditPage-C1thoKHu-URQaZ6st.js +1302 -0
  102. package/dist/ProductEditPage-C1thoKHu-URQaZ6st.js.map +1 -0
  103. package/dist/ProductsPage-CupVmOD4-D45a_hf-.js +252 -0
  104. package/dist/ProductsPage-CupVmOD4-D45a_hf-.js.map +1 -0
  105. package/dist/PurchaseCreatePage-YD3NmhPQ-2j4etSjM.js +648 -0
  106. package/dist/PurchaseCreatePage-YD3NmhPQ-2j4etSjM.js.map +1 -0
  107. package/dist/PurchaseRequestDetailPage-Dg_MRY_N-D1bgTEAn.js +1577 -0
  108. package/dist/PurchaseRequestDetailPage-Dg_MRY_N-D1bgTEAn.js.map +1 -0
  109. package/dist/PurchaseRequestsPage-DPAPzpmm-mDH2IrTl.js +279 -0
  110. package/dist/PurchaseRequestsPage-DPAPzpmm-mDH2IrTl.js.map +1 -0
  111. package/dist/PurchasesPage-It1GHiXl-eH4IsF_U.js +293 -0
  112. package/dist/PurchasesPage-It1GHiXl-eH4IsF_U.js.map +1 -0
  113. package/dist/QueryBuilder-CXaBe6sr.js +478 -0
  114. package/dist/QueryBuilder-CXaBe6sr.js.map +1 -0
  115. package/dist/{RoleManagement-BPl2cE27.js → RoleManagement-s8iNx2Mu.js} +131 -142
  116. package/dist/RoleManagement-s8iNx2Mu.js.map +1 -0
  117. package/dist/Roles-BIyiic67.js +14 -0
  118. package/dist/Roles-BIyiic67.js.map +1 -0
  119. package/dist/SaleCreatePage-C9kFmTvm-B3Y0o4CX.js +544 -0
  120. package/dist/SaleCreatePage-C9kFmTvm-B3Y0o4CX.js.map +1 -0
  121. package/dist/SalesPage-D18DCseD-BxktGDRQ.js +315 -0
  122. package/dist/SalesPage-D18DCseD-BxktGDRQ.js.map +1 -0
  123. package/dist/{ServerSyncModal-D_oFpv3C.js → ServerSyncModal-92U3xtqI.js} +84 -85
  124. package/dist/ServerSyncModal-92U3xtqI.js.map +1 -0
  125. package/dist/SettingsPage-VsxI-ano-DcmtUUEj.js +747 -0
  126. package/dist/SettingsPage-VsxI-ano-DcmtUUEj.js.map +1 -0
  127. package/dist/ShowFlywayQuery-D10Olk5Z.js +154 -0
  128. package/dist/ShowFlywayQuery-D10Olk5Z.js.map +1 -0
  129. package/dist/{ShowFlywayQuery-DVRCd384.js → ShowFlywayQuery-D1y_4A1u.js} +161 -121
  130. package/dist/ShowFlywayQuery-D1y_4A1u.js.map +1 -0
  131. package/dist/ShowQueryHistory-DRBKYDKk.js +313 -0
  132. package/dist/ShowQueryHistory-DRBKYDKk.js.map +1 -0
  133. package/dist/StorageUnitsPage-7EqwuMOI-BwUso1Th.js +721 -0
  134. package/dist/StorageUnitsPage-7EqwuMOI-BwUso1Th.js.map +1 -0
  135. package/dist/SubMenu-eEDhZUvh.js +317 -0
  136. package/dist/SubMenu-eEDhZUvh.js.map +1 -0
  137. package/dist/{TableDetails-Cf_YfnY2.js → TableDetails-BtafRxXb.js} +1069 -831
  138. package/dist/TableDetails-BtafRxXb.js.map +1 -0
  139. package/dist/{TableList-D6jnIbnz.js → TableList-Dpo6dO7S.js} +2 -2
  140. package/dist/{TableList-D6jnIbnz.js.map → TableList-Dpo6dO7S.js.map} +1 -1
  141. package/dist/TransactionsPage-DrH53pVS-BkhIGB6C.js +746 -0
  142. package/dist/TransactionsPage-DrH53pVS-BkhIGB6C.js.map +1 -0
  143. package/dist/TransferCreatePage-CuvoMrYH-DTTfHjz-.js +315 -0
  144. package/dist/TransferCreatePage-CuvoMrYH-DTTfHjz-.js.map +1 -0
  145. package/dist/TransfersPage-Cf701t8s-BBbN7cBf.js +476 -0
  146. package/dist/TransfersPage-Cf701t8s-BBbN7cBf.js.map +1 -0
  147. package/dist/{TypeConfiguration-37wp-gsl.js → TypeConfiguration-3O6ABrK-.js} +2 -2
  148. package/dist/{TypeConfiguration-37wp-gsl.js.map → TypeConfiguration-3O6ABrK-.js.map} +1 -1
  149. package/dist/{UserList-Bc8gYxRL.js → UserList-DgPxsnj2.js} +253 -236
  150. package/dist/{UserList-Bc8gYxRL.js.map → UserList-DgPxsnj2.js.map} +1 -1
  151. package/dist/Users-Bpc4Sazd.js +41 -0
  152. package/dist/Users-Bpc4Sazd.js.map +1 -0
  153. package/dist/VialsPage-8oAc1yFv-Cl3FUXBJ.js +321 -0
  154. package/dist/VialsPage-8oAc1yFv-Cl3FUXBJ.js.map +1 -0
  155. package/dist/{WidgetList-Dw_FmbbE.js → WidgetList-D7YuWfDD.js} +2 -2
  156. package/dist/{WidgetList-Dw_FmbbE.js.map → WidgetList-D7YuWfDD.js.map} +1 -1
  157. package/dist/constants-ClZJY2x1-MkSWn6TZ.js +434 -0
  158. package/dist/constants-ClZJY2x1-MkSWn6TZ.js.map +1 -0
  159. package/dist/dashboardLayoutUtils-D1xCAxp3.js +405 -0
  160. package/dist/dashboardLayoutUtils-D1xCAxp3.js.map +1 -0
  161. package/dist/format-UOyOu75i-D0GyylyQ.js +63 -0
  162. package/dist/format-UOyOu75i-D0GyylyQ.js.map +1 -0
  163. package/dist/index.css +1 -1
  164. package/dist/index.js +4 -752
  165. package/dist/index.js.map +1 -1
  166. package/dist/index.lib-Dn8PMkeD.js +862 -0
  167. package/dist/index.lib-Dn8PMkeD.js.map +1 -0
  168. package/dist/useFieldErrors-hDG8ox_x-DbSAzrGo.js +28 -0
  169. package/dist/useFieldErrors-hDG8ox_x-DbSAzrGo.js.map +1 -0
  170. package/dist/validation-BzlHnL-r-CCJm2utQ.js +125 -0
  171. package/dist/validation-BzlHnL-r-CCJm2utQ.js.map +1 -0
  172. package/package.json +5 -4
  173. package/dist/AccessRights-CHu27ZOw.js +0 -1262
  174. package/dist/AccessRights-CHu27ZOw.js.map +0 -1
  175. package/dist/AddEditQueryBuilder-Brdnm6rQ.js +0 -313
  176. package/dist/AddEditQueryBuilder-Brdnm6rQ.js.map +0 -1
  177. package/dist/AddLabelModal-DFllBVcd.js +0 -734
  178. package/dist/AddLabelModal-DFllBVcd.js.map +0 -1
  179. package/dist/AddMenuConfiguration-BSQLl88V.js +0 -6570
  180. package/dist/AddMenuConfiguration-BSQLl88V.js.map +0 -1
  181. package/dist/AddRoleDrawer-CQdzQZLb.js.map +0 -1
  182. package/dist/AppModal-CtG2GjD_.js +0 -428
  183. package/dist/AppModal-CtG2GjD_.js.map +0 -1
  184. package/dist/ChangePasswordModalCore-CDxkeIIM.js.map +0 -1
  185. package/dist/ConditionConfig-DSsgGEXS.js.map +0 -1
  186. package/dist/EventsSkeleton-8iiETGcf.js +0 -76
  187. package/dist/EventsSkeleton-8iiETGcf.js.map +0 -1
  188. package/dist/FeatureMenu-jl7-Tk6y.js +0 -265
  189. package/dist/FeatureMenu-jl7-Tk6y.js.map +0 -1
  190. package/dist/Features-CObdzJp_.js +0 -13
  191. package/dist/Features-CObdzJp_.js.map +0 -1
  192. package/dist/FlywayQuery-Cx2sly6g.js +0 -169
  193. package/dist/FlywayQuery-Cx2sly6g.js.map +0 -1
  194. package/dist/ImmunizationConfigurationBase-DZGqwda2.js +0 -5910
  195. package/dist/ImmunizationConfigurationBase-DZGqwda2.js.map +0 -1
  196. package/dist/ImmunizationConfigurationsList-DdSZicTP.js +0 -344
  197. package/dist/ImmunizationConfigurationsList-DdSZicTP.js.map +0 -1
  198. package/dist/LanguagesModal-D6VfaGrl.js +0 -394
  199. package/dist/LanguagesModal-D6VfaGrl.js.map +0 -1
  200. package/dist/ManageDynamicFeature-BhONvfC_.js +0 -4189
  201. package/dist/ManageDynamicFeature-BhONvfC_.js.map +0 -1
  202. package/dist/ManageEventConfiguration-DV3I5POA.js.map +0 -1
  203. package/dist/ManageRole-CGYfglpo.js.map +0 -1
  204. package/dist/ManageTranslation-B4C9-lWD.js +0 -625
  205. package/dist/ManageTranslation-B4C9-lWD.js.map +0 -1
  206. package/dist/ManageUser-AY1EUDLI.js.map +0 -1
  207. package/dist/MobileMenuManagement-CVAKyKDa.js +0 -112
  208. package/dist/MobileMenuManagement-CVAKyKDa.js.map +0 -1
  209. package/dist/MobileTypeEventConfigModal-BxLympIO.js.map +0 -1
  210. package/dist/NotificationFlywayQuery-BY8Zzml_.js +0 -244
  211. package/dist/NotificationFlywayQuery-BY8Zzml_.js.map +0 -1
  212. package/dist/NotificationList-C3Vb_jKU.js.map +0 -1
  213. package/dist/OtherTypeEventConfigModal-BeG1GrUi.js.map +0 -1
  214. package/dist/QueryBuilder-z7eqfd7D.js +0 -383
  215. package/dist/QueryBuilder-z7eqfd7D.js.map +0 -1
  216. package/dist/RoleManagement-BPl2cE27.js.map +0 -1
  217. package/dist/ServerSyncModal-D_oFpv3C.js.map +0 -1
  218. package/dist/ShowFlywayQuery-DVRCd384.js.map +0 -1
  219. package/dist/ShowFlywayQuery-tj42YQAS.js +0 -130
  220. package/dist/ShowFlywayQuery-tj42YQAS.js.map +0 -1
  221. package/dist/ShowQueryHistory-BDN0tzHg.js +0 -190
  222. package/dist/ShowQueryHistory-BDN0tzHg.js.map +0 -1
  223. package/dist/SubMenu-DYxAPH2Z.js +0 -191
  224. package/dist/SubMenu-DYxAPH2Z.js.map +0 -1
  225. package/dist/TableDetails-Cf_YfnY2.js.map +0 -1
  226. package/dist/Users-CsJ08Kjm.js +0 -40
  227. package/dist/Users-CsJ08Kjm.js.map +0 -1
  228. package/dist/dashboardLayoutUtils-Bt5HA96J.js +0 -265
  229. package/dist/dashboardLayoutUtils-Bt5HA96J.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"AccessRights-CHu27ZOw.js","sources":["../src/views/Features/GrantPermissionModal.jsx","../src/views/Features/AccessPanel.jsx","../src/views/Features/PermissionsModal.jsx","../src/views/Features/AccessRights.jsx"],"sourcesContent":["import React from \"react\";\nimport {\n Modal,\n Box,\n Card,\n Typography,\n IconButton,\n Button,\n} from \"@mui/material\";\nimport Grid from \"@mui/material/Grid2\";\n\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faXmark } from \"@fortawesome/free-solid-svg-icons\";\nimport { useForm } from \"react-hook-form\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport * as Yup from \"yup\";\nimport CustomCheckBox from \"@/views/custom-components/CustomCheckBox\";\nimport CustomDatePicker from \"@/views/custom-components/CustomDatePicker\";\nimport PropTypes from \"prop-types\";\nimport { getFeatureDataV2 } from \"../../services/Features\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport { execute } from \"@/common/services/GlobalApis.js\";\nimport { useTranslateProvider } from \"@/common/languageTranslator/TranslationContext\";\n\nconst schema = Yup.object().shape({\n noStartDate: Yup.boolean().default(true),\n noEndDate: Yup.boolean().default(true),\n startDate: Yup.date()\n .nullable()\n .when(\"noStartDate\", {\n is: false,\n then: (schema) => schema.required(\"Start date is required\"),\n }),\n endDate: Yup.date()\n .nullable()\n .when(\"noEndDate\", {\n is: false,\n then: (schema) => schema.required(\"End date is required\"),\n })\n .test(\n \"endAfterStart\",\n \"End date must be after start date\",\n function (value) {\n const { startDate, noEndDate } = this.parent;\n if (!value || noEndDate || !startDate) return true;\n return new Date(value) >= new Date(startDate);\n }\n ),\n isBackendOnly: Yup.boolean().default(false),\n});\n\nexport default function GrantPermissionModal({\n isOpen,\n onClose,\n pendingGrant,\n subMenuId,\n newApiData,\n}) {\n const { translate } = useTranslateProvider();\n const {\n handleSubmit,\n control,\n reset,\n watch,\n formState: { errors },\n trigger,\n } = useForm({\n resolver: yupResolver(schema),\n defaultValues: {\n noStartDate: true,\n noEndDate: true,\n startDate: null,\n endDate: null,\n isBackendOnly: false,\n },\n mode: \"onChange\",\n });\n\n const noStartDate = watch(\"noStartDate\");\n const noEndDate = watch(\"noEndDate\");\n const startDate = watch(\"startDate\");\n const endDate = watch(\"endDate\");\n\n const handleFormSubmit = async (values) => {\n if (!pendingGrant) return;\n\n try {\n await execute({\n code: \"grant_permission\",\n parameters: {\n featureName: pendingGrant.id,\n roleIds: pendingGrant?.designationId\n ? String(pendingGrant?.designationId)\n : null,\n userIds: pendingGrant?.userId ? String(pendingGrant.userId) : null,\n startDate: values.noStartDate ? null : values.startDate,\n endDate: values.noEndDate ? null : values.endDate,\n isBackendOnly: values.isBackendOnly,\n },\n });\n\n showToast({\n type: \"success\",\n message: \"Permission Granted Successfully\",\n });\n\n // refresh data\n const { data: val } = await getFeatureDataV2(subMenuId);\n newApiData(val);\n } catch (error) {\n showToast({\n type: \"error\",\n message: `Error granting permission: ${error?.response?.data?.message}`,\n });\n }\n\n // cleanup\n reset();\n onClose();\n };\n\n const handleClose = () => {\n reset();\n onClose();\n };\n\n return (\n <Modal open={isOpen} onClose={handleClose}>\n <Box className=\"fixed inset-0 flex items-start justify-center z-50 overflow-y-auto bg-opacity-10\">\n <Card\n className=\"\n relative mt-10 p-4 shadow-lg flex flex-col rounded-xl\n w-[95vw] max-w-md\n sm:w-[80vw] sm:max-w-lg\n md:w-[60vw] md:max-w-xl\n lg:w-[40vw] lg:max-w-2xl\n xl:w-[30vw] xl:max-w-3xl\n \"\n >\n <form onSubmit={handleSubmit(handleFormSubmit)}>\n {/* Header */}\n <Grid className=\"flex justify-between items-center mb-4\">\n <Typography\n variant=\"h6\"\n className=\"text-base sm:text-lg text-customBlue\"\n >\n {translate(\"Set Access Window\")}\n </Typography>\n <IconButton onClick={handleClose}>\n <FontAwesomeIcon icon={faXmark} />\n </IconButton>\n </Grid>\n\n {/* Dates */}\n <Grid className=\"flex flex-col sm:flex-row gap-4 mb-4\">\n <Grid className=\"flex-1\">\n <CustomCheckBox\n defaultChecked={true}\n label={\"No Start Date\"}\n control={control}\n errors={errors}\n name={\"noStartDate\"}\n onChange={() => trigger(\"startDate\")}\n />\n <CustomDatePicker\n control={control}\n name={\"startDate\"}\n errors={errors}\n disabled={noStartDate}\n format=\"DD/MM/YYYY\"\n maxDate={endDate ? endDate : undefined}\n />\n </Grid>\n <Grid className=\"flex-1\">\n <CustomCheckBox\n label={\"No End Date\"}\n control={control}\n name={\"noEndDate\"}\n errors={errors}\n onChange={() => trigger(\"endDate\")}\n />\n <CustomDatePicker\n control={control}\n name={\"endDate\"}\n errors={errors}\n disabled={noEndDate}\n format=\"DD/MM/YYYY\"\n minDate={startDate ? startDate : undefined}\n />\n </Grid>\n </Grid>\n\n {/* Backend only */}\n <CustomCheckBox\n label={\"Is Backend Only?\"}\n control={control}\n name={\"isBackendOnly\"}\n className=\"\"\n />\n\n {/* Footer */}\n <Grid className=\"flex justify-end gap-3 mt-2\">\n <Button\n variant=\"contained\"\n color=\"secondary\"\n size=\"small\"\n onClick={handleClose}\n type=\"button\"\n className=\"mt-2\"\n >\n {translate(\"Close\")}\n </Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n size=\"small\"\n type=\"submit\"\n className=\"mt-2\"\n >\n {translate(\"Submit\")}\n </Button>\n </Grid>\n </form>\n </Card>\n </Box>\n </Modal>\n );\n}\n\nGrantPermissionModal.propTypes = {\n isOpen: PropTypes.bool,\n onClose: PropTypes.func,\n pendingGrant: PropTypes.object,\n execute: PropTypes.func,\n getFeatureDataV2: PropTypes.func,\n subMenuId: PropTypes.string,\n newApiData: PropTypes.func,\n showToast: PropTypes.func,\n};\n","import { useEffect, useState } from \"react\";\nimport { Controller, useForm } from \"react-hook-form\";\nimport Grid from \"@mui/material/Grid2\";\nimport { execute } from \"@/common/services/GlobalApis\";\nimport { Autocomplete, Button, TextField, Typography } from \"@mui/material\";\nimport PropTypes from \"prop-types\";\nimport CustomAutocomplete from \"@/views/custom-components/CustomAutoComplete\";\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\n const newRoleList = roleList.filter(\n (role) => !featureData?.some((item) => item?.designationId === role?.id)\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 { data: userData } = await execute({\n code: \"user_search_for_selectize\",\n parameters: {\n searchString: query,\n },\n });\n\n const newArray = (userData?.result || [])\n .filter((item) => item?.id)\n .filter(\n (user) =>\n !currentFeatureData?.some((item) => item?.userId === user?.id)\n )\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 <Grid className=\"flex flex-col md:flex-row gap-3 md:pl-5 justify-start w-full\">\n <Grid\n key=\"specific-section\"\n className=\"flex flex-col md:flex-row md:space-x-5 justify-center items-center w-full\"\n >\n <Grid className=\"flex flex-row flex-2 md:space-x-3 items-center w-full\">\n <Typography className=\"flex-1\">{translate(\"User\")}</Typography>\n <Grid className=\"flex-3\">\n <Controller\n name=\"roles\"\n id=\"roles\"\n users\n control={control}\n defaultValue={null} // or ''\n render={({ field: { onChange, value, ref } }) => (\n <Autocomplete\n options={userList}\n getOptionLabel={(option) => option.displayName || \"\"}\n isOptionEqualToValue={(option, value) =>\n option.id === value?.id\n }\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(\n index,\n index + searchTerm.length\n );\n const afterMatch = label.substring(\n index + searchTerm.length\n );\n\n return (\n <li {...props} key={option.id}>\n <span className=\"inline\">\n {beforeMatch}\n <span className=\"bg-yellow-300\">{match}</span>\n {afterMatch}\n </span>\n </li>\n );\n }}\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"User\"\n variant=\"outlined\"\n size=\"small\"\n inputRef={ref}\n />\n )}\n />\n )}\n />\n </Grid>\n </Grid>\n <Grid className=\"flex flex-row flex-2 md:space-x-3 items-center w-full\">\n <Typography className=\"flex-1\">{translate(\"Role\")}</Typography>\n <Grid className=\"flex-3\">\n <CustomAutocomplete\n id=\"selectedRoles\"\n name={\"selectedRoles\"}\n options={newRoleList}\n control={control}\n // onChange={(e, val) => addRole(val)}\n getOptionLabel={(option) => option?.name}\n dataTestId=\"accessrights-select-role\"\n // value={selectedRoles}\n />\n </Grid>\n </Grid>\n </Grid>\n <Grid className=\"flex items-center md:pr-5 justify-end\">\n <Button\n variant=\"contained\"\n size=\"small\"\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 </Grid>\n </Grid>\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 React from \"react\";\nimport { Modal, Box, Card, Typography, IconButton } from \"@mui/material\";\nimport PropTypes from \"prop-types\";\n\nimport { faArrowRight, faCheck, faXmark } from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\n\nimport Grid from \"@mui/material/Grid2\";\n\nexport default function PermissionsModal({\n isOpen,\n onClose,\n permissions,\n featureState,\n featureName,\n}) {\n const handleClose = () => {\n onClose();\n };\n\n\n const isChecked = featureState[featureName] || false;\n const renderPermissionList = (node, level = 0) => {\n if (!node) return null;\n\n const childrenNode = node.child || [];\n const featureName = node.display_name || node.name || node.id;\n // const isChecked = !!featureState[featureName];\n\n return (\n <div className=\"py-2 \">\n <div className=\"flex items-center \">\n {isChecked ? (\n <FontAwesomeIcon icon={faCheck} />\n ) : (\n <FontAwesomeIcon icon={faArrowRight} />\n )}\n <div className=\"top-6.5 w-4 border-t border-gray-300\"></div>\n <div\n className={`\n inline-flex items-center \n text-[0.8rem]\n px-2 py-1\n rounded-full\n bg-gray-100\n text-gray-800\n border border-gray-300\n hover:bg-gray-200\n transition-all duration-200 cursor-pointer\n \n `}\n >\n {featureName}\n </div>\n </div>\n\n {childrenNode?.length > 0 && (\n <div className=\"pl-2 \">\n {childrenNode.map((child, index) => {\n const isLast = index === childrenNode.length - 1;\n\n return (\n <div key={index} className=\"relative pl-3\">\n <div\n className={`\n absolute left-0 w-px bg-gray-300\n ${isLast ? \"top-0 h-6.5\" : \"top-[-11px] bottom-0\"}\n `}\n />\n {/* <div\n className={`absolute left-0 w-px bg-gray-300 \n ${isLast ? \"top-0 h-6.5\" : \"top-[-11px] bottom-0\"}\n `}\n /> */}\n\n {/* HORIZONTAL CONNECTOR (line → chip row) */}\n <div className=\"absolute left-0 top-6.5 w-3 border-t border-gray-300\" />\n {renderPermissionList(child, level + 1)}\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n };\n\n return (\n <Modal open={isOpen} onClose={handleClose}>\n <Box className=\"fixed inset-0 flex items-start justify-center z-50 bg-opacity-10\">\n <Card\n className=\"\n relative mt-10 shadow-lg flex flex-col rounded-xl\n w-[95vw] max-w-md\n sm:w-[80vw] sm:max-w-lg\n md:w-[60vw] md:max-w-xl\n lg:w-[60vw] lg:max-w-2xl\n xl:w-[30vw] xl:max-w-3xl\n \n \"\n >\n <Grid className=\"flex justify-between items-center p-[5px_10px] border-b border-black\">\n <Typography variant=\"body1\" className=\"font-bold text-customBlue\">\n Permissions\n </Typography>\n <IconButton\n size=\"small\"\n onClick={handleClose}\n data-testid=\"flywayquery-close-button\"\n >\n <FontAwesomeIcon icon={faXmark} />\n </IconButton>\n </Grid>\n <div className=\" max-h-[75vh] overflow-y-auto\">\n {permissions && (\n <div className=\"w-max pl-6 m-3 rounded px-2 py-1 h-fit \">\n {renderPermissionList(permissions)}\n </div>\n )}\n </div>\n </Card>\n </Box>\n </Modal>\n );\n}\n\nPermissionsModal.propTypes = {\n isOpen: PropTypes.bool,\n onClose: PropTypes.func,\n permissions: PropTypes.any,\n featureName: PropTypes.any,\n featureState: PropTypes.any,\n};\n","import {\n Box,\n Checkbox,\n debounce,\n FormControl,\n FormControlLabel,\n // List,\n ListItem,\n TextField,\n Typography,\n} from \"@mui/material\";\nimport Grid from \"@mui/material/Grid2\";\nimport PropTypes from \"prop-types\";\nimport CustomConfirmationModal from \"@/views/custom-components/CustomConfirmationModal\";\nimport React, { useCallback, useEffect, useState, useRef } from \"react\";\nimport { useTheme } from \"@mui/material/styles\";\nimport {\n deleteUserMenuItem,\n getFeatureData,\n getFeatureDataV2,\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 { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n faAngleDown,\n // faEarDeaf,\n faEye,\n faEyeSlash,\n faPen,\n faTrash,\n} from \"@fortawesome/free-solid-svg-icons\";\n// import CustomizedTable from \"@/views/custom-components/CustomizedTable/CustomizedTableV2\";\nimport GrantPermissionModal from \"./GrantPermissionModal\";\nimport AccessPanel from \"./AccessPanel\";\nimport GeneralUtil from \"@/common/services/util/GeneralUtil\";\n\nimport Accordion from \"@mui/material/Accordion\";\nimport AccordionDetails from \"@mui/material/AccordionDetails\";\nimport AccordionSummary from \"@mui/material/AccordionSummary\";\n\nimport { IconButton, Menu, MenuItem, Tooltip } from \"@mui/material\";\nimport PermissionsModal from \"./PermissionsModal\";\nimport { useSelector } from \"react-redux\";\nimport { getUseSkeleton } from \"@/store/reducers/SkeletonReducer\";\n\nfunction RowActionMenu({ config, row }) {\n const [anchorEl, setAnchorEl] = useState(null);\n const openMenu = Boolean(anchorEl);\n\n const handleIconClick = (e) => {\n e.stopPropagation(); // row/accordion click ko rokne ke liye\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 <Box>\n <IconButton\n size=\"small\"\n disableRipple\n sx={{\n \"&:hover\": {\n backgroundColor: \"transparent\",\n },\n }}\n onClick={handleIconClick}\n data-testid={config.dataTestId}\n >\n {config.icon}\n </IconButton>\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 </Box>\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 useSkeleton = useSelector(getUseSkeleton);\n const theme = useTheme();\n const formRef = useRef(null);\n const submitRef = useRef(false);\n const trackEvent = useTrackEvent();\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 { user } = useSelector((state) => state.Authenticate);\n // const featuresObj = user?.features || {};\n const [expandedChildrenByRow, setExpandedChildrenByRow] = useState(null);\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 * `CustomGrid` is a wrapper component that renders its children inside a Material-UI `Grid` item.\n *\n * @param {Object} props - The component props.\n * @param {React.ReactNode} props.children - The elements to be rendered inside the `FormControl`.\n * @returns {JSX.Element} The rendered `CustomGrid` component.\n */\n\n const CustomGrid = ({ children }) => (\n <Grid>\n <FormControl variant=\"outlined\" className=\"flex justify-between\">\n {children}\n </FormControl>\n </Grid>\n );\n\n CustomGrid.propTypes = {\n children: PropTypes.any,\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 * Removes a role from the selected roles list based on its ID.\n * @function deleteRole\n * @param {Object} value - The role object to be deleted.\n * @param {number|string} value.id - The unique identifier of the role.\n * @returns {void}\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 const debouncedFilter = useCallback(\n debounce((searchValue) => {\n if (!searchValue) {\n setFeatureData(initFeatureData);\n } else {\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 }, 500),\n [featureNames, trackEvent],\n );\n\n /**\n * Handles the search input to filter notifications by name.\n * @function handleSearch\n * @param {Object} e - The event object from the input field.\n * @param {string} e.target.value - The current value in the search input field.\n */\n const handleSearch = (e) => {\n const searchValue = e.target.value.toLowerCase();\n setSearch(searchValue);\n debouncedFilter(searchValue);\n };\n\n // /**\n // * Fetches user data based on the input value, with debouncing to limit API calls.\n // * @function fetchUserData\n // * @param {string} value - The search string used to fetch user data.\n // * @returns {void}\n // */\n\n // const fetchUserData = useCallback(\n // (value) => {\n // debouncedFetch(value, setUserData, setSelectedUser);\n // },\n // [debouncedFetch] // Dependency array is empty because we're not directly referencing other state\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 // const findById = () => {\n // const arr = featuresObj[selectedTab];\n // if (Array.isArray(arr)) {\n // if (subMenuGroupName) {\n // const foundedGroup = arr.find((item) => item.name === subMenuGroupName);\n // if (foundedGroup) {\n // const result = foundedGroup.subGroups.find(\n // (item) => item.id === subMenuId\n // );\n // if (result) {\n // return result;\n // }\n // }\n // } else {\n // const result = arr.find((item) => item.id === subMenuId);\n // if (result) {\n // return result;\n // }\n // }\n // }\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 const res = await getFeatureDataV2(subMenuId);\n data = res.data;\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 const { data: fetchedRoles } = await getRoleList();\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 // /**\n // * Effect hook to fetch initial user data when the component mounts.\n // * @function\n // * @name useEffect\n // * @returns {void}\n // */\n\n // useEffect(() => {\n // const fetchUsers = async () => {\n // const { data: users } = await execute({\n // code: \"user_search_for_selectize\",\n // parameters: {\n // searchString: \"\",\n // },\n // });\n\n // setUserData(users?.result);\n // };\n // fetchUsers();\n // }, []);\n\n // const tableColumns = [\n // {\n // label: \"Type\",\n // field: \"\",\n // render: (row) => {\n // return (\n // <ListItem className=\"p-[6px_16px]\">\n // <Typography variant=\"body2\">\n // {row.designationId ? \"Role\" : \"User\"}\n // </Typography>\n // </ListItem>\n // );\n // },\n // },\n // {\n // label: \"Name\",\n // field: \"Name\",\n // render: (row, rowIndex) => {\n // return (\n // <ListItem className=\"p-[6px_16px]\">\n // <Typography variant=\"body2\" key={`${rowIndex}+${row?.id}`}>\n // {row.designationId ? row.roleName : row.fullName}\n // </Typography>\n // </ListItem>\n // );\n // },\n // },\n // {\n // label: \"Features\",\n // field: \"Features\",\n // render: (row) => {\n // return (\n // <List className=\"p-0 m-0\">\n // {featureNames?.length > 0\n // ? Object.keys(JSON.parse(row.featureJson || \"{}\"))?.map(\n // (featureName, index) => {\n // const featureState = JSON.parse(row.featureJson || \"{}\");\n // const displayName =\n // featureNames.find(\n // (feature) => feature.feature_name === featureName\n // )?.display_name || featureName;\n // const isChecked = featureState[featureName] || false;\n // return (\n // <ListItem key={`featureName-${index}`} className=\"p-0\">\n // <FormControlLabel\n // control={\n // <Checkbox\n // checked={isChecked}\n // name={featureName}\n // onClick={() => {\n // const updatedFeatureState = {\n // ...featureState,\n // [featureName]: !isChecked,\n // };\n // setFeatureData((prev) =>\n // prev.map((item) =>\n // item.id === row.id\n // ? {\n // ...item,\n // featureJson:\n // JSON.stringify(updatedFeatureState),\n // }\n // : item\n // )\n // );\n // handleUpdateUserMenuItem({\n // ...row,\n // featureJson:\n // JSON.stringify(updatedFeatureState),\n // code: row.designationId ? \"Role\" : \"User\",\n // menuConfigId: subMenuId,\n // displayName: row.designationId\n // ? row.roleName\n // : row.fullName,\n // });\n // }}\n // />\n // }\n // label={\n // <Typography variant=\"body2\">\n // {displayName}\n // </Typography>\n // }\n // />\n // </ListItem>\n // );\n // }\n // )\n // : Object.keys(JSON.parse(feature || \"{}\")).map((key, index) => {\n // const featureState = JSON.parse(row.featureJson || \"{}\");\n // const isChecked = featureState[key] || false;\n\n // return (\n // <ListItem key={`featureName-${index}`} className=\"p-0\">\n // <FormControlLabel\n // key={`features-${index}`}\n // control={\n // <Checkbox\n // checked={isChecked}\n // name={key}\n // onClick={() => {\n // const updatedFeatureState = {\n // ...featureState,\n // [key]: !isChecked,\n // };\n // setFeatureData((prev) =>\n // prev.map((item) =>\n // item.id === row.id\n // ? {\n // ...item,\n // featureJson:\n // JSON.stringify(updatedFeatureState),\n // }\n // : item\n // )\n // );\n\n // handleUpdateUserMenuItem({\n // ...row,\n // featureJson:\n // JSON.stringify(updatedFeatureState),\n // code: row.designationId ? \"Role\" : \"User\",\n // menuConfigId: subMenuId,\n // displayName: row.designationId\n // ? row.roleName\n // : row.fullName,\n // });\n // }}\n // />\n // }\n // label={<Typography variant=\"caption\">{key}</Typography>}\n // />\n // </ListItem>\n // );\n // })}\n // </List>\n // );\n // },\n // },\n // {\n // label: \"Actions\",\n // field: \"Actions\",\n // },\n // ];\n\n function findPermissionById(permissionList, displayName) {\n for (const perm of permissionList) {\n // match on ID\n if (String(perm.id) === String(displayName)) {\n return perm;\n }\n\n // // if it has children → search inside them\n // if (perm.child && perm.child.length > 0) {\n // const found = findPermissionById(perm.child, displayName);\n // if (found) return found;\n // }\n }\n\n return null; // not found\n }\n\n // const actions = [\n // {\n // label: \"\",\n // icon: <FontAwesomeIcon icon={faTrash} />,\n // onClick: (row) => {\n // setOpen(true);\n // setDeletedId(row.id);\n // setSelectedRow(row);\n // },\n // dataTestId: \"accessrights-delete-icon\",\n // },\n // {\n // label: \"\",\n // icon: <FontAwesomeIcon icon={faPen} />,\n // dataTestId: \"accessrights-edit-icon\",\n // menuClick: (row) => {\n // // handleClick(e);\n // setAllData(() => {\n // return {\n // ...row,\n // code: row.designationId ? \"Role\" : \"User\",\n // menuConfigId: subMenuId,\n // displayName: row.designationId ? row.roleName : row.fullName,\n // };\n // });\n // },\n // menuItems: [\n // {\n // label: \"Check All\",\n // onClick: (row) => {\n // if (isNewApi) {\n // handleCheckAllAndNone({ ...row, checkAll: true });\n // } else {\n // let keys = JSON.parse(feature);\n // const featureJson =\n // featureNames?.length > 0\n // ? featureNames.reduce((acc, { feature_name }) => {\n // acc[feature_name] = true;\n // return acc;\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 // ? { ...item, featureJson: JSON.stringify(featureJson) }\n // : item\n // )\n // );\n // handleUpdateUserMenuItem({\n // ...allData,\n // featureJson: JSON.stringify(featureJson),\n // });\n // }\n // },\n // },\n // ],\n // },\n // ];\n\n const [expanded, setExpanded] = useState(false);\n\n const handleChange = (panel) => (event, isExpanded) => {\n // setExpandedChildrenByRow(null);\n setExpanded(isExpanded ? panel : false);\n };\n\n return (\n <>\n {(isLoading || parentLoading) && useSkeleton ? (\n <div className=\"w-full flex flex-wrap\">\n <div className=\"w-full flex flex-col px-2\">\n <div className=\"bg-gray-300 animate-pulse rounded-sm h-[70px] mb-2\"></div>\n\n <div className=\"bg-gray-300 animate-pulse rounded-sm h-[280px] mb-2\"></div>\n </div>\n </div>\n ) : (\n <Grid container sx={{ borderTop: `1px solid ${theme.palette.divider}` }}>\n <CustomConfirmationModal\n description={\"Are you sure , Do you want to delete this ?\"}\n title={\"CONFIRM ACTION\"}\n open={open && deletedId === selectedRow?.id}\n handleClick={handleDelete}\n handleClose={() => setOpen((cur) => !cur)}\n dataTestId=\"accessrights-delete-modal\"\n />\n <PermissionsModal\n isOpen={openPermissionModal && expandedChildrenByRow}\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 <GrantPermissionModal\n isOpen={isOpen === 1}\n onClose={() => setIsOpen(0)}\n pendingGrant={pendingGrant}\n subMenuId={subMenuId}\n newApiData={newApiData}\n />\n }\n <form\n ref={formRef}\n onSubmit={handleSubmit(onSubmit)}\n className=\"w-full\"\n >\n <Grid\n container\n className=\"flex flex-col md:flex-row items-center justify-between p-2 w-full\"\n spacing={1}\n >\n <Grid className=\"flex-1 flex space-x-10 items-center justify-between\">\n <Typography variant=\"body2\">{translate(\"Search\")}</Typography>\n <Box>\n <TextField\n id=\"searchQuery\"\n placeholder=\"Search Text\"\n size=\"small\"\n onChange={handleSearch}\n value={search}\n data-testid=\"access-rights-textfield-search\"\n sx={{\n \"& .MuiInputBase-root\": {\n height: \"2.6em\",\n },\n }}\n />\n </Box>\n </Grid>\n {GeneralUtil.hasCheckRights(rights?.['update.manage.featurelist']) && (\n <Grid className=\"flex-3 flex space-x-10 items-center justify-between w-full\">\n <AccessPanel\n translate={translate}\n onSubmit={onSubmit}\n roleList={roleData}\n featureData={featureData}\n // addRole={addRole}\n // selectedRole={selectedRole}\n />\n </Grid>\n )}\n </Grid>\n </form>\n {/* <CustomizedTable\n tableData={featureData}\n columns={tableColumns}\n actions={actions}\n styleConfig={{ tableStyle: { maxHeight: 150 } }}\n paginationConfig={{ pagination: false }}\n /> */}\n <div style={{ width: \"100%\" }}>\n {featureData.map((row) => {\n return (\n <>\n <Accordion\n \n expanded={expanded === `panel${row?.id}`}\n onChange={handleChange(`panel${row?.id}`)}\n >\n <AccordionSummary\n expandIcon={<FontAwesomeIcon icon={faAngleDown} />}\n aria-controls=\"panel1bh-content\"\n id=\"panel1bh-header\"\n >\n <Typography\n component=\"span\"\n sx={{ width: \"33%\", flexShrink: 0 }}\n >\n {row.code}\n </Typography>\n\n <Typography\n component=\"span\"\n sx={{ color: \"text.secondary\" }}\n >\n {row.displayName}\n </Typography>\n <div className=\"ml-auto mr-4 flex items-center space-x-3\">\n {GeneralUtil.hasCheckRights(rights?.['delete.manage.featurelist']) && (\n <FontAwesomeIcon\n icon={faTrash}\n style={{\n cursor: \"pointer\",\n color: theme.palette.error.main,\n fontSize: \"16px\",\n marginTop: \"0.5rem\",\n }}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n setOpen(true);\n setDeletedId(row.id);\n setSelectedRow(row);\n }}\n />\n )}\n {GeneralUtil.hasCheckRights(rights?.['update.manage.featurelist']) && (\n <RowActionMenu\n config={{\n label: \"\",\n icon: (\n <FontAwesomeIcon\n style={{\n cursor: \"pointer\",\n // color: theme.palette.error.main,\n fontSize: \"16px\",\n marginTop: \"0.5rem\",\n }}\n icon={faPen}\n />\n ),\n dataTestId: \"accessrights-edit-icon\",\n menuClick: (row) => {\n // handleClick(e);\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(\n (acc, key) => {\n acc[key] = true;\n return acc;\n },\n {},\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 </div>\n </AccordionSummary>\n <AccordionDetails>\n <div className=\"overflow-x-auto\">\n <div className=\"flex gap-6 w-max\">\n <div className={\"grid grid-cols-3 w-max p-0 m-0\"}>\n {featureNames.length <= 0 &&\n Object.keys(JSON.parse(feature || \"{}\")).length <=\n 0 && (\n <div className=\"text-gray-500 px-4 italic\">\n No Data to Display\n </div>\n )}\n {featureNames?.length > 0\n ? Object.keys(\n JSON.parse(row.featureJson || \"{}\"),\n ).map((featureName, index) => {\n const featureState = JSON.parse(\n row.featureJson || \"{}\",\n );\n const displayName =\n featureNames.find(\n (feature) =>\n feature.feature_name === featureName,\n )?.display_name || featureName;\n const isChecked =\n featureState[featureName] || false;\n\n const permObj = findPermissionById(\n permissionList,\n displayName,\n );\n\n const hasChildren =\n (permObj?.child?.length || 0) > 0;\n\n return (\n <ListItem\n key={`featureName-${index}`}\n className=\"p-0 flex \"\n >\n <FormControlLabel\n control={\n <Checkbox\n disabled={(!GeneralUtil.hasCheckRights(rights?.['update.manage.featurelist'])) || featureName === getBasicRightId()}\n checked={isChecked}\n name={featureName}\n onClick={() => {\n const updatedFeatureState = {\n ...featureState,\n [featureName]: !isChecked,\n };\n setFeatureData((prev) =>\n prev.map((item) =>\n item.id === row.id\n ? {\n ...item,\n featureJson:\n JSON.stringify(\n updatedFeatureState,\n ),\n }\n : item,\n ),\n );\n handleUpdateUserMenuItem({\n ...row,\n featureJson:\n JSON.stringify(\n updatedFeatureState,\n ),\n code: row.designationId\n ? \"Role\"\n : \"User\",\n menuConfigId: subMenuId,\n displayName: row.designationId\n ? row.roleName\n : row.fullName,\n });\n }}\n />\n }\n label={\n <Typography variant=\"body2\">\n {(() => {\n const perm = findPermissionById(\n permissionList,\n displayName,\n );\n return perm\n ? perm.name\n : displayName;\n })()}\n </Typography>\n }\n />\n {hasChildren && (\n <div\n onClick={() => {\n if (\n expandedChildrenByRow?.id ===\n permObj?.id\n ) {\n setExpandedChildrenByRow(null);\n setOpenPermissionModal(false);\n setSelectedFeatureName(\"\");\n setSelectedFeatureState([]);\n return;\n }\n setSelectedFeatureName(featureName);\n setSelectedFeatureState(\n featureState,\n );\n\n setOpenPermissionModal(true);\n setExpandedChildrenByRow(permObj);\n }}\n className=\"cursor-pointer text-gray-600 transition-transform duration-200 hover:scale-[1.2] py-1 pr-3\"\n >\n {expandedChildrenByRow?.id ===\n permObj?.id ? (\n <Tooltip title=\"Close Permissions\">\n <FontAwesomeIcon\n color=\"primary\"\n icon={faEyeSlash}\n />\n </Tooltip>\n ) : (\n <Tooltip title=\"View Permissions\">\n <FontAwesomeIcon\n className=\" text-[var(--color-primary)] \"\n color=\"primary\"\n icon={faEye}\n />\n </Tooltip>\n )}\n </div>\n )}\n </ListItem>\n );\n })\n : Object.keys(JSON.parse(feature || \"{}\")).map(\n (key, index) => {\n const featureState = JSON.parse(\n row.featureJson || \"{}\",\n );\n const isChecked =\n featureState[key] || false;\n const permObj = findPermissionById(\n permissionList,\n key,\n );\n\n const hasChildren =\n (permObj?.child?.length || 0) > 0;\n\n return (\n <ListItem\n key={`featureName-${index}`}\n className=\"p-0\"\n >\n <FormControlLabel\n control={\n <Checkbox\n disabled={(!GeneralUtil.hasCheckRights(rights?.['update.manage.featurelist'])) || key === getBasicRightId()}\n checked={isChecked}\n name={key}\n onClick={() => {\n const updatedFeatureState = {\n ...featureState,\n [key]: !isChecked,\n };\n setFeatureData((prev) =>\n prev.map((item) =>\n item.id === row.id\n ? {\n ...item,\n featureJson:\n JSON.stringify(\n updatedFeatureState,\n ),\n }\n : item,\n ),\n );\n handleUpdateUserMenuItem({\n ...row,\n featureJson:\n JSON.stringify(\n updatedFeatureState,\n ),\n code: row.designationId\n ? \"Role\"\n : \"User\",\n menuConfigId: subMenuId,\n displayName: row.designationId\n ? row.roleName\n : row.fullName,\n });\n }}\n />\n }\n // label={\n // <Typography variant=\"caption\">\n // {key}\n // </Typography>\n // }\n // />\n label={\n <Typography variant=\"body2\">\n {(() => {\n const perm = findPermissionById(\n permissionList,\n key,\n );\n return perm ? perm.name : key;\n })()}\n </Typography>\n }\n />\n {hasChildren && (\n <div\n onClick={() => {\n if (\n expandedChildrenByRow?.id ===\n permObj?.id\n ) {\n setExpandedChildrenByRow(null);\n return;\n }\n setExpandedChildrenByRow(permObj);\n }}\n className=\"cursor-pointer text-slate-500 dark:text-slate-400 transition-transform duration-200 hover:scale-[1.2] py-1 pr-3\"\n >\n {expandedChildrenByRow?.id ===\n permObj?.id ? (\n <FontAwesomeIcon\n color=\"primary\"\n icon={faEyeSlash}\n />\n ) : (\n <FontAwesomeIcon\n className=\" text-[var(--color-primary)] \"\n color=\"primary\"\n icon={faEye}\n />\n )}\n </div>\n )}\n </ListItem>\n );\n },\n )}\n </div>\n </div>\n </div>\n </AccordionDetails>\n </Accordion>\n </>\n );\n })}\n </div>\n </Grid>\n )}\n </>\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":["schema","Yup","value","startDate","noEndDate","GrantPermissionModal","isOpen","onClose","pendingGrant","subMenuId","newApiData","translate","useTranslateProvider","handleSubmit","control","reset","watch","errors","trigger","useForm","yupResolver","noStartDate","endDate","handleFormSubmit","values","execute","showToast","val","getFeatureDataV2","error","_b","_a","handleClose","jsx","Modal","Box","Card","jsxs","Grid","Typography","IconButton","FontAwesomeIcon","faXmark","CustomCheckBox","CustomDatePicker","Button","PropTypes","AccessPanel","onSubmit","roleList","featureData","search","setSearch","useState","debouncedSearch","setDebouncedSearch","userList","setUserList","newRoleList","role","item","useEffect","handler","userListFetch","query","currentFeatureData","userData","newArray","user","Controller","onChange","ref","Autocomplete","option","event","newValue","reason","newInputValue","props","label","searchTerm","index","createElement","beforeMatch","match","afterMatch","params","TextField","CustomAutocomplete","data","PermissionsModal","permissions","featureState","featureName","isChecked","renderPermissionList","node","level","childrenNode","faCheck","faArrowRight","child","isLast","RowActionMenu","config","row","anchorEl","setAnchorEl","openMenu","handleIconClick","e","handleItemClick","Menu","MenuItem","AccessRights","subMenuFeatureVal","parentLoading","onNewAPIChange","rights","useSkeleton","useSelector","getUseSkeleton","theme","useTheme","formRef","useRef","submitRef","trackEvent","useTrackEvent","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","setPendingGrant","permissionList","setPermissionList","setIsOpen","selectedFeatureName","setSelectedFeatureName","selectedFeatureState","setSelectedFeatureState","expandedChildrenByRow","setExpandedChildrenByRow","getBasicRightId","views","reportUuidView","threeSegment","form","sortData","sortedData","b","editUserMenuItem","right","extendFeatureJson","handleDelete","cur","response","id","deleteUserMenuItem","getFeatureData","diffPermissions","featureJson","assignedIds","p","handleUpdateUserMenuItem","missing","_c","_d","updateUserMenuItem","_f","_e","handleCheckAllAndNone","falseKeys","key","formVal","selectedRoleIds","isUserDuplicate","isRoleDuplicate","ids","reportPermissionId","postMenuItem","featureList","features","debouncedFilter","useCallback","debounce","searchValue","filteredData","handleSearch","defaultJson","assignedJson","newJson","buildPermissionMap","allPermissions","userPermissions","userPermissionIds","result","permission","setExpanded","allRoles","fetchedRoles","getRoleList","featuresRes","filteredRoles","roleType","findPermissionById","displayName","perm","expanded","handleChange","panel","isExpanded","Fragment","CustomConfirmationModal","GeneralUtil","Accordion","AccordionSummary","faAngleDown","faTrash","faPen","keys","acc","feature_name","prev","AccordionDetails","permObj","hasChildren","ListItem","FormControlLabel","Checkbox","updatedFeatureState","Tooltip","faEyeSlash","faEye"],"mappings":"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"}
@@ -1,313 +0,0 @@
1
- import { jsx as r, jsxs as l } from "react/jsx-runtime";
2
- import { useTranslateProvider as M } from "@/common/languageTranslator/TranslationContext";
3
- import { s as N } from "./QueryBuilder-z7eqfd7D.js";
4
- import d from "@/common/config/implementationConfig";
5
- import { showToast as C } from "@/common/toaster/toaster";
6
- import _ from "@/hooks/useTrackEvent";
7
- import z from "@/views/custom-components/CustomTextArea";
8
- import j from "@/views/custom-components/CustomTextField";
9
- import { yupResolver as A } from "@hookform/resolvers/yup";
10
- import { Drawer as D, Box as Q, Typography as q, FormControlLabel as u, Checkbox as n, Button as S } from "@mui/material";
11
- import s from "@mui/material/Grid2";
12
- import c from "prop-types";
13
- import { useRef as F, useEffect as B } from "react";
14
- import { useForm as O, Controller as m } from "react-hook-form";
15
- import * as p from "yup";
16
- import './AddEditQueryBuilder.css';const U = p.object().shape({
17
- code: p.string().required("Enter code").trim().lowercase(),
18
- description: p.string().required("Enter Description").trim().lowercase(),
19
- query: p.string().required("Enter query").trim().lowercase()
20
- });
21
- function G({
22
- isEditMode: o,
23
- open: b,
24
- close: I,
25
- editRow: a,
26
- loadInitialState: V
27
- }) {
28
- const g = F(null), k = F(!1), { translate: t } = M(), {
29
- control: i,
30
- handleSubmit: E,
31
- setValue: y,
32
- getValues: P,
33
- formState: { errors: f },
34
- reset: v
35
- } = O({
36
- resolver: A(U),
37
- mode: "onChange",
38
- defaultValues: {
39
- code: "",
40
- description: "",
41
- query: "",
42
- returnsResultSet: !1,
43
- isPublic: !1,
44
- isMobileQuery: !1,
45
- isClickhouseQuery: !1,
46
- ...d.queryBuilder.showIsCachedField && { isCached: d.queryBuilder.defaultIsCached }
47
- }
48
- }), T = _(), h = () => {
49
- T("conversion_event", {
50
- form: g.current,
51
- form_name: "Add/Edit Query Builder",
52
- submit: k.current
53
- }), I();
54
- }, w = async () => {
55
- try {
56
- const e = P();
57
- T("button_click", {
58
- button_name: o && a ? "querybuilder-update-button" : "querybuilder-add-button",
59
- button_type: "submit",
60
- button_id: "addeditquerybuilder-save-button"
61
- }), o && a ? (a.query = e.query, a.code = e.code, a.description = e.description, a.returnsResultSet = e.returnsResultSet, a.isPublic = e.isPublic, a.isMobileQuery = e.isMobileQuery, a.isClickhouseQuery = e.isClickhouseQuery, d.queryBuilder.showIsCachedField && (a.isCached = e.isCached), await N(a), C({ message: "Query Updated SuccessFully", type: "success" })) : (await N(e), C({ message: "Query Created SuccessFully", type: "success" })), k.current = !0, h(), await V();
62
- } catch (e) {
63
- C({
64
- message: `${e.status === 400 ? "This code is already registered. Please enter a different code" : "Error in Query Generation"}`,
65
- type: "error"
66
- });
67
- }
68
- };
69
- return B(() => {
70
- o && Object.keys(a).forEach((e) => y(e, a == null ? void 0 : a[e]));
71
- }, [o, a, y]), B(() => {
72
- b || v();
73
- }, [b, v]), /* @__PURE__ */ r(
74
- D,
75
- {
76
- anchor: "right",
77
- open: b,
78
- onClose: h,
79
- className: "z-[1300]",
80
- "data-testid": "addEdit-queryBuilder",
81
- children: /* @__PURE__ */ l(s, { container: !0, className: "w-full md:w-[650px] max-w-full", ref: g, children: [
82
- /* @__PURE__ */ r(Q, { className: "p-2.5 px-5 flex border-b w-full", children: /* @__PURE__ */ l(s, { className: "font-medium text-lg w-full text-customBlue", children: [
83
- t(o ? "Edit Configured" : "Configure New"),
84
- " ",
85
- t("Query")
86
- ] }) }),
87
- /* @__PURE__ */ l(s, { className: "p-3 grow", children: [
88
- /* @__PURE__ */ l(s, { size: { xs: 12 }, className: "pb-2", children: [
89
- /* @__PURE__ */ l(q, { variant: "caption", className: "pl-0", children: [
90
- t("Code"),
91
- /* @__PURE__ */ r("span", { className: "text-red-500 ml-1", children: "*" })
92
- ] }),
93
- /* @__PURE__ */ r(
94
- j,
95
- {
96
- control: i,
97
- id: "code",
98
- name: "code",
99
- errors: f,
100
- className: "m-0",
101
- label: "",
102
- size: "small",
103
- onBlur: (e) => {
104
- const x = e.target.value;
105
- if (x) {
106
- const L = o ? x.trim() : x.trim().toUpperCase();
107
- y("code", L);
108
- }
109
- },
110
- dataTestId: "addeditquerybuilder-code-textfield"
111
- }
112
- )
113
- ] }),
114
- /* @__PURE__ */ l(s, { size: { xs: 12 }, className: "pb-2", children: [
115
- /* @__PURE__ */ l(
116
- q,
117
- {
118
- variant: "caption",
119
- className: "p-3 pl-0",
120
- "data-testid": "addeditquerybuilder-description-label",
121
- children: [
122
- t("Description"),
123
- /* @__PURE__ */ r("span", { className: "text-red-500 ml-1", children: "*" })
124
- ]
125
- }
126
- ),
127
- /* @__PURE__ */ r(
128
- z,
129
- {
130
- control: i,
131
- minRows: 1,
132
- id: "description",
133
- name: "description",
134
- errors: f,
135
- className: "pl-2.5 pt-2.5",
136
- "data-testid": "addeditquerybuilder-description-textarea"
137
- }
138
- )
139
- ] }),
140
- /* @__PURE__ */ l(s, { size: { xs: 12 }, className: "pb-2", children: [
141
- /* @__PURE__ */ l(q, { variant: "caption", className: "p-3 pl-0", children: [
142
- t("Query"),
143
- /* @__PURE__ */ r("span", { className: "text-red-500 ml-1", children: "*" })
144
- ] }),
145
- /* @__PURE__ */ r(
146
- z,
147
- {
148
- control: i,
149
- minRows: 5,
150
- id: "query",
151
- name: "query",
152
- errors: f,
153
- "data-testid": "addeditquerybuilder-query-textarea"
154
- }
155
- )
156
- ] }),
157
- d.queryBuilder.showIsCachedField && /* @__PURE__ */ r(s, { size: { xs: 12 }, children: /* @__PURE__ */ r(
158
- m,
159
- {
160
- name: "isCached",
161
- control: i,
162
- defaultValue: !1,
163
- render: ({ field: e }) => /* @__PURE__ */ r(
164
- u,
165
- {
166
- control: /* @__PURE__ */ r(n, { ...e, checked: e.value }),
167
- label: t("Is Cached"),
168
- sx: {
169
- "& .MuiFormControlLabel-label": {
170
- fontSize: "14px"
171
- },
172
- marginTop: 0,
173
- paddingTop: 0
174
- },
175
- "data-testid": "addeditquerybuilder-is-cached-checkbox"
176
- }
177
- )
178
- }
179
- ) }),
180
- /* @__PURE__ */ r(s, { size: { xs: 12 }, children: /* @__PURE__ */ r(
181
- m,
182
- {
183
- name: "returnsResultSet",
184
- control: i,
185
- defaultValue: !1,
186
- render: ({ field: e }) => /* @__PURE__ */ r(
187
- u,
188
- {
189
- control: /* @__PURE__ */ r(n, { ...e, checked: e.value }),
190
- label: t("Returns Result Set"),
191
- sx: {
192
- "& .MuiFormControlLabel-label": {
193
- fontSize: "14px"
194
- },
195
- marginTop: 0,
196
- paddingTop: 0
197
- },
198
- "data-testid": "addeditquerybuilder-returns-result-set-checkbox"
199
- }
200
- )
201
- }
202
- ) }),
203
- /* @__PURE__ */ r(s, { size: { xs: 12 }, children: /* @__PURE__ */ r(
204
- m,
205
- {
206
- name: "isPublic",
207
- control: i,
208
- defaultValue: !1,
209
- render: ({ field: e }) => /* @__PURE__ */ r(
210
- u,
211
- {
212
- control: /* @__PURE__ */ r(n, { ...e, checked: e.value }),
213
- label: t("Is Public"),
214
- sx: {
215
- "& .MuiFormControlLabel-label": {
216
- fontSize: "14px"
217
- },
218
- marginTop: 0,
219
- paddingTop: 0
220
- },
221
- "data-testid": "addeditquerybuilder-is-public-checkbox"
222
- }
223
- )
224
- }
225
- ) }),
226
- /* @__PURE__ */ r(s, { size: { xs: 12 }, children: /* @__PURE__ */ r(
227
- m,
228
- {
229
- name: "isMobileQuery",
230
- control: i,
231
- defaultValue: !1,
232
- render: ({ field: e }) => /* @__PURE__ */ r(
233
- u,
234
- {
235
- control: /* @__PURE__ */ r(n, { ...e, checked: e.value }),
236
- label: t("Is Mobile Query"),
237
- sx: {
238
- "& .MuiFormControlLabel-label": {
239
- fontSize: "14px"
240
- },
241
- marginTop: 0,
242
- paddingTop: 0
243
- },
244
- "data-testid": "addeditquerybuilder-is-mobilequery-checkbox"
245
- }
246
- )
247
- }
248
- ) }),
249
- d.queryBuilder.showClickhouseOption && /* @__PURE__ */ r(s, { size: { xs: 12 }, children: /* @__PURE__ */ r(
250
- m,
251
- {
252
- name: "isClickhouseQuery",
253
- control: i,
254
- defaultValue: !1,
255
- render: ({ field: e }) => /* @__PURE__ */ r(
256
- u,
257
- {
258
- control: /* @__PURE__ */ r(n, { ...e, checked: e.value }),
259
- label: t("Is Clickhouse Query"),
260
- sx: {
261
- "& .MuiFormControlLabel-label": {
262
- fontSize: "14px"
263
- },
264
- marginTop: 0,
265
- paddingTop: 0
266
- },
267
- "data-testid": "addeditquerybuilder-is-clickhousequery-checkbox"
268
- }
269
- )
270
- }
271
- ) })
272
- ] }),
273
- /* @__PURE__ */ l(Q, { className: "p-3 w-full flex justify-end", children: [
274
- /* @__PURE__ */ r(
275
- S,
276
- {
277
- size: "small",
278
- variant: "contained",
279
- color: "secondary",
280
- onClick: h,
281
- "data-testid": "addeditquerybuilder-close-button",
282
- children: t("Cancel")
283
- }
284
- ),
285
- /* @__PURE__ */ r(
286
- S,
287
- {
288
- variant: "contained",
289
- size: "small",
290
- color: "primary",
291
- type: "submit",
292
- onClick: E(w),
293
- className: "ml-2.5",
294
- "data-testid": "addeditquerybuilder-save-button",
295
- children: t("Save")
296
- }
297
- )
298
- ] })
299
- ] })
300
- }
301
- );
302
- }
303
- G.propTypes = {
304
- isEditMode: c.any,
305
- open: c.any,
306
- close: c.any,
307
- editRow: c.any,
308
- loadInitialState: c.any
309
- };
310
- export {
311
- G as default
312
- };
313
- //# sourceMappingURL=AddEditQueryBuilder-Brdnm6rQ.js.map