@argusoft/medplat-core 1.0.29 → 1.0.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/dist/AccessRights-xrday-L1.js +1023 -0
  2. package/dist/AccessRights-xrday-L1.js.map +1 -0
  3. package/dist/AddEditQueryBuilder-D-iQiVIe.js +365 -0
  4. package/dist/AddEditQueryBuilder-D-iQiVIe.js.map +1 -0
  5. package/dist/{AddFeatures-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-Ce91MhnU.js → AddMenuConfiguration-e5BVXhmw.js} +2 -2
  10. package/dist/{AddMenuConfiguration-Ce91MhnU.js.map → AddMenuConfiguration-e5BVXhmw.js.map} +1 -1
  11. package/dist/AppModal-CCtrQ5Tr.js +394 -0
  12. package/dist/AppModal-CCtrQ5Tr.js.map +1 -0
  13. package/dist/BrandsPage-DmRW5bhm-Bk1szrjI.js +387 -0
  14. package/dist/BrandsPage-DmRW5bhm-Bk1szrjI.js.map +1 -0
  15. package/dist/CategoriesPage-BsS5IQh3-B03lWRY5.js +391 -0
  16. package/dist/CategoriesPage-BsS5IQh3-B03lWRY5.js.map +1 -0
  17. package/dist/{ChangePasswordModalCore-DutQAZOx.js → ChangePasswordModalCore-BPsJquTS.js} +1606 -1611
  18. package/dist/ChangePasswordModalCore-BPsJquTS.js.map +1 -0
  19. package/dist/{ConditionConfig-B4Ffpgj3.js → ConditionConfig-Ddz9halE.js} +2 -2
  20. package/dist/{ConditionConfig-B4Ffpgj3.js.map → ConditionConfig-Ddz9halE.js.map} +1 -1
  21. package/dist/DashboardPage-C3bKc5na-sBd9Yqbi.js +435 -0
  22. package/dist/DashboardPage-C3bKc5na-sBd9Yqbi.js.map +1 -0
  23. package/dist/EventConfig-BmLemzX3.js +26 -0
  24. package/dist/EventConfig-BmLemzX3.js.map +1 -0
  25. package/dist/{EventConfigurations-BJcURufo.js → EventConfigurations-Bzh1qWXU.js} +31 -30
  26. package/dist/{EventConfigurations-BJcURufo.js.map → EventConfigurations-Bzh1qWXU.js.map} +1 -1
  27. package/dist/{EventsExceptionModal-BlZtBQoR.js → EventsExceptionModal-B2SRrnB1.js} +2 -2
  28. package/dist/{EventsExceptionModal-BlZtBQoR.js.map → EventsExceptionModal-B2SRrnB1.js.map} +1 -1
  29. package/dist/EventsSkeleton-BIcPks4T.js +61 -0
  30. package/dist/EventsSkeleton-BIcPks4T.js.map +1 -0
  31. package/dist/FacilityPicker-BiZeupmP-CyPHmj6b.js +79 -0
  32. package/dist/FacilityPicker-BiZeupmP-CyPHmj6b.js.map +1 -0
  33. package/dist/FeatureMenu-DYJmDt7q.js +521 -0
  34. package/dist/FeatureMenu-DYJmDt7q.js.map +1 -0
  35. package/dist/{FhirServerList-Dkq7Kbes.js → FhirServerList-DuTwnngN.js} +19 -19
  36. package/dist/{FhirServerList-Dkq7Kbes.js.map → FhirServerList-DuTwnngN.js.map} +1 -1
  37. package/dist/{FhirServerWizard-Db6Hm4bQ.js → FhirServerWizard-DZI8Olku.js} +15 -15
  38. package/dist/{FhirServerWizard-Db6Hm4bQ.js.map → FhirServerWizard-DZI8Olku.js.map} +1 -1
  39. package/dist/FlywayQuery-CQygj51V.js +179 -0
  40. package/dist/FlywayQuery-CQygj51V.js.map +1 -0
  41. package/dist/GrantPermissionModal-BDN66Atn.js +236 -0
  42. package/dist/GrantPermissionModal-BDN66Atn.js.map +1 -0
  43. package/dist/ImmunizationConfigurationBase-Di1KO3oW.js +7639 -0
  44. package/dist/ImmunizationConfigurationBase-Di1KO3oW.js.map +1 -0
  45. package/dist/ImmunizationConfigurationBase.css +1 -1
  46. package/dist/ImmunizationConfigurationsList-TZcLDEci.js +369 -0
  47. package/dist/ImmunizationConfigurationsList-TZcLDEci.js.map +1 -0
  48. package/dist/InventoryPage-C_AxSy7A-QLvlL4rE.js +665 -0
  49. package/dist/InventoryPage-C_AxSy7A-QLvlL4rE.js.map +1 -0
  50. package/dist/LanguagesModal-B3NTebYT.js +352 -0
  51. package/dist/LanguagesModal-B3NTebYT.js.map +1 -0
  52. package/dist/ManageDynamicFeature-BU0I45dd.js +4475 -0
  53. package/dist/ManageDynamicFeature-BU0I45dd.js.map +1 -0
  54. package/dist/{ManageEventConfiguration-BpSJszSX.js → ManageEventConfiguration-CoYcpjR9.js} +465 -397
  55. package/dist/ManageEventConfiguration-CoYcpjR9.js.map +1 -0
  56. package/dist/{ManageNotification-CfhHlfxA.js → ManageNotification-C5MhV77Q.js} +2 -2
  57. package/dist/{ManageNotification-CfhHlfxA.js.map → ManageNotification-C5MhV77Q.js.map} +1 -1
  58. package/dist/{ManageRole-4Y2PP4dQ.js → ManageRole-CNZBRKGU.js} +2 -2
  59. package/dist/{ManageRole-4Y2PP4dQ.js.map → ManageRole-CNZBRKGU.js.map} +1 -1
  60. package/dist/ManageTranslation-vRiptUAP.js +833 -0
  61. package/dist/ManageTranslation-vRiptUAP.js.map +1 -0
  62. package/dist/ManageTranslation.css +1 -1
  63. package/dist/{ManageUser-DDzyd9jm.js → ManageUser-DCFkUMV9.js} +131 -131
  64. package/dist/{ManageUser-DDzyd9jm.js.map → ManageUser-DCFkUMV9.js.map} +1 -1
  65. package/dist/MemberProfileCard-BdUNgHRB-VywqQdFF.js +272 -0
  66. package/dist/MemberProfileCard-BdUNgHRB-VywqQdFF.js.map +1 -0
  67. package/dist/MobileAnalytics-pQoE8cG1.js +16888 -0
  68. package/dist/MobileAnalytics-pQoE8cG1.js.map +1 -0
  69. package/dist/{MobileTypeEventConfigModal-DUkUYACe.js → MobileTypeEventConfigModal-BeveaX0C.js} +2 -2
  70. package/dist/{MobileTypeEventConfigModal-DUkUYACe.js.map → MobileTypeEventConfigModal-BeveaX0C.js.map} +1 -1
  71. package/dist/NotificationFlywayQuery-BAHVjf6N.js +247 -0
  72. package/dist/NotificationFlywayQuery-BAHVjf6N.js.map +1 -0
  73. package/dist/{NotificationList-BMFpNUJG.js → NotificationList-DEyRZEuM.js} +2 -2
  74. package/dist/{NotificationList-BMFpNUJG.js.map → NotificationList-DEyRZEuM.js.map} +1 -1
  75. package/dist/{OtherTypeEventConfigModal-CYBfr2XE.js → OtherTypeEventConfigModal-CM6VkdmY.js} +3 -3
  76. package/dist/OtherTypeEventConfigModal-CM6VkdmY.js.map +1 -0
  77. package/dist/PaymentCreatePage-CIVe0P0p-25BQVpOX.js +482 -0
  78. package/dist/PaymentCreatePage-CIVe0P0p-25BQVpOX.js.map +1 -0
  79. package/dist/PaymentsPage-BvPe5Q9F-D2gfziwW.js +157 -0
  80. package/dist/PaymentsPage-BvPe5Q9F-D2gfziwW.js.map +1 -0
  81. package/dist/PermissionsModal-CCYkcKlC.js +151 -0
  82. package/dist/PermissionsModal-CCYkcKlC.js.map +1 -0
  83. package/dist/PickupBatchLinesEditor-DHmcAG23-DL2p6IKJ.js +119 -0
  84. package/dist/PickupBatchLinesEditor-DHmcAG23-DL2p6IKJ.js.map +1 -0
  85. package/dist/PickupCreatePage-CB0Sl0Hb-Mmj7zESG.js +783 -0
  86. package/dist/PickupCreatePage-CB0Sl0Hb-Mmj7zESG.js.map +1 -0
  87. package/dist/PickupsPage-Ctpghavs-CUp4uIZq.js +818 -0
  88. package/dist/PickupsPage-Ctpghavs-CUp4uIZq.js.map +1 -0
  89. package/dist/PmGuard-b10TGXEi-G3N0G_Wg.js +599 -0
  90. package/dist/PmGuard-b10TGXEi-G3N0G_Wg.js.map +1 -0
  91. package/dist/ProductEditPage-C1thoKHu-URQaZ6st.js +1302 -0
  92. package/dist/ProductEditPage-C1thoKHu-URQaZ6st.js.map +1 -0
  93. package/dist/ProductsPage-CupVmOD4-D45a_hf-.js +252 -0
  94. package/dist/ProductsPage-CupVmOD4-D45a_hf-.js.map +1 -0
  95. package/dist/PurchaseCreatePage-YD3NmhPQ-2j4etSjM.js +648 -0
  96. package/dist/PurchaseCreatePage-YD3NmhPQ-2j4etSjM.js.map +1 -0
  97. package/dist/PurchaseRequestDetailPage-Dg_MRY_N-D1bgTEAn.js +1577 -0
  98. package/dist/PurchaseRequestDetailPage-Dg_MRY_N-D1bgTEAn.js.map +1 -0
  99. package/dist/PurchaseRequestsPage-DPAPzpmm-mDH2IrTl.js +279 -0
  100. package/dist/PurchaseRequestsPage-DPAPzpmm-mDH2IrTl.js.map +1 -0
  101. package/dist/PurchasesPage-It1GHiXl-eH4IsF_U.js +293 -0
  102. package/dist/PurchasesPage-It1GHiXl-eH4IsF_U.js.map +1 -0
  103. package/dist/QueryBuilder-CXaBe6sr.js +478 -0
  104. package/dist/QueryBuilder-CXaBe6sr.js.map +1 -0
  105. package/dist/{RoleManagement-DEiBNfT8.js → RoleManagement-s8iNx2Mu.js} +145 -155
  106. package/dist/RoleManagement-s8iNx2Mu.js.map +1 -0
  107. package/dist/Roles-BIyiic67.js +14 -0
  108. package/dist/Roles-BIyiic67.js.map +1 -0
  109. package/dist/SaleCreatePage-C9kFmTvm-B3Y0o4CX.js +544 -0
  110. package/dist/SaleCreatePage-C9kFmTvm-B3Y0o4CX.js.map +1 -0
  111. package/dist/SalesPage-D18DCseD-BxktGDRQ.js +315 -0
  112. package/dist/SalesPage-D18DCseD-BxktGDRQ.js.map +1 -0
  113. package/dist/SettingsPage-VsxI-ano-DcmtUUEj.js +747 -0
  114. package/dist/SettingsPage-VsxI-ano-DcmtUUEj.js.map +1 -0
  115. package/dist/ShowFlywayQuery-D10Olk5Z.js +154 -0
  116. package/dist/ShowFlywayQuery-D10Olk5Z.js.map +1 -0
  117. package/dist/{ShowFlywayQuery-DVRCd384.js → ShowFlywayQuery-D1y_4A1u.js} +161 -121
  118. package/dist/ShowFlywayQuery-D1y_4A1u.js.map +1 -0
  119. package/dist/ShowQueryHistory-DRBKYDKk.js +313 -0
  120. package/dist/ShowQueryHistory-DRBKYDKk.js.map +1 -0
  121. package/dist/StorageUnitsPage-7EqwuMOI-BwUso1Th.js +721 -0
  122. package/dist/StorageUnitsPage-7EqwuMOI-BwUso1Th.js.map +1 -0
  123. package/dist/SubMenu-eEDhZUvh.js +317 -0
  124. package/dist/SubMenu-eEDhZUvh.js.map +1 -0
  125. package/dist/TransactionsPage-DrH53pVS-BkhIGB6C.js +746 -0
  126. package/dist/TransactionsPage-DrH53pVS-BkhIGB6C.js.map +1 -0
  127. package/dist/TransferCreatePage-CuvoMrYH-DTTfHjz-.js +315 -0
  128. package/dist/TransferCreatePage-CuvoMrYH-DTTfHjz-.js.map +1 -0
  129. package/dist/TransfersPage-Cf701t8s-BBbN7cBf.js +476 -0
  130. package/dist/TransfersPage-Cf701t8s-BBbN7cBf.js.map +1 -0
  131. package/dist/{TypeConfiguration-C3xoP2Nb.js → TypeConfiguration-3O6ABrK-.js} +2 -2
  132. package/dist/{TypeConfiguration-C3xoP2Nb.js.map → TypeConfiguration-3O6ABrK-.js.map} +1 -1
  133. package/dist/{UserList-Bc8gYxRL.js → UserList-DgPxsnj2.js} +253 -236
  134. package/dist/{UserList-Bc8gYxRL.js.map → UserList-DgPxsnj2.js.map} +1 -1
  135. package/dist/Users-Bpc4Sazd.js +41 -0
  136. package/dist/Users-Bpc4Sazd.js.map +1 -0
  137. package/dist/VialsPage-8oAc1yFv-Cl3FUXBJ.js +321 -0
  138. package/dist/VialsPage-8oAc1yFv-Cl3FUXBJ.js.map +1 -0
  139. package/dist/constants-ClZJY2x1-MkSWn6TZ.js +434 -0
  140. package/dist/constants-ClZJY2x1-MkSWn6TZ.js.map +1 -0
  141. package/dist/format-UOyOu75i-D0GyylyQ.js +63 -0
  142. package/dist/format-UOyOu75i-D0GyylyQ.js.map +1 -0
  143. package/dist/index.css +1 -1
  144. package/dist/index.js +1 -1
  145. package/dist/index.lib-Dn8PMkeD.js +862 -0
  146. package/dist/index.lib-Dn8PMkeD.js.map +1 -0
  147. package/dist/useFieldErrors-hDG8ox_x-DbSAzrGo.js +28 -0
  148. package/dist/useFieldErrors-hDG8ox_x-DbSAzrGo.js.map +1 -0
  149. package/dist/validation-BzlHnL-r-CCJm2utQ.js +125 -0
  150. package/dist/validation-BzlHnL-r-CCJm2utQ.js.map +1 -0
  151. package/package.json +4 -3
  152. package/dist/AccessRights-Zm8Obm4N.js +0 -1284
  153. package/dist/AccessRights-Zm8Obm4N.js.map +0 -1
  154. package/dist/AddEditQueryBuilder-Brdnm6rQ.js +0 -313
  155. package/dist/AddEditQueryBuilder-Brdnm6rQ.js.map +0 -1
  156. package/dist/AddLabelModal-DFllBVcd.js +0 -734
  157. package/dist/AddLabelModal-DFllBVcd.js.map +0 -1
  158. package/dist/AppModal-CtG2GjD_.js +0 -428
  159. package/dist/AppModal-CtG2GjD_.js.map +0 -1
  160. package/dist/ChangePasswordModalCore-DutQAZOx.js.map +0 -1
  161. package/dist/EventsSkeleton-DK6JDKAK.js +0 -83
  162. package/dist/EventsSkeleton-DK6JDKAK.js.map +0 -1
  163. package/dist/FeatureMenu-C3503UIX.js +0 -265
  164. package/dist/FeatureMenu-C3503UIX.js.map +0 -1
  165. package/dist/FlywayQuery-Cx2sly6g.js +0 -169
  166. package/dist/FlywayQuery-Cx2sly6g.js.map +0 -1
  167. package/dist/ImmunizationConfigurationBase-DLQVSNnt.js +0 -5895
  168. package/dist/ImmunizationConfigurationBase-DLQVSNnt.js.map +0 -1
  169. package/dist/ImmunizationConfigurationsList-DdSZicTP.js +0 -344
  170. package/dist/ImmunizationConfigurationsList-DdSZicTP.js.map +0 -1
  171. package/dist/LanguagesModal-D6VfaGrl.js +0 -394
  172. package/dist/LanguagesModal-D6VfaGrl.js.map +0 -1
  173. package/dist/ManageDynamicFeature-dt096fyj.js +0 -4189
  174. package/dist/ManageDynamicFeature-dt096fyj.js.map +0 -1
  175. package/dist/ManageEventConfiguration-BpSJszSX.js.map +0 -1
  176. package/dist/ManageTranslation-B4C9-lWD.js +0 -625
  177. package/dist/ManageTranslation-B4C9-lWD.js.map +0 -1
  178. package/dist/NotificationFlywayQuery-BY8Zzml_.js +0 -244
  179. package/dist/NotificationFlywayQuery-BY8Zzml_.js.map +0 -1
  180. package/dist/OtherTypeEventConfigModal-CYBfr2XE.js.map +0 -1
  181. package/dist/QueryBuilder-z7eqfd7D.js +0 -383
  182. package/dist/QueryBuilder-z7eqfd7D.js.map +0 -1
  183. package/dist/RoleManagement-DEiBNfT8.js.map +0 -1
  184. package/dist/ShowFlywayQuery-DVRCd384.js.map +0 -1
  185. package/dist/ShowFlywayQuery-tj42YQAS.js +0 -130
  186. package/dist/ShowFlywayQuery-tj42YQAS.js.map +0 -1
  187. package/dist/ShowQueryHistory-BDN0tzHg.js +0 -190
  188. package/dist/ShowQueryHistory-BDN0tzHg.js.map +0 -1
  189. package/dist/SubMenu-B072oEGb.js +0 -191
  190. package/dist/SubMenu-B072oEGb.js.map +0 -1
  191. package/dist/Users-CsJ08Kjm.js +0 -40
  192. package/dist/Users-CsJ08Kjm.js.map +0 -1
  193. package/dist/index.lib-C3fwoM3y.js +0 -820
  194. package/dist/index.lib-C3fwoM3y.js.map +0 -1
@@ -0,0 +1,179 @@
1
+ import { jsxs as s, jsx as o } from "react/jsx-runtime";
2
+ import { useTranslateProvider as h } from "@/common/languageTranslator/TranslationContext";
3
+ import { showToast as w } from "@/common/toaster/toaster";
4
+ import v from "@/hooks/useTrackEvent";
5
+ import { generateUUID as U } from "@/utils/UUIDgenerator";
6
+ import d from "@/common/fontAwesomeIcons/FontAwesomeIcons";
7
+ import { Dialog as D, DialogTitle as C, Box as x, Typography as f, IconButton as I, DialogContent as N, DialogActions as T, Button as c } from "@mui/material";
8
+ import E from "@/views/custom-components/PostgresEditor";
9
+ import a from "prop-types";
10
+ import { useMemo as k } from "react";
11
+ function q({ open: y, handleClose: i, data: t, type: m }) {
12
+ const { translate: l } = h(), g = v(), p = k(() => {
13
+ const r = U();
14
+ let e = {};
15
+ t != null && t.featureJson && (t == null ? void 0 : t.featureJson) != null ? e.featureJson = t == null ? void 0 : t.featureJson : e.featureJson = null;
16
+ let n = "";
17
+ e.groupName = t == null ? void 0 : t.groupName, e.menuName = t == null ? void 0 : t.name, e.subgroupName = t == null ? void 0 : t.subgroupName, e.navigationState = t == null ? void 0 : t.navigationState, e.menuType = m, e.uuid = r, e.groupName && e.groupName != null ? (n = "select id from menu_group mg where group_name = '" + e.groupName + "'", e.groupUUID = r) : (n = null, e.groupUUID = null);
18
+ let u;
19
+ return e.subgroupName && e.subgroupName != null ? (u = "select sub_group_id from menu_config mc where menu_name = '" + e.subgroupName + "'", e.subgroupUUID = r) : (u = null, e.subgroupUUID = null), e.text = "insert into menu_config (feature_json, group_id, active, is_dynamic_report, menu_name, navigation_state, sub_group_id,", e.text += `
20
+ `, e.text += 'menu_type,"uuid", group_name_uuid, sub_group_uuid)', e.text += `
21
+ `, e.text += "values(", e.featureJson != null ? e.text += "'" + e.featureJson + "'" : e.text += "null", e.text += `
22
+ `, e.text += ",", n != null ? e.text += "(" + n + ")" : e.text += "null", e.text += ",", e.text += "true, false,", e.text += "'" + e.menuName + "'", e.text += ",", e.text += `
23
+ `, e.text += "'" + e.navigationState + "'", e.text += ",", u != null ? e.text += "(" + u + ")" : e.text += "null", e.text += ",", e.text += "'" + e.menuType + "'", e.text += ",", e.text += "'" + e.uuid + "'", e.text += ",", e.groupUUID != null ? e.text += "'" + e.groupUUID + "'" : e.text += "null", e.text += ",", e.subgroupUUID != null ? e.text += "'" + e.subgroupUUID + "'" : e.text += "null", e.text += ")", e.text += `
24
+ `, e.text += "on conflict(navigation_state,active) do update", e.text += `
25
+ `, e.text += "SET feature_json = excluded.feature_json,", e.text += `
26
+ `, e.text += " group_id= excluded.group_id,", e.text += `
27
+ `, e.text += " menu_name = excluded.menu_name,", e.text += `
28
+ `, e.text += " sub_group_id= excluded.sub_group_id,", e.text += `
29
+ `, e.text += " menu_type= excluded.menu_type;", e.text;
30
+ }, [t, m]), _ = () => {
31
+ const r = new Blob([p], { type: "text/plain" }), e = (r.size / 1024).toFixed(2), n = document.createElement("a");
32
+ n.href = URL.createObjectURL(r), n.download = "V" + (/* @__PURE__ */ new Date()).getTime() + "__CREATED_OR_UPDATED_feature_" + m + ".sql", document.body.appendChild(n), n.click(), document.body.removeChild(n), g("file_download", {
33
+ file_type: "sql",
34
+ file_name: n.download,
35
+ file_size: `${e} KB`,
36
+ download_status: "success"
37
+ }), i();
38
+ }, b = () => {
39
+ navigator.clipboard.writeText(p).then(
40
+ () => {
41
+ w({
42
+ message: "Query copied",
43
+ type: "success"
44
+ });
45
+ },
46
+ (r) => {
47
+ console.error("Could not copy text: ", r);
48
+ }
49
+ ), i();
50
+ };
51
+ return /* @__PURE__ */ s(
52
+ D,
53
+ {
54
+ "data-testid": "flywayquery-modal",
55
+ open: y,
56
+ onClose: i,
57
+ fullWidth: !0,
58
+ maxWidth: "md",
59
+ children: [
60
+ /* @__PURE__ */ s(
61
+ C,
62
+ {
63
+ sx: {
64
+ display: "flex",
65
+ alignItems: "flex-start",
66
+ justifyContent: "space-between",
67
+ gap: 2,
68
+ py: 1.5,
69
+ borderBottom: "1px solid",
70
+ borderColor: "divider"
71
+ },
72
+ children: [
73
+ /* @__PURE__ */ s(x, { children: [
74
+ /* @__PURE__ */ o(
75
+ f,
76
+ {
77
+ variant: "subtitle1",
78
+ component: "span",
79
+ sx: { fontWeight: 700, display: "block" },
80
+ children: l("FLYWAY QUERY")
81
+ }
82
+ ),
83
+ /* @__PURE__ */ o(f, { variant: "body2", color: "text.secondary", children: l(
84
+ "Copy or download this migration to recreate this menu entry on another environment."
85
+ ) })
86
+ ] }),
87
+ /* @__PURE__ */ o(
88
+ I,
89
+ {
90
+ size: "small",
91
+ onClick: i,
92
+ "aria-label": l("Close"),
93
+ "data-testid": "flywayquery-close-button",
94
+ children: /* @__PURE__ */ o(d, { iconName: "faXmark" })
95
+ }
96
+ )
97
+ ]
98
+ }
99
+ ),
100
+ /* @__PURE__ */ o(N, { children: /* @__PURE__ */ o(
101
+ x,
102
+ {
103
+ "data-testid": "flywayquery-textfield-query-display",
104
+ role: "region",
105
+ "aria-label": l("FLYWAY QUERY"),
106
+ sx: {
107
+ mt: 2,
108
+ overflow: "hidden",
109
+ borderRadius: (r) => `${r.shape.borderRadius}px`,
110
+ border: "1px solid",
111
+ borderColor: "divider"
112
+ },
113
+ children: /* @__PURE__ */ o(
114
+ E,
115
+ {
116
+ mode: "READ_ONLY",
117
+ height: "45vh",
118
+ defaultValue: p
119
+ }
120
+ )
121
+ }
122
+ ) }),
123
+ /* @__PURE__ */ s(
124
+ T,
125
+ {
126
+ sx: { px: 3, py: 2, borderTop: "1px solid", borderColor: "divider" },
127
+ children: [
128
+ /* @__PURE__ */ o(
129
+ c,
130
+ {
131
+ "data-testid": "flywayquery-close-button-action",
132
+ variant: "outlined",
133
+ color: "inherit",
134
+ size: "small",
135
+ onClick: i,
136
+ children: l("Close")
137
+ }
138
+ ),
139
+ /* @__PURE__ */ o(
140
+ c,
141
+ {
142
+ "data-testid": "flywayquery-copy-button",
143
+ variant: "outlined",
144
+ size: "small",
145
+ color: "primary",
146
+ startIcon: /* @__PURE__ */ o(d, { iconName: "faCopy" }),
147
+ onClick: b,
148
+ children: l("Copy")
149
+ }
150
+ ),
151
+ /* @__PURE__ */ o(
152
+ c,
153
+ {
154
+ "data-testid": "flywayquery-download-button",
155
+ variant: "contained",
156
+ color: "primary",
157
+ size: "small",
158
+ startIcon: /* @__PURE__ */ o(d, { iconName: "faDownload" }),
159
+ onClick: _,
160
+ children: l("Download")
161
+ }
162
+ )
163
+ ]
164
+ }
165
+ )
166
+ ]
167
+ }
168
+ );
169
+ }
170
+ q.propTypes = {
171
+ open: a.any,
172
+ handleClose: a.any,
173
+ data: a.any,
174
+ type: a.any
175
+ };
176
+ export {
177
+ q as default
178
+ };
179
+ //# sourceMappingURL=FlywayQuery-CQygj51V.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlywayQuery-CQygj51V.js","sources":["../src/views/Features/FlywayQuery.jsx"],"sourcesContent":["import { useTranslateProvider } from \"@/common/languageTranslator/TranslationContext\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport useTrackEvent from \"@/hooks/useTrackEvent\";\nimport { generateUUID } from \"@/utils/UUIDgenerator\";\nimport FontAwesomeIcons from \"@/common/fontAwesomeIcons/FontAwesomeIcons\";\nimport {\n Box,\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n Typography,\n} from \"@mui/material\";\nimport PostgresEditor from \"@/views/custom-components/PostgresEditor\";\nimport PropTypes from \"prop-types\";\nimport React, { useMemo } from \"react\";\n\n/**\n * A functional component that renders a Flyway query interface.\n * @module FlywayQuery\n * @param {Object} props - The props object.\n * @param {boolean} props.open - Controls the visibility of the component.\n * @param {Function} props.handleClose - Callback function to handle closing the component.\n * @param {Object} props.data - Data to be used or displayed within the component.\n * @param {string} props.type - Determines the type of query or functionality.\n * @returns {JSX.Element} The rendered component.\n */\nexport default function FlywayQuery({ open, handleClose, data, type }) {\n const { translate } = useTranslateProvider();\n const trackEvent = useTrackEvent();\n\n // Derived, not effect-then-setState: PostgresEditor creates its Monaco\n // instance asynchronously and captures `defaultValue` at that moment, so a\n // query that only lands on the second render never reaches the editor.\n const queryText = useMemo(() => {\n const uuid = generateUUID();\n let temp = {};\n if (data?.featureJson && data?.featureJson != null) {\n temp.featureJson = data?.featureJson;\n } else {\n temp.featureJson = null;\n }\n let groupIdString = \"\";\n temp.groupName = data?.groupName;\n temp.menuName = data?.name;\n temp.subgroupName = data?.subgroupName;\n temp.navigationState = data?.navigationState;\n temp.menuType = type;\n temp.uuid = uuid;\n temp.groupUUID;\n temp.subgroupUUID;\n\n if (temp.groupName && temp.groupName != null) {\n groupIdString =\n \"select id from menu_group mg where group_name = '\" +\n temp.groupName +\n \"'\";\n temp.groupUUID = uuid;\n } else {\n groupIdString = null;\n temp.groupUUID = null;\n }\n let subgroupIdString;\n if (temp.subgroupName && temp.subgroupName != null) {\n subgroupIdString =\n \"select sub_group_id from menu_config mc where menu_name = '\" +\n temp.subgroupName +\n \"'\";\n temp.subgroupUUID = uuid;\n } else {\n subgroupIdString = null;\n temp.subgroupUUID = null;\n }\n\n temp.text =\n \"insert into menu_config (feature_json, group_id, active, is_dynamic_report, menu_name, navigation_state, sub_group_id,\";\n temp.text += \"\\n\";\n temp.text += 'menu_type,\"uuid\", group_name_uuid, sub_group_uuid)';\n temp.text += \"\\n\";\n temp.text += \"values(\";\n if (temp.featureJson != null) {\n temp.text += \"'\" + temp.featureJson + \"'\";\n } else {\n temp.text += \"null\";\n }\n temp.text += \"\\n\";\n temp.text += \",\";\n if (groupIdString != null) {\n temp.text += \"(\" + groupIdString + \")\";\n } else {\n temp.text += \"null\";\n }\n temp.text += \",\";\n temp.text += \"true, false,\";\n temp.text += \"'\" + temp.menuName + \"'\";\n temp.text += \",\";\n temp.text += \"\\n\";\n temp.text += \"'\" + temp.navigationState + \"'\";\n temp.text += \",\";\n if (subgroupIdString != null) {\n temp.text += \"(\" + subgroupIdString + \")\";\n } else {\n temp.text += \"null\";\n }\n temp.text += \",\";\n temp.text += \"'\" + temp.menuType + \"'\";\n temp.text += \",\";\n temp.text += \"'\" + temp.uuid + \"'\";\n temp.text += \",\";\n if (temp.groupUUID != null) {\n temp.text += \"'\" + temp.groupUUID + \"'\";\n } else {\n temp.text += \"null\";\n }\n temp.text += \",\";\n if (temp.subgroupUUID != null) {\n temp.text += \"'\" + temp.subgroupUUID + \"'\";\n } else {\n temp.text += \"null\";\n }\n temp.text += \")\";\n temp.text += \"\\n\";\n temp.text += \"on conflict(navigation_state,active) do update\";\n temp.text += \"\\n\";\n temp.text += \"SET feature_json = excluded.feature_json,\";\n temp.text += \"\\n\";\n temp.text += \"\tgroup_id= excluded.group_id,\";\n temp.text += \"\\n\";\n temp.text += \" \tmenu_name = excluded.menu_name,\";\n temp.text += \"\\n\";\n temp.text += \"\tsub_group_id= excluded.sub_group_id,\";\n temp.text += \"\\n\";\n temp.text += \" \tmenu_type= excluded.menu_type;\";\n\n return temp.text;\n }, [data, type]);\n\n /**\n * Handles the download of a SQL file with the query text.\n * @function handleDownload\n * @returns {void}\n */\n\n const handleDownload = () => {\n const blob = new Blob([queryText], { type: \"text/plain\" });\n const blobSizeInKB = (blob.size / 1024).toFixed(2);\n const link = document.createElement(\"a\");\n link.href = URL.createObjectURL(blob);\n link.download =\n \"V\" +\n new Date().getTime() +\n \"__CREATED_OR_UPDATED_feature_\" +\n type +\n \".sql\";\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n trackEvent(\"file_download\", {\n file_type: \"sql\",\n file_name: link.download,\n file_size: `${blobSizeInKB} KB`,\n download_status: \"success\",\n });\n handleClose();\n };\n\n /**\n * Copies the query text to the clipboard and displays a success message.\n * @function handleCopy\n * @returns {void}\n */\n\n const handleCopy = () => {\n navigator.clipboard.writeText(queryText).then(\n () => {\n showToast({\n message: \"Query copied\",\n type: \"success\",\n });\n },\n (err) => {\n console.error(\"Could not copy text: \", err);\n },\n );\n handleClose();\n };\n\n return (\n <Dialog\n data-testid=\"flywayquery-modal\"\n open={open}\n onClose={handleClose}\n fullWidth\n maxWidth=\"md\"\n >\n <DialogTitle\n sx={{\n display: \"flex\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n gap: 2,\n py: 1.5,\n borderBottom: \"1px solid\",\n borderColor: \"divider\",\n }}\n >\n <Box>\n <Typography\n variant=\"subtitle1\"\n component=\"span\"\n sx={{ fontWeight: 700, display: \"block\" }}\n >\n {translate(\"FLYWAY QUERY\")}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {translate(\n \"Copy or download this migration to recreate this menu entry on another environment.\",\n )}\n </Typography>\n </Box>\n <IconButton\n size=\"small\"\n onClick={handleClose}\n aria-label={translate(\"Close\")}\n data-testid=\"flywayquery-close-button\"\n >\n <FontAwesomeIcons iconName=\"faXmark\" />\n </IconButton>\n </DialogTitle>\n\n <DialogContent>\n <Box\n data-testid=\"flywayquery-textfield-query-display\"\n role=\"region\"\n aria-label={translate(\"FLYWAY QUERY\")}\n sx={{\n mt: 2,\n overflow: \"hidden\",\n borderRadius: (t) => `${t.shape.borderRadius}px`,\n border: \"1px solid\",\n borderColor: \"divider\",\n }}\n >\n <PostgresEditor\n mode=\"READ_ONLY\"\n height=\"45vh\"\n defaultValue={queryText}\n />\n </Box>\n </DialogContent>\n\n <DialogActions\n sx={{ px: 3, py: 2, borderTop: \"1px solid\", borderColor: \"divider\" }}\n >\n <Button\n data-testid=\"flywayquery-close-button-action\"\n variant=\"outlined\"\n color=\"inherit\"\n size=\"small\"\n onClick={handleClose}\n >\n {translate(\"Close\")}\n </Button>\n <Button\n data-testid=\"flywayquery-copy-button\"\n variant=\"outlined\"\n size=\"small\"\n color=\"primary\"\n startIcon={<FontAwesomeIcons iconName=\"faCopy\" />}\n onClick={handleCopy}\n >\n {translate(\"Copy\")}\n </Button>\n <Button\n data-testid=\"flywayquery-download-button\"\n variant=\"contained\"\n color=\"primary\"\n size=\"small\"\n startIcon={<FontAwesomeIcons iconName=\"faDownload\" />}\n onClick={handleDownload}\n >\n {translate(\"Download\")}\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n\nFlywayQuery.propTypes = {\n open: PropTypes.any,\n handleClose: PropTypes.any,\n data: PropTypes.any,\n type: PropTypes.any,\n};\n"],"names":["FlywayQuery","open","handleClose","data","type","translate","useTranslateProvider","trackEvent","useTrackEvent","queryText","useMemo","uuid","generateUUID","temp","groupIdString","subgroupIdString","handleDownload","blob","blobSizeInKB","link","handleCopy","showToast","err","jsxs","Dialog","DialogTitle","Box","jsx","Typography","IconButton","FontAwesomeIcons","DialogContent","t","PostgresEditor","DialogActions","Button","PropTypes"],"mappings":"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"}
@@ -0,0 +1,236 @@
1
+ import { jsx as t, jsxs as o } from "react/jsx-runtime";
2
+ import "react";
3
+ import { Dialog as M, DialogTitle as W, Box as m, Typography as w, IconButton as j, DialogContent as A, DialogActions as F, Button as g } from "@mui/material";
4
+ import P from "@/common/fontAwesomeIcons/FontAwesomeIcons";
5
+ import { useForm as q } from "react-hook-form";
6
+ import { yupResolver as N } from "@hookform/resolvers/yup";
7
+ import * as s from "yup";
8
+ import h from "@/views/custom-components/CustomCheckBox";
9
+ import k from "@/views/custom-components/CustomDatePicker";
10
+ import r from "prop-types";
11
+ import { a as z } from "./Features-Dne21RWu.js";
12
+ import { showToast as B } from "@/common/toaster/toaster";
13
+ import { execute as V } from "@/common/services/GlobalApis.js";
14
+ import { useTranslateProvider as L } from "@/common/languageTranslator/TranslationContext";
15
+ const R = s.object().shape({
16
+ noStartDate: s.boolean().default(!0),
17
+ noEndDate: s.boolean().default(!0),
18
+ startDate: s.date().nullable().when("noStartDate", {
19
+ is: !1,
20
+ then: (a) => a.required("Start date is required")
21
+ }),
22
+ endDate: s.date().nullable().when("noEndDate", {
23
+ is: !1,
24
+ then: (a) => a.required("End date is required")
25
+ }).test(
26
+ "endAfterStart",
27
+ "End date must be after start date",
28
+ function(a) {
29
+ const { startDate: n, noEndDate: e } = this.parent;
30
+ return !a || e || !n ? !0 : new Date(a) >= new Date(n);
31
+ }
32
+ ),
33
+ isBackendOnly: s.boolean().default(!1)
34
+ });
35
+ function X({
36
+ isOpen: a,
37
+ onClose: n,
38
+ pendingGrant: e,
39
+ subMenuId: E,
40
+ newApiData: I
41
+ }) {
42
+ const { translate: l } = L(), {
43
+ handleSubmit: v,
44
+ control: i,
45
+ reset: p,
46
+ watch: u,
47
+ formState: { errors: f },
48
+ trigger: b
49
+ } = q({
50
+ resolver: N(R),
51
+ defaultValues: {
52
+ noStartDate: !0,
53
+ noEndDate: !0,
54
+ startDate: null,
55
+ endDate: null,
56
+ isBackendOnly: !1
57
+ },
58
+ mode: "onChange"
59
+ }), T = u("noStartDate"), Y = u("noEndDate"), x = u("startDate"), y = u("endDate"), O = async (d) => {
60
+ var S, C;
61
+ if (e) {
62
+ try {
63
+ await V({
64
+ code: "grant_permission",
65
+ parameters: {
66
+ featureName: e.id,
67
+ roleIds: e != null && e.designationId ? String(e == null ? void 0 : e.designationId) : null,
68
+ userIds: e != null && e.userId ? String(e.userId) : null,
69
+ startDate: d.noStartDate ? null : d.startDate,
70
+ endDate: d.noEndDate ? null : d.endDate,
71
+ isBackendOnly: d.isBackendOnly
72
+ }
73
+ }), B({
74
+ type: "success",
75
+ message: "Permission Granted Successfully"
76
+ });
77
+ const { data: c } = await z(E);
78
+ I(c);
79
+ } catch (c) {
80
+ B({
81
+ type: "error",
82
+ message: `Error granting permission: ${(C = (S = c == null ? void 0 : c.response) == null ? void 0 : S.data) == null ? void 0 : C.message}`
83
+ });
84
+ }
85
+ p(), n();
86
+ }
87
+ }, D = () => {
88
+ p(), n();
89
+ };
90
+ return /* @__PURE__ */ t(M, { open: !!a, onClose: D, fullWidth: !0, maxWidth: "sm", children: /* @__PURE__ */ o("form", { onSubmit: v(O), children: [
91
+ /* @__PURE__ */ o(
92
+ W,
93
+ {
94
+ sx: {
95
+ display: "flex",
96
+ alignItems: "flex-start",
97
+ justifyContent: "space-between",
98
+ gap: 2,
99
+ py: 1.5,
100
+ borderBottom: "1px solid",
101
+ borderColor: "divider"
102
+ },
103
+ children: [
104
+ /* @__PURE__ */ o(m, { children: [
105
+ /* @__PURE__ */ t(
106
+ w,
107
+ {
108
+ variant: "subtitle1",
109
+ component: "span",
110
+ sx: { fontWeight: 700, display: "block" },
111
+ children: l("Set Access Window")
112
+ }
113
+ ),
114
+ /* @__PURE__ */ t(w, { variant: "body2", color: "text.secondary", children: l(
115
+ "Leave both dates off to grant access that never expires."
116
+ ) })
117
+ ] }),
118
+ /* @__PURE__ */ t(
119
+ j,
120
+ {
121
+ size: "small",
122
+ onClick: D,
123
+ "aria-label": l("Close"),
124
+ "data-testid": "grantpermission-close-button",
125
+ children: /* @__PURE__ */ t(P, { iconName: "faXmark" })
126
+ }
127
+ )
128
+ ]
129
+ }
130
+ ),
131
+ /* @__PURE__ */ o(A, { children: [
132
+ /* @__PURE__ */ o(
133
+ m,
134
+ {
135
+ sx: {
136
+ display: "flex",
137
+ flexDirection: { xs: "column", sm: "row" },
138
+ gap: 3,
139
+ pt: 2
140
+ },
141
+ children: [
142
+ /* @__PURE__ */ o(m, { sx: { flex: 1, minWidth: 0 }, children: [
143
+ /* @__PURE__ */ t(
144
+ h,
145
+ {
146
+ defaultChecked: !0,
147
+ label: "No Start Date",
148
+ control: i,
149
+ errors: f,
150
+ name: "noStartDate",
151
+ onChange: () => b("startDate")
152
+ }
153
+ ),
154
+ /* @__PURE__ */ t(
155
+ k,
156
+ {
157
+ control: i,
158
+ name: "startDate",
159
+ errors: f,
160
+ disabled: T,
161
+ format: "DD/MM/YYYY",
162
+ maxDate: y || void 0
163
+ }
164
+ )
165
+ ] }),
166
+ /* @__PURE__ */ o(m, { sx: { flex: 1, minWidth: 0 }, children: [
167
+ /* @__PURE__ */ t(
168
+ h,
169
+ {
170
+ label: "No End Date",
171
+ control: i,
172
+ name: "noEndDate",
173
+ errors: f,
174
+ onChange: () => b("endDate")
175
+ }
176
+ ),
177
+ /* @__PURE__ */ t(
178
+ k,
179
+ {
180
+ control: i,
181
+ name: "endDate",
182
+ errors: f,
183
+ disabled: Y,
184
+ format: "DD/MM/YYYY",
185
+ minDate: x || void 0
186
+ }
187
+ )
188
+ ] })
189
+ ]
190
+ }
191
+ ),
192
+ /* @__PURE__ */ t(m, { sx: { mt: 1 }, children: /* @__PURE__ */ t(
193
+ h,
194
+ {
195
+ label: "Is Backend Only?",
196
+ control: i,
197
+ name: "isBackendOnly"
198
+ }
199
+ ) })
200
+ ] }),
201
+ /* @__PURE__ */ o(
202
+ F,
203
+ {
204
+ sx: { px: 3, py: 2, borderTop: "1px solid", borderColor: "divider" },
205
+ children: [
206
+ /* @__PURE__ */ t(
207
+ g,
208
+ {
209
+ variant: "outlined",
210
+ color: "inherit",
211
+ size: "small",
212
+ onClick: D,
213
+ type: "button",
214
+ children: l("Close")
215
+ }
216
+ ),
217
+ /* @__PURE__ */ t(g, { variant: "contained", color: "primary", size: "small", type: "submit", children: l("Submit") })
218
+ ]
219
+ }
220
+ )
221
+ ] }) });
222
+ }
223
+ X.propTypes = {
224
+ isOpen: r.bool,
225
+ onClose: r.func,
226
+ pendingGrant: r.object,
227
+ execute: r.func,
228
+ getFeatureDataV2: r.func,
229
+ subMenuId: r.string,
230
+ newApiData: r.func,
231
+ showToast: r.func
232
+ };
233
+ export {
234
+ X as default
235
+ };
236
+ //# sourceMappingURL=GrantPermissionModal-BDN66Atn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GrantPermissionModal-BDN66Atn.js","sources":["../src/views/Features/GrantPermissionModal.jsx"],"sourcesContent":["import React from \"react\";\nimport {\n Box,\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n Typography,\n} from \"@mui/material\";\nimport FontAwesomeIcons from \"@/common/fontAwesomeIcons/FontAwesomeIcons\";\nimport { useForm } from \"react-hook-form\";\nimport { yupResolver } from \"@hookform/resolvers/yup\";\nimport * as Yup from \"yup\";\nimport CustomCheckBox from \"@/views/custom-components/CustomCheckBox\";\nimport CustomDatePicker from \"@/views/custom-components/CustomDatePicker\";\nimport PropTypes from \"prop-types\";\nimport { getFeatureDataV2 } from \"../../services/Features\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport { execute } from \"@/common/services/GlobalApis.js\";\nimport { useTranslateProvider } from \"@/common/languageTranslator/TranslationContext\";\n\nconst schema = Yup.object().shape({\n noStartDate: Yup.boolean().default(true),\n noEndDate: Yup.boolean().default(true),\n startDate: Yup.date()\n .nullable()\n .when(\"noStartDate\", {\n is: false,\n then: (schema) => schema.required(\"Start date is required\"),\n }),\n endDate: Yup.date()\n .nullable()\n .when(\"noEndDate\", {\n is: false,\n then: (schema) => schema.required(\"End date is required\"),\n })\n .test(\n \"endAfterStart\",\n \"End date must be after start date\",\n function (value) {\n const { startDate, noEndDate } = this.parent;\n if (!value || noEndDate || !startDate) return true;\n return new Date(value) >= new Date(startDate);\n }\n ),\n isBackendOnly: Yup.boolean().default(false),\n});\n\nexport default function GrantPermissionModal({\n isOpen,\n onClose,\n pendingGrant,\n subMenuId,\n newApiData,\n}) {\n const { translate } = useTranslateProvider();\n const {\n handleSubmit,\n control,\n reset,\n watch,\n formState: { errors },\n trigger,\n } = useForm({\n resolver: yupResolver(schema),\n defaultValues: {\n noStartDate: true,\n noEndDate: true,\n startDate: null,\n endDate: null,\n isBackendOnly: false,\n },\n mode: \"onChange\",\n });\n\n const noStartDate = watch(\"noStartDate\");\n const noEndDate = watch(\"noEndDate\");\n const startDate = watch(\"startDate\");\n const endDate = watch(\"endDate\");\n\n const handleFormSubmit = async (values) => {\n if (!pendingGrant) return;\n\n try {\n await execute({\n code: \"grant_permission\",\n parameters: {\n featureName: pendingGrant.id,\n roleIds: pendingGrant?.designationId\n ? String(pendingGrant?.designationId)\n : null,\n userIds: pendingGrant?.userId ? String(pendingGrant.userId) : null,\n startDate: values.noStartDate ? null : values.startDate,\n endDate: values.noEndDate ? null : values.endDate,\n isBackendOnly: values.isBackendOnly,\n },\n });\n\n showToast({\n type: \"success\",\n message: \"Permission Granted Successfully\",\n });\n\n // refresh data\n const { data: val } = await getFeatureDataV2(subMenuId);\n newApiData(val);\n } catch (error) {\n showToast({\n type: \"error\",\n message: `Error granting permission: ${error?.response?.data?.message}`,\n });\n }\n\n // cleanup\n reset();\n onClose();\n };\n\n const handleClose = () => {\n reset();\n onClose();\n };\n\n return (\n <Dialog open={Boolean(isOpen)} onClose={handleClose} fullWidth maxWidth=\"sm\">\n <form onSubmit={handleSubmit(handleFormSubmit)}>\n <DialogTitle\n sx={{\n display: \"flex\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n gap: 2,\n py: 1.5,\n borderBottom: \"1px solid\",\n borderColor: \"divider\",\n }}\n >\n <Box>\n <Typography\n variant=\"subtitle1\"\n component=\"span\"\n sx={{ fontWeight: 700, display: \"block\" }}\n >\n {translate(\"Set Access Window\")}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {translate(\n \"Leave both dates off to grant access that never expires.\",\n )}\n </Typography>\n </Box>\n <IconButton\n size=\"small\"\n onClick={handleClose}\n aria-label={translate(\"Close\")}\n data-testid=\"grantpermission-close-button\"\n >\n <FontAwesomeIcons iconName=\"faXmark\" />\n </IconButton>\n </DialogTitle>\n\n <DialogContent>\n <Box\n sx={{\n display: \"flex\",\n flexDirection: { xs: \"column\", sm: \"row\" },\n gap: 3,\n pt: 2,\n }}\n >\n <Box sx={{ flex: 1, minWidth: 0 }}>\n <CustomCheckBox\n defaultChecked={true}\n label={\"No Start Date\"}\n control={control}\n errors={errors}\n name={\"noStartDate\"}\n onChange={() => trigger(\"startDate\")}\n />\n <CustomDatePicker\n control={control}\n name={\"startDate\"}\n errors={errors}\n disabled={noStartDate}\n format=\"DD/MM/YYYY\"\n maxDate={endDate ? endDate : undefined}\n />\n </Box>\n <Box sx={{ flex: 1, minWidth: 0 }}>\n <CustomCheckBox\n label={\"No End Date\"}\n control={control}\n name={\"noEndDate\"}\n errors={errors}\n onChange={() => trigger(\"endDate\")}\n />\n <CustomDatePicker\n control={control}\n name={\"endDate\"}\n errors={errors}\n disabled={noEndDate}\n format=\"DD/MM/YYYY\"\n minDate={startDate ? startDate : undefined}\n />\n </Box>\n </Box>\n\n <Box sx={{ mt: 1 }}>\n <CustomCheckBox\n label={\"Is Backend Only?\"}\n control={control}\n name={\"isBackendOnly\"}\n />\n </Box>\n </DialogContent>\n\n <DialogActions\n sx={{ px: 3, py: 2, borderTop: \"1px solid\", borderColor: \"divider\" }}\n >\n <Button\n variant=\"outlined\"\n color=\"inherit\"\n size=\"small\"\n onClick={handleClose}\n type=\"button\"\n >\n {translate(\"Close\")}\n </Button>\n <Button variant=\"contained\" color=\"primary\" size=\"small\" type=\"submit\">\n {translate(\"Submit\")}\n </Button>\n </DialogActions>\n </form>\n </Dialog>\n );\n}\n\nGrantPermissionModal.propTypes = {\n isOpen: PropTypes.bool,\n onClose: PropTypes.func,\n pendingGrant: PropTypes.object,\n execute: PropTypes.func,\n getFeatureDataV2: PropTypes.func,\n subMenuId: PropTypes.string,\n newApiData: PropTypes.func,\n showToast: PropTypes.func,\n};\n"],"names":["schema","Yup","value","startDate","noEndDate","GrantPermissionModal","isOpen","onClose","pendingGrant","subMenuId","newApiData","translate","useTranslateProvider","handleSubmit","control","reset","watch","errors","trigger","useForm","yupResolver","noStartDate","endDate","handleFormSubmit","values","execute","showToast","val","getFeatureDataV2","error","_b","_a","handleClose","Dialog","jsxs","DialogTitle","Box","jsx","Typography","IconButton","FontAwesomeIcons","DialogContent","CustomCheckBox","CustomDatePicker","DialogActions","Button","PropTypes"],"mappings":"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"}