@argusoft/medplat-core 1.0.29 → 1.0.31

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 (217) hide show
  1. package/dist/AccessRights-DUgY6ewy.js +1031 -0
  2. package/dist/AccessRights-DUgY6ewy.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-v3TmGQee.js → AddFeatures-D1sU8RjY.js} +2 -2
  6. package/dist/{AddFeatures-v3TmGQee.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-c6ZKiN0i.js +8898 -0
  10. package/dist/AddMenuConfiguration-c6ZKiN0i.js.map +1 -0
  11. package/dist/AppModal-CCtrQ5Tr.js +394 -0
  12. package/dist/AppModal-CCtrQ5Tr.js.map +1 -0
  13. package/dist/BrandsPage-DMw2vT0u-BVhvhc6J.js +387 -0
  14. package/dist/BrandsPage-DMw2vT0u-BVhvhc6J.js.map +1 -0
  15. package/dist/CategoriesPage-D3ihx9Gi-CT58g0ry.js +398 -0
  16. package/dist/CategoriesPage-D3ihx9Gi-CT58g0ry.js.map +1 -0
  17. package/dist/{ChangePasswordModalCore-DutQAZOx.js → ChangePasswordModalCore-lQ9GamH1.js} +1605 -1610
  18. package/dist/ChangePasswordModalCore-lQ9GamH1.js.map +1 -0
  19. package/dist/ConditionConfig-BQBmBHaM.js +408 -0
  20. package/dist/ConditionConfig-BQBmBHaM.js.map +1 -0
  21. package/dist/DashboardPage-asr2XDRu-uOOlX9Vq.js +435 -0
  22. package/dist/DashboardPage-asr2XDRu-uOOlX9Vq.js.map +1 -0
  23. package/dist/EventConfig-BY2cgGyx.js +27 -0
  24. package/dist/EventConfig-BY2cgGyx.js.map +1 -0
  25. package/dist/EventConfigurations-CUPEN5BV.js +544 -0
  26. package/dist/EventConfigurations-CUPEN5BV.js.map +1 -0
  27. package/dist/EventConfigurations.css +1 -1
  28. package/dist/EventsExceptionModal-BX-ArkBE.js +188 -0
  29. package/dist/EventsExceptionModal-BX-ArkBE.js.map +1 -0
  30. package/dist/EventsUi-D6O9S7BK.js +258 -0
  31. package/dist/EventsUi-D6O9S7BK.js.map +1 -0
  32. package/dist/FacilityPicker-DYl_PDyt-Cbwo2tAY.js +79 -0
  33. package/dist/FacilityPicker-DYl_PDyt-Cbwo2tAY.js.map +1 -0
  34. package/dist/FeatureMenu-CHsBbw3W.js +525 -0
  35. package/dist/FeatureMenu-CHsBbw3W.js.map +1 -0
  36. package/dist/{FhirServerList-Dkq7Kbes.js → FhirServerList-iXBPkRVF.js} +22 -22
  37. package/dist/{FhirServerList-Dkq7Kbes.js.map → FhirServerList-iXBPkRVF.js.map} +1 -1
  38. package/dist/{FhirServerWizard-Db6Hm4bQ.js → FhirServerWizard-DZI8Olku.js} +15 -15
  39. package/dist/{FhirServerWizard-Db6Hm4bQ.js.map → FhirServerWizard-DZI8Olku.js.map} +1 -1
  40. package/dist/FlywayQuery-CQygj51V.js +179 -0
  41. package/dist/FlywayQuery-CQygj51V.js.map +1 -0
  42. package/dist/GrantPermissionModal-D7iNZd0M.js +239 -0
  43. package/dist/GrantPermissionModal-D7iNZd0M.js.map +1 -0
  44. package/dist/ImmunizationConfigurationBase-aUtx0JEe.js +8019 -0
  45. package/dist/ImmunizationConfigurationBase-aUtx0JEe.js.map +1 -0
  46. package/dist/ImmunizationConfigurationBase.css +1 -1
  47. package/dist/ImmunizationConfigurationsList-TZcLDEci.js +369 -0
  48. package/dist/ImmunizationConfigurationsList-TZcLDEci.js.map +1 -0
  49. package/dist/InventoryPage-DOotGZrj-CoPjOJEI.js +665 -0
  50. package/dist/InventoryPage-DOotGZrj-CoPjOJEI.js.map +1 -0
  51. package/dist/LanguagesModal-B3NTebYT.js +352 -0
  52. package/dist/LanguagesModal-B3NTebYT.js.map +1 -0
  53. package/dist/ManageDynamicFeature-BU0I45dd.js +4475 -0
  54. package/dist/ManageDynamicFeature-BU0I45dd.js.map +1 -0
  55. package/dist/ManageEventConfiguration-DqW3krT6.js +1216 -0
  56. package/dist/ManageEventConfiguration-DqW3krT6.js.map +1 -0
  57. package/dist/ManageEventConfiguration.css +1 -1
  58. package/dist/{ManageNotification-CfhHlfxA.js → ManageNotification-C5MhV77Q.js} +2 -2
  59. package/dist/{ManageNotification-CfhHlfxA.js.map → ManageNotification-C5MhV77Q.js.map} +1 -1
  60. package/dist/{ManageRole-4Y2PP4dQ.js → ManageRole-CNZBRKGU.js} +2 -2
  61. package/dist/{ManageRole-4Y2PP4dQ.js.map → ManageRole-CNZBRKGU.js.map} +1 -1
  62. package/dist/ManageTranslation-vRiptUAP.js +833 -0
  63. package/dist/ManageTranslation-vRiptUAP.js.map +1 -0
  64. package/dist/ManageTranslation.css +1 -1
  65. package/dist/{ManageUser-DDzyd9jm.js → ManageUser-DZltBina.js} +224 -224
  66. package/dist/{ManageUser-DDzyd9jm.js.map → ManageUser-DZltBina.js.map} +1 -1
  67. package/dist/MemberProfileCard-D5CgkTdJ-D2NgDJl3.js +272 -0
  68. package/dist/MemberProfileCard-D5CgkTdJ-D2NgDJl3.js.map +1 -0
  69. package/dist/MobileAnalytics-BLOionG_.js +17301 -0
  70. package/dist/MobileAnalytics-BLOionG_.js.map +1 -0
  71. package/dist/MobileMenuManagement-68Wijb0X.js +220 -0
  72. package/dist/MobileMenuManagement-68Wijb0X.js.map +1 -0
  73. package/dist/MobileTypeEventConfigModal-CMcj7Ozp.js +752 -0
  74. package/dist/MobileTypeEventConfigModal-CMcj7Ozp.js.map +1 -0
  75. package/dist/NotificationFlywayQuery-BAHVjf6N.js +247 -0
  76. package/dist/NotificationFlywayQuery-BAHVjf6N.js.map +1 -0
  77. package/dist/{NotificationList-BMFpNUJG.js → NotificationList-DEyRZEuM.js} +2 -2
  78. package/dist/{NotificationList-BMFpNUJG.js.map → NotificationList-DEyRZEuM.js.map} +1 -1
  79. package/dist/OtherTypeEventConfigModal-stNmuSv_.js +1812 -0
  80. package/dist/OtherTypeEventConfigModal-stNmuSv_.js.map +1 -0
  81. package/dist/PaymentCreatePage-DfvSZ-kB-CckogYoe.js +482 -0
  82. package/dist/PaymentCreatePage-DfvSZ-kB-CckogYoe.js.map +1 -0
  83. package/dist/PaymentsPage-DMNjYWAJ-ChO9IXmk.js +157 -0
  84. package/dist/PaymentsPage-DMNjYWAJ-ChO9IXmk.js.map +1 -0
  85. package/dist/PermissionsModal-CCYkcKlC.js +151 -0
  86. package/dist/PermissionsModal-CCYkcKlC.js.map +1 -0
  87. package/dist/PickupBatchLinesEditor-CE2RuyJT-BPceiJr8.js +119 -0
  88. package/dist/PickupBatchLinesEditor-CE2RuyJT-BPceiJr8.js.map +1 -0
  89. package/dist/PickupCreatePage-B4O_-vE5-DoOo9nJO.js +783 -0
  90. package/dist/PickupCreatePage-B4O_-vE5-DoOo9nJO.js.map +1 -0
  91. package/dist/PickupsPage-D7zyioJB-bHKnARYw.js +818 -0
  92. package/dist/PickupsPage-D7zyioJB-bHKnARYw.js.map +1 -0
  93. package/dist/PmGuard-BZE-y4In-D_pUm5MP.js +599 -0
  94. package/dist/PmGuard-BZE-y4In-D_pUm5MP.js.map +1 -0
  95. package/dist/ProductEditPage-BVlVUCtD-BR-tJ5Wb.js +1305 -0
  96. package/dist/ProductEditPage-BVlVUCtD-BR-tJ5Wb.js.map +1 -0
  97. package/dist/ProductsPage-DvNHIeZt-BoOOJJtk.js +253 -0
  98. package/dist/ProductsPage-DvNHIeZt-BoOOJJtk.js.map +1 -0
  99. package/dist/PurchaseCreatePage-Cq_i9snz-DRtHHFWw.js +675 -0
  100. package/dist/PurchaseCreatePage-Cq_i9snz-DRtHHFWw.js.map +1 -0
  101. package/dist/PurchaseRequestDetailPage-CA9KFOfE-CtjG4Gx6.js +1577 -0
  102. package/dist/PurchaseRequestDetailPage-CA9KFOfE-CtjG4Gx6.js.map +1 -0
  103. package/dist/PurchaseRequestsPage-DS9i4o0--TpoxA5Kd.js +279 -0
  104. package/dist/PurchaseRequestsPage-DS9i4o0--TpoxA5Kd.js.map +1 -0
  105. package/dist/PurchasesPage-DgL5T6BY-DePUuE9l.js +293 -0
  106. package/dist/PurchasesPage-DgL5T6BY-DePUuE9l.js.map +1 -0
  107. package/dist/QueryBuilder-CXaBe6sr.js +478 -0
  108. package/dist/QueryBuilder-CXaBe6sr.js.map +1 -0
  109. package/dist/{RoleManagement-DEiBNfT8.js → RoleManagement-s8iNx2Mu.js} +145 -155
  110. package/dist/RoleManagement-s8iNx2Mu.js.map +1 -0
  111. package/dist/Roles-BIyiic67.js +14 -0
  112. package/dist/Roles-BIyiic67.js.map +1 -0
  113. package/dist/SaleCreatePage-CZnIOydv-DKBw-qp7.js +544 -0
  114. package/dist/SaleCreatePage-CZnIOydv-DKBw-qp7.js.map +1 -0
  115. package/dist/SalesPage-DPIRrC_O-M8rqnK7z.js +315 -0
  116. package/dist/SalesPage-DPIRrC_O-M8rqnK7z.js.map +1 -0
  117. package/dist/SettingsPage-BC_R6Z-Q-CKNt9zRu.js +676 -0
  118. package/dist/SettingsPage-BC_R6Z-Q-CKNt9zRu.js.map +1 -0
  119. package/dist/ShowFlywayQuery-D10Olk5Z.js +154 -0
  120. package/dist/ShowFlywayQuery-D10Olk5Z.js.map +1 -0
  121. package/dist/{ShowFlywayQuery-DVRCd384.js → ShowFlywayQuery-DIOUdYfG.js} +170 -123
  122. package/dist/ShowFlywayQuery-DIOUdYfG.js.map +1 -0
  123. package/dist/ShowQueryHistory-DRBKYDKk.js +313 -0
  124. package/dist/ShowQueryHistory-DRBKYDKk.js.map +1 -0
  125. package/dist/StorageUnitsPage-BDRkdCjW-UF64rf7q.js +728 -0
  126. package/dist/StorageUnitsPage-BDRkdCjW-UF64rf7q.js.map +1 -0
  127. package/dist/SubMenu-BdMTYtC1.js +319 -0
  128. package/dist/SubMenu-BdMTYtC1.js.map +1 -0
  129. package/dist/TransactionsPage-CqWTMNU8-Df6eGFDW.js +746 -0
  130. package/dist/TransactionsPage-CqWTMNU8-Df6eGFDW.js.map +1 -0
  131. package/dist/TransferCreatePage-DF7FZaTJ-CL79V3aR.js +315 -0
  132. package/dist/TransferCreatePage-DF7FZaTJ-CL79V3aR.js.map +1 -0
  133. package/dist/TransfersPage-CGrRFaBF-cTwBUv0o.js +476 -0
  134. package/dist/TransfersPage-CGrRFaBF-cTwBUv0o.js.map +1 -0
  135. package/dist/TypeConfiguration-JbRCN6GR.js +114 -0
  136. package/dist/TypeConfiguration-JbRCN6GR.js.map +1 -0
  137. package/dist/{UserList-Bc8gYxRL.js → UserList-L41Xw0Q6.js} +253 -236
  138. package/dist/{UserList-Bc8gYxRL.js.map → UserList-L41Xw0Q6.js.map} +1 -1
  139. package/dist/Users-CsJ08Kjm.js.map +1 -1
  140. package/dist/VialsPage-rvvXjgZG-Oqo1v6kQ.js +321 -0
  141. package/dist/VialsPage-rvvXjgZG-Oqo1v6kQ.js.map +1 -0
  142. package/dist/constants-DpXnLsAB-D6lN5cjK.js +445 -0
  143. package/dist/constants-DpXnLsAB-D6lN5cjK.js.map +1 -0
  144. package/dist/{dashboardLayoutUtils-D1xCAxp3.js → dashboardLayoutUtils-CJivzaU1.js} +95 -92
  145. package/dist/dashboardLayoutUtils-CJivzaU1.js.map +1 -0
  146. package/dist/format-UOyOu75i-D0GyylyQ.js +63 -0
  147. package/dist/format-UOyOu75i-D0GyylyQ.js.map +1 -0
  148. package/dist/index.css +1 -1
  149. package/dist/index.js +1 -1
  150. package/dist/index.lib-ETRQOzvE.js +894 -0
  151. package/dist/index.lib-ETRQOzvE.js.map +1 -0
  152. package/dist/listValueStore-BFQtDYIR-Bj0yX145.js +36 -0
  153. package/dist/listValueStore-BFQtDYIR-Bj0yX145.js.map +1 -0
  154. package/dist/useFieldErrors-hDG8ox_x-DbSAzrGo.js +28 -0
  155. package/dist/useFieldErrors-hDG8ox_x-DbSAzrGo.js.map +1 -0
  156. package/dist/validation-BzlHnL-r-CCJm2utQ.js +125 -0
  157. package/dist/validation-BzlHnL-r-CCJm2utQ.js.map +1 -0
  158. package/package.json +4 -3
  159. package/dist/AccessRights-Zm8Obm4N.js +0 -1284
  160. package/dist/AccessRights-Zm8Obm4N.js.map +0 -1
  161. package/dist/AddEditQueryBuilder-Brdnm6rQ.js +0 -313
  162. package/dist/AddEditQueryBuilder-Brdnm6rQ.js.map +0 -1
  163. package/dist/AddLabelModal-DFllBVcd.js +0 -734
  164. package/dist/AddLabelModal-DFllBVcd.js.map +0 -1
  165. package/dist/AddMenuConfiguration-Ce91MhnU.js +0 -8547
  166. package/dist/AddMenuConfiguration-Ce91MhnU.js.map +0 -1
  167. package/dist/AppModal-CtG2GjD_.js +0 -428
  168. package/dist/AppModal-CtG2GjD_.js.map +0 -1
  169. package/dist/ChangePasswordModalCore-DutQAZOx.js.map +0 -1
  170. package/dist/ConditionConfig-B4Ffpgj3.js +0 -395
  171. package/dist/ConditionConfig-B4Ffpgj3.js.map +0 -1
  172. package/dist/ConditionConfig.css +0 -1
  173. package/dist/EventConfigurations-BJcURufo.js +0 -449
  174. package/dist/EventConfigurations-BJcURufo.js.map +0 -1
  175. package/dist/EventsExceptionModal-BlZtBQoR.js +0 -200
  176. package/dist/EventsExceptionModal-BlZtBQoR.js.map +0 -1
  177. package/dist/EventsSkeleton-DK6JDKAK.js +0 -83
  178. package/dist/EventsSkeleton-DK6JDKAK.js.map +0 -1
  179. package/dist/FeatureMenu-C3503UIX.js +0 -265
  180. package/dist/FeatureMenu-C3503UIX.js.map +0 -1
  181. package/dist/FlywayQuery-Cx2sly6g.js +0 -169
  182. package/dist/FlywayQuery-Cx2sly6g.js.map +0 -1
  183. package/dist/ImmunizationConfigurationBase-DLQVSNnt.js +0 -5895
  184. package/dist/ImmunizationConfigurationBase-DLQVSNnt.js.map +0 -1
  185. package/dist/ImmunizationConfigurationsList-DdSZicTP.js +0 -344
  186. package/dist/ImmunizationConfigurationsList-DdSZicTP.js.map +0 -1
  187. package/dist/LanguagesModal-D6VfaGrl.js +0 -394
  188. package/dist/LanguagesModal-D6VfaGrl.js.map +0 -1
  189. package/dist/ManageDynamicFeature-dt096fyj.js +0 -4189
  190. package/dist/ManageDynamicFeature-dt096fyj.js.map +0 -1
  191. package/dist/ManageEventConfiguration-BpSJszSX.js +0 -1017
  192. package/dist/ManageEventConfiguration-BpSJszSX.js.map +0 -1
  193. package/dist/ManageTranslation-B4C9-lWD.js +0 -625
  194. package/dist/ManageTranslation-B4C9-lWD.js.map +0 -1
  195. package/dist/MobileMenuManagement-Cf8IZlla.js +0 -108
  196. package/dist/MobileMenuManagement-Cf8IZlla.js.map +0 -1
  197. package/dist/MobileTypeEventConfigModal-DUkUYACe.js +0 -783
  198. package/dist/MobileTypeEventConfigModal-DUkUYACe.js.map +0 -1
  199. package/dist/NotificationFlywayQuery-BY8Zzml_.js +0 -244
  200. package/dist/NotificationFlywayQuery-BY8Zzml_.js.map +0 -1
  201. package/dist/OtherTypeEventConfigModal-CYBfr2XE.js +0 -2046
  202. package/dist/OtherTypeEventConfigModal-CYBfr2XE.js.map +0 -1
  203. package/dist/QueryBuilder-z7eqfd7D.js +0 -383
  204. package/dist/QueryBuilder-z7eqfd7D.js.map +0 -1
  205. package/dist/RoleManagement-DEiBNfT8.js.map +0 -1
  206. package/dist/ShowFlywayQuery-DVRCd384.js.map +0 -1
  207. package/dist/ShowFlywayQuery-tj42YQAS.js +0 -130
  208. package/dist/ShowFlywayQuery-tj42YQAS.js.map +0 -1
  209. package/dist/ShowQueryHistory-BDN0tzHg.js +0 -190
  210. package/dist/ShowQueryHistory-BDN0tzHg.js.map +0 -1
  211. package/dist/SubMenu-B072oEGb.js +0 -191
  212. package/dist/SubMenu-B072oEGb.js.map +0 -1
  213. package/dist/TypeConfiguration-C3xoP2Nb.js +0 -117
  214. package/dist/TypeConfiguration-C3xoP2Nb.js.map +0 -1
  215. package/dist/dashboardLayoutUtils-D1xCAxp3.js.map +0 -1
  216. package/dist/index.lib-C3fwoM3y.js +0 -820
  217. package/dist/index.lib-C3fwoM3y.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ManageDynamicFeature-BU0I45dd.js","sources":["../src/views/Features/NewFormModal.jsx","../src/views/Features/ManageDynamicFeature.jsx"],"sourcesContent":["import {\n Alert,\n Box,\n Button,\n Chip,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n Divider,\n FormControl,\n Grid2,\n IconButton,\n TextField,\n} from \"@mui/material\";\nimport React, { useState } from \"react\";\nimport { Controller, useForm } from \"react-hook-form\";\nimport CustomDropdown from \"@/views/custom-components/CustomDropdown\";\nimport CustomTextField from \"@/views/custom-components/CustomTextField\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport * as Yup from \"yup\";\nimport { FormConfiguratorService } from \"@/common/services/FormConfiguratorService\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport PropTypes from \"prop-types\";\nimport { useDebounceFn } from \"@/hooks/useDebounceFn\";\nimport FontAwesomeIcons from \"@/common/fontAwesomeIcons/FontAwesomeIcons\";\nimport { executeAll } from \"@/common/services/QueryBuilder\";\n\nexport default function NewFormModal({\n mainFormCtrl,\n openAddFormModal,\n setModal,\n reloadForms,\n}) {\n const [inputValue, setInputValue] = useState(\"\");\n const [items, setItems] = useState([]);\n const [formCodeValidation, setFormCodeValidation] = useState(true);\n\n const validationSchema = Yup.object().shape({\n formName: Yup.string().required(\"Enter form name\"),\n formCode: Yup.string()\n .required(\"Enter form code\")\n .matches(\n /^[A-Z_]*$/,\n \"Only uppercase letters and underscores are allowed\",\n ),\n state: Yup.string().required(\"Select state\"),\n formType: Yup.string().required(\"Select form type\"),\n description: Yup.string().required(\"Enter description\"),\n });\n\n const formControl = useForm({\n defaultValues: {\n formName: \"\",\n formCode: \"\",\n state: \"ACTIVE\",\n description: \"\",\n menuConfigId: null,\n pageParams: \"\",\n formType: null,\n navigationState: \"medplat.form\",\n },\n resolver: yupResolver(validationSchema),\n mode: \"onChange\",\n });\n\n const handleAddItem = () => {\n if (inputValue.trim() && !items.includes(inputValue)) {\n const updatedItems = [...items, inputValue];\n setItems(updatedItems);\n setInputValue(\"\");\n formControl.setValue(\"pageParams\", updatedItems.join(\",\"));\n }\n };\n\n const handleDeleteItem = (itemToDelete) => {\n const updatedItems = items.filter((item) => item !== itemToDelete);\n setItems(updatedItems);\n formControl.setValue(\"pageParams\", updatedItems.join(\",\"));\n };\n\n const handleInputChange = (e) => {\n const value = e.target.value;\n // Allow only letters, numbers, and underscores\n // const regex = /^[a-zA-Z0-9_]*$/;\n\n // Allow only letters and underscores\n const regex = /^[a-zA-Z_]*$/;\n if (regex.test(value)) {\n setInputValue(value);\n }\n };\n\n const handleDialogClose = () => {\n setModal(false);\n };\n\n const onSubmit = (data) => {\n handleAddNewForm(data);\n };\n\n const handleAddNewForm = (currentForm) => {\n if (!formCodeValidation) {\n showToast({ message: \"Form Code is already taken!\", type: \"error\" });\n return;\n }\n\n const buildFormData = () => {\n const formData = new FormData();\n formData.append(\n \"form\",\n new Blob([JSON.stringify(currentForm)], {\n type: \"application/json\",\n }),\n );\n console.log(formData);\n return formData;\n };\n\n currentForm.isSeparateFeature = true; // forms created from dynamic feature management will be separate features\n FormConfiguratorService.saveForm(buildFormData()).then(() => {\n showToast({\n message: \"Configuration created sucessfully!\",\n type: \"success\",\n });\n let translationDtoList = [];\n if (currentForm.formName && currentForm.formName.length > 0) {\n translationDtoList.push({\n code: \"medplat_form_insert_into_translation_master\",\n parameters: {\n translation_key: currentForm.formName.replaceAll(\" \", \"\"),\n translation_value: currentForm.formName,\n form_code: currentForm.formCode,\n },\n sequence: 1,\n });\n }\n if (translationDtoList.length > 0) {\n executeAll(translationDtoList);\n }\n mainFormCtrl.setValue(\"formCode\", currentForm.formCode);\n mainFormCtrl.setValue(\"version\", \"DRAFT\");\n mainFormCtrl.setValue(\"navigationState\", currentForm.navigationState);\n handleDialogClose();\n formControl.reset({\n formName: \"\",\n formCode: \"\",\n state: \"ACTIVE\",\n description: \"\",\n menuConfigId: null,\n pageParams: \"\",\n formType: null,\n navigationState: \"medplat.form\",\n });\n reloadForms();\n });\n };\n\n const handleFormCodeChange = useDebounceFn(async (value) => {\n if (!value?.trim()) return;\n\n const valid = (\n await FormConfiguratorService.checkFormCodeAvailability(value)\n ).data;\n setFormCodeValidation(valid);\n return valid;\n }, 500);\n\n return (\n <Dialog\n open={openAddFormModal}\n // TransitionComponent={Transition}\n fullWidth={true}\n maxWidth={\"lg\"}\n onClose={handleDialogClose}\n slotProps={{\n paper: {\n style: {\n borderRadius: \"8px\",\n },\n },\n }}\n >\n <form\n noValidate\n onSubmit={(e) => {\n e.preventDefault();\n e.stopPropagation();\n formControl.handleSubmit(onSubmit)();\n }}\n >\n <DialogTitle>{\"Add new form\"}</DialogTitle>\n <DialogContent>\n <DialogContentText id=\"alert-dialog-slide-description\">\n Please enter all details\n </DialogContentText>\n <Grid2 container spacing={2} columns={12} sx={{ mt: 1 }}>\n <Grid2 size={12}>\n <Divider>\n <Chip label=\"Basic Details\" size=\"small\" />\n </Divider>\n </Grid2>\n <Grid2 size={4}>\n <CustomTextField\n control={formControl.control}\n name=\"formName\"\n id=\"formName\"\n fullWidth\n size=\"small\"\n label=\"Name\"\n errors={formControl.formState.errors}\n required\n />\n </Grid2>\n <Grid2 size={4}>\n <CustomTextField\n control={formControl.control}\n name=\"formCode\"\n id=\"formCode\"\n fullWidth\n size=\"small\"\n label=\"Code\"\n errors={{\n ...formControl.formState.errors,\n ...(formCodeValidation === false && {\n formCode: { message: \"Form Code is already taken!\" },\n }),\n }}\n required\n onChange={(e) => {\n const value = e.target.value\n .toUpperCase()\n .replace(/[^A-Z_]/g, \"\");\n formControl.setValue(\"formCode\", value);\n formControl.setValue(\n \"navigationState\",\n `medplat.form.${value}`,\n );\n handleFormCodeChange(value);\n }}\n />\n </Grid2>\n <Grid2 size={2}>\n <FormControl required fullWidth size=\"small\">\n {/* <InputLabel>State</InputLabel> */}\n <CustomDropdown\n control={formControl.control}\n name=\"state\"\n id=\"state\"\n options={[\"ACTIVE\", \"INACTIVE\"]}\n errors={formControl.formState.errors}\n size=\"small\"\n placeholder=\"\"\n label=\"State\"\n required\n />\n </FormControl>\n </Grid2>\n <Grid2 size={2}>\n <FormControl required fullWidth size=\"small\">\n {/* <InputLabel>Type</InputLabel> */}\n <CustomDropdown\n control={formControl.control}\n name=\"formType\"\n id=\"formType\"\n options={[\"FORM\", \"SEARCH\", \"WRAPPER\"]}\n errors={formControl.formState.errors}\n size=\"small\"\n placeholder=\"\"\n label=\"Type\"\n required\n />\n </FormControl>\n </Grid2>\n <Grid2 size={12}>\n <CustomTextField\n control={formControl.control}\n name=\"description\"\n id=\"description\"\n fullWidth\n multiline\n rows={2}\n size=\"small\"\n label=\"Description\"\n errors={formControl.formState.errors}\n required\n />\n </Grid2>\n <Grid2 size={12}>\n <Divider>\n <Chip label=\"Page Param Details\" size=\"small\" />\n </Divider>\n </Grid2>\n <Grid2 size={12}>\n <Controller\n name=\"pageParams\"\n control={formControl.control}\n render={({ field }) => (\n <TextField\n {...field}\n label=\"Page Params\"\n size=\"small\"\n placeholder=\"Add Page Params\"\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n handleAddItem();\n }\n }}\n fullWidth\n slotProps={{\n input: {\n endAdornment: (\n <IconButton color=\"primary\" onClick={handleAddItem}>\n <FontAwesomeIcons\n iconName=\"faArrowRightToBracket\"\n size=\"xs\"\n />\n </IconButton>\n ),\n },\n }}\n />\n )}\n />\n <Box sx={{ display: \"flex\", flexWrap: \"wrap\", gap: 1, mt: 2 }}>\n {items.map((item, index) => (\n <Chip\n key={index + 1}\n label={item}\n onDelete={() => handleDeleteItem(item)}\n color=\"primary\"\n />\n ))}\n </Box>\n {items.length === 0 && (\n <Alert severity=\"info\" variant=\"outlined\">\n No page params added\n </Alert>\n )}\n </Grid2>\n {[\"FORM\", \"SEARCH\"].includes(formControl.getValues(\"formType\")) && (\n <>\n <Grid2 size={12}>\n <Divider>\n <Chip label=\"Route Details\" size=\"small\" />\n </Divider>\n </Grid2>\n <CustomTextField\n control={formControl.control}\n name=\"navigationState\"\n id=\"navigationState\"\n fullWidth\n size=\"small\"\n label=\"Navigation State\"\n errors={formControl.formState.errors}\n disabled={true}\n />\n </>\n )}\n </Grid2>\n </DialogContent>\n <DialogActions>\n <Button type=\"submit\" color=\"success\">\n Create\n </Button>\n <Button onClick={handleDialogClose}>Close</Button>\n </DialogActions>\n </form>\n </Dialog>\n );\n}\n\nNewFormModal.propTypes = {\n mainFormCtrl: PropTypes.any,\n openAddFormModal: PropTypes.any,\n setModal: PropTypes.any,\n reloadForms: PropTypes.any,\n};\n","import { execute, executeAll } from \"@/common/services/QueryBuilder\";\nimport { useDebounceFn } from \"@/hooks/useDebounceFn.js\";\nimport CustomDropdown from \"@/views/custom-components/CustomDropdown\";\nimport CustomSvgUpload from \"@/views/custom-components/CustomSvgUpload\";\nimport CustomTextField from \"@/views/custom-components/CustomTextField\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport { generateUUID } from \"@/utils/UUIDgenerator\";\nimport { executeQuery } from \"@/common/services/GlobalApis\";\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Box,\n Button,\n Card,\n Checkbox,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Divider,\n FormControl,\n FormControlLabel,\n FormGroup,\n IconButton,\n InputLabel,\n MenuItem,\n Modal,\n Paper,\n Radio,\n RadioGroup,\n Select,\n Stack,\n Step,\n TextField,\n Tooltip,\n Typography,\n debounce,\n useTheme,\n alpha,\n TableContainer,\n Table,\n TableHead,\n TableCell,\n TableRow,\n TableBody,\n} from \"@mui/material\";\nimport Grid from \"@mui/material/Grid2\";\nimport { t } from \"i18next\";\nimport React, {\n useEffect,\n useMemo,\n useRef,\n useState,\n useCallback,\n} from \"react\";\nimport { Controller, useForm, useWatch } from \"react-hook-form\";\nimport { useLocation, useNavigate } from \"react-router\";\nimport * as Yup from \"yup\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport NewFormModal from \"./NewFormModal\";\nimport CustomAutocomplete from \"@/views/custom-components/CustomAutoComplete.jsx\";\nimport { getRoleList } from \"@/common/services/GlobalApis\";\nimport { getFeatureDataV2 } from \"../../services/Features\";\nimport CustomSwitch from \"@/views/custom-components/CustomSwitch\";\nimport CustomTextArea from \"@/views/custom-components/CustomTextArea\";\nimport PostgresEditor from \"@/views/custom-components/PostgresEditor\";\nimport CustomCheckBox from \"@/views/custom-components/CustomCheckBox\";\nimport CustomDatePicker from \"@/views/custom-components/CustomDatePicker\";\nimport FontAwesomeIcons from \"@/common/fontAwesomeIcons/FontAwesomeIcons\";\nimport FieldDescription from \"@/views/custom-components/FieldDescription\";\nimport PropTypes from \"prop-types\";\nimport { useTranslateProvider } from \"@/common/languageTranslator/TranslationContext\";\nimport {\n getFeatureData,\n updateUserMenuItems,\n} from \"../../services/Features\";\nimport CustomRadioGroup from \"@/views/custom-components/CustomRadioComponent\";\n\nconst PermissionRow = ({\n permission,\n index,\n depth = 0,\n onEdit,\n onRemove,\n handleAddChildClick,\n isLastChild = false,\n isDynamicFeature,\n}) => {\n const theme = useTheme();\n const displayPermissionId = (id) => id.replaceAll(\".child.\", \".\");\n return (\n <Box sx={{ position: \"relative\", pl: depth * 3 }}>\n {depth > 0 && (\n <>\n <Box\n sx={{\n position: \"absolute\",\n left: 16,\n top: 0,\n bottom: isLastChild ? \"50%\" : 0,\n width: 2,\n bgcolor: theme.palette.divider,\n }}\n />\n <Box\n sx={{\n position: \"absolute\",\n left: 16,\n top: 22,\n width: 24,\n height: 2,\n bgcolor: theme.palette.divider,\n }}\n />\n </>\n )}\n\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 1.5,\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: 2,\n padding: \"8px 12px\",\n backgroundColor:\n depth === 0\n ? theme.palette.background.paper\n : alpha(theme.palette.background.paper, 0.8),\n ml: depth > 0 ? 3 : 0,\n position: \"relative\",\n }}\n >\n {depth === 0 && (\n <Typography sx={{ width: 24, color: \"text.secondary\" }}>\n {index + 1}.\n </Typography>\n )}\n\n <Typography sx={{ flexGrow: 1, fontWeight: 500 }}>\n {displayPermissionId(permission.permissionId)}\n </Typography>\n\n {depth === 0 && (\n <Button\n variant=\"outlined\"\n size=\"small\"\n startIcon={<FontAwesomeIcons iconName=\"faPlus\" />}\n onClick={() => handleAddChildClick(permission)}\n >\n Add Child\n </Button>\n )}\n\n {(!permission.isDefault ||\n (permission.isDefault && !isDynamicFeature)) && (\n <IconButton\n color=\"secondary\"\n onClick={() => onEdit(permission, index)}\n >\n <FontAwesomeIcons iconName=\"faEdit\" size=\"sm\" />\n </IconButton>\n )}\n {!permission.isDefault && (\n <IconButton color=\"error\" onClick={() => onRemove(permission)}>\n <FontAwesomeIcons iconName=\"faTrash\" size=\"sm\" />\n </IconButton>\n )}\n </Box>\n\n {permission.childPermissions?.length > 0 && (\n <Stack spacing={1} sx={{ mt: 1 }}>\n {permission.childPermissions.map((child, cIndex) => (\n <PermissionRow\n key={cIndex}\n permission={child}\n index={cIndex}\n depth={depth + 1}\n onEdit={onEdit}\n onRemove={onRemove}\n handleAddChildClick={handleAddChildClick}\n isLastChild={cIndex === permission.childPermissions.length - 1}\n isDynamicFeature={isDynamicFeature}\n />\n ))}\n </Stack>\n )}\n </Box>\n );\n};\n\nconst PermissionItemList = ({\n permissions,\n onEdit,\n onRemove,\n handleAddChildClick,\n isDynamicFeature,\n}) => {\n return (\n <Stack spacing={1}>\n {permissions.map((perm, index) => (\n <PermissionRow\n key={index}\n permission={perm}\n index={index}\n depth={0}\n onEdit={onEdit}\n onRemove={onRemove}\n handleAddChildClick={handleAddChildClick}\n isLastChild={index === permissions.length - 1}\n isDynamicFeature={isDynamicFeature}\n />\n ))}\n </Stack>\n );\n};\n\nconst PermissionModal = ({\n open,\n onClose,\n onSave,\n formCtrl,\n editData,\n parentPermissionId = null,\n mode = \"add-parent\",\n permissionTypes,\n setPermissionTypes,\n existingPermissionIds,\n isDynamicFeature = true,\n}) => {\n const [inputText, setInputText] = useState(\"\");\n const [options, setOptions] = useState([]);\n const [inputValue, setInputValue] = useState(\"\");\n\n const commonDefaults = {\n permissionType: \"\",\n permissionId: \"--\",\n permissionName: \"\",\n permissionDesc: \"\",\n enabled: true,\n permissionSuffix: \"\",\n parentPermissionSuffix: \"\",\n };\n const staticDefaults = {\n backendUrl: \"\",\n urlType: \"\",\n queryCodeRequired: editData\n ? editData?.backendUrl?.trim() && editData?.urlType?.trim()\n ? false\n : editData?.queryCode?.trim()\n ? true\n : undefined\n : undefined,\n queryCode: \"\",\n };\n const defaultValues = isDynamicFeature\n ? commonDefaults\n : { ...commonDefaults, ...staticDefaults };\n\n const {\n control,\n watch,\n handleSubmit,\n reset,\n setValue,\n getValues,\n setError,\n clearErrors,\n formState,\n } = useForm({\n mode: \"onChange\",\n defaultValues,\n });\n const queryCodeRequired = watch(\"queryCodeRequired\");\n const permissionType = watch(\"permissionType\");\n const permissionSuffix = watch(\"permissionSuffix\");\n const backendUrl = watch(\"backendUrl\");\n const queryCode = watch(\"queryCode\");\n const queryApiOptions = [\n { label: \"Query\", value: true },\n { label: \"API\", value: false },\n ];\n\n const getDefaultValues = (override = {}) => {\n const base = isDynamicFeature\n ? commonDefaults\n : { ...commonDefaults, ...staticDefaults };\n\n return { ...base, ...override };\n };\n const parentSuffix = watch(\"parentPermissionSuffix\");\n\n const toCamelCase = (str) => {\n return str\n .trim()\n .toLowerCase()\n .split(/\\s+/)\n .map((word, index) =>\n index === 0 ? word : word.charAt(0).toUpperCase() + word.slice(1),\n )\n .join(\"\");\n };\n\n const fetchQueryCodes = async (search) => {\n const response = (\n await execute({\n code: \"GET_ALL_QUERY_CODE\",\n parameters: { search },\n })\n ).data;\n\n setOptions(response?.result || []);\n };\n useEffect(() => {\n const fetchInitialQueryCodes = async () => {\n const response = (\n await execute({\n code: \"GET_ALL_QUERY_CODE\",\n parameters: {\n search: getValues(\"queryCode\") ? getValues(\"queryCode\") : \"\",\n },\n })\n ).data;\n setOptions(response?.result || []);\n setInputValue(getValues(\"queryCode\"));\n };\n !isDynamicFeature && fetchInitialQueryCodes();\n }, [queryCode]);\n\n useEffect(() => {\n if (queryCodeRequired === true && !backendUrl) {\n setValue(\"backendUrl\", \"\");\n setValue(\"urlType\", \"\");\n } else if (queryCodeRequired === false && !queryCode) {\n setValue(\"queryCode\", \"\");\n }\n }, [queryCodeRequired]);\n\n useEffect(() => {\n if (!open) return;\n if (mode === \"edit\" && editData) {\n const baseValues = {\n permissionType: editData.permissionType || \"\",\n permissionId: editData.permissionId || \"--\",\n permissionName: editData.permissionName || \"\",\n permissionDesc: editData.permissionDesc || \"\",\n enabled: !!editData.enabled,\n permissionSuffix: \"\",\n };\n\n if (!isDynamicFeature) {\n const hasApi =\n editData?.backendUrl?.trim() && editData?.urlType?.trim();\n const hasQuery = editData?.queryCode?.trim();\n reset({\n ...baseValues,\n urlType: editData.urlType || \"\",\n backendUrl: editData.backendUrl || \"\",\n queryCode: editData.queryCode || \"\",\n queryCodeRequired: editData\n ? hasApi\n ? false\n : hasQuery\n ? true\n : undefined\n : undefined,\n });\n } else {\n reset(baseValues);\n }\n return;\n }\n\n if (mode === \"add-child\" && parentPermissionId) {\n const inheritedType = parentPermissionId.split(\".\")[0] || \"\";\n reset(\n getDefaultValues({\n permissionType: inheritedType,\n permissionId: parentPermissionId,\n permissionName: \"\",\n permissionDesc: \"\",\n enabled: true,\n permissionSuffix: \"\",\n urlType: \"\",\n backendUrl: \"\",\n queryCodeRequired: undefined,\n queryCode: \"\",\n }),\n );\n return;\n }\n\n reset(getDefaultValues());\n }, [open, mode, editData, parentPermissionId, reset]);\n\n useEffect(() => {\n if (mode === \"add-parent\") {\n const type =\n permissionType?.type === \"menu\" ? \"view\" : permissionType?.type;\n\n if (!type) {\n setValue(\"permissionId\", \"--\");\n return;\n }\n const menuType = formCtrl.getValues(\"menuType\") || \"menuType\";\n const featureConstant =\n formCtrl.getValues(\"featureConstant\") || \"feature\";\n let baseId;\n if (!isDynamicFeature) {\n const featureName = formCtrl.getValues(\"menuName\");\n baseId = `${type}.${menuType}.${toCamelCase(featureName)}`;\n } else {\n baseId = `${type}.${menuType}.${featureConstant}`;\n }\n\n if (parentSuffix?.trim()) {\n baseId = `${baseId}.${parentSuffix.trim()}`;\n }\n\n setValue(\"permissionId\", baseId);\n }\n }, [permissionType, parentSuffix, mode]);\n\n useEffect(() => {\n if (queryCodeRequired === true && !backendUrl) {\n setValue(\"backendUrl\", \"\");\n setValue(\"urlType\", \"\");\n } else if (queryCodeRequired === false && !queryCode) {\n setValue(\"queryCode\", \"\");\n }\n }, [queryCodeRequired]);\n\n useEffect(() => {\n if (mode === \"add-child\" && parentPermissionId !== null) {\n const parentType = parentPermissionId.split(\".\")[0] || \"\";\n const childBaseId = `${parentPermissionId}.child`;\n\n const newId = permissionSuffix\n ? `${childBaseId}.${permissionSuffix}`\n : childBaseId;\n setValue(\"permissionId\", newId);\n setValue(\"permissionType\", parentType);\n }\n }, [permissionSuffix, mode, parentPermissionId, setValue]);\n\n const onSubmit = (data) => {\n const newPermission = {\n permissionId: data.permissionId,\n permissionType:\n data.permissionType ||\n (parentPermissionId ? parentPermissionId.split(\".\")[0] : \"\"),\n permissionName: data.permissionName,\n permissionDesc: data.permissionDesc,\n enabled: data.enabled,\n backendUrl:\n data?.backendUrl && !queryCodeRequired ? data.backendUrl : null,\n urlType: data?.urlType && !queryCodeRequired ? data.urlType : null,\n queryCode: data?.queryCode && queryCodeRequired ? data.queryCode : null,\n childPermissions: [],\n isDefault: editData?.isDefault ? editData?.isDefault : false,\n };\n onSave(newPermission);\n reset();\n onClose();\n };\n\n const checkPermissionIdAvailability = async (permissionId) => {\n if (!permissionId || permissionId === \"--\") return;\n const response = await execute({\n code: \"CHECK_UNIQUE_PERMISSION_ID\",\n parameters: { permissionId },\n });\n\n return response.data.result[0].exists;\n };\n\n return (\n <Dialog open={open} onClose={onClose} fullWidth maxWidth=\"sm\">\n <DialogTitle>\n {mode === \"edit\" ? \"Edit Permission\" : \"Add Permission\"}\n </DialogTitle>\n <DialogContent\n sx={{ display: \"flex\", flexDirection: \"column\", gap: 2, mt: 1 }}\n >\n {mode !== \"add-child\" && mode !== \"edit\" && (\n <Box\n sx={{\n display: \"flex\",\n flexDirection: { xs: \"column\", sm: \"row\" },\n alignItems: { xs: \"stretch\", sm: \"center\" },\n gap: { xs: 0.5, sm: 2 },\n }}\n >\n <Typography\n sx={{ minWidth: 160, fontWeight: 500, color: \"text.secondary\" }}\n >\n Permission Type\n <span className=\"text-red-500 ml-1\">*</span>\n </Typography>\n <FormControl fullWidth size=\"small\">\n <Controller\n name=\"permissionType\"\n control={control}\n rules={{ required: true }}\n render={({ field }) => (\n <CustomAutocomplete\n id=\"permissionType\"\n name=\"permissionType\"\n control={control}\n singleSelect={true}\n checkEquality=\"type\"\n freeSolo\n disableClearable={false}\n placeholder=\"Choose permission type\"\n options={\n permissionTypes\n ? !inputText ||\n permissionTypes.some(\n (p) =>\n p.type.toLowerCase() === inputText.toLowerCase(),\n )\n ? permissionTypes\n : [\n ...permissionTypes,\n { type: `__add_new__${inputText}`, isNew: true },\n ]\n : []\n }\n getOptionLabel={(option) => {\n if (option.isNew) {\n const value = option.type.replace(\"__add_new__\", \"\");\n return `Add \"${value}\"`;\n }\n return option.type;\n }}\n onInputChange={(e, val) => setInputText(val)}\n onChange={(e, val) => {\n if (!val) {\n field.onChange(null);\n setValue(\"permissionId\", \"--\");\n return;\n }\n if (val.isNew) {\n const actualValue = val.type.replace(\"__add_new__\", \"\");\n\n const newObj = { type: actualValue };\n\n setPermissionTypes((prev) =>\n prev.some((p) => p.type === actualValue)\n ? prev\n : [...prev, newObj],\n );\n\n field.onChange(newObj);\n return;\n }\n field.onChange(val);\n }}\n />\n )}\n />\n </FormControl>\n </Box>\n )}\n\n {mode === \"add-child\" ? (\n <>\n <Box\n sx={{\n display: \"flex\",\n flexDirection: { xs: \"column\", sm: \"row\" },\n alignItems: { xs: \"stretch\", sm: \"center\" },\n gap: { xs: 0.5, sm: 2 },\n }}\n >\n <Typography\n sx={{\n minWidth: 160,\n fontWeight: 500,\n color: \"text.secondary\",\n }}\n >\n Permission ID\n <span className=\"text-red-500 ml-1\">*</span>\n </Typography>\n\n <Box sx={{ display: \"flex\", gap: 1, flexGrow: 1 }}>\n <CustomTextField\n control={control}\n name=\"parentPermissionDisplay\"\n value={`${parentPermissionId}.child.`}\n disabled\n fullWidth\n />\n\n <CustomTextField\n control={control}\n name=\"permissionSuffix\"\n placeholder=\"Enter child suffix\"\n errors={formState.errors}\n fullWidth\n onChange={async (e) => {\n const suffix = e.target.value.trim();\n setValue(\"permissionSuffix\", suffix);\n\n if (suffix.toLowerCase() === \"child\") {\n setError(\"permissionSuffix\", {\n type: \"manual\",\n message: \"Suffix cannot be 'child'\",\n });\n return;\n }\n\n clearErrors(\"permissionSuffix\");\n\n const finalId = `${parentPermissionId}.child.${suffix}`;\n setValue(\"permissionId\", finalId);\n\n if (existingPermissionIds?.has(finalId)) {\n setError(\"permissionSuffix\", {\n type: \"manual\",\n message: \"Permission ID already exists\",\n });\n return;\n }\n\n const exists = await checkPermissionIdAvailability(finalId);\n if (exists) {\n setError(\"permissionSuffix\", {\n type: \"manual\",\n message: \"Permission ID already exists in DB\",\n });\n } else {\n clearErrors(\"permissionSuffix\");\n }\n }}\n />\n </Box>\n </Box>\n </>\n ) : mode === \"add-parent\" ? (\n permissionType?.type ? (\n <>\n <Box\n sx={{\n display: \"flex\",\n flexDirection: { xs: \"column\", sm: \"row\" },\n alignItems: { xs: \"stretch\", sm: \"center\" },\n gap: { xs: 0.5, sm: 2 },\n }}\n >\n <Typography\n sx={{\n minWidth: 160,\n fontWeight: 500,\n color: \"text.secondary\",\n }}\n >\n Permission ID\n <span className=\"text-red-500 ml-1\">*</span>\n </Typography>\n\n <CustomTextField\n control={control}\n name=\"baseId\"\n value={`${permissionType?.type === \"menu\" ? \"view\" : permissionType?.type}.${formCtrl.getValues(\"menuType\")}.${isDynamicFeature ? formCtrl.getValues(\"featureConstant\") : toCamelCase(formCtrl.getValues(\"menuName\"))}.`}\n disabled\n fullWidth\n />\n\n <CustomTextField\n control={control}\n name=\"parentPermissionSuffix\"\n placeholder=\"Enter suffix\"\n errors={formState.errors}\n fullWidth\n onChange={async (e) => {\n const suffix = e.target.value.trim();\n setValue(\"parentPermissionSuffix\", suffix);\n\n if (suffix.toLowerCase() === \"child\") {\n setError(\"parentPermissionSuffix\", {\n type: \"manual\",\n message: \"Suffix cannot be 'child'\",\n });\n return;\n }\n\n clearErrors(\"parentPermissionSuffix\");\n\n const type =\n permissionType?.type === \"menu\"\n ? \"view\"\n : permissionType?.type || permissionType || \"\";\n\n const menuType = formCtrl.getValues(\"menuType\");\n const featureConstant =\n formCtrl.getValues(\"featureConstant\");\n let finalId;\n if (!isDynamicFeature) {\n finalId = `${type}.${menuType}.${toCamelCase(formCtrl.getValues(\"menuName\"))}.${suffix}`;\n } else {\n finalId = `${type}.${menuType}.${featureConstant}.${suffix}`;\n }\n setValue(\"permissionId\", finalId);\n\n if (existingPermissionIds?.has(finalId)) {\n setError(\"parentPermissionSuffix\", {\n type: \"manual\",\n message: \"Permission ID already exists\",\n });\n return;\n }\n\n const exists = await checkPermissionIdAvailability(finalId);\n if (exists) {\n setError(\"parentPermissionSuffix\", {\n type: \"manual\",\n message: \"Permission ID already exists in DB\",\n });\n } else {\n clearErrors(\"parentPermissionSuffix\");\n }\n }}\n />\n </Box>\n </>\n ) : (\n <Box\n sx={{\n display: \"flex\",\n flexDirection: { xs: \"column\", sm: \"row\" },\n alignItems: { xs: \"stretch\", sm: \"center\" },\n gap: { xs: 0.5, sm: 2 },\n }}\n >\n <Typography\n sx={{ minWidth: 160, fontWeight: 500, color: \"text.secondary\" }}\n >\n Permission ID\n <span className=\"text-red-500 ml-1\">*</span>\n </Typography>\n <CustomTextField\n control={control}\n name=\"permissionId\"\n value=\"--\"\n disabled\n fullWidth\n />\n </Box>\n )\n ) : (\n <Box\n sx={{\n display: \"flex\",\n flexDirection: { xs: \"column\", sm: \"row\" },\n alignItems: { xs: \"stretch\", sm: \"center\" },\n gap: { xs: 0.5, sm: 2 },\n }}\n >\n <Typography\n sx={{\n minWidth: 160,\n fontWeight: 500,\n color: \"text.secondary\",\n }}\n >\n Permission ID\n <span className=\"text-red-500 ml-1\">*</span>\n </Typography>\n\n <CustomTextField\n control={control}\n name=\"permissionId\"\n label=\"Permission ID\"\n disabled\n fullWidth\n />\n </Box>\n )}\n\n <Box\n sx={{\n display: \"flex\",\n flexDirection: { xs: \"column\", sm: \"row\" },\n alignItems: { xs: \"stretch\", sm: \"center\" },\n gap: { xs: 0.5, sm: 2 },\n }}\n >\n <Typography\n sx={{ minWidth: 160, fontWeight: 500, color: \"text.secondary\" }}\n >\n Permission Name\n <span className=\"text-red-500 ml-1\">*</span>\n </Typography>\n <Controller\n name=\"permissionName\"\n control={control}\n rules={{ required: true }}\n render={({ field }) => (\n <CustomTextField\n control={control}\n {...field}\n placeholder=\"Enter name\"\n />\n )}\n />\n </Box>\n\n <Box display=\"flex\" alignItems=\"flex-start\" gap={2}>\n <Typography\n sx={{\n minWidth: 160,\n fontWeight: 500,\n color: \"text.secondary\",\n mt: 1,\n }}\n >\n Description\n </Typography>\n <Controller\n name=\"permissionDesc\"\n control={control}\n render={({ field }) => (\n <CustomTextArea\n control={control}\n {...field}\n placeholder=\"Enter description (optional)\"\n minRows={2}\n />\n )}\n />\n </Box>\n\n {!isDynamicFeature && (\n <Box\n sx={{\n display: \"flex\",\n flexDirection: { xs: \"column\", sm: \"row\" },\n alignItems: { xs: \"stretch\", sm: \"center\" },\n gap: { xs: 0.5, sm: 2 },\n }}\n >\n <Typography\n sx={{\n minWidth: 160,\n fontWeight: 500,\n color: \"text.secondary\",\n }}\n >\n Type{\" \"}\n </Typography>\n <CustomRadioGroup\n name=\"queryCodeRequired\"\n control={control}\n options={queryApiOptions}\n direction=\"row\"\n dataTestId=\"queryOrApi\"\n />\n </Box>\n )}\n {!isDynamicFeature && queryCodeRequired !== undefined && (\n <>\n {queryCodeRequired === false ? (\n <>\n <Box\n sx={{\n display: \"flex\",\n flexDirection: { xs: \"column\", sm: \"row\" },\n alignItems: { xs: \"stretch\", sm: \"center\" },\n gap: { xs: 0.5, sm: 2 },\n }}\n >\n <Typography\n sx={{\n minWidth: 160,\n fontWeight: 500,\n color: \"text.secondary\",\n }}\n >\n URL Type\n </Typography>\n <FormControl fullWidth size=\"small\">\n <Controller\n name=\"urlType\"\n control={control}\n render={({ field }) => (\n <Select {...field} displayEmpty>\n <MenuItem value=\"\">\n <em>Select Type</em>\n </MenuItem>\n {[\"GET\", \"POST\", \"PUT\", \"DELETE\"].map((type) => (\n <MenuItem key={type} value={type}>\n {type}\n </MenuItem>\n ))}\n </Select>\n )}\n />\n </FormControl>\n </Box>\n <Box\n sx={{\n display: \"flex\",\n flexDirection: { xs: \"column\", sm: \"row\" },\n alignItems: { xs: \"stretch\", sm: \"center\" },\n gap: { xs: 0.5, sm: 2 },\n }}\n >\n <Typography\n sx={{\n minWidth: 160,\n fontWeight: 500,\n color: \"text.secondary\",\n }}\n >\n Backend URL\n </Typography>\n <Controller\n name=\"backendUrl\"\n control={control}\n render={({ field }) => (\n <CustomTextField\n control={control}\n {...field}\n placeholder=\"Enter URL\"\n />\n )}\n />\n </Box>\n </>\n ) : (\n <Box\n sx={{\n display: \"flex\",\n flexDirection: { xs: \"column\", sm: \"row\" },\n alignItems: { xs: \"stretch\", sm: \"center\" },\n gap: { xs: 0.5, sm: 2 },\n }}\n >\n <Typography\n sx={{\n minWidth: 160,\n fontWeight: 500,\n color: \"text.secondary\",\n }}\n >\n Query Code\n </Typography>\n <Controller\n name=\"queryCode\"\n control={control}\n render={({ field, fieldState: { error } }) => (\n <CustomAutocomplete\n id=\"queryCode\"\n name=\"queryCode\"\n control={control}\n options={options}\n getOptionLabel={(option) => option?.code || \"\"}\n checkEquality=\"code\"\n inputValue={inputValue}\n disableClearable={false}\n value={\n options?.find((q) => q.code === field.value) || null\n }\n onInputChange={(e, v, reason) => {\n if (reason === \"input\") {\n setInputValue(v);\n fetchQueryCodes(v);\n }\n }}\n singleSelect={true}\n onChange={(e, val) => {\n field.onChange(val?.code || \"\");\n setInputValue(val?.code || \"\");\n }}\n placeholder=\"Search Query Code...\"\n errors={error}\n fullWidth\n freeSolo={false}\n />\n )}\n />\n </Box>\n )}\n </>\n )}\n <Box\n sx={{\n display: \"flex\",\n flexDirection: { xs: \"column\", sm: \"row\" },\n alignItems: { xs: \"stretch\", sm: \"center\" },\n gap: { xs: 0.5, sm: 2 },\n }}\n >\n <Typography\n sx={{ minWidth: 160, fontWeight: 500, color: \"text.secondary\" }}\n >\n Is Active\n <span className=\"text-red-500 ml-1\">*</span>\n </Typography>\n <Controller\n name=\"enabled\"\n control={control}\n render={({ field }) => (\n <CustomSwitch\n {...field}\n disabled={editData?.isDefault && !isDynamicFeature}\n checked={field.value}\n onChange={(e) => field.onChange(e.target.checked)}\n />\n )}\n />\n </Box>\n </DialogContent>\n\n <DialogActions>\n <Button onClick={onClose}>Cancel</Button>\n <Button\n onClick={handleSubmit(onSubmit)}\n variant=\"contained\"\n disabled={\n !formState.isValid || Object.keys(formState.errors).length > 0\n }\n >\n {mode === \"edit\"\n ? \"Update\"\n : mode === \"add-child\"\n ? \"Add Child\"\n : \"Add\"}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nconst GrantAccessModal = ({\n open,\n onClose,\n onSave,\n entityData,\n permissions = [],\n}) => {\n const { control, watch, getValues } = useForm({\n defaultValues: {\n noStartDate: true,\n noEndDate: true,\n startDate: null,\n endDate: null,\n isBackendOnly: false,\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 handleSave = () => {\n const values = getValues();\n grantPermissionSubmit(values);\n };\n\n const grantPermissionSubmit = (values) => {\n const payloads = [];\n\n entityData.forEach((entity) => {\n if (entity.type === \"user\") {\n const ids = Array.isArray(entity.id) ? entity.id : [entity.id];\n payloads.push(\n ...ids.map((id) => ({\n entityType: \"user\",\n user_id: id,\n name: entity.name,\n startDate: values.noStartDate ? null : values.startDate,\n endDate: values.noEndDate ? null : values.endDate,\n isBackendOnly: values.isBackendOnly,\n permissions: JSON.parse(JSON.stringify(permissions)),\n })),\n );\n }\n\n if (entity.type === \"role\") {\n entity.ids.forEach((roleId, idx) => {\n payloads.push({\n entityType: \"role\",\n role_id: roleId,\n name: entity.names[idx],\n startDate: values.noStartDate ? null : values.startDate,\n endDate: values.noEndDate ? null : values.endDate,\n isBackendOnly: values.isBackendOnly,\n permissions: JSON.parse(JSON.stringify(permissions)),\n });\n });\n }\n });\n\n payloads.forEach((p) => onSave(p));\n onClose();\n };\n\n return (\n <Modal open={open} onClose={onClose}>\n <Box className=\"fixed inset-0 flex items-start justify-center z-50 bg-opacity-10 overflow-y-auto\">\n <Card className=\"relative mt-10 p-4 shadow-lg flex flex-col rounded-xl\">\n <Grid className=\"flex justify-between items-center mb-4\">\n <Typography variant=\"h6\">Grant Access</Typography>\n <IconButton onClick={onClose}>\n <FontAwesomeIcons iconName=\"faXmark\" size=\"sm\" />\n </IconButton>\n </Grid>\n\n <Grid container spacing={2}>\n <Grid item xs={12} display=\"flex\" gap={2}>\n <Box display=\"flex\" flexDirection=\"column\" flex={1}>\n <CustomCheckBox\n label=\"No Start Date\"\n name=\"noStartDate\"\n control={control}\n sx={{ mb: 1 }}\n />\n <CustomDatePicker\n name=\"startDate\"\n control={control}\n disabled={noStartDate}\n maxDate={endDate || undefined}\n />\n </Box>\n\n <Box display=\"flex\" flexDirection=\"column\" flex={1}>\n <CustomCheckBox\n label=\"No End Date\"\n name=\"noEndDate\"\n control={control}\n sx={{ mb: 1 }}\n />\n <CustomDatePicker\n name=\"endDate\"\n control={control}\n disabled={noEndDate}\n minDate={startDate || undefined}\n />\n </Box>\n </Grid>\n </Grid>\n\n <Box mt={2}>\n <CustomCheckBox\n label=\"Is Backend Only?\"\n name=\"isBackendOnly\"\n control={control}\n />\n </Box>\n <Grid className=\"flex justify-end gap-2 mt-4\">\n <Button type=\"button\" variant=\"outlined\" onClick={onClose}>\n Cancel\n </Button>\n <Button variant=\"contained\" type=\"button\" onClick={handleSave}>\n Save\n </Button>\n </Grid>\n </Card>\n </Box>\n </Modal>\n );\n};\n\nconst AssignedPermissionList = ({ permissions, onToggle, isChild = false }) => {\n const displayPermissionId = (id) => id.replaceAll(\".child\", \"\");\n\n return permissions.map((perm, permIndex) => (\n <Box\n key={permIndex}\n display=\"flex\"\n flexDirection=\"column\"\n gap={1}\n ml={isChild ? 2 : 0}\n >\n <Box display=\"flex\" alignItems=\"center\" gap={1}>\n <CustomSwitch\n sx={{\n transform: \"scale(0.75)\",\n transformOrigin: \"left center\",\n }}\n checked={!!perm.enabled}\n disabled={isChild}\n onChange={() => {\n if (!isChild) onToggle(perm);\n }}\n />\n <Typography variant=\"subtitle1\">\n {displayPermissionId(perm.permissionId)}\n </Typography>\n </Box>\n\n {perm.childPermissions?.length > 0 && (\n <AssignedPermissionList\n permissions={perm.childPermissions}\n onToggle={onToggle}\n isChild={true}\n />\n )}\n </Box>\n ));\n};\n\n/**\n * Heading for one wizard step.\n *\n * Left-aligned, because the fields beneath it are: centring form content is\n * called out as an anti-pattern, and the two alignment edges were visibly\n * disagreeing. Demoted from `h5`/bold too — `h5`/800 is the page title's\n * slot, and having both compete meant neither won.\n *\n * @param {Object} props\n * @param {string} props.title - Step heading.\n * @param {string} [props.description] - One line on what the step is for.\n * @returns {JSX.Element}\n */\nconst StepHeader = ({ title, description }) => (\n <Box sx={{ mb: 3, textAlign: \"center\" }}>\n <Typography variant=\"h6\" component=\"h2\" sx={{ fontWeight: 700 }}>\n {title}\n </Typography>\n {description && (\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n // Centred, but with the reading measure capped and the block itself\n // centred — a full-width centred paragraph on a wide monitor forces\n // the eye back across the whole screen on every line.\n sx={{ maxWidth: 640, mt: 0.5, mx: \"auto\" }}\n >\n {description}\n </Typography>\n )}\n </Box>\n);\n\nStepHeader.propTypes = {\n title: PropTypes.node,\n description: PropTypes.node,\n};\n\n/**\n * One field of the wizard: label on the left, control on the right, one row\n * per field stacked down the column.\n *\n * Module-scoped so its component identity is stable — declared inside the\n * screen it would be a new type on every render and React would remount every\n * input, dropping focus mid-typing.\n *\n * @param {Object} props\n * @param {React.ReactNode} props.label - Field label.\n * @param {boolean} [props.required=false] - Renders the theme's own asterisk.\n * @param {React.ReactNode} [props.help] - Optional adornment beside the label.\n * @param {React.ReactNode} props.children - The control.\n * @returns {JSX.Element}\n */\nconst FieldRow = ({ label, required = false, help, children }) => (\n <Box\n sx={{\n display: \"flex\",\n flexDirection: { xs: \"column\", sm: \"row\" },\n alignItems: { xs: \"flex-start\", sm: \"center\" },\n justifyContent: \"space-between\",\n gap: { xs: 0.5, sm: 2 },\n }}\n >\n <Box\n sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5, flexShrink: 0 }}\n >\n <InputLabel required={required} className=\"text-[0.875rem]\">\n {label}\n </InputLabel>\n {help}\n </Box>\n <Box sx={{ width: { xs: \"100%\", sm: \"60%\" }, minWidth: 0 }}>{children}</Box>\n </Box>\n);\n\nFieldRow.propTypes = {\n label: PropTypes.node,\n required: PropTypes.bool,\n help: PropTypes.node,\n children: PropTypes.node,\n};\n\n/**\n * Shape of a static feature's navigation state.\n *\n * `GeneralUtil.naviagationFunc` turns one of these into a route by swapping\n * dots for slashes and rewriting a leading `techo/` to `medplat/`, so the\n * grammar is: a `techo`/`medplat` prefix, one or more dot-separated segments,\n * and the optional `({id:'…'})` argument that function also parses.\n *\n * The previous pattern locked `techo` to exactly three letter-only segments\n * (`techo.X.Y`) while letting `medplat` be followed by literally anything.\n * That rejected legitimate states in daily use — `techo.querymanagement`,\n * `techo.ccc.call.success`, and every dynamic report\n * (`techo.report.view({id:'…'})`) — and accepted `medplat` values containing\n * spaces or slashes, which cannot survive the dot-to-slash conversion.\n */\nconst NAVIGATION_STATE_PATTERN =\n /^(techo|medplat)(\\.[a-zA-Z0-9_-]+)+(\\(\\{id:'[^']+'\\}\\))?$/;\n\nexport default function ManageDynamicFeature() {\n const { translate } = useTranslateProvider();\n const formRef = useRef(null);\n const location = useLocation();\n const navigate = useNavigate();\n const { isNew } = location.state || {};\n\n const queryParams = useMemo(\n () => new URLSearchParams(location.search),\n [location.search],\n );\n const theme = useTheme();\n\n const [featureGroup, setFeatureGroup] = useState([]);\n const [showMobileFields, setShowMobileFields] = useState(false);\n const [entityList, setEntityList] = useState([]);\n const [syncedTableList, setSyncedTableList] = useState([]);\n const [formNames, setFormNames] = useState();\n const [formVersions, setFormVersions] = useState({});\n const [openAddFormModal, setOpenAddFormModal] = useState(false);\n const [disableEditing, setDisableEditing] = useState(false);\n const [successMessage, setSuccessMessage] = useState(\"\");\n const [selectedFormCode, setSelectedFormCode] = useState(\"\");\n const [prevLinkedFormCode, setPrevLinkedFormCode] = useState(\"\");\n const [menuGroups, setMenuGroups] = useState();\n const [menuTypes, setMenuTypes] = useState([]);\n const [isSyncedLoaded, setIsSyncedLoaded] = useState(false);\n const [activeStep, setActiveStep] = useState(0);\n const [submitted, setSubmitted] = useState(false);\n const [skippedSteps, setSkippedSteps] = useState([]);\n const [userData, setUserData] = useState([]);\n const [roleData, setRoleData] = useState([]);\n const [selectedRoles, setSelectedRoles] = useState([]);\n const [mobileEntitiesSync, setMobileEntitiesSync] = useState([]);\n const [selectedUser, setSelectedUser] = useState({});\n const [userMenuItemDtos, setUserMenuItemDtos] = useState([]);\n const [assignAccessRight, setAssignAccessRight] = useState({});\n const [permissions, setPermissions] = useState([]);\n const [modalOpen, setModalOpen] = useState(false);\n const [modalMode, setModalMode] = useState(\"add-parent\");\n const [modalParentId, setModalParentId] = useState(null);\n const [editData, setEditData] = useState(null);\n const [editOriginalId, setEditOriginalId] = useState(null);\n const [grantModalOpen, setGrantModalOpen] = useState(false);\n const [selectedEntity, setSelectedEntity] = useState(null);\n const [grantedData, setGrantedData] = useState([]);\n const [disableShowField, setDisableShowField] = useState(false);\n const [showFields, setShowFields] = useState(false);\n const [isSeparateFeature, setIsSeparateFeature] = useState(false);\n const [isUpdate, setIsUpdate] = useState({ value: false, length: 0 });\n const [permissionTypes, setPermissionTypes] = useState([\n { type: \"update\" },\n { type: \"menu\" },\n { type: \"create\" },\n { type: \"download\" },\n { type: \"execute\" },\n ]);\n const [queryCodeOptions, setQueryCodeOptions] = useState([]);\n const [trainingQueryInput, setTrainingQueryInput] = useState(\"\");\n const [notificationBadgeQueryInput, setNotificationBadgeQueryInput] =\n useState(\"\");\n const [accordionExpanded, setAccordionExpanded] = useState({\n basicConfig: true,\n trainingConfig: false,\n notificationConfig: false,\n });\n\n const [initialMobileModeValue, setInitialMobileModeValue] =\n React.useState(null);\n const isStepSkipped = (stepKey) => skippedSteps.includes(stepKey);\n\n const [filledSteps, setFilledSteps] = useState(new Set());\n\n const steps = [\n { key: \"featureDetails\", label: \"Feature Details\" },\n { key: \"mobileConfig\", label: \"Mobile Config\" },\n { key: \"formLinking\", label: \"Form Linking\" },\n { key: \"additionalPermissions\", label: \"Permission Management\" },\n { key: \"assignFeatures\", label: \"Assignment\" },\n { key: \"submit\", label: \"Submit\" },\n ];\n\n const validationSchema = Yup.object().shape({\n menuName: Yup.string().required(\"Enter Feature Name\"),\n featureConstant: Yup.string().when(\"isDynamicFeature\", {\n is: true,\n then: (schema) => schema.required(\"Enter Feature Constant\"),\n otherwise: (schema) => schema.notRequired(),\n }),\n navigationState: Yup.string().when(\"isDynamicFeature\", {\n is: false,\n then: (schema) =>\n schema\n .required(\"Enter Navigation State\")\n .matches(\n NAVIGATION_STATE_PATTERN,\n \"Use a dotted state such as techo.querymanagement or medplat.form.myForm\",\n ),\n otherwise: (schema) => schema.notRequired(),\n }),\n menuType: Yup.string().required(\"Enter Feature Type\"),\n icon: Yup.string().when(\"$showMobileFields\", {\n is: true,\n then: (schema) => schema.required(\"Please upload an icon\"),\n otherwise: (schema) => schema.notRequired(),\n }),\n conditions: Yup.string().transform((value) => (value ? value.trim() : \"\")),\n mobileMode: Yup.string().when(\"$showMobileFields\", {\n is: true,\n then: (schema) => schema.required(\"Please select a mode\"),\n otherwise: (schema) => schema.notRequired(),\n }),\n trainingQuery: Yup.string().when(\"trainingRequired\", {\n is: true,\n then: (schema) => schema.required(\"Please select a training query\"),\n otherwise: (schema) => schema.notRequired(),\n }),\n notificationBadgeType: Yup.string().when(\"notificationBadgeEnabled\", {\n is: true,\n then: (schema) => schema.required(\"Please select a badge type\"),\n otherwise: (schema) => schema.notRequired(),\n }),\n notificationBadgeQuery: Yup.string().when(\n [\"notificationBadgeEnabled\", \"notificationBadgeType\"],\n (values, schema) => {\n const [badgeEnabled, badgeType] = values;\n if (badgeEnabled && badgeType) {\n return schema.required(\n badgeType === \"COUNT\"\n ? \"Please select a count query\"\n : \"Please select a nudge query\",\n );\n }\n return schema.notRequired();\n },\n ),\n updatedFields: Yup.array().when(\n [\"isDynamicFeature\", \"isNew\", \"isUpdate\", \"showFields\"],\n (values, schema) => {\n const [isDynamicFeature, isNew, isUpdate, showFields] = values;\n\n const shouldValidate =\n isDynamicFeature === false &&\n isNew?.val === false &&\n isUpdate?.value === true &&\n showFields === true;\n\n if (shouldValidate) {\n return schema.of(\n Yup.object().shape({\n value: Yup.string().required(\"Right is required\"),\n }),\n );\n }\n\n return schema.optional();\n },\n ),\n });\n\n const formCtrl = useForm({\n defaultValues: {\n menuName: \"\",\n featureConstant: \"\",\n navigationState: \"medplat.form\",\n menuType: \"\",\n menuGroup: \"\",\n isDynamicFeature: true,\n isWebFeature: false,\n isMobileFeature: false,\n accessRights: [],\n entityName: null,\n mobileEntitiesSync: [],\n icon: \"\",\n mobileMode: null,\n conditions: \"\",\n formCode: \"\",\n version: null,\n additionalPermissions: [],\n fields: [],\n updatedFields: [],\n trainingRequired: false,\n trainingQuery: \"\",\n notificationBadgeEnabled: false,\n notificationBadgeType: \"\",\n notificationBadgeQuery: \"\",\n },\n resolver: yupResolver(validationSchema),\n mode: \"onChange\",\n });\n\n const isDynamicFeature = useWatch({\n control: formCtrl.control,\n name: \"isDynamicFeature\",\n });\n\n const isMobileFeature = useWatch({\n control: formCtrl.control,\n name: \"isMobileFeature\",\n });\n\n const isWebFeature = useWatch({\n control: formCtrl.control,\n name: \"isWebFeature\",\n });\n\n const watchedFieldsSteps = useWatch({\n control: formCtrl.control,\n name: getWatchedFieldNames(steps[activeStep]?.key),\n });\n\n const watchedFields = formCtrl.watch();\n\n // `getValues` reads the store without subscribing, so the Condition Query\n // editor's visibility only tracked `entityName` by accident, via the\n // whole-form `watch()` above re-rendering on every keystroke anywhere.\n const entityName = useWatch({\n control: formCtrl.control,\n name: \"entityName\",\n });\n\n function getWatchedFieldNames(stepKey) {\n switch (stepKey) {\n case \"featureDetails\":\n return isDynamicFeature\n ? [\"menuName\", \"featureConstant\", \"menuType\"]\n : [\"menuName\", \"navigationState\", \"menuType\"];\n case \"mobileConfig\":\n return showMobileFields\n ? [\n \"icon\",\n \"mobileMode\",\n \"trainingRequired\",\n \"trainingQuery\",\n \"notificationBadgeEnabled\",\n \"notificationBadgeType\",\n \"notificationBadgeQuery\",\n ]\n : [];\n case \"formLinking\":\n return isDynamicFeature ? [\"formCode\", \"version\"] : [];\n case \"additionalPermissions\":\n return !isDynamicFeature && isNew?.val === false\n ? [\"updatedFields\"]\n : [\"additionalPermissions\"];\n default:\n return [];\n }\n }\n\n const isStepValid = useMemo(() => {\n const key = steps[activeStep]?.key;\n switch (key) {\n case \"featureDetails\": {\n const hasNavigationStateError =\n !!formCtrl.formState.errors.navigationState;\n const hasFeatureConstantError =\n !!formCtrl.formState.errors.featureConstant;\n return (\n formCtrl.formState.isValid &&\n !!formCtrl.getValues(\"menuName\") &&\n (isDynamicFeature\n ? !!formCtrl.getValues(\"featureConstant\") &&\n !hasFeatureConstantError\n : !!formCtrl.getValues(\"navigationState\") &&\n !hasNavigationStateError) &&\n !!formCtrl.getValues(\"menuType\")\n );\n }\n case \"mobileConfig\": {\n if (!showMobileFields) return true;\n const hasIcon = !!formCtrl.getValues(\"icon\");\n const hasMode = !!formCtrl.getValues(\"mobileMode\");\n const trainingRequired = formCtrl.getValues(\"trainingRequired\");\n const trainingQuery = formCtrl.getValues(\"trainingQuery\");\n const badgeEnabled = formCtrl.getValues(\"notificationBadgeEnabled\");\n const badgeType = formCtrl.getValues(\"notificationBadgeType\");\n const badgeQuery = formCtrl.getValues(\"notificationBadgeQuery\");\n const trainingValid = !trainingRequired || !!trainingQuery;\n const badgeTypeValid = !badgeEnabled || !!badgeType;\n const badgeQueryValid = !badgeEnabled || !badgeType || !!badgeQuery;\n return (\n hasIcon &&\n hasMode &&\n trainingValid &&\n badgeTypeValid &&\n badgeQueryValid\n );\n }\n case \"formLinking\": {\n if (!isDynamicFeature) return true;\n const formCode = formCtrl.getValues(\"formCode\");\n const version = formCtrl.getValues(\"version\");\n return !!formCode && !!version;\n }\n case \"additionalPermissions\": {\n if (!isDynamicFeature && isNew?.val === false && showFields) {\n const updatedFields = formCtrl.getValues(\"updatedFields\") || [];\n const updatedFieldsValid = updatedFields.every(\n (f) => f.value && f.value.trim(),\n );\n return updatedFieldsValid;\n } else {\n const additionalPermissions =\n formCtrl.getValues(\"additionalPermissions\") || [];\n const isValid =\n additionalPermissions.length > 0 &&\n additionalPermissions.every(\n (perm) =>\n perm.permissionId?.trim() &&\n perm.permissionName?.trim() &&\n perm.permissionType?.type?.trim(),\n );\n\n return isValid;\n }\n }\n default:\n return true;\n }\n }, [\n watchedFieldsSteps,\n formCtrl.formState.isValid,\n activeStep,\n showMobileFields,\n ]);\n\n /**\n * Required fields the current step is still missing, by their visible label.\n * A disabled Next with no explanation is a dead end — the user cannot tell\n * whether the form is broken or they simply have not finished.\n * @returns {string[]} Labels of the unfilled required fields.\n */\n const missingForStep = useMemo(() => {\n if (steps[activeStep]?.key !== \"featureDetails\") return [];\n const missing = [];\n if (!formCtrl.getValues(\"menuName\")) missing.push(translate(\"Feature Name\"));\n if (isDynamicFeature) {\n if (!formCtrl.getValues(\"featureConstant\"))\n missing.push(translate(\"Feature Constant\"));\n } else if (!formCtrl.getValues(\"navigationState\")) {\n missing.push(translate(\"Feature State\"));\n }\n if (!formCtrl.getValues(\"menuType\")) missing.push(translate(\"Link to Menu\"));\n return missing;\n }, [watchedFieldsSteps, activeStep, isDynamicFeature, translate]);\n\n const visibleSteps = steps.filter(\n (step) =>\n (step.key !== \"mobileConfig\" || showMobileFields) &&\n (step.key !== \"formLinking\" || isDynamicFeature),\n );\n\n const handleNext = async () => {\n const currentStepKey = steps[activeStep].key;\n\n if (isStepSkipped(currentStepKey)) {\n moveToNextVisibleStep();\n return;\n }\n\n const isValid = await formCtrl.trigger(getFieldsForStep(currentStepKey));\n if (isValid) {\n setFilledSteps((prev) => new Set(prev).add(currentStepKey));\n setSkippedSteps((prev) => prev.filter((step) => step !== currentStepKey));\n moveToNextVisibleStep();\n }\n };\n\n const moveToNextVisibleStep = () => {\n const currentKey = steps[activeStep].key;\n const currentVisibleIndex = visibleSteps.findIndex(\n (s) => s.key === currentKey,\n );\n const nextVisibleStep = visibleSteps[currentVisibleIndex + 1];\n\n if (nextVisibleStep) {\n if (\n nextVisibleStep.key === \"additionalPermissions\" &&\n permissions.length === 0\n ) {\n createDefaultPermission();\n }\n\n if (\n currentKey === \"additionalPermissions\" &&\n nextVisibleStep.key === \"assignFeatures\"\n ) {\n setGrantedData(\n syncGrantedDataWithPermissions(permissions, grantedData),\n );\n }\n\n const nextIndexInSteps = steps.findIndex(\n (s) => s.key === nextVisibleStep.key,\n );\n setActiveStep(nextIndexInSteps);\n }\n };\n\n useEffect(() => {\n if (disableEditing === true) {\n const currentValue = formCtrl.getValues(\"mobileMode\");\n setInitialMobileModeValue(currentValue);\n }\n }, [disableEditing, formCtrl]);\n\n useEffect(() => {\n if (!isDynamicFeature) {\n queryParams.get(\"featureId\") === null &&\n formCtrl.setValue(\"navigationState\", \"\");\n formCtrl.setValue(\"featureConstant\", \"\");\n setSuccessMessage(\"\");\n formCtrl.clearErrors(\"featureConstant\");\n } else {\n formCtrl.setValue(\"navigationState\", \"medplat.form\");\n }\n }, [isDynamicFeature]);\n\n const getFieldsForStep = (key) => {\n switch (key) {\n case \"formLinking\":\n return [\"formCode\", \"version\"];\n case \"additionalPermissions\":\n return [\"permissionId\", \"permissionName\", \"permissionType\"];\n default:\n return [];\n }\n };\n\n const handleBack = () => {\n if (activeStep === 0) {\n // Missing `return` meant this fell through and kept running after\n // kicking off the navigation.\n navigate(\"/ui/medplat/manage/menu\");\n return;\n }\n const currentKey = steps[activeStep].key;\n const currentVisibleIndex = visibleSteps.findIndex(\n (s) => s.key === currentKey,\n );\n\n const prevVisibleStep = visibleSteps[currentVisibleIndex - 1];\n if (prevVisibleStep) {\n const prevIndexInSteps = steps.findIndex(\n (s) => s.key === prevVisibleStep.key,\n );\n setActiveStep(prevIndexInSteps);\n }\n };\n\n const isStepFilled = (stepIndex) => {\n const key = steps[stepIndex].key;\n return filledSteps.has(key);\n };\n\n useEffect(() => {\n (async () => {\n await fetchMenuGroups();\n await fetchTables();\n await fetchSyncedTables();\n setIsSyncedLoaded(true);\n await fetchFormNames();\n await fetchData();\n await fetchGlobalQueryCodes();\n if (queryParams.get(\"featureId\") && isDynamicFeature) {\n const { data } = await getFeatureDataV2(queryParams.get(\"featureId\"));\n if (data?.permissions) {\n const formattedPermissions = transformBackendPermissions(\n data.permissions,\n );\n if (data?.userMenuItemDtos?.length > 0) {\n const mergedData = buildGrantedDataFromBackend(\n formattedPermissions,\n data.userMenuItemDtos,\n );\n const normalizedData = mergedData.map((row) => ({\n ...row,\n permissions: normalizePermissionTree(row.permissions),\n }));\n setGrantedData(normalizedData);\n }\n setPermissions(formattedPermissions);\n }\n }\n })();\n }, []);\n\n useEffect(() => {\n if (assignAccessRight?.userMenuItemDtos) {\n const accessRightsArray = formCtrl.getValues(\"updatedFields\") || [];\n\n const defaultAccessRights = accessRightsArray?.reduce((acc, curr) => {\n acc[curr.name] = curr.enabled;\n return acc;\n }, {});\n\n const enrichedDtos = assignAccessRight.userMenuItemDtos.map((dto) => {\n let parsedFeatureJson = {};\n\n try {\n parsedFeatureJson = dto.featureJson\n ? JSON.parse(dto.featureJson)\n : {};\n } catch (e) {\n console.warn(\"Invalid JSON in featureJson:\", e);\n }\n\n const mergedFeatureJson = {\n ...defaultAccessRights,\n ...parsedFeatureJson,\n };\n\n return {\n ...dto,\n featureJson: JSON.stringify(mergedFeatureJson),\n };\n });\n setUserMenuItemDtos(enrichedDtos);\n }\n }, [assignAccessRight]);\n\n useEffect(() => {\n try {\n const featureId = queryParams.get(\"featureId\");\n const featureType = queryParams.get(\"featureType\");\n if (featureType && featureId) {\n const fetchData = async () => {\n if (isNew?.val) {\n const { data } = await getFeatureDataV2(featureId);\n setDisableShowField(true);\n await fetchStaticFeatureInfo();\n if (data?.permissions) {\n const formattedPermissions = transformBackendPermissions(\n data.permissions,\n );\n\n if (data?.userMenuItemDtos?.length > 0) {\n const mergedData = buildGrantedDataFromBackend(\n formattedPermissions,\n data.userMenuItemDtos,\n );\n const normalizedData = mergedData.map((row) => ({\n ...row,\n permissions: normalizePermissionTree(row.permissions),\n }));\n setGrantedData(normalizedData);\n }\n setPermissions(formattedPermissions);\n }\n setIsUpdate((cur) => {\n return { ...cur, value: true, length: 0 };\n });\n } else {\n const { data } = await getFeatureData(featureId);\n setAssignAccessRight(data);\n await fetchStaticFeatureInfo();\n const fields = JSON.parse(data.featureJson || \"{}\");\n const formattedFields = Object.keys(fields).map((key, index) => ({\n id: index + 1,\n value: key,\n checkbox: fields[key],\n updated: true,\n }));\n formCtrl.setValue(\"updatedFields\", formattedFields);\n setShowFields(formattedFields.length > 0);\n if (formattedFields.length > 0) {\n setDisableShowField(true);\n }\n setIsUpdate((cur) => {\n return { ...cur, value: true, length: fields.length || 0 };\n });\n setIsSeparateFeature(data?.isSeparateFeature);\n }\n };\n handleFeatureType();\n fetchData();\n }\n } catch (error) {\n showToast({\n type: \"error\",\n message: `error :${error?.message}`,\n });\n }\n }, [queryParams, formCtrl.setValue, isSyncedLoaded, menuGroups]);\n const transformBackendPermissions = (backendPermissions) => {\n const menuType = formCtrl.getValues(\"menuType\");\n const featureConstant = formCtrl.getValues(\"featureConstant\");\n\n const toCamelCase = (str) => {\n return str\n .trim()\n .toLowerCase()\n .split(/\\s+/)\n .map((word, index) =>\n index === 0 ? word : word.charAt(0).toUpperCase() + word.slice(1),\n )\n .join(\"\");\n };\n\n let defaultPermissionId;\n if (!isDynamicFeature || featureConstant?.length === 0) {\n const featureName = formCtrl.getValues(\"menuName\");\n defaultPermissionId = `view.${menuType}.${toCamelCase(featureName)}`;\n } else {\n defaultPermissionId = `view.${menuType}.${featureConstant}`;\n }\n\n const transform = (perm) => {\n const isDefault = perm.id === defaultPermissionId;\n return {\n permissionId: perm.id,\n permissionType: { type: perm.type },\n permissionName: perm.name,\n permissionDesc: perm.desc || \"\",\n enabled: perm.is_active,\n isDefault,\n childPermissions: perm.child\n ? perm.child.map((child) => transform(child))\n : [],\n urlType: perm?.httpMethod || \"\",\n backendUrl: perm?.url || \"\",\n queryCodeRequired: !perm?.url,\n queryCode: perm?.queryCodes || \"\",\n };\n };\n\n return backendPermissions.map(transform);\n };\n\n const buildGrantedDataFromBackend = (permissions, userMenuItemDtos) => {\n if (!Array.isArray(userMenuItemDtos)) return [];\n const markEnabledRecursive = (perm, enabledIds) => {\n const children =\n perm.childPermissions?.map((child) =>\n markEnabledRecursive(child, enabledIds),\n ) || [];\n\n const anyChildEnabled = children.some((c) => c.enabled);\n\n const isEnabled =\n enabledIds.includes(perm.permissionId) || anyChildEnabled;\n\n return { ...perm, enabled: isEnabled, childPermissions: children };\n };\n\n return userMenuItemDtos.map((dto) => {\n const enabledIds = dto.permissions?.map((p) => p.id) || [];\n const isRole = !!dto.roleName || !!dto.designationId || !!dto.roleId;\n const isUser = !!dto.userId || !!dto.fullName;\n\n const permissionTree = permissions.map((p) =>\n markEnabledRecursive(p, enabledIds),\n );\n\n return {\n entityType: isRole ? \"role\" : \"user\",\n user_id: isUser ? dto.userId || null : null,\n role_id: isRole ? dto.designationId || dto.roleId || null : null,\n name: isUser ? dto.fullName || \"\" : dto.roleName || \"\",\n startDate: dto.permissions?.[0]?.startDate || null,\n endDate: dto.permissions?.[0]?.endDate || null,\n isBackendOnly: dto.permissions?.[0]?.isBackendOnly || false,\n permissions: permissionTree,\n };\n });\n };\n\n const normalizePermissionTree = (permissions) => {\n const normalize = (perm) => {\n let childPermissions = [];\n if (perm.childPermissions?.length) {\n childPermissions = perm.childPermissions.map(normalize);\n const allChildrenEnabled = childPermissions.every((c) => c.enabled);\n perm.enabled = perm.enabled || allChildrenEnabled;\n }\n\n if (perm.enabled && perm.childPermissions?.length) {\n childPermissions = childPermissions.map((c) => ({\n ...c,\n enabled: true,\n childPermissions: c.childPermissions?.length\n ? normalizePermissionTree(c.childPermissions)\n : [],\n }));\n }\n\n return {\n ...perm,\n childPermissions,\n };\n };\n\n return permissions.map(normalize);\n };\n\n const syncGrantedDataWithPermissions = (permissions, grantedData) => {\n const permissionMap = new Map();\n const buildMap = (perms) => {\n perms.forEach((p) => {\n permissionMap.set(p.permissionId, p);\n if (p.childPermissions?.length) buildMap(p.childPermissions);\n });\n };\n buildMap(permissions);\n const mergePermissions = (permList, grantedPermList) => {\n return permList.map((perm) => {\n const grantedPerm =\n grantedPermList?.find((g) => g.permissionId === perm.permissionId) ||\n {};\n const mergedChildren = mergePermissions(\n perm.childPermissions || [],\n grantedPerm.childPermissions || [],\n );\n return {\n ...perm,\n enabled: grantedPerm.enabled ?? perm.enabled,\n childPermissions: mergedChildren,\n };\n });\n };\n\n return grantedData.map((row) => ({\n ...row,\n permissions: mergePermissions(permissions, row.permissions),\n }));\n };\n\n const fetchFeatureInfo = async () => {\n try {\n const response = (\n await execute({\n code: \"RETREIVE_DYNAMIC_FEATURE_INFO\",\n parameters: {\n id: parseInt(queryParams.get(\"featureId\")),\n menuType: queryParams.get(\"featureType\"),\n },\n })\n ).data;\n if (response.result) {\n let data = response.result[0];\n const mobileConfig = (() => {\n try {\n return data.mobile_config ? JSON.parse(data.mobile_config) : {};\n } catch {\n return {};\n }\n })();\n const parsedSyncArray = mobileConfig?.mobile_entities_sync ?? [];\n const mappedMobileEntitiesSync = parsedSyncArray\n .map((tableName) =>\n syncedTableList?.find((item) => item.tableName === tableName),\n )\n .filter(Boolean);\n formCtrl.reset({\n menuName: data.menuName ? data.menuName : \"\",\n featureConstant: data.featureConstant ? data.featureConstant : \"\",\n navigationState: data.navigationState\n ? data.navigationState\n : \"medplat.form\",\n isDynamicFeature:\n data.isDynamicFeature !== undefined &&\n data.isDynamicFeature !== null\n ? data.isDynamicFeature\n : false,\n menuType: data.menuType ? data.menuType : \"\",\n menuGroup: data.group_id ? data.group_id.toString() : \"\",\n isWebFeature: data.isWebFeature ? data.isWebFeature : false,\n isMobileFeature: data.isMobileFeature ? data.isMobileFeature : false,\n entityName: mobileConfig?.entity_name ?? \"\",\n mobileMode: mobileConfig?.mobile_mode ?? null,\n icon: mobileConfig?.icon ?? \"\",\n mobileEntitiesSync: mobileConfig?.mobile_entities_sync\n ? mobileConfig.mobile_entities_sync\n : [],\n conditions: mobileConfig?.conditions ?? \"\",\n formCode: data.formCode ? data.formCode : \"\",\n version: data.currentVersion ? data.currentVersion : \"\",\n trainingRequired: mobileConfig?.training_required ?? false,\n trainingQuery: mobileConfig?.training_query ?? \"\",\n notificationBadgeEnabled:\n mobileConfig?.notification_badge_enabled ?? false,\n notificationBadgeType: mobileConfig?.notification_badge_type ?? \"\",\n notificationBadgeQuery: mobileConfig?.notification_badge_query ?? \"\",\n });\n setMobileEntitiesSync(mappedMobileEntitiesSync);\n if (data.isMobileFeature) setShowMobileFields(true);\n const loadedTrainingQuery = mobileConfig?.training_query ?? \"\";\n const loadedBadgeQuery = mobileConfig?.notification_badge_query ?? \"\";\n if (loadedTrainingQuery) {\n setTrainingQueryInput(loadedTrainingQuery);\n fetchGlobalQueryCodes(loadedTrainingQuery);\n }\n if (loadedBadgeQuery) {\n setNotificationBadgeQueryInput(loadedBadgeQuery);\n fetchGlobalQueryCodes(loadedBadgeQuery);\n }\n if (data.formCode) {\n setSelectedFormCode(data.formCode);\n setPrevLinkedFormCode(data.formCode);\n }\n handleFeatureType();\n setDisableEditing(true);\n }\n } catch (error) {\n showToast({\n message: error.message,\n type: \"error\",\n });\n }\n };\n\n const fetchStaticFeatureInfo = async () => {\n try {\n const response = (\n await execute({\n code: \"RETREIVE_DYNAMIC_FEATURE_INFO\",\n parameters: {\n id: parseInt(queryParams.get(\"featureId\")),\n menuType: queryParams.get(\"featureType\"),\n },\n })\n ).data;\n if (response.result) {\n let data = response.result[0];\n const mobileConfig = (() => {\n try {\n return data.mobile_config ? JSON.parse(data.mobile_config) : {};\n } catch {\n return {};\n }\n })();\n const safeJSONParse = (value, fallback = null) => {\n try {\n if (!value || typeof value !== \"string\") return fallback;\n return JSON.parse(value);\n } catch {\n return fallback;\n }\n };\n const parsedSyncArray = mobileConfig?.mobile_entities_sync ?? [];\n const mappedMobileEntitiesSync = parsedSyncArray\n .map((tableName) =>\n syncedTableList?.find((item) => item.tableName === tableName),\n )\n .filter(Boolean);\n formCtrl.setValue(\"menuName\", data.menuName ? data.menuName : \"\");\n formCtrl.setValue(\n \"navigationState\",\n data.navigationState ? data.navigationState : \"\",\n );\n formCtrl.setValue(\n \"isDynamicFeature\",\n data.isDynamicFeature !== undefined && data.isDynamicFeature !== null\n ? data.isDynamicFeature\n : false,\n );\n formCtrl.setValue(\"menuType\", data.menuType ? data.menuType : \"\");\n formCtrl.setValue(\n \"menuGroup\",\n data.group_id ? data.group_id.toString() : \"\",\n );\n formCtrl.setValue(\n \"isWebFeature\",\n data.isWebFeature ? data.isWebFeature : false,\n );\n formCtrl.setValue(\n \"isMobileFeature\",\n data.isMobileFeature ? data.isMobileFeature : false,\n );\n formCtrl.setValue(\"entityName\", mobileConfig?.entity_name ?? \"\");\n formCtrl.setValue(\"mobileMode\", mobileConfig?.mobile_mode ?? null);\n formCtrl.setValue(\"icon\", mobileConfig?.icon ?? \"\");\n formCtrl.setValue(\n \"mobileEntitiesSync\",\n mobileConfig?.mobile_entities_sync ?? [],\n );\n formCtrl.setValue(\"conditions\", mobileConfig?.conditions ?? \"\");\n formCtrl.setValue(\n \"trainingRequired\",\n mobileConfig?.training_required ?? false,\n );\n formCtrl.setValue(\"trainingQuery\", mobileConfig?.training_query ?? \"\");\n formCtrl.setValue(\n \"notificationBadgeEnabled\",\n mobileConfig?.notification_badge_enabled ?? false,\n );\n formCtrl.setValue(\n \"notificationBadgeType\",\n mobileConfig?.notification_badge_type ?? \"\",\n );\n formCtrl.setValue(\n \"notificationBadgeQuery\",\n mobileConfig?.notification_badge_query ?? \"\",\n );\n\n setMobileEntitiesSync(mappedMobileEntitiesSync);\n if (data.isMobileFeature) setShowMobileFields(true);\n const loadedTrainingQuery = mobileConfig?.training_query ?? \"\";\n const loadedBadgeQuery = mobileConfig?.notification_badge_query ?? \"\";\n if (loadedTrainingQuery) {\n setTrainingQueryInput(loadedTrainingQuery);\n fetchGlobalQueryCodes(loadedTrainingQuery);\n }\n if (loadedBadgeQuery) {\n setNotificationBadgeQueryInput(loadedBadgeQuery);\n fetchGlobalQueryCodes(loadedBadgeQuery);\n }\n setDisableEditing(true);\n }\n } catch (error) {\n showToast({\n message: error.message,\n type: \"error\",\n });\n }\n };\n\n const createDefaultPermission = () => {\n const menuType = formCtrl.getValues(\"menuType\") || \"menuType\";\n const featureConstant = formCtrl.getValues(\"featureConstant\") || \"feature\";\n const toCamelCase = (str) => {\n return str\n .trim()\n .toLowerCase()\n .split(/\\s+/)\n .map((word, index) =>\n index === 0 ? word : word.charAt(0).toUpperCase() + word.slice(1),\n )\n .join(\"\");\n };\n let permissionId;\n if (!isDynamicFeature) {\n const featureName = formCtrl.getValues(\"menuName\");\n permissionId = `view.${menuType}.${toCamelCase(featureName)}`;\n } else {\n permissionId = `view.${menuType}.${featureConstant}`;\n }\n\n const defaultPermission = {\n permissionId,\n permissionType: { type: \"menu\" },\n permissionName: `view ${featureConstant}`,\n permissionDesc: \"\",\n enabled: true,\n isDefault: true,\n childPermissions: [],\n ...(isDynamicFeature === false && {\n backendUrl: \"\",\n urlType: \"\",\n queryCode: \"\",\n }),\n };\n setPermissions([defaultPermission]);\n };\n\n const addRole = (val) => {\n setSelectedRoles(val);\n };\n\n const addMobileEntitiesSync = (val) => {\n const tableNames = val?.map((opt) => opt?.tableName) || [];\n setMobileEntitiesSync(val);\n formCtrl.setValue(\"mobileEntitiesSync\", tableNames);\n };\n\n const handleUserChange = (e, newValue) => {\n setSelectedUser(newValue);\n };\n\n useEffect(() => {\n const isStatic = queryParams?.get(\"staticOrDynamic\") === \"STATIC\";\n if (\n isSyncedLoaded &&\n menuGroups &&\n queryParams.get(\"featureId\") &&\n !isStatic\n ) {\n fetchFeatureInfo();\n }\n }, [isSyncedLoaded, menuGroups]);\n\n const fetchMenuGroups = async () => {\n const response = (\n await execute({\n code: \"fetch_menu_groups\",\n })\n ).data;\n setMenuTypes(response.result.map((item) => item.menu_type));\n setMenuGroups(response.result);\n };\n const fetchTables = async () => {\n const response = (\n await execute({\n code: \"mfa_retreive_all_table_names\",\n })\n ).data;\n setEntityList(response.result.map((data) => data.table_name));\n };\n const fetchSyncedTables = async () => {\n const response = (\n await execute({\n code: \"retrieve_synced_tables\",\n })\n ).data;\n setSyncedTableList(response?.result);\n };\n const fetchFormNames = async () => {\n const response = (\n await execute({\n code: \"mfa_retrieve_separate_feature_forms\",\n })\n ).data;\n\n if (response.result) {\n let forms = response.result;\n setFormNames(forms);\n let obj = {};\n forms.forEach((form) => {\n try {\n const parsedVersions = JSON.parse(form.versions);\n obj[form.form_code] = parsedVersions;\n } catch (err) {\n console.error(\"Invalid JSON in form.versions:\", form.versions, err);\n obj[form.form_code] = [];\n }\n });\n\n setFormVersions(obj);\n return obj;\n }\n };\n\n const fetchData = async () => {\n try {\n const { data: users } = await execute({\n code: \"user_search_for_selectize\",\n parameters: {\n searchString: \"\",\n },\n });\n setUserData(users?.result);\n\n const rolesRes = await getRoleList();\n setRoleData(rolesRes.data);\n } catch (error) {\n console.error(\"Error fetching users or roles:\", error);\n }\n };\n\n const fetchGlobalQueryCodes = async (search = \"\") => {\n try {\n const response = (\n await execute({\n code: \"GET_ALL_QUERY_CODE\",\n parameters: { search },\n })\n ).data;\n setQueryCodeOptions(response?.result || []);\n } catch (err) {\n console.error(\"Error fetching query codes:\", err);\n }\n };\n\n const getFilteredRoles = () => {\n if (\n formCtrl.getValues(\"isMobileFeature\") &&\n formCtrl.getValues(\"isWebFeature\")\n ) {\n return roleData;\n }\n return roleData.filter((role) => {\n const { roleType } = role;\n if (roleType === null) return true;\n if (\n formCtrl.getValues(\"isMobileFeature\") &&\n (roleType === \"MOBILE\" || roleType === \"BOTH\")\n )\n return true;\n if (\n formCtrl.getValues(\"isWebFeature\") &&\n (roleType === \"WEB\" || roleType === \"BOTH\")\n )\n return true;\n\n return false;\n });\n };\n\n useEffect(() => {\n if (!roleData?.length) return;\n\n const filteredDtos = userMenuItemDtos.filter((dto) => {\n if (!dto.roleName) return true;\n\n const matchingRole = roleData.find((role) => role.name === dto.roleName);\n if (!matchingRole) return true;\n\n const { roleType } = matchingRole;\n\n if (!isMobileFeature && roleType === \"MOBILE\") return false;\n if (!isWebFeature && roleType === \"WEB\") return false;\n\n return true;\n });\n setUserMenuItemDtos(filteredDtos);\n }, [isMobileFeature, isWebFeature, roleData]);\n\n const getOptionLabel = (option) => {\n const { firstName, lastName, userName } = option;\n return !firstName && !lastName && !userName\n ? \"\"\n : (() => {\n const value =\n firstName && !lastName && !userName\n ? firstName\n : `${firstName} ${lastName} (${userName})`;\n return value;\n })();\n };\n\n const handleFeatureType = () => {\n setFeatureGroup(() => {\n const featGroup = formCtrl.getValues(\"menuType\")\n ? JSON.parse(\n menuGroups?.find(\n (item) => item.menu_type === formCtrl.getValues(\"menuType\"),\n ).groupNames,\n )\n : null;\n const validGroups = featGroup?.filter((g) => g.id !== null);\n if (validGroups?.length) {\n return validGroups;\n } else {\n formCtrl.setValue(\"menuGroup\", \"\");\n return validGroups;\n }\n });\n };\n\n const handleFeatureGroup = (res) => {\n formCtrl.setValue(\"menuGroup\", res.target.value);\n };\n\n const enableForMobile = (res) => {\n let forMobile = res.target.checked;\n if (forMobile) setShowMobileFields(true);\n else {\n setShowMobileFields(false);\n formCtrl.setValue(\"entityName\", null);\n formCtrl.setValue(\"icon\", null);\n formCtrl.setValue(\"mobileEntitiesSync\", null);\n formCtrl.setValue(\"conditions\", null);\n formCtrl.setValue(\"mobileMode\", null);\n }\n };\n\n const disableForStaticFeature = (res) => {\n if (!res.target.checked) {\n formCtrl.setValue(\"formCode\", null);\n formCtrl.setValue(\"version\", null);\n }\n };\n\n const handleAddParent = () => {\n setModalMode(\"add-parent\");\n setModalParentId(null);\n setEditData(null);\n setEditOriginalId(null);\n setModalOpen(true);\n };\n\n const handleAddChild = (parentPerm) => {\n setModalMode(\"add-child\");\n setModalParentId(parentPerm.permissionId);\n setEditData(null);\n setEditOriginalId(null);\n setModalOpen(true);\n };\n\n const handleEdit = (perm) => {\n setModalMode(\"edit\");\n setModalParentId(null);\n setEditData(perm);\n setEditOriginalId(perm.permissionId);\n setModalOpen(true);\n };\n\n const addChildRecursively = (items, parentId, newChild) => {\n return items.map((it) => {\n if (it.permissionId === parentId) {\n return {\n ...it,\n childPermissions: [...(it.childPermissions || []), newChild],\n };\n }\n return {\n ...it,\n childPermissions: addChildRecursively(\n it.childPermissions || [],\n parentId,\n newChild,\n ),\n };\n });\n };\n\n const updateNodeRecursively = (items, originalId, newNode) => {\n return items.map((it) => {\n if (it.permissionId === originalId) {\n return {\n ...newNode,\n childPermissions: it.childPermissions || [],\n };\n }\n return {\n ...it,\n childPermissions: updateNodeRecursively(\n it.childPermissions || [],\n originalId,\n newNode,\n ),\n };\n });\n };\n\n const removeRecursive = (items, idToRemove) => {\n return items\n .filter((it) => it.permissionId !== idToRemove)\n .map((it) => ({\n ...it,\n childPermissions: removeRecursive(\n it.childPermissions || [],\n idToRemove,\n ),\n }));\n };\n\n const handleSavePermission = (newPermission) => {\n setPermissions((prev) => {\n let updatedPermissions = [...prev];\n\n if (modalMode === \"add-parent\") {\n updatedPermissions = [...prev, newPermission];\n } else if (modalMode === \"add-child\") {\n const findParent = (items, parentId) => {\n for (const it of items) {\n if (it.permissionId === parentId) return it;\n if (it.childPermissions?.length) {\n const found = findParent(it.childPermissions, parentId);\n if (found) return found;\n }\n }\n return null;\n };\n\n const parent = findParent(prev, modalParentId);\n\n const childWithType = {\n ...newPermission,\n permissionType:\n typeof parent.permissionType === \"string\"\n ? { type: parent.permissionType }\n : parent.permissionType,\n };\n\n updatedPermissions = addChildRecursively(\n prev,\n modalParentId,\n childWithType,\n );\n } else if (modalMode === \"edit\") {\n updatedPermissions = updateNodeRecursively(\n prev,\n editOriginalId,\n newPermission,\n );\n }\n return updatedPermissions;\n });\n\n setModalOpen(false);\n setModalMode(\"add-parent\");\n setModalParentId(null);\n setEditData(null);\n setEditOriginalId(null);\n };\n\n const handleRemovePermission = (perm) => {\n const idToRemove = typeof perm === \"string\" ? perm : perm.permissionId;\n setPermissions((prev) => removeRecursive(prev, idToRemove));\n };\n\n useEffect(() => {\n formCtrl.setValue(\"additionalPermissions\", permissions);\n }, [permissions, formCtrl]);\n\n const flattenPermissions = (permissions, parentId = null) => {\n let result = [];\n\n permissions.forEach((perm) => {\n const {\n permissionId,\n permissionType,\n permissionName,\n permissionDesc,\n enabled,\n backendUrl,\n urlType,\n queryCode,\n } = perm;\n result.push({\n permissionId,\n permissionType: permissionType?.type,\n permissionName,\n permissionDesc,\n parentPermissionId: parentId,\n enabled,\n backendUrl,\n urlType,\n queryCode,\n });\n\n if (perm.childPermissions && perm.childPermissions.length > 0) {\n result = result.concat(\n flattenPermissions(perm.childPermissions, permissionId),\n );\n }\n });\n return result;\n };\n\n const reloadForms = () => {\n (async () => {\n let obj = await fetchFormNames();\n setFormVersions(obj);\n setSelectedFormCode(formCtrl.getValues(\"formCode\"));\n })();\n };\n const formattedFeatureJson = JSON.stringify(\n (isUpdate.value\n ? formCtrl.getValues(\"updatedFields\")\n : formCtrl.getValues(\"fields\")\n )?.reduce((acc, curr) => {\n if (curr.value?.trim()) {\n acc[curr.value.trim()] = curr.checkbox;\n }\n return acc;\n }, {}),\n );\n\n const onFeatureAdd = () => {\n if (!isDynamicFeature && isNew?.val === false) {\n try {\n const newEntries = [];\n\n if (selectedUser?.id) {\n newEntries.push({\n designationId: null,\n userId: selectedUser.id,\n fullName:\n `${selectedUser.firstName || \"\"} ${selectedUser.lastName || \"\"}`.trim(),\n featureJson: formattedFeatureJson,\n });\n }\n\n if (selectedRoles?.length > 0) {\n newEntries.push(\n ...selectedRoles.map((role) => ({\n designationId: role.id,\n roleName: role.name,\n featureJson: formattedFeatureJson,\n })),\n );\n }\n setUserMenuItemDtos((prev) => {\n return [...prev, ...newEntries];\n });\n\n showToast({\n message: \"Menu item added successfully\",\n type: \"success\",\n });\n\n setSelectedRoles([]);\n setSelectedUser({});\n } catch (error) {\n console.error(error);\n showToast({\n message: \"Cannot add menu item\",\n type: \"error\",\n });\n }\n } else {\n const entities = [];\n\n if (selectedUser?.id) {\n entities.push({\n type: \"user\",\n id: selectedUser.id,\n name: selectedUser.firstName + \" \" + selectedUser.lastName,\n });\n }\n\n if (selectedRoles.length > 0) {\n entities.push({\n type: \"role\",\n ids: selectedRoles.map((r) => r.id),\n names: selectedRoles.map((r) => r.name),\n });\n }\n\n if (entities.length === 0) return;\n\n setSelectedEntity(entities);\n setGrantModalOpen(true);\n setSelectedUser(null);\n setSelectedRoles([]);\n }\n };\n\n const buildPermissionUserMapForQuery = (grantedData) => {\n const result = [];\n\n const processPermissions = (permissions, entity) => {\n for (const perm of permissions) {\n if (perm.enabled) {\n result.push({\n permission_id: perm.permissionId,\n user_id: entity.user_id || null,\n role_id: entity.role_id || null,\n is_backend_only: entity.isBackendOnly || false,\n start_date: entity.startDate || null,\n end_date: entity.endDate || null,\n });\n }\n }\n };\n\n for (const entity of grantedData) {\n processPermissions(entity.permissions || [], entity);\n }\n return result;\n };\n\n const handleToggle = (rowIndex, toggledPerm) => {\n setGrantedData((prev) => {\n const newData = [...prev];\n\n newData[rowIndex] = {\n ...newData[rowIndex],\n permissions: togglePermissionDeep(\n newData[rowIndex].permissions,\n toggledPerm.permissionId,\n !toggledPerm.enabled,\n ),\n };\n\n return newData;\n });\n };\n\n const togglePermissionDeep = (permissions, targetId, newState) => {\n const updatedPermissions = permissions.map((perm) => {\n if (perm.permissionId === targetId) {\n return {\n ...perm,\n enabled: newState,\n childPermissions: perm.childPermissions?.length\n ? toggleAllChildren(perm.childPermissions, newState)\n : [],\n };\n }\n\n if (perm.childPermissions?.length) {\n const updatedChildren = togglePermissionDeep(\n perm.childPermissions,\n targetId,\n newState,\n );\n\n const allChildrenEnabled =\n updatedChildren.length > 0 &&\n updatedChildren.every((c) => c.enabled === true);\n\n return {\n ...perm,\n enabled: allChildrenEnabled,\n childPermissions: updatedChildren,\n };\n }\n\n return perm;\n });\n\n return updatedPermissions;\n };\n\n const toggleAllChildren = (children, newState) => {\n return children.map((child) => ({\n ...child,\n enabled: newState,\n childPermissions: child.childPermissions?.length\n ? toggleAllChildren(child.childPermissions, newState)\n : [],\n }));\n };\n\n const checkAvailability = async (featureConstant) => {\n const response = (\n await execute({\n code: \"check_unique_feature_constant\",\n parameters: {\n featureConstant: featureConstant,\n },\n })\n ).data;\n if (response.result[0].exists) {\n formCtrl.setError(\"featureConstant\", {\n type: \"manual\",\n message: \"Feature constant already exists\",\n });\n } else {\n setSuccessMessage(`${featureConstant} Feature constant is available`);\n }\n };\n const checkNavigationAvailability = async (featureState) => {\n const response = (\n await execute({\n code: \"CHECK_UNIQUE_NAVIGATION_STATE\",\n parameters: {\n featureState: featureState,\n },\n })\n ).data;\n if (response.result[0].exists) {\n formCtrl.setError(\"navigationState\", {\n type: \"manual\",\n message: \"Feature State already exists\",\n });\n } else {\n setSuccessMessage(`${featureState} Feature State is available`);\n }\n };\n const debouncedCheckAvailability = useDebounceFn(checkAvailability, 500);\n const debounceNavigationCheckAvailability = useDebounceFn(\n checkNavigationAvailability,\n 500,\n );\n\n const debouncedFetch = debounce(\n async (value, setUserData, setSelectedUser) => {\n const { data: users } = await execute({\n code: \"user_search_for_selectize\",\n parameters: {\n searchString: value,\n },\n });\n\n setUserData(users.result);\n setSelectedUser({ firstName: value, lastName: \"\", userName: \"\" });\n },\n 500,\n );\n\n const handleDynamicFeatureSubmit = async (data) => {\n const flatPermissions = flattenPermissions(permissions);\n\n let menuConfigDto = {\n code: \"insert_dynamic_feature_into_menu_config\",\n parameters: {\n menuName: data.menuName ? data.menuName : null,\n featureConstant: data.featureConstant ? data.featureConstant : null,\n formCode: data.formCode && data.formCode !== \"\" ? data.formCode : null,\n prevFormCode: prevLinkedFormCode || null,\n deLinkPrevForm: prevLinkedFormCode !== data.formCode ? true : false,\n menuType: data.menuType ? data.menuType : null,\n menuGroup: data.menuGroup ? parseInt(data.menuGroup) : null,\n navigationState:\n data.navigationState && data.formCode && data.formCode !== \"\"\n ? data.navigationState\n : null,\n formVersion: data.version ? data.version : null,\n isMobileFeature: data.isMobileFeature ? data.isMobileFeature : null,\n isWebFeature: data.isWebFeature ? data.isWebFeature : null,\n permissions: JSON.stringify(flatPermissions),\n mobileConfig: JSON.stringify({\n entity_name: data.entityName ?? null,\n mobile_mode: data.mobileMode ? data.mobileMode.toUpperCase() : null,\n icon: data.icon ?? null,\n mobile_entities_sync: data.mobileEntitiesSync ?? [],\n conditions: data.conditions ?? null,\n training_required: data.trainingRequired ?? false,\n training_query: data.trainingQuery ?? null,\n notification_badge_enabled: data.notificationBadgeEnabled ?? false,\n notification_badge_type: data.notificationBadgeType ?? null,\n notification_badge_query: data.notificationBadgeQuery ?? null,\n }),\n },\n };\n try {\n const res = await execute(menuConfigDto);\n if (res) {\n let translationDtoList = [];\n if (data.menuName && data.menuName.length > 0) {\n translationDtoList.push({\n code: \"medplat_form_insert_into_translation_master\",\n parameters: {\n translation_key: data.menuName.replaceAll(\" \", \"\"),\n translation_value: data.menuName,\n form_code: \"General\",\n },\n sequence: 1,\n });\n }\n if (translationDtoList.length > 0) {\n await executeAll(translationDtoList);\n }\n\n const permissionUserMap = buildPermissionUserMapForQuery(grantedData);\n\n if (permissionUserMap) {\n await execute({\n code: \"GRANT_PERMISSION_USER_MAP\",\n parameters: {\n permissionUserMap: JSON.stringify(permissionUserMap),\n },\n });\n }\n }\n\n showToast({\n message: queryParams.get(\"featureId\")\n ? \"Feature updated successfully\"\n : \"New Dynamic feature created successfully!\",\n type: \"success\",\n });\n setSubmitted(true);\n } catch (error) {\n showToast({\n message: error.message,\n type: \"error\",\n });\n }\n };\n const handleStaticFeatureSubmit = async (values) => {\n try {\n let groupUUID = null;\n let subgroupId = null;\n let subgroupUUID = null;\n const UUID = generateUUID();\n if (values?.menuGroup?.length) {\n groupUUID = generateUUID();\n }\n const flatPermissions = flattenPermissions(permissions);\n const params = {\n code: \"insert_menu_config\",\n parameters: {\n UUID,\n featureJson: null,\n menuGroup: values.menuGroup ? parseInt(values.menuGroup) : null,\n groupUUID,\n menuName: values.menuName ? values.menuName : null,\n menuType: values.menuType ? values.menuType : null,\n navigationState: values.navigationState\n ? values.navigationState\n : null,\n subgroupId,\n subgroupUUID,\n isMobileFeature: values?.isMobileFeature\n ? values?.isMobileFeature\n : null,\n isWebFeature: values?.isWebFeature ? values?.isWebFeature : null,\n permissions: JSON.stringify(flatPermissions),\n isNewFeature: \"true\",\n mobileConfig: JSON.stringify({\n entity_name: values?.entityName ?? null,\n mobile_mode: values?.mobileMode\n ? values?.mobileMode.toUpperCase()\n : null,\n icon: values?.icon ?? null,\n mobile_entities_sync: values?.mobileEntitiesSync ?? [],\n conditions: values?.conditions ?? null,\n training_required: values.trainingRequired ?? false,\n training_query: values.trainingQuery ?? null,\n notification_badge_enabled:\n values.notificationBadgeEnabled ?? false,\n notification_badge_type: values.notificationBadgeType ?? null,\n notification_badge_query: values.notificationBadgeQuery ?? null,\n }),\n },\n };\n if (isUpdate.value && isNew?.val === false) {\n params.code = \"update_menu_config\";\n const { fields, updatedFields } = values;\n const featureJson =\n isUpdate.value && showFields\n ? convertToJson(updatedFields)\n : fields[0]?.value && showFields\n ? convertToJson(fields)\n : {};\n formCtrl.setValue(\"featureJson\", featureJson);\n delete params.parameters.UUID;\n delete params.parameters.groupUUID;\n delete params.parameters.subgroupUUID;\n delete params.parameters.permissions;\n delete params.parameters.isNewFeature;\n params.parameters.featureType = queryParams.get(\"featureType\");\n params.parameters.featureId = queryParams.get(\"featureId\");\n params.parameters.featureJson = featureJson;\n }\n let returnedData;\n if (isUpdate.value && isNew?.val === false) {\n const { data } = await executeQuery(params);\n returnedData = data;\n await updateUserMenuItems(data?.result[0]?.id, userMenuItemDtos);\n } else {\n if (isUpdate.value) {\n delete params.parameters.UUID;\n delete params.parameters.groupUUID;\n delete params.parameters.subgroupUUID;\n delete params.parameters.isNewFeature;\n params.parameters.featureType = queryParams.get(\"featureType\");\n params.parameters.featureId = queryParams.get(\"featureId\");\n }\n const { data } = await execute(params);\n returnedData = data;\n if (data) {\n let translationDtoList = [];\n if (values.menuName && values.menuName.length > 0) {\n translationDtoList.push({\n code: \"medplat_form_insert_into_translation_master\",\n parameters: {\n translation_key: values.menuName.replaceAll(\" \", \"\"),\n translation_value: values.menuName,\n form_code: \"General\",\n },\n sequence: 1,\n });\n }\n if (translationDtoList.length > 0) {\n await executeAll(translationDtoList);\n }\n\n const permissionUserMap = buildPermissionUserMapForQuery(grantedData);\n if (permissionUserMap) {\n await execute({\n code: \"GRANT_PERMISSION_USER_MAP\",\n parameters: {\n permissionUserMap: JSON.stringify(permissionUserMap),\n },\n });\n }\n }\n }\n if (returnedData?.result?.length) {\n showToast({\n message: isUpdate.value\n ? \"FEATURE EDITED SUCCESFULLY\"\n : \"FEATURE ADDED SUCCESFULLY\",\n type: \"success\",\n });\n } else {\n showToast({\n message: \"FEATURE CONFIGURATION ALREADY EXISTS \",\n type: \"error\",\n });\n }\n setSubmitted(true);\n } catch (error) {\n showToast({\n message: error.message,\n type: \"error\",\n });\n }\n };\n\n const onSubmit = async (data) => {\n if (isDynamicFeature) {\n handleDynamicFeatureSubmit(data);\n } else {\n handleStaticFeatureSubmit(data);\n }\n };\n\n const convertToJson = (fields) => {\n return JSON.stringify(\n fields?.reduce((acc, field) => {\n acc[field.value] = field.checkbox;\n return acc;\n }, {}),\n );\n };\n\n const handleInputChange = (e, value) => {\n if (e && e.type === \"change\") {\n fetchUserData(value);\n }\n };\n\n const fetchUserData = useCallback(\n (value) => {\n debouncedFetch(value, setUserData, setSelectedUser);\n },\n [debouncedFetch],\n );\n const handleCheckboxChange = () => {\n setShowFields(!showFields);\n if (!showFields) {\n isUpdate.value\n ? formCtrl.setValue(\"updatedFields\", [\n { id: 1, value: \"\", checkbox: false },\n ])\n : formCtrl.setValue(\"fields\", [{ id: 1, value: \"\", checkbox: false }]);\n }\n };\n const handleCheckboxValueChange = (id) => {\n const fields = isUpdate.value\n ? formCtrl.getValues(\"updatedFields\")\n : formCtrl.getValues(\"fields\");\n const newFields = fields.map((field) => {\n if (field.id === id) {\n return { ...field, checkbox: !field.checkbox };\n }\n return field;\n });\n isUpdate.value\n ? formCtrl.setValue(\"updatedFields\", newFields)\n : formCtrl.setValue(\"fields\", newFields);\n };\n const handleAddField = () => {\n const fields = isUpdate.value\n ? formCtrl.getValues(\"updatedFields\")\n : formCtrl.getValues(\"fields\");\n\n const lastField = fields[fields?.length - 1];\n if (lastField?.value.trim() === \"\") {\n alert(\"Enter the right name before adding a new one.\");\n return;\n }\n const newField = {\n id: fields.length + 1,\n value: \"\",\n checkbox: false,\n };\n isUpdate.value\n ? formCtrl.setValue(\"updatedFields\", [...fields, newField])\n : formCtrl.setValue(\"fields\", [...fields, newField]);\n };\n const handleDeleteField = (id) => {\n const fields = isUpdate.value\n ? formCtrl.getValues(\"updatedFields\")\n : formCtrl.getValues(\"fields\");\n\n const newFields = fields.filter((field) => field.id !== id);\n isUpdate.value\n ? formCtrl.setValue(\"updatedFields\", newFields)\n : formCtrl.setValue(\"fields\", newFields);\n if (newFields?.length === 0) {\n isUpdate.value ? setShowFields(true) : setShowFields(false);\n }\n };\n return (\n <form\n noValidate\n ref={formRef}\n onSubmit={formCtrl.handleSubmit(onSubmit)}\n method=\"POST\"\n >\n {/* Page shell, matching the bordered card every other screen sits in. */}\n <Paper\n elevation={0}\n sx={{\n width: \"100%\",\n p: { xs: 2.5, md: 3 },\n mt: 2,\n mb: 3,\n border: \"1px solid\",\n borderColor: \"divider\",\n borderRadius: (t) => `${t.shape.cardRadius}px`,\n backgroundColor: \"background.paper\",\n display: \"flex\",\n flexDirection: \"column\",\n // Spacing vocabulary: 3 between major page regions.\n gap: 3,\n }}\n >\n {/* Scan order: where am I, what is this for. */}\n <Box>\n <Typography\n variant=\"h5\"\n component=\"h1\"\n sx={{ fontWeight: 800, color: \"text.primary\", mb: 0.5 }}\n data-testid=\"managefeature-title\"\n >\n {queryParams.get(\"featureId\")\n ? translate(\"Edit Feature\")\n : translate(\"New Feature\")}\n </Typography>\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n sx={{ maxWidth: 720 }}\n >\n {translate(\n \"Define what the feature is, where it appears in the menu, and who can use it. Your answers are kept as you move between steps.\",\n )}\n </Typography>\n </Box>\n\n <Box\n sx={{\n display: \"flex\",\n flexDirection: { xs: \"column\", md: \"row\" },\n alignItems: \"stretch\",\n // One border around the rail+panel pair rather than one per child.\n border: \"1px solid\",\n borderColor: \"divider\",\n borderRadius: (t) => `${t.shape.cardRadius}px`,\n overflow: \"hidden\",\n }}\n >\n <Box\n sx={{\n // Was `30%` beside a `80%` panel — 110% of the row, which is why\n // the rail pushed out of view. A fixed track plus a flexible\n // panel keeps both on screen at any zoom level.\n width: { xs: \"100%\", md: 280 },\n flexShrink: 0,\n maxHeight: { xs: \"none\", md: \"87vh\" },\n // Content taller than the track (zoomed in, or a long step list)\n // must scroll. It previously centred and clipped at both ends.\n overflowY: \"auto\",\n // Both stops are dark in either theme mode. The old gradient\n // ended on `custom.black2`, which is a *text* token: #1D1D1D in\n // light mode but #A4B8CC in dark, so in dark mode the rail faded\n // to pale blue-grey and the white labels on it disappeared.\n background: (t) =>\n `linear-gradient(160deg, ${t.palette.primary.dark} 0%, ${alpha(\n t.palette.common.black,\n 0.92,\n )} 100%)`,\n p: 2.5,\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"flex-start\",\n gap: 0.5,\n }}\n >\n {steps.map((step, index) => {\n const isActive = index === activeStep;\n const isFilled = isStepFilled(index);\n // Mobile Config and Form Linking drop out of the flow depending\n // on the toggles in step 1. The rail listed them regardless, so\n // it promised six steps and then silently delivered four.\n const isApplicable = visibleSteps.some((v) => v.key === step.key);\n const isReachable = isApplicable && !isFilled && !isActive;\n const isDisabled = !isReachable && !isFilled && !isActive;\n\n // Every colour below is chosen against the dark rail, so all\n // three states stay legible in light and dark mode alike.\n let circleBg = \"transparent\";\n let circleBorder = (t) =>\n `2px solid ${alpha(t.palette.common.white, 0.35)}`;\n let circleTextColor = (t) => alpha(t.palette.common.white, 0.6);\n\n if (isActive) {\n circleBg = \"common.white\";\n circleTextColor = \"primary.dark\";\n circleBorder = \"2px solid\";\n } else if (isFilled) {\n circleBg = \"success.main\";\n circleTextColor = \"success.contrastText\";\n circleBorder = (t) => `2px solid ${t.palette.success.main}`;\n } else if (isReachable) {\n circleTextColor = \"common.white\";\n circleBorder = (t) =>\n `2px solid ${alpha(t.palette.common.white, 0.7)}`;\n }\n\n const labelColor = isDisabled\n ? (t) => alpha(t.palette.common.white, 0.45)\n : \"common.white\";\n\n return (\n <Step key={step.key} sx={{ p: 0, m: 0 }}>\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n position: \"relative\",\n // A translucent white wash reads as \"selected\" on the\n // dark rail. The old `custom.gray3` painted a light grey\n // slab and then wrote white text on it.\n backgroundColor: (t) =>\n isActive ? alpha(t.palette.common.white, 0.16) : \"transparent\",\n px: 1.5,\n py: 1.25,\n transition: \"background-color 0.2s ease\",\n borderRadius: 2,\n minHeight: 56,\n }}\n >\n {index < steps?.length - 1 && (\n <Box\n aria-hidden=\"true\"\n sx={{\n position: \"absolute\",\n top: \"calc(50% + 16px)\",\n left: 12 + 15,\n height: \"calc(100% - 32px)\",\n width: 2,\n backgroundColor: (t) =>\n isFilled\n ? t.palette.success.main\n : alpha(t.palette.common.white, 0.3),\n zIndex: 0,\n }}\n />\n )}\n\n <Box\n sx={{\n width: 30,\n height: 30,\n borderRadius: \"50%\",\n backgroundColor: circleBg,\n border: circleBorder,\n color: circleTextColor,\n fontWeight: 700,\n fontSize: 13,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n zIndex: 1,\n flexShrink: 0,\n }}\n >\n {isFilled && !isActive ? (\n <FontAwesomeIcons iconName=\"faCheck\" size=\"sm\" />\n ) : (\n index + 1\n )}\n </Box>\n\n <Box sx={{ ml: 1.5, minWidth: 0 }}>\n <Typography\n variant=\"caption\"\n sx={{\n display: \"block\",\n color: (t) => alpha(t.palette.common.white, 0.6),\n fontWeight: 600,\n textTransform: \"uppercase\",\n letterSpacing: \"0.08em\",\n fontSize: \"0.65rem\",\n lineHeight: 1.4,\n }}\n >\n {translate(\"Step\")} {index + 1}\n </Typography>\n <Typography\n variant=\"body2\"\n sx={{\n color: labelColor,\n fontWeight: isActive ? 700 : 500,\n textTransform: \"uppercase\",\n fontSize: 13,\n lineHeight: 1.3,\n overflowWrap: \"anywhere\",\n textDecoration:\n !isApplicable && !isActive ? \"line-through\" : \"none\",\n }}\n >\n {translate(step.label)}\n </Typography>\n {!isApplicable && !isActive && (\n <Typography\n variant=\"caption\"\n sx={{\n display: \"block\",\n color: (t) => alpha(t.palette.common.white, 0.5),\n fontSize: \"0.65rem\",\n lineHeight: 1.4,\n }}\n >\n {translate(\"Not needed for this feature\")}\n </Typography>\n )}\n </Box>\n </Box>\n </Step>\n );\n })}\n </Box>\n\n <Box\n sx={{\n // Takes whatever the fixed rail leaves, instead of a second\n // percentage that summed past 100 with it.\n flex: 1,\n minWidth: 0,\n backgroundColor: \"background.paper\",\n padding: 2,\n display: \"flex\",\n flexDirection: \"column\",\n maxHeight: { xs: \"none\", md: \"87vh\" },\n overflowY: \"auto\",\n }}\n >\n {steps[activeStep]?.key === \"featureDetails\" && (\n <Box>\n <Box sx={{ maxWidth: 800, mx: \"auto\" }}>\n <StepHeader\n title={translate(\"Feature Details\")}\n description={translate(\n \"Name the feature, say whether it is dynamic, and choose where it appears in the menu.\",\n )}\n />\n {/* One field per row, stacked down the column. Gap on the\n parent rather than a margin on each child. */}\n <Box\n sx={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}\n >\n <FieldRow\n label={`${translate(\"Feature\")} ${translate(\"Name\")}`}\n required\n >\n <CustomTextField\n control={formCtrl.control}\n id=\"menuName\"\n name=\"menuName\"\n errors={formCtrl.formState.errors}\n disabled={isSeparateFeature}\n placeholder=\"Feature Name\"\n />\n </FieldRow>\n\n <FieldRow\n label={`${translate(\"Is\")} ${translate(\"dynamic\")} ${translate(\"feature?\")}`}\n >\n <Controller\n name=\"isDynamicFeature\"\n control={formCtrl.control}\n rules={{ required: \"Required field\" }}\n render={({ field }) => (\n <CustomSwitch\n checked={field.value}\n disabled={!!queryParams.get(\"featureId\")}\n onChange={(e) => {\n field.onChange(e.target.checked);\n disableForStaticFeature(e);\n }}\n />\n )}\n />\n </FieldRow>\n\n {!isDynamicFeature ? (\n <FieldRow\n key=\"dynamic-feature\"\n label={`${translate(\"Feature\")} ${translate(\"State\")}`}\n required\n help={\n <FieldDescription\n title={\n <Typography\n fontSize={12}\n maxWidth={220}\n sx={{ whiteSpace: \"pre-line\" }}\n >\n {\n \"A dotted state that maps to a route.\\nExamples:\\n• techo.querymanagement\\n• techo.admin.medplatForms\\n• medplat.form.myForm\"\n }\n </Typography>\n }\n size=\"sm\"\n />\n }\n >\n <CustomTextField\n control={formCtrl.control}\n id=\"navigationState\"\n name=\"navigationState\"\n placeholder=\"Feature State\"\n disabled={isSeparateFeature || disableEditing}\n successMessage={successMessage}\n dataTestId=\"managefeature-textfield-feature-state\"\n errors={formCtrl.formState.errors}\n onChange={(e) =>\n debounceNavigationCheckAvailability(e.target.value)\n }\n />\n </FieldRow>\n ) : (\n <FieldRow\n key=\"static-feature\"\n label={`${translate(\"Feature\")} ${translate(\"Constant\")}`}\n required\n >\n <CustomTextField\n control={formCtrl.control}\n id=\"featureConstant\"\n name=\"featureConstant\"\n errors={formCtrl.formState.errors}\n successMessage={successMessage}\n placeholder=\"Feature Constant\"\n disabled={disableEditing}\n onChange={(e) =>\n debouncedCheckAvailability(e.target.value)\n }\n />\n </FieldRow>\n )}\n\n <FieldRow\n label={`${translate(\"Link\")} ${translate(\"to\")} ${translate(\"Menu\")}`}\n required\n >\n <CustomDropdown\n control={formCtrl.control}\n name=\"menuType\"\n options={menuTypes}\n errors={formCtrl.formState.errors}\n disableClearable={false}\n onChange={(e) => {\n formCtrl.setValue(\"menuType\", e.target.value);\n handleFeatureType();\n }}\n />\n </FieldRow>\n\n {featureGroup?.length > 0 && (\n <FieldRow\n label={`${translate(\"Menu\")} ${translate(\"SubGroup\")}`}\n >\n <CustomDropdown\n control={formCtrl.control}\n name=\"menuGroup\"\n errors={formCtrl.formState.errors}\n displayName=\"name\"\n optionValue=\"id\"\n options={featureGroup}\n disableClearable={false}\n onChange={handleFeatureGroup}\n />\n </FieldRow>\n )}\n\n <FieldRow\n label={`${translate(\"Enable\")} ${translate(\"feature\")} ${translate(\"for\")}`}\n >\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 3,\n flexWrap: \"wrap\",\n }}\n >\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 0.5,\n }}\n >\n <Typography variant=\"body2\">\n {translate(\"Web\")}\n </Typography>\n <Controller\n name=\"isWebFeature\"\n control={formCtrl.control}\n render={({ field }) => (\n <CustomSwitch\n {...field}\n checked={field.value}\n onChange={(e) =>\n field.onChange(e.target.checked)\n }\n />\n )}\n />\n </Box>\n\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 0.5,\n }}\n >\n <Typography variant=\"body2\">\n {translate(\"Mobile\")}\n </Typography>\n <Controller\n name=\"isMobileFeature\"\n control={formCtrl.control}\n render={({ field }) => (\n <CustomSwitch\n {...field}\n checked={field.value}\n onChange={(e) => {\n field.onChange(e.target.checked);\n enableForMobile(e);\n }}\n />\n )}\n />\n </Box>\n </Box>\n </FieldRow>\n </Box>\n </Box>\n </Box>\n )}\n {steps[activeStep]?.key === \"mobileConfig\" && showMobileFields && (\n <Box>\n <Box>\n <StepHeader\n title={translate(\"Mobile Setup\")}\n description={translate(\n \"How this feature behaves in the mobile app: its entity, icon and condition query.\",\n )}\n />\n\n <Accordion\n expanded={accordionExpanded.basicConfig}\n onChange={() =>\n setAccordionExpanded((prev) => ({\n ...prev,\n basicConfig: !prev.basicConfig,\n }))\n }\n sx={{\n mb: 1.5,\n borderRadius: 2,\n boxShadow: \"0 2px 8px rgba(0,0,0,0.08)\",\n border: \"1px solid rgba(33, 150, 243, 0.2)\",\n borderLeft: \"4px solid #2196f3\",\n \"&:before\": { display: \"none\" },\n overflow: \"hidden\",\n }}\n >\n <AccordionSummary\n expandIcon={\n <FontAwesomeIcons iconName=\"faChevronDown\" size=\"sm\" />\n }\n sx={{\n backgroundColor: \"rgba(33, 150, 243, 0.06)\",\n \"&:hover\": {\n backgroundColor: \"rgba(33, 150, 243, 0.12)\",\n },\n minHeight: 52,\n }}\n >\n <Typography fontWeight={700} fontSize={15}>\n Basic Config\n </Typography>\n </AccordionSummary>\n <AccordionDetails\n sx={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}\n >\n <Box\n sx={{\n display: \"flex\",\n flexDirection: { xs: \"column\", sm: \"row\" },\n alignItems: { xs: \"stretch\", sm: \"center\" },\n gap: { xs: 2, sm: 0 },\n }}\n >\n <Box\n sx={{\n display: \"flex\",\n flexDirection: { xs: \"column\", sm: \"row\" },\n alignItems: { xs: \"stretch\", sm: \"center\" },\n gap: { xs: 0.5, sm: 2 },\n width: { xs: \"100%\", sm: \"50%\" },\n }}\n >\n <Typography\n variant=\"subtitle1\"\n sx={{ minWidth: { xs: 0, sm: \"140px\" }, flexShrink: 0 }}\n >\n {translate(\"Feature Icon\")}{\" \"}\n <Box component=\"span\" sx={{ color: \"error.main\" }}>\n *{\" \"}\n </Box>\n <FieldDescription\n title={\n <Typography fontSize={12} maxWidth={200}>\n {\"Upload Feature Icon\"}\n </Typography>\n }\n size=\"sm\"\n />\n </Typography>\n <Tooltip title=\"Upload Icon\">\n <Box\n sx={{\n transform: \"scale(0.55)\",\n transformOrigin: \"left center\",\n \"& svg\": {\n fontSize: \"2.5rem\",\n },\n }}\n >\n <CustomSvgUpload\n onUpload={(svg) =>\n formCtrl.setValue(\"icon\", svg)\n }\n formControl={formCtrl}\n name=\"icon\"\n accept=\"image/svg+xml, image/svg\"\n errors={\n showMobileFields\n ? formCtrl.formState.errors\n : null\n }\n triggerType=\"icon\"\n />\n </Box>\n </Tooltip>\n </Box>\n <Box\n sx={{\n display: \"flex\",\n flexDirection: { xs: \"column\", sm: \"row\" },\n alignItems: { xs: \"stretch\", sm: \"center\" },\n gap: { xs: 0.5, sm: 2 },\n my: { xs: 2, sm: 4 },\n width: { xs: \"100%\", sm: \"50%\" },\n }}\n >\n <Typography\n variant=\"subtitle1\"\n sx={{ minWidth: { xs: 0, sm: \"140px\" }, flexShrink: 0 }}\n >\n {translate(\"Mode\")}{\" \"}\n <Box component=\"span\" sx={{ color: \"error.main\" }}>\n *{\" \"}\n </Box>\n <FieldDescription\n title={\n <Typography fontSize={12} maxWidth={200}>\n {\n \"Choose whether this feature should work online or offline\"\n }\n </Typography>\n }\n size=\"sm\"\n />\n </Typography>\n <Box sx={{ display: \"flex\", flex: 1 }}>\n <Controller\n name=\"mobileMode\"\n control={formCtrl.control}\n render={({ field, fieldState: { error } }) => (\n <>\n <RadioGroup\n value={field.value ?? \"\"}\n row\n {...field}\n >\n <FormControlLabel\n value=\"ONLINE\"\n control={\n <Radio\n disabled={\n disableEditing &&\n initialMobileModeValue !== null\n }\n />\n }\n label=\"Online\"\n />\n <FormControlLabel\n value=\"OFFLINE\"\n control={\n <Radio\n disabled={\n disableEditing &&\n initialMobileModeValue !== null\n }\n />\n }\n label=\"Offline\"\n />\n </RadioGroup>\n {error?.message && (\n <Typography\n variant=\"caption\"\n color=\"error\"\n sx={{ mt: 0.5 }}\n >\n {error.message}\n </Typography>\n )}\n </>\n )}\n />\n </Box>\n </Box>\n </Box>\n\n <Box\n sx={{\n display: \"flex\",\n flexDirection: { xs: \"column\", sm: \"row\" },\n alignItems: { xs: \"stretch\", sm: \"center\" },\n gap: { xs: 0.5, sm: 2 },\n }}\n >\n <Typography\n variant=\"subtitle1\"\n sx={{ minWidth: { xs: 0, sm: \"140px\" }, flexShrink: 0 }}\n >\n {translate(\"Entity Name\")}{\" \"}\n <FieldDescription\n title={\n <Typography fontSize={12} maxWidth={200}>\n {\"Select Entity Name\"}\n </Typography>\n }\n size=\"sm\"\n />\n </Typography>\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 2,\n flex: 1,\n // A flex child defaults to min-width:auto, so the\n // dropdown refused to shrink below its content and\n // pushed the row past the panel edge on a phone.\n minWidth: 0,\n width: { xs: \"100%\", sm: \"auto\" },\n }}\n >\n <CustomDropdown\n control={formCtrl.control}\n name=\"entityName\"\n options={entityList || []}\n errors={\n showMobileFields\n ? formCtrl.formState.errors\n : null\n }\n size=\"small\"\n disableClearable={false}\n sx={{ flex: 1 }}\n />\n </Box>\n </Box>\n\n {/* Condition Query (conditional) */}\n {entityName?.trim()?.length > 0 && (\n <Box\n sx={{\n display: \"flex\",\n flexDirection: { xs: \"column\", sm: \"row\" },\n alignItems: { xs: \"stretch\", sm: \"flex-start\" },\n gap: { xs: 0.5, sm: 2 },\n my: 2,\n }}\n >\n <Typography\n variant=\"subtitle1\"\n sx={{\n minWidth: { xs: 0, sm: \"140px\" },\n flexShrink: 0,\n pt: { xs: 0, sm: 0.5 },\n }}\n >\n {translate(\"Condition Query\")} :{\" \"}\n <FieldDescription\n title={\n <Typography fontSize={12} maxWidth={200}>\n {\"Write Condition Query in the editor\"}\n </Typography>\n }\n size=\"sm\"\n />\n </Typography>\n <Box\n flex={1}\n sx={{ minWidth: 0, width: { xs: \"100%\", sm: \"auto\" } }}\n >\n <Controller\n name=\"conditions\"\n control={formCtrl.control}\n render={({ field, fieldState: { error } }) => (\n <>\n <Box\n sx={{\n border: \"1px solid\",\n borderColor: error\n ? \"error.main\"\n : \"divider\",\n borderRadius: 2,\n overflow: \"hidden\",\n }}\n >\n {/* SQL authoring belongs in PostgresEditor,\n not a bare Monaco editor: it carries the\n PostgreSQL keyword set and schema-aware\n table/column alias completion. */}\n <PostgresEditor\n height=\"20vh\"\n defaultValue={field.value || \"\"}\n onChange={field.onChange}\n // Sits partway down a long form; without\n // this Monaco steals focus once its CDN\n // load resolves.\n autoFocus={false}\n />\n </Box>\n {error?.message && (\n <Typography\n variant=\"caption\"\n color=\"error\"\n sx={{ mt: 0.75, ml: 1 }}\n >\n {error.message}\n </Typography>\n )}\n </>\n )}\n />\n </Box>\n </Box>\n )}\n\n {/* Tables to sync */}\n <Box\n sx={{\n display: \"flex\",\n flexDirection: { xs: \"column\", sm: \"row\" },\n alignItems: { xs: \"stretch\", sm: \"center\" },\n gap: { xs: 0.5, sm: 2 },\n }}\n >\n <Typography\n variant=\"subtitle1\"\n sx={{ minWidth: { xs: 0, sm: \"140px\" }, flexShrink: 0 }}\n >\n {translate(\"Tables to sync\")}{\" \"}\n <FieldDescription\n title={\n <Typography fontSize={12} maxWidth={200}>\n {\"Select at least one table to sync\"}\n </Typography>\n }\n size=\"sm\"\n />\n </Typography>\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 2,\n flex: 1,\n // A flex child defaults to min-width:auto, so the\n // dropdown refused to shrink below its content and\n // pushed the row past the panel edge on a phone.\n minWidth: 0,\n width: { xs: \"100%\", sm: \"auto\" },\n }}\n >\n <CustomAutocomplete\n id=\"mobileEntitiesSync\"\n name=\"mobileEntitiesSync\"\n control={formCtrl.control}\n options={syncedTableList}\n onChange={(e, val) => addMobileEntitiesSync(val)}\n getOptionLabel={(option) => option?.tableName}\n checkEquality={\"tableName\"}\n errors={\n showMobileFields\n ? formCtrl.formState.errors\n : null\n }\n dataTestId=\"syncentities-select-table\"\n value={mobileEntitiesSync}\n fullWidth\n />\n </Box>\n </Box>\n </AccordionDetails>\n </Accordion>\n\n {/* ────────── Accordion 2: Training Config ────────── */}\n <Accordion\n expanded={accordionExpanded.trainingConfig}\n onChange={() =>\n setAccordionExpanded((prev) => ({\n ...prev,\n trainingConfig: !prev.trainingConfig,\n }))\n }\n sx={{\n mb: 1.5,\n borderRadius: 2,\n boxShadow: \"0 2px 8px rgba(0,0,0,0.08)\",\n border: \"1px solid rgba(76, 175, 80, 0.2)\",\n borderLeft: \"4px solid #4caf50\",\n \"&:before\": { display: \"none\" },\n overflow: \"hidden\",\n }}\n >\n <AccordionSummary\n expandIcon={\n <FontAwesomeIcons iconName=\"faChevronDown\" size=\"sm\" />\n }\n sx={{\n backgroundColor: \"rgba(76, 175, 80, 0.06)\",\n \"&:hover\": {\n backgroundColor: \"rgba(76, 175, 80, 0.12)\",\n },\n minHeight: 52,\n }}\n >\n <Typography fontWeight={700} fontSize={15}>\n Training Config\n </Typography>\n </AccordionSummary>\n <AccordionDetails\n sx={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}\n >\n <Box\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n >\n <Typography\n variant=\"subtitle1\"\n sx={{ minWidth: { xs: 0, sm: \"200px\" }, flexShrink: 0 }}\n >\n {translate(\"Training Required\")}{\" \"}\n <FieldDescription\n title={\n <Typography fontSize={12} maxWidth={220}>\n {t(\n \"Enable if the user must complete training before accessing this feature\",\n )}\n </Typography>\n }\n size=\"sm\"\n />\n </Typography>\n <Box sx={{ flex: 1 }}>\n <Controller\n name=\"trainingRequired\"\n control={formCtrl.control}\n render={({ field }) => (\n <CustomSwitch\n {...field}\n checked={!!field.value}\n onChange={(e) => {\n field.onChange(e.target.checked);\n if (!e.target.checked) {\n formCtrl.setValue(\"trainingQuery\", \"\");\n setTrainingQueryInput(\"\");\n }\n }}\n />\n )}\n />\n </Box>\n </Box>\n\n {formCtrl.watch(\"trainingRequired\") && (\n <Box\n sx={{\n display: \"flex\",\n flexDirection: { xs: \"column\", sm: \"row\" },\n alignItems: { xs: \"stretch\", sm: \"center\" },\n gap: { xs: 0.5, sm: 2 },\n }}\n >\n <Typography\n variant=\"subtitle1\"\n sx={{ minWidth: { xs: 0, sm: \"200px\" }, flexShrink: 0 }}\n >\n {translate(\"Training Query\")}{\" \"}\n <FieldDescription\n title={\n <Typography fontSize={12} maxWidth={220}>\n {t(\n \"Select a query that returns a boolean — true if training is completed, false otherwise\",\n )}\n </Typography>\n }\n size=\"sm\"\n />\n </Typography>\n <Box sx={{ flex: 1 }}>\n <Controller\n name=\"trainingQuery\"\n control={formCtrl.control}\n render={({ field, fieldState: { error } }) => (\n <CustomAutocomplete\n id=\"trainingQuery\"\n name=\"trainingQuery\"\n control={formCtrl.control}\n options={queryCodeOptions}\n getOptionLabel={(option) =>\n option?.code || \"\"\n }\n checkEquality=\"code\"\n inputValue={trainingQueryInput}\n disableClearable={false}\n singleSelect={true}\n value={\n queryCodeOptions?.find(\n (q) => q.code === field.value,\n ) || null\n }\n onInputChange={(e, v, reason) => {\n if (reason === \"input\") {\n setTrainingQueryInput(v);\n fetchGlobalQueryCodes(v);\n }\n }}\n onChange={(e, val) => {\n field.onChange(val?.code || \"\");\n setTrainingQueryInput(val?.code || \"\");\n }}\n placeholder=\"Search training query code...\"\n errors={error}\n fullWidth\n freeSolo={false}\n />\n )}\n />\n </Box>\n </Box>\n )}\n </AccordionDetails>\n </Accordion>\n\n <Accordion\n expanded={accordionExpanded.notificationConfig}\n onChange={() =>\n setAccordionExpanded((prev) => ({\n ...prev,\n notificationConfig: !prev.notificationConfig,\n }))\n }\n sx={{\n mb: 1.5,\n borderRadius: 2,\n boxShadow: \"0 2px 8px rgba(0,0,0,0.08)\",\n border: \"1px solid rgba(255, 152, 0, 0.2)\",\n borderLeft: \"4px solid #ff9800\",\n \"&:before\": { display: \"none\" },\n overflow: \"hidden\",\n }}\n >\n <AccordionSummary\n expandIcon={\n <FontAwesomeIcons iconName=\"faChevronDown\" size=\"sm\" />\n }\n sx={{\n backgroundColor: \"rgba(255, 152, 0, 0.06)\",\n \"&:hover\": {\n backgroundColor: \"rgba(255, 152, 0, 0.12)\",\n },\n minHeight: 52,\n }}\n >\n <Typography fontWeight={700} fontSize={15}>\n {translate(\"Notification Config\")}{\" \"}\n </Typography>\n </AccordionSummary>\n <AccordionDetails\n sx={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}\n >\n <Box\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n >\n <Typography\n variant=\"subtitle1\"\n sx={{ minWidth: { xs: 0, sm: \"200px\" }, flexShrink: 0 }}\n >\n {translate(\"Enable Notification Badge\")}{\" \"}\n <FieldDescription\n title={\n <Typography fontSize={12} maxWidth={220}>\n {t(\n \"Show a count or nudge badge on this feature's icon in the mobile app\",\n )}\n </Typography>\n }\n size=\"sm\"\n />\n </Typography>\n <Box sx={{ flex: 1 }}>\n <Controller\n name=\"notificationBadgeEnabled\"\n control={formCtrl.control}\n render={({ field }) => (\n <CustomSwitch\n {...field}\n checked={!!field.value}\n onChange={(e) => {\n field.onChange(e.target.checked);\n if (!e.target.checked) {\n formCtrl.setValue(\n \"notificationBadgeType\",\n \"\",\n );\n formCtrl.setValue(\n \"notificationBadgeQuery\",\n \"\",\n );\n setNotificationBadgeQueryInput(\"\");\n }\n }}\n />\n )}\n />\n </Box>\n </Box>\n\n {formCtrl.watch(\"notificationBadgeEnabled\") && (\n <>\n <Box\n sx={{\n display: \"flex\",\n flexDirection: { xs: \"column\", sm: \"row\" },\n alignItems: { xs: \"stretch\", sm: \"center\" },\n gap: { xs: 0.5, sm: 2 },\n }}\n >\n <Typography\n variant=\"subtitle1\"\n sx={{ minWidth: { xs: 0, sm: \"200px\" }, flexShrink: 0 }}\n >\n {translate(\"Badge Type\")}{\" \"}\n <FieldDescription\n title={\n <Typography fontSize={12} maxWidth={220}>\n {t(\n `Count Based: query returns a number.\\n\n Nudge Based: query returns true/false.`,\n )}\n </Typography>\n }\n size=\"sm\"\n />\n </Typography>\n <Box sx={{ flex: 1 }}>\n <Controller\n name=\"notificationBadgeType\"\n control={formCtrl.control}\n render={({ field }) => (\n <RadioGroup row {...field}>\n <FormControlLabel\n value=\"COUNT\"\n control={<Radio />}\n label=\"Count Based\"\n />\n <FormControlLabel\n value=\"NUDGE\"\n control={<Radio />}\n label=\"Nudge Based\"\n />\n </RadioGroup>\n )}\n />\n </Box>\n </Box>\n\n {formCtrl.watch(\"notificationBadgeType\") && (\n <Box\n sx={{\n display: \"flex\",\n flexDirection: { xs: \"column\", sm: \"row\" },\n alignItems: { xs: \"stretch\", sm: \"center\" },\n gap: { xs: 0.5, sm: 2 },\n }}\n >\n <Typography\n variant=\"subtitle1\"\n sx={{ minWidth: { xs: 0, sm: \"200px\" }, flexShrink: 0 }}\n >\n {formCtrl.watch(\"notificationBadgeType\") ===\n \"COUNT\"\n ? \"Count Query\"\n : \"Nudge Query\"}{\" \"}\n <FieldDescription\n title={\n <Typography fontSize={12} maxWidth={220}>\n {formCtrl.watch(\n \"notificationBadgeType\",\n ) === \"COUNT\"\n ? \"Select a query that returns a numeric count for the badge\"\n : \"Select a query that returns true/false to show or hide the badge\"}\n </Typography>\n }\n size=\"sm\"\n />\n </Typography>\n <Box sx={{ flex: 1 }}>\n <Controller\n name=\"notificationBadgeQuery\"\n control={formCtrl.control}\n render={({\n field,\n fieldState: { error },\n }) => (\n <CustomAutocomplete\n id=\"notificationBadgeQuery\"\n name=\"notificationBadgeQuery\"\n control={formCtrl.control}\n options={queryCodeOptions}\n getOptionLabel={(option) =>\n option?.code || \"\"\n }\n checkEquality=\"code\"\n inputValue={notificationBadgeQueryInput}\n disableClearable={false}\n singleSelect={true}\n value={\n queryCodeOptions?.find(\n (q) => q.code === field.value,\n ) || null\n }\n onInputChange={(e, v, reason) => {\n if (reason === \"input\") {\n setNotificationBadgeQueryInput(v);\n fetchGlobalQueryCodes(v);\n }\n }}\n onChange={(e, val) => {\n field.onChange(val?.code || \"\");\n setNotificationBadgeQueryInput(\n val?.code || \"\",\n );\n }}\n placeholder={\n formCtrl.watch(\n \"notificationBadgeType\",\n ) === \"COUNT\"\n ? \"Search count query code...\"\n : \"Search nudge query code...\"\n }\n errors={error}\n fullWidth\n freeSolo={false}\n />\n )}\n />\n </Box>\n </Box>\n )}\n </>\n )}\n </AccordionDetails>\n </Accordion>\n </Box>\n </Box>\n )}\n\n {steps[activeStep]?.key === \"formLinking\" && isDynamicFeature && (\n <Box>\n <Box sx={{ maxWidth: 800, mx: \"auto\" }}>\n <StepHeader\n title={translate(\"Form Linking\")}\n description={translate(\n \"Link this feature to an existing form, or create a new one for it.\",\n )}\n />\n\n <Grid container mt={3} className=\"flex flex-col w-[98%]\">\n <Typography\n variant=\"subtitle1\"\n sx={{\n marginLeft: 1,\n marginBottom: \"0.5rem\",\n fontWeight: 600,\n }}\n >\n Use Existing Form\n </Typography>\n\n <Grid container sx={{ alignItems: \"center\" }}>\n <FormControl\n variant=\"outlined\"\n className=\"m-3 flex flex-row items-center w-[80%] justify-between\"\n >\n <Typography variant=\"subtitle1\">\n {translate(\"Select\")} {translate(\"Form\")}:\n </Typography>\n <Box className=\"w-[60%]\">\n <CustomDropdown\n control={formCtrl.control}\n name=\"formCode\"\n options={formNames || []}\n getOptionDisabled={(option) =>\n option.menu_config_id &&\n option.menu_config_id !==\n parseInt(queryParams.get(\"featureId\"))\n }\n displayName=\"form_name\"\n optionValue=\"form_code\"\n errors={formCtrl.formState.errors}\n size=\"small\"\n disableClearable={false}\n onChange={(e) => {\n if (e.target.value) {\n formCtrl.setValue(\n \"navigationState\",\n `medplat.form.${e.target.value}`,\n );\n setSelectedFormCode(e.target.value);\n } else {\n formCtrl.setValue(\"version\", null);\n formCtrl.setValue(\n \"navigationState\",\n \"medplat.form.\",\n );\n }\n }}\n />\n </Box>\n </FormControl>\n </Grid>\n\n <FormControl\n variant=\"outlined\"\n className=\"m-3 flex flex-row items-center w-[80%] justify-between\"\n >\n <Typography variant=\"subtitle1\">\n {translate(\"Select\")} {translate(\"Version\")}:\n </Typography>\n <Box className=\"w-[60%]\">\n <CustomDropdown\n control={formCtrl.control}\n name=\"version\"\n options={\n Array.isArray(formVersions?.[selectedFormCode])\n ? formVersions[selectedFormCode].map(\n (v) => v.version,\n )\n : []\n }\n errors={formCtrl.formState.errors}\n disableClearable={false}\n size=\"small\"\n />\n </Box>\n </FormControl>\n\n <Divider\n sx={{\n width: \"80%\",\n margin: \"1rem auto\",\n position: \"relative\",\n }}\n >\n <Typography\n variant=\"caption\"\n sx={{\n position: \"absolute\",\n top: \"-0.6rem\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n backgroundColor: \"background.paper\",\n padding: \"0 0.5rem\",\n }}\n >\n OR\n </Typography>\n </Divider>\n\n <Box className=\"flex justify-center\">\n <Button\n variant=\"outlined\"\n size=\"small\"\n onClick={() => {\n formCtrl.setValue(\"formCode\", null);\n setOpenAddFormModal(true);\n }}\n >\n Add New Form\n </Button>\n {openAddFormModal && (\n <NewFormModal\n mainFormCtrl={formCtrl}\n openAddFormModal={openAddFormModal}\n setModal={(val) => {\n setOpenAddFormModal(val);\n }}\n reloadForms={reloadForms}\n />\n )}\n </Box>\n </Grid>\n </Box>\n </Box>\n )}\n {steps[activeStep]?.key === \"additionalPermissions\" && (\n <Grid item xs={12} md={6}>\n <Box mt={3} className=\"flex flex-col w-full\">\n <StepHeader\n title={translate(\"Permission Management\")}\n description={translate(\n \"Fine-grained permissions for this feature, beyond the rights a role already grants.\",\n )}\n />\n {!isDynamicFeature && isNew?.val === false ? (\n <>\n <Grid>\n <FormControl\n variant=\"outlined\"\n className=\"flex flex-row items-center ml-3 \"\n >\n <Typography variant=\"body2\">\n {translate(\"Add feature JSON access rights\")}\n </Typography>\n <Checkbox\n disabled={disableShowField}\n checked={showFields}\n onChange={handleCheckboxChange}\n data-testid=\"managefeature-checkbox-access-rights\"\n />\n </FormControl>\n </Grid>\n <Grid>\n {isUpdate.value && showFields && (\n <Grid>\n <FormGroup className=\"ml-2\">\n {formCtrl\n .getValues(\"updatedFields\")\n ?.map((field, index) => (\n <Grid\n key={field.id}\n className=\" mb-2.5 flex flex-row items-center \"\n >\n <FormControl>\n <Controller\n name={`updatedFields[${index}].value`}\n control={formCtrl.control}\n render={({ field }) => (\n <TextField\n {...field}\n label={`${translate(\"Right\")} ${index + 1}`}\n value={field.value || \"\"}\n sx={{\n \"& .MuiInputLabel-root\": {\n fontSize: \"14px\",\n },\n \"& .MuiInputBase-input\": {\n fontSize: \"14px\",\n },\n }}\n />\n )}\n />\n </FormControl>\n <Checkbox\n disabled={field.updated}\n checked={field.checkbox}\n onChange={() =>\n handleCheckboxValueChange(field.id)\n }\n className=\" mr-2.5\"\n data-testid={`managefeature-checkbox-updated-right-${index + 1}`}\n />\n {index + 1 ===\n formCtrl.getValues(\"updatedFields\")\n ?.length && (\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={handleAddField}\n size=\"small\"\n className=\" mr-2.5\"\n disabled={\n !watchedFields.updatedFields.some(\n (item) =>\n item.id === field?.id &&\n item.value,\n )\n }\n data-testid=\"managefeature-button-add-updated\"\n >\n {translate(\"Add\")}\n </Button>\n )}\n\n {!field.updated && (\n <Button\n variant=\"contained\"\n size=\"small\"\n color=\"secondary\"\n onClick={() =>\n handleDeleteField(field.id)\n }\n data-testid={`managefeature-button-delete-updated-${index + 1}`}\n >\n {translate(\"Delete\")}\n </Button>\n )}\n </Grid>\n ))}\n </FormGroup>\n </Grid>\n )}\n </Grid>\n </>\n ) : (\n <>\n {permissions?.length === 0 ? (\n <Typography\n variant=\"subtitle1\"\n color=\"text.secondary\"\n align=\"center\"\n sx={{ py: 2 }}\n >\n No permissions added yet.\n </Typography>\n ) : (\n <PermissionItemList\n permissions={permissions}\n onEdit={(perm) => handleEdit(perm)}\n onRemove={(perm) => handleRemovePermission(perm)}\n handleAddChildClick={(parent) =>\n handleAddChild(parent)\n }\n isDynamicFeature={isDynamicFeature}\n />\n )}\n\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"flex-end\",\n mt: 2,\n }}\n >\n <Button\n variant=\"outlined\"\n size=\"small\"\n startIcon={<FontAwesomeIcons iconName=\"faPlus\" />}\n onClick={handleAddParent}\n sx={{\n textTransform: \"none\",\n fontWeight: 500,\n borderRadius: 2,\n px: 2,\n py: 0.75,\n minWidth: 120,\n }}\n >\n Add Parent Permission\n </Button>\n </Box>\n <PermissionModal\n open={modalOpen}\n onClose={() => setModalOpen(false)}\n onSave={handleSavePermission}\n formCtrl={formCtrl}\n editData={editData}\n parentPermissionId={\n modalMode === \"add-child\" ? modalParentId : null\n }\n mode={modalMode}\n permissionTypes={permissionTypes}\n setPermissionTypes={setPermissionTypes}\n existingPermissionIds={\n new Set(\n flattenPermissions(permissions).map(\n (p) => p.permissionId,\n ),\n )\n }\n isDynamicFeature={isDynamicFeature}\n />\n </>\n )}\n </Box>\n </Grid>\n )}\n {steps[activeStep]?.key === \"assignFeatures\" && (\n <Box mt={3} className=\"flex flex-col w-full\">\n <StepHeader\n title={translate(\"Assign Features\")}\n description={translate(\n \"Give this feature to users or roles. Individual permissions can be toggled after assigning.\",\n )}\n />\n\n <Box display=\"flex\" gap={2} flexWrap=\"wrap\" mb={3}>\n <Box flex=\"1 1 300px\" minWidth={300}>\n <Typography variant=\"subtitle1\" sx={{ mb: 1 }}>\n {translate(\"User\")}\n </Typography>\n <CustomAutocomplete\n id=\"roles\"\n name=\"roles\"\n control={formCtrl.control}\n options={\n !isDynamicFeature && isNew?.val === false\n ? userData.filter(\n (user) =>\n !grantedData.some(\n (g) =>\n g.entityType === \"user\" &&\n g.user_id === user.id,\n ),\n )\n : userData\n }\n value={selectedUser}\n singleSelect={true}\n onChange={handleUserChange}\n onInputChange={handleInputChange}\n getOptionLabel={getOptionLabel}\n data-testid=\"accessrights-autocomplete-user\"\n fullWidth\n />\n </Box>\n\n <Box flex=\"1 1 300px\" minWidth={300}>\n <Typography variant=\"subtitle1\" sx={{ mb: 1 }}>\n {translate(\"Role\")}\n </Typography>\n <CustomAutocomplete\n id=\"selectedRoles\"\n name=\"selectedRoles\"\n control={formCtrl.control}\n options={\n !isDynamicFeature && isNew?.val === false\n ? getFilteredRoles().filter(\n (role) =>\n !grantedData.some(\n (g) =>\n g.entityType === \"role\" &&\n g.role_id === role.id,\n ),\n )\n : getFilteredRoles()\n }\n onChange={(e, val) => addRole(val)}\n getOptionLabel={(option) => option?.name}\n dataTestId=\"accessrights-select-role\"\n value={selectedRoles}\n fullWidth\n />\n </Box>\n\n <Box\n display=\"flex\"\n alignItems=\"flex-end\"\n flexShrink={0}\n sx={{ minWidth: 120 }}\n >\n <Button\n variant=\"contained\"\n size=\"medium\"\n fullWidth\n disabled={!(selectedRoles.length > 0 || selectedUser?.id)}\n data-testid=\"accessrights-add-button\"\n onClick={onFeatureAdd}\n sx={{ minWidth: 120, marginBottom: \"10px\" }}\n >\n {translate(\"Add\")}\n </Button>\n </Box>\n </Box>\n {!isDynamicFeature && isNew?.val === false ? (\n <TableContainer sx={{ maxHeight: 360, overflowY: \"auto\" }}>\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell sx={{ fontWeight: \"bold\" }}>\n {translate(\"Type\")}\n </TableCell>\n <TableCell sx={{ fontWeight: \"bold\" }}>\n {translate(\"Name\")}\n </TableCell>\n <TableCell sx={{ fontWeight: \"bold\" }}>\n {translate(\"Access Right\")}\n </TableCell>\n <TableCell sx={{ fontWeight: \"bold\" }}>\n {translate(\"Actions\")}\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {userMenuItemDtos.map((field, index) => (\n <TableRow key={index}>\n <TableCell>\n {field.designationId ? \"Role\" : \"User\"}\n </TableCell>\n <TableCell>\n {field.roleName || field.fullName}\n </TableCell>\n <TableCell>\n <Box\n display=\"flex\"\n flexDirection=\"column\"\n gap={1}\n >\n {(() => {\n const accessRightsArray = isUpdate.value\n ? formCtrl.getValues(\"updatedFields\")\n : formCtrl.getValues(\"fields\");\n const liveFeatureJson =\n accessRightsArray?.reduce((acc, curr) => {\n acc[curr.value] = curr.checkbox;\n return acc;\n }, {});\n\n const savedFeatureJsonRaw = field.featureJson\n ? JSON.parse(field.featureJson)\n : {};\n\n const savedFeatureJson = Object.fromEntries(\n Object.entries(savedFeatureJsonRaw).map(\n ([key, value]) => [\n key,\n value === true || value === \"true\",\n ],\n ),\n );\n\n const mergedFeatureJson = {\n ...savedFeatureJson,\n ...Object.fromEntries(\n Object.entries(\n liveFeatureJson || {},\n ).filter(\n ([key]) => !(key in savedFeatureJson),\n ),\n ),\n };\n\n return Object.entries(mergedFeatureJson).map(\n ([featureName, isEnabled]) => (\n <Box\n key={featureName}\n display=\"flex\"\n alignItems=\"center\"\n gap={1}\n >\n <CustomSwitch\n sx={{\n transform: \"scale(0.75)\",\n transformOrigin: \"left center\",\n }}\n checked={!!isEnabled}\n // size=\"small\"\n onChange={() => {\n const updatedDtos = [\n ...userMenuItemDtos,\n ];\n\n let currentFeatureJson = {};\n try {\n currentFeatureJson =\n field.featureJson\n ? JSON.parse(\n field.featureJson,\n )\n : {};\n } catch (e) {\n console.warn(\n \"Invalid JSON in featureJson:\",\n e,\n );\n }\n\n const accessRightsArray =\n isUpdate.value\n ? formCtrl.getValues(\n \"updatedFields\",\n )\n : formCtrl.getValues(\n \"fields\",\n ) || [];\n const mergedFeatureJson =\n accessRightsArray.reduce(\n (acc, curr) => {\n acc[curr.value] =\n curr.value in\n currentFeatureJson\n ? currentFeatureJson[\n curr.value\n ]\n : curr.checkbox;\n return acc;\n },\n {},\n );\n\n mergedFeatureJson[featureName] =\n !isEnabled;\n\n updatedDtos[index] = {\n ...field,\n featureJson:\n JSON.stringify(\n mergedFeatureJson,\n ),\n };\n setUserMenuItemDtos(updatedDtos);\n }}\n />\n <Typography variant=\"subtitle1\">\n {featureName}\n </Typography>\n </Box>\n ),\n );\n })()}\n </Box>\n </TableCell>\n <TableCell>\n <IconButton\n size=\"small\"\n color=\"error\"\n onClick={() => {\n const updatedDtos = userMenuItemDtos.filter(\n (_, i) => i !== index,\n );\n setUserMenuItemDtos(updatedDtos);\n }}\n >\n <FontAwesomeIcons\n iconName=\"faTrashAlt\"\n size=\"sm\"\n />\n </IconButton>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n ) : (\n <>\n {grantedData.length > 0 && (\n <TableContainer\n sx={{ maxHeight: 360, overflowY: \"auto\" }}\n >\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell sx={{ fontWeight: \"bold\" }}>\n {translate(\"Type\")}\n </TableCell>\n <TableCell sx={{ fontWeight: \"bold\" }}>\n {translate(\"Name\")}\n </TableCell>\n <TableCell sx={{ fontWeight: \"bold\" }}>\n {translate(\"Permissions\")}\n </TableCell>\n <TableCell sx={{ fontWeight: \"bold\" }}>\n {translate(\"Actions\")}\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {grantedData.map((field, index) => (\n <TableRow key={index}>\n <TableCell>\n {field.entityType === \"role\"\n ? \"Role\"\n : \"User\"}\n </TableCell>\n <TableCell>{field.name}</TableCell>\n <TableCell>\n <AssignedPermissionList\n permissions={field.permissions}\n onToggle={(perm) =>\n handleToggle(index, perm)\n }\n />\n </TableCell>\n <TableCell>\n <IconButton\n size=\"small\"\n color=\"error\"\n onClick={() => {\n const updatedData = grantedData.filter(\n (_, i) => i !== index,\n );\n setGrantedData(updatedData);\n }}\n >\n <FontAwesomeIcons\n iconName=\"faTrashAlt\"\n size=\"sm\"\n />\n </IconButton>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n )}\n </>\n )}\n\n <GrantAccessModal\n open={grantModalOpen}\n onClose={() => setGrantModalOpen(false)}\n permissions={permissions}\n entityData={selectedEntity}\n onSave={(data) => {\n setGrantedData((prev) => [...prev, data]);\n setGrantModalOpen(false);\n }}\n />\n </Box>\n )}\n\n {steps[activeStep]?.key === \"submit\" && submitted && (\n <Box\n sx={{\n mt: 4,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n textAlign: \"center\",\n minHeight: \"300px\",\n px: 3,\n mx: \"auto\",\n maxWidth: 500,\n backgroundColor: \"background.default\",\n borderRadius: 1.5,\n boxShadow: \"0 4px 12px rgba(0,0,0,0.1)\",\n border: `1px solid ${theme.palette.divider}`,\n p: 6,\n }}\n >\n <Box sx={{ color: \"success.main\", fontSize: 40, mb: 2 }}>\n <FontAwesomeIcons iconName=\"faCheckCircle\" />\n </Box>\n <Typography\n variant=\"h6\"\n gutterBottom\n sx={{ fontWeight: \"bold\" }}\n >\n Feature was successfully {\" \"}\n {queryParams.get(\"featureId\") ? \"updated\" : \"created\"}!\n </Typography>\n\n <Divider sx={{ my: 2, width: \"100%\" }} />\n\n <Typography variant=\"subtitle1\" gutterBottom>\n <strong>Feature Name:</strong>{\" \"}\n {formCtrl.getValues(\"menuName\")}\n </Typography>\n\n {isDynamicFeature && (\n <Typography variant=\"subtitle1\" gutterBottom>\n <strong>Feature Constant:</strong>{\" \"}\n {formCtrl.getValues(\"featureConstant\")}\n </Typography>\n )}\n\n <Box mt={5} width=\"100%\" display=\"flex\" justifyContent=\"center\">\n {formCtrl.getValues(\"formCode\") &&\n formCtrl.getValues(\"version\") ? (\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() => {\n const formCode = formCtrl.getValues(\"formCode\");\n const version = formCtrl.getValues(\"version\");\n const versionObj = formVersions?.[formCode]?.find(\n (v) => v.version === version,\n );\n if (versionObj?.uuid) {\n navigate(\n `/ui/medplat/admin/medplatForms/form/${versionObj.uuid}`,\n );\n } else {\n console.warn(\"Could not find matching version UUID\");\n }\n }}\n >\n Configure Form\n </Button>\n ) : (\n <Button\n variant=\"outlined\"\n color=\"primary\"\n onClick={() => navigate(\"/ui/medplat/manage/menu\")}\n >\n Go Back to Menu\n </Button>\n )}\n </Box>\n </Box>\n )}\n\n {!submitted && (\n <Box\n mt=\"auto\"\n display=\"flex\"\n justifyContent=\"flex-end\"\n gap={2}\n sx={{ paddingTop: 4 }}\n >\n <Button\n variant=\"outlined\"\n color=\"inherit\"\n onClick={handleBack}\n startIcon={\n <FontAwesomeIcons\n iconName={activeStep === 0 ? \"faXmark\" : \"faArrowLeft\"}\n />\n }\n >\n {/* On the first step this leaves the screen rather than\n stepping back, so it must not claim to be \"Back\". */}\n {activeStep === 0 ? translate(\"Cancel\") : translate(\"Back\")}\n </Button>\n\n {steps[activeStep]?.key !== \"submit\" &&\n (() => {\n const key = steps[activeStep]?.key;\n const isSkippable = [\"formLinking\"].includes(key);\n const isSkipped = skippedSteps.includes(key);\n const [formCodeOrAccessRights, version] =\n formCtrl.getValues(getFieldsForStep(key));\n\n const hasStarted =\n key === \"formLinking\"\n ? !!formCodeOrAccessRights?.trim() || !!version?.trim()\n : key === \"additionalPermissions\"\n ? Array.isArray(formCodeOrAccessRights) &&\n formCodeOrAccessRights.length > 0\n : false;\n\n const handleSaveAndSubmit = formCtrl.handleSubmit(\n (data) => {\n onSubmit(data);\n const submitIndex = steps.findIndex(\n (s) => s.key === \"submit\",\n );\n setFilledSteps((prev) => new Set(prev).add(key));\n setActiveStep(submitIndex);\n },\n );\n\n if (key === \"assignFeatures\" || key === \"accessRights\") {\n return (\n <Button\n variant=\"contained\"\n onClick={handleSaveAndSubmit}\n >\n Save\n </Button>\n );\n }\n\n return isSkippable ? (\n isStepValid ? (\n <Button variant=\"contained\" onClick={handleNext}>\n Next\n </Button>\n ) : hasStarted ? (\n <Button variant=\"contained\" disabled>\n Next\n </Button>\n ) : (\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n onClick={() => {\n if (!isSkipped)\n setSkippedSteps((prev) => [...prev, key]);\n handleNext();\n }}\n >\n Skip for now\n </Button>\n )\n ) : (\n <Tooltip\n title={\n !isStepValid && missingForStep.length\n ? `${translate(\"Still needed\")}: ${missingForStep.join(\", \")}`\n : \"\"\n }\n >\n {/* span keeps the tooltip working while disabled */}\n <span>\n <Button\n variant=\"contained\"\n onClick={handleNext}\n disabled={!isStepValid}\n >\n {translate(\"Next\")}\n </Button>\n </span>\n </Tooltip>\n );\n })()}\n </Box>\n )}\n </Box>\n </Box>\n </Paper>\n </form>\n );\n}\n\nPermissionItemList.propTypes = {\n permissions: PropTypes.any,\n onEdit: PropTypes.any,\n onRemove: PropTypes.any,\n handleAddChildClick: PropTypes.any,\n isDynamicFeature: PropTypes.any,\n};\n\nPermissionModal.propTypes = {\n open: PropTypes.any,\n onClose: PropTypes.any,\n onSave: PropTypes.any,\n formCtrl: PropTypes.any,\n editData: PropTypes.any,\n parentPermissionId: PropTypes.any,\n mode: PropTypes.any,\n permissionTypes: PropTypes.any,\n setPermissionTypes: PropTypes.any,\n isDynamicFeature: PropTypes.any,\n existingPermissionIds: PropTypes.any,\n};\n\nPermissionRow.propTypes = {\n permission: PropTypes.any,\n index: PropTypes.any,\n depth: PropTypes.any,\n onEdit: PropTypes.any,\n onRemove: PropTypes.any,\n handleAddChildClick: PropTypes.any,\n isLastChild: PropTypes.any,\n isDynamicFeature: PropTypes.any,\n};\n\nAssignedPermissionList.propTypes = {\n permissions: PropTypes.any,\n onToggle: PropTypes.any,\n isChild: PropTypes.any,\n};\n\nGrantAccessModal.propTypes = {\n open: PropTypes.any,\n onClose: PropTypes.any,\n onSave: PropTypes.any,\n entityData: PropTypes.any,\n permissions: PropTypes.any,\n};\n"],"names":["NewFormModal","mainFormCtrl","openAddFormModal","setModal","reloadForms","inputValue","setInputValue","useState","items","setItems","formCodeValidation","setFormCodeValidation","validationSchema","Yup","formControl","useForm","yupResolver","handleAddItem","updatedItems","handleDeleteItem","itemToDelete","item","handleInputChange","e","value","handleDialogClose","onSubmit","data","handleAddNewForm","currentForm","showToast","buildFormData","formData","FormConfiguratorService","translationDtoList","executeAll","handleFormCodeChange","useDebounceFn","valid","jsx","Dialog","jsxs","DialogTitle","DialogContent","DialogContentText","Grid2","Divider","Chip","CustomTextField","FormControl","CustomDropdown","Controller","field","TextField","IconButton","FontAwesomeIcons","Box","index","Alert","Fragment","DialogActions","Button","PropTypes","PermissionRow","permission","depth","onEdit","onRemove","handleAddChildClick","isLastChild","isDynamicFeature","theme","useTheme","displayPermissionId","id","alpha","Typography","_a","Stack","child","cIndex","PermissionItemList","permissions","perm","PermissionModal","open","onClose","onSave","formCtrl","editData","parentPermissionId","mode","permissionTypes","setPermissionTypes","existingPermissionIds","inputText","setInputText","options","setOptions","commonDefaults","staticDefaults","_b","_c","defaultValues","control","watch","handleSubmit","reset","setValue","getValues","setError","clearErrors","formState","queryCodeRequired","permissionType","permissionSuffix","backendUrl","queryCode","queryApiOptions","getDefaultValues","override","parentSuffix","toCamelCase","str","word","fetchQueryCodes","search","response","execute","useEffect","baseValues","hasApi","hasQuery","inheritedType","type","menuType","featureConstant","baseId","featureName","parentType","childBaseId","newId","newPermission","checkPermissionIdAvailability","permissionId","CustomAutocomplete","p","option","val","actualValue","newObj","prev","suffix","finalId","CustomTextArea","CustomRadioGroup","Select","MenuItem","error","q","v","reason","CustomSwitch","GrantAccessModal","entityData","noStartDate","noEndDate","startDate","endDate","handleSave","values","grantPermissionSubmit","payloads","entity","ids","roleId","idx","Modal","Card","Grid","CustomCheckBox","CustomDatePicker","AssignedPermissionList","onToggle","isChild","permIndex","StepHeader","title","description","FieldRow","label","required","help","children","InputLabel","NAVIGATION_STATE_PATTERN","ManageDynamicFeature","translate","useTranslateProvider","formRef","useRef","location","useLocation","navigate","useNavigate","isNew","queryParams","useMemo","featureGroup","setFeatureGroup","showMobileFields","setShowMobileFields","entityList","setEntityList","syncedTableList","setSyncedTableList","formNames","setFormNames","formVersions","setFormVersions","setOpenAddFormModal","disableEditing","setDisableEditing","successMessage","setSuccessMessage","selectedFormCode","setSelectedFormCode","prevLinkedFormCode","setPrevLinkedFormCode","menuGroups","setMenuGroups","menuTypes","setMenuTypes","isSyncedLoaded","setIsSyncedLoaded","activeStep","setActiveStep","submitted","setSubmitted","skippedSteps","setSkippedSteps","userData","setUserData","roleData","setRoleData","selectedRoles","setSelectedRoles","mobileEntitiesSync","setMobileEntitiesSync","selectedUser","setSelectedUser","userMenuItemDtos","setUserMenuItemDtos","assignAccessRight","setAssignAccessRight","setPermissions","modalOpen","setModalOpen","modalMode","setModalMode","modalParentId","setModalParentId","setEditData","editOriginalId","setEditOriginalId","grantModalOpen","setGrantModalOpen","selectedEntity","setSelectedEntity","grantedData","setGrantedData","disableShowField","setDisableShowField","showFields","setShowFields","isSeparateFeature","setIsSeparateFeature","isUpdate","setIsUpdate","queryCodeOptions","setQueryCodeOptions","trainingQueryInput","setTrainingQueryInput","notificationBadgeQueryInput","setNotificationBadgeQueryInput","accordionExpanded","setAccordionExpanded","initialMobileModeValue","setInitialMobileModeValue","React","isStepSkipped","stepKey","filledSteps","setFilledSteps","steps","schema","badgeEnabled","badgeType","useWatch","isMobileFeature","isWebFeature","watchedFieldsSteps","getWatchedFieldNames","watchedFields","entityName","isStepValid","hasNavigationStateError","hasFeatureConstantError","hasIcon","hasMode","trainingRequired","trainingQuery","badgeQuery","formCode","version","f","additionalPermissions","_d","missingForStep","missing","visibleSteps","step","handleNext","currentStepKey","moveToNextVisibleStep","getFieldsForStep","currentKey","currentVisibleIndex","s","nextVisibleStep","createDefaultPermission","syncGrantedDataWithPermissions","nextIndexInSteps","currentValue","key","handleBack","prevVisibleStep","prevIndexInSteps","isStepFilled","stepIndex","fetchMenuGroups","fetchTables","fetchSyncedTables","fetchFormNames","fetchData","fetchGlobalQueryCodes","getFeatureDataV2","formattedPermissions","transformBackendPermissions","normalizedData","buildGrantedDataFromBackend","row","normalizePermissionTree","accessRightsArray","defaultAccessRights","acc","curr","enrichedDtos","dto","parsedFeatureJson","mergedFeatureJson","featureId","fetchStaticFeatureInfo","cur","getFeatureData","fields","formattedFields","handleFeatureType","backendPermissions","defaultPermissionId","transform","isDefault","markEnabledRecursive","enabledIds","anyChildEnabled","c","isEnabled","isRole","isUser","permissionTree","_e","_g","_f","normalize","childPermissions","allChildrenEnabled","permissionMap","buildMap","perms","mergePermissions","permList","grantedPermList","grantedPerm","g","mergedChildren","fetchFeatureInfo","mobileConfig","mappedMobileEntitiesSync","tableName","loadedTrainingQuery","loadedBadgeQuery","safeJSONParse","fallback","defaultPermission","addRole","addMobileEntitiesSync","tableNames","opt","handleUserChange","newValue","isStatic","forms","obj","form","parsedVersions","err","users","rolesRes","getRoleList","getFilteredRoles","role","roleType","filteredDtos","matchingRole","getOptionLabel","firstName","lastName","userName","featGroup","validGroups","handleFeatureGroup","res","enableForMobile","disableForStaticFeature","handleAddParent","handleAddChild","parentPerm","handleEdit","addChildRecursively","parentId","newChild","it","updateNodeRecursively","originalId","newNode","removeRecursive","idToRemove","handleSavePermission","updatedPermissions","findParent","found","parent","childWithType","handleRemovePermission","flattenPermissions","result","permissionName","permissionDesc","enabled","urlType","formattedFeatureJson","onFeatureAdd","newEntries","entities","r","buildPermissionUserMapForQuery","processPermissions","handleToggle","rowIndex","toggledPerm","newData","togglePermissionDeep","targetId","newState","toggleAllChildren","updatedChildren","checkAvailability","checkNavigationAvailability","featureState","debouncedCheckAvailability","debounceNavigationCheckAvailability","debouncedFetch","debounce","handleDynamicFeatureSubmit","flatPermissions","menuConfigDto","permissionUserMap","handleStaticFeatureSubmit","groupUUID","subgroupId","subgroupUUID","UUID","generateUUID","params","updatedFields","featureJson","convertToJson","returnedData","executeQuery","updateUserMenuItems","fetchUserData","useCallback","handleCheckboxChange","handleCheckboxValueChange","newFields","handleAddField","lastField","newField","handleDeleteField","Paper","t","isActive","isFilled","isApplicable","isReachable","isDisabled","circleBg","circleBorder","circleTextColor","labelColor","Step","FieldDescription","Accordion","AccordionSummary","AccordionDetails","Tooltip","CustomSvgUpload","svg","RadioGroup","FormControlLabel","Radio","PostgresEditor","Checkbox","FormGroup","_i","user","TableContainer","Table","TableHead","TableRow","TableCell","TableBody","liveFeatureJson","savedFeatureJsonRaw","savedFeatureJson","updatedDtos","currentFeatureJson","_","i","updatedData","_j","versionObj","_k","isSkippable","isSkipped","formCodeOrAccessRights","hasStarted","handleSaveAndSubmit","submitIndex"],"mappings":"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"}