@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.
- package/dist/AccessRights-DUgY6ewy.js +1031 -0
- package/dist/AccessRights-DUgY6ewy.js.map +1 -0
- package/dist/AddEditQueryBuilder-D-iQiVIe.js +365 -0
- package/dist/AddEditQueryBuilder-D-iQiVIe.js.map +1 -0
- package/dist/{AddFeatures-v3TmGQee.js → AddFeatures-D1sU8RjY.js} +2 -2
- package/dist/{AddFeatures-v3TmGQee.js.map → AddFeatures-D1sU8RjY.js.map} +1 -1
- package/dist/AddLabelModal-Bq-wRqv9.js +631 -0
- package/dist/AddLabelModal-Bq-wRqv9.js.map +1 -0
- package/dist/AddMenuConfiguration-c6ZKiN0i.js +8898 -0
- package/dist/AddMenuConfiguration-c6ZKiN0i.js.map +1 -0
- package/dist/AppModal-CCtrQ5Tr.js +394 -0
- package/dist/AppModal-CCtrQ5Tr.js.map +1 -0
- package/dist/BrandsPage-DMw2vT0u-BVhvhc6J.js +387 -0
- package/dist/BrandsPage-DMw2vT0u-BVhvhc6J.js.map +1 -0
- package/dist/CategoriesPage-D3ihx9Gi-CT58g0ry.js +398 -0
- package/dist/CategoriesPage-D3ihx9Gi-CT58g0ry.js.map +1 -0
- package/dist/{ChangePasswordModalCore-DutQAZOx.js → ChangePasswordModalCore-lQ9GamH1.js} +1605 -1610
- package/dist/ChangePasswordModalCore-lQ9GamH1.js.map +1 -0
- package/dist/ConditionConfig-BQBmBHaM.js +408 -0
- package/dist/ConditionConfig-BQBmBHaM.js.map +1 -0
- package/dist/DashboardPage-asr2XDRu-uOOlX9Vq.js +435 -0
- package/dist/DashboardPage-asr2XDRu-uOOlX9Vq.js.map +1 -0
- package/dist/EventConfig-BY2cgGyx.js +27 -0
- package/dist/EventConfig-BY2cgGyx.js.map +1 -0
- package/dist/EventConfigurations-CUPEN5BV.js +544 -0
- package/dist/EventConfigurations-CUPEN5BV.js.map +1 -0
- package/dist/EventConfigurations.css +1 -1
- package/dist/EventsExceptionModal-BX-ArkBE.js +188 -0
- package/dist/EventsExceptionModal-BX-ArkBE.js.map +1 -0
- package/dist/EventsUi-D6O9S7BK.js +258 -0
- package/dist/EventsUi-D6O9S7BK.js.map +1 -0
- package/dist/FacilityPicker-DYl_PDyt-Cbwo2tAY.js +79 -0
- package/dist/FacilityPicker-DYl_PDyt-Cbwo2tAY.js.map +1 -0
- package/dist/FeatureMenu-CHsBbw3W.js +525 -0
- package/dist/FeatureMenu-CHsBbw3W.js.map +1 -0
- package/dist/{FhirServerList-Dkq7Kbes.js → FhirServerList-iXBPkRVF.js} +22 -22
- package/dist/{FhirServerList-Dkq7Kbes.js.map → FhirServerList-iXBPkRVF.js.map} +1 -1
- package/dist/{FhirServerWizard-Db6Hm4bQ.js → FhirServerWizard-DZI8Olku.js} +15 -15
- package/dist/{FhirServerWizard-Db6Hm4bQ.js.map → FhirServerWizard-DZI8Olku.js.map} +1 -1
- package/dist/FlywayQuery-CQygj51V.js +179 -0
- package/dist/FlywayQuery-CQygj51V.js.map +1 -0
- package/dist/GrantPermissionModal-D7iNZd0M.js +239 -0
- package/dist/GrantPermissionModal-D7iNZd0M.js.map +1 -0
- package/dist/ImmunizationConfigurationBase-aUtx0JEe.js +8019 -0
- package/dist/ImmunizationConfigurationBase-aUtx0JEe.js.map +1 -0
- package/dist/ImmunizationConfigurationBase.css +1 -1
- package/dist/ImmunizationConfigurationsList-TZcLDEci.js +369 -0
- package/dist/ImmunizationConfigurationsList-TZcLDEci.js.map +1 -0
- package/dist/InventoryPage-DOotGZrj-CoPjOJEI.js +665 -0
- package/dist/InventoryPage-DOotGZrj-CoPjOJEI.js.map +1 -0
- package/dist/LanguagesModal-B3NTebYT.js +352 -0
- package/dist/LanguagesModal-B3NTebYT.js.map +1 -0
- package/dist/ManageDynamicFeature-BU0I45dd.js +4475 -0
- package/dist/ManageDynamicFeature-BU0I45dd.js.map +1 -0
- package/dist/ManageEventConfiguration-DqW3krT6.js +1216 -0
- package/dist/ManageEventConfiguration-DqW3krT6.js.map +1 -0
- package/dist/ManageEventConfiguration.css +1 -1
- package/dist/{ManageNotification-CfhHlfxA.js → ManageNotification-C5MhV77Q.js} +2 -2
- package/dist/{ManageNotification-CfhHlfxA.js.map → ManageNotification-C5MhV77Q.js.map} +1 -1
- package/dist/{ManageRole-4Y2PP4dQ.js → ManageRole-CNZBRKGU.js} +2 -2
- package/dist/{ManageRole-4Y2PP4dQ.js.map → ManageRole-CNZBRKGU.js.map} +1 -1
- package/dist/ManageTranslation-vRiptUAP.js +833 -0
- package/dist/ManageTranslation-vRiptUAP.js.map +1 -0
- package/dist/ManageTranslation.css +1 -1
- package/dist/{ManageUser-DDzyd9jm.js → ManageUser-DZltBina.js} +224 -224
- package/dist/{ManageUser-DDzyd9jm.js.map → ManageUser-DZltBina.js.map} +1 -1
- package/dist/MemberProfileCard-D5CgkTdJ-D2NgDJl3.js +272 -0
- package/dist/MemberProfileCard-D5CgkTdJ-D2NgDJl3.js.map +1 -0
- package/dist/MobileAnalytics-BLOionG_.js +17301 -0
- package/dist/MobileAnalytics-BLOionG_.js.map +1 -0
- package/dist/MobileMenuManagement-68Wijb0X.js +220 -0
- package/dist/MobileMenuManagement-68Wijb0X.js.map +1 -0
- package/dist/MobileTypeEventConfigModal-CMcj7Ozp.js +752 -0
- package/dist/MobileTypeEventConfigModal-CMcj7Ozp.js.map +1 -0
- package/dist/NotificationFlywayQuery-BAHVjf6N.js +247 -0
- package/dist/NotificationFlywayQuery-BAHVjf6N.js.map +1 -0
- package/dist/{NotificationList-BMFpNUJG.js → NotificationList-DEyRZEuM.js} +2 -2
- package/dist/{NotificationList-BMFpNUJG.js.map → NotificationList-DEyRZEuM.js.map} +1 -1
- package/dist/OtherTypeEventConfigModal-stNmuSv_.js +1812 -0
- package/dist/OtherTypeEventConfigModal-stNmuSv_.js.map +1 -0
- package/dist/PaymentCreatePage-DfvSZ-kB-CckogYoe.js +482 -0
- package/dist/PaymentCreatePage-DfvSZ-kB-CckogYoe.js.map +1 -0
- package/dist/PaymentsPage-DMNjYWAJ-ChO9IXmk.js +157 -0
- package/dist/PaymentsPage-DMNjYWAJ-ChO9IXmk.js.map +1 -0
- package/dist/PermissionsModal-CCYkcKlC.js +151 -0
- package/dist/PermissionsModal-CCYkcKlC.js.map +1 -0
- package/dist/PickupBatchLinesEditor-CE2RuyJT-BPceiJr8.js +119 -0
- package/dist/PickupBatchLinesEditor-CE2RuyJT-BPceiJr8.js.map +1 -0
- package/dist/PickupCreatePage-B4O_-vE5-DoOo9nJO.js +783 -0
- package/dist/PickupCreatePage-B4O_-vE5-DoOo9nJO.js.map +1 -0
- package/dist/PickupsPage-D7zyioJB-bHKnARYw.js +818 -0
- package/dist/PickupsPage-D7zyioJB-bHKnARYw.js.map +1 -0
- package/dist/PmGuard-BZE-y4In-D_pUm5MP.js +599 -0
- package/dist/PmGuard-BZE-y4In-D_pUm5MP.js.map +1 -0
- package/dist/ProductEditPage-BVlVUCtD-BR-tJ5Wb.js +1305 -0
- package/dist/ProductEditPage-BVlVUCtD-BR-tJ5Wb.js.map +1 -0
- package/dist/ProductsPage-DvNHIeZt-BoOOJJtk.js +253 -0
- package/dist/ProductsPage-DvNHIeZt-BoOOJJtk.js.map +1 -0
- package/dist/PurchaseCreatePage-Cq_i9snz-DRtHHFWw.js +675 -0
- package/dist/PurchaseCreatePage-Cq_i9snz-DRtHHFWw.js.map +1 -0
- package/dist/PurchaseRequestDetailPage-CA9KFOfE-CtjG4Gx6.js +1577 -0
- package/dist/PurchaseRequestDetailPage-CA9KFOfE-CtjG4Gx6.js.map +1 -0
- package/dist/PurchaseRequestsPage-DS9i4o0--TpoxA5Kd.js +279 -0
- package/dist/PurchaseRequestsPage-DS9i4o0--TpoxA5Kd.js.map +1 -0
- package/dist/PurchasesPage-DgL5T6BY-DePUuE9l.js +293 -0
- package/dist/PurchasesPage-DgL5T6BY-DePUuE9l.js.map +1 -0
- package/dist/QueryBuilder-CXaBe6sr.js +478 -0
- package/dist/QueryBuilder-CXaBe6sr.js.map +1 -0
- package/dist/{RoleManagement-DEiBNfT8.js → RoleManagement-s8iNx2Mu.js} +145 -155
- package/dist/RoleManagement-s8iNx2Mu.js.map +1 -0
- package/dist/Roles-BIyiic67.js +14 -0
- package/dist/Roles-BIyiic67.js.map +1 -0
- package/dist/SaleCreatePage-CZnIOydv-DKBw-qp7.js +544 -0
- package/dist/SaleCreatePage-CZnIOydv-DKBw-qp7.js.map +1 -0
- package/dist/SalesPage-DPIRrC_O-M8rqnK7z.js +315 -0
- package/dist/SalesPage-DPIRrC_O-M8rqnK7z.js.map +1 -0
- package/dist/SettingsPage-BC_R6Z-Q-CKNt9zRu.js +676 -0
- package/dist/SettingsPage-BC_R6Z-Q-CKNt9zRu.js.map +1 -0
- package/dist/ShowFlywayQuery-D10Olk5Z.js +154 -0
- package/dist/ShowFlywayQuery-D10Olk5Z.js.map +1 -0
- package/dist/{ShowFlywayQuery-DVRCd384.js → ShowFlywayQuery-DIOUdYfG.js} +170 -123
- package/dist/ShowFlywayQuery-DIOUdYfG.js.map +1 -0
- package/dist/ShowQueryHistory-DRBKYDKk.js +313 -0
- package/dist/ShowQueryHistory-DRBKYDKk.js.map +1 -0
- package/dist/StorageUnitsPage-BDRkdCjW-UF64rf7q.js +728 -0
- package/dist/StorageUnitsPage-BDRkdCjW-UF64rf7q.js.map +1 -0
- package/dist/SubMenu-BdMTYtC1.js +319 -0
- package/dist/SubMenu-BdMTYtC1.js.map +1 -0
- package/dist/TransactionsPage-CqWTMNU8-Df6eGFDW.js +746 -0
- package/dist/TransactionsPage-CqWTMNU8-Df6eGFDW.js.map +1 -0
- package/dist/TransferCreatePage-DF7FZaTJ-CL79V3aR.js +315 -0
- package/dist/TransferCreatePage-DF7FZaTJ-CL79V3aR.js.map +1 -0
- package/dist/TransfersPage-CGrRFaBF-cTwBUv0o.js +476 -0
- package/dist/TransfersPage-CGrRFaBF-cTwBUv0o.js.map +1 -0
- package/dist/TypeConfiguration-JbRCN6GR.js +114 -0
- package/dist/TypeConfiguration-JbRCN6GR.js.map +1 -0
- package/dist/{UserList-Bc8gYxRL.js → UserList-L41Xw0Q6.js} +253 -236
- package/dist/{UserList-Bc8gYxRL.js.map → UserList-L41Xw0Q6.js.map} +1 -1
- package/dist/Users-CsJ08Kjm.js.map +1 -1
- package/dist/VialsPage-rvvXjgZG-Oqo1v6kQ.js +321 -0
- package/dist/VialsPage-rvvXjgZG-Oqo1v6kQ.js.map +1 -0
- package/dist/constants-DpXnLsAB-D6lN5cjK.js +445 -0
- package/dist/constants-DpXnLsAB-D6lN5cjK.js.map +1 -0
- package/dist/{dashboardLayoutUtils-D1xCAxp3.js → dashboardLayoutUtils-CJivzaU1.js} +95 -92
- package/dist/dashboardLayoutUtils-CJivzaU1.js.map +1 -0
- package/dist/format-UOyOu75i-D0GyylyQ.js +63 -0
- package/dist/format-UOyOu75i-D0GyylyQ.js.map +1 -0
- package/dist/index.css +1 -1
- package/dist/index.js +1 -1
- package/dist/index.lib-ETRQOzvE.js +894 -0
- package/dist/index.lib-ETRQOzvE.js.map +1 -0
- package/dist/listValueStore-BFQtDYIR-Bj0yX145.js +36 -0
- package/dist/listValueStore-BFQtDYIR-Bj0yX145.js.map +1 -0
- package/dist/useFieldErrors-hDG8ox_x-DbSAzrGo.js +28 -0
- package/dist/useFieldErrors-hDG8ox_x-DbSAzrGo.js.map +1 -0
- package/dist/validation-BzlHnL-r-CCJm2utQ.js +125 -0
- package/dist/validation-BzlHnL-r-CCJm2utQ.js.map +1 -0
- package/package.json +4 -3
- package/dist/AccessRights-Zm8Obm4N.js +0 -1284
- package/dist/AccessRights-Zm8Obm4N.js.map +0 -1
- package/dist/AddEditQueryBuilder-Brdnm6rQ.js +0 -313
- package/dist/AddEditQueryBuilder-Brdnm6rQ.js.map +0 -1
- package/dist/AddLabelModal-DFllBVcd.js +0 -734
- package/dist/AddLabelModal-DFllBVcd.js.map +0 -1
- package/dist/AddMenuConfiguration-Ce91MhnU.js +0 -8547
- package/dist/AddMenuConfiguration-Ce91MhnU.js.map +0 -1
- package/dist/AppModal-CtG2GjD_.js +0 -428
- package/dist/AppModal-CtG2GjD_.js.map +0 -1
- package/dist/ChangePasswordModalCore-DutQAZOx.js.map +0 -1
- package/dist/ConditionConfig-B4Ffpgj3.js +0 -395
- package/dist/ConditionConfig-B4Ffpgj3.js.map +0 -1
- package/dist/ConditionConfig.css +0 -1
- package/dist/EventConfigurations-BJcURufo.js +0 -449
- package/dist/EventConfigurations-BJcURufo.js.map +0 -1
- package/dist/EventsExceptionModal-BlZtBQoR.js +0 -200
- package/dist/EventsExceptionModal-BlZtBQoR.js.map +0 -1
- package/dist/EventsSkeleton-DK6JDKAK.js +0 -83
- package/dist/EventsSkeleton-DK6JDKAK.js.map +0 -1
- package/dist/FeatureMenu-C3503UIX.js +0 -265
- package/dist/FeatureMenu-C3503UIX.js.map +0 -1
- package/dist/FlywayQuery-Cx2sly6g.js +0 -169
- package/dist/FlywayQuery-Cx2sly6g.js.map +0 -1
- package/dist/ImmunizationConfigurationBase-DLQVSNnt.js +0 -5895
- package/dist/ImmunizationConfigurationBase-DLQVSNnt.js.map +0 -1
- package/dist/ImmunizationConfigurationsList-DdSZicTP.js +0 -344
- package/dist/ImmunizationConfigurationsList-DdSZicTP.js.map +0 -1
- package/dist/LanguagesModal-D6VfaGrl.js +0 -394
- package/dist/LanguagesModal-D6VfaGrl.js.map +0 -1
- package/dist/ManageDynamicFeature-dt096fyj.js +0 -4189
- package/dist/ManageDynamicFeature-dt096fyj.js.map +0 -1
- package/dist/ManageEventConfiguration-BpSJszSX.js +0 -1017
- package/dist/ManageEventConfiguration-BpSJszSX.js.map +0 -1
- package/dist/ManageTranslation-B4C9-lWD.js +0 -625
- package/dist/ManageTranslation-B4C9-lWD.js.map +0 -1
- package/dist/MobileMenuManagement-Cf8IZlla.js +0 -108
- package/dist/MobileMenuManagement-Cf8IZlla.js.map +0 -1
- package/dist/MobileTypeEventConfigModal-DUkUYACe.js +0 -783
- package/dist/MobileTypeEventConfigModal-DUkUYACe.js.map +0 -1
- package/dist/NotificationFlywayQuery-BY8Zzml_.js +0 -244
- package/dist/NotificationFlywayQuery-BY8Zzml_.js.map +0 -1
- package/dist/OtherTypeEventConfigModal-CYBfr2XE.js +0 -2046
- package/dist/OtherTypeEventConfigModal-CYBfr2XE.js.map +0 -1
- package/dist/QueryBuilder-z7eqfd7D.js +0 -383
- package/dist/QueryBuilder-z7eqfd7D.js.map +0 -1
- package/dist/RoleManagement-DEiBNfT8.js.map +0 -1
- package/dist/ShowFlywayQuery-DVRCd384.js.map +0 -1
- package/dist/ShowFlywayQuery-tj42YQAS.js +0 -130
- package/dist/ShowFlywayQuery-tj42YQAS.js.map +0 -1
- package/dist/ShowQueryHistory-BDN0tzHg.js +0 -190
- package/dist/ShowQueryHistory-BDN0tzHg.js.map +0 -1
- package/dist/SubMenu-B072oEGb.js +0 -191
- package/dist/SubMenu-B072oEGb.js.map +0 -1
- package/dist/TypeConfiguration-C3xoP2Nb.js +0 -117
- package/dist/TypeConfiguration-C3xoP2Nb.js.map +0 -1
- package/dist/dashboardLayoutUtils-D1xCAxp3.js.map +0 -1
- package/dist/index.lib-C3fwoM3y.js +0 -820
- package/dist/index.lib-C3fwoM3y.js.map +0 -1
|
@@ -0,0 +1,478 @@
|
|
|
1
|
+
import { jsxs as u, jsx as t } from "react/jsx-runtime";
|
|
2
|
+
import { useState as r, useEffect as R, Suspense as P, lazy as F } from "react";
|
|
3
|
+
import { useTranslateProvider as ze } from "@/common/languageTranslator/TranslationContext";
|
|
4
|
+
import { api as ee } from "@/common/interceptors/AxiosInterceptor";
|
|
5
|
+
import { execute as O } from "@/common/services/GlobalApis";
|
|
6
|
+
import Fe from "@/common/syncWithServer/SyncWithServerDialog";
|
|
7
|
+
import { showToast as w } from "@/common/toaster/toaster";
|
|
8
|
+
import Le from "@/hooks/usePagination";
|
|
9
|
+
import Be from "@/views/custom-components/CustomConfirmationModal";
|
|
10
|
+
import { Paper as He, Box as h, Typography as k, InputAdornment as K, IconButton as Me, Button as Z } from "@mui/material";
|
|
11
|
+
import We from "@/views/custom-components/DebouncedSearchInput";
|
|
12
|
+
import je from "@mui/material/Grid2";
|
|
13
|
+
import Ue from "@/hooks/useTrackEvent";
|
|
14
|
+
import Ve from "@/views/custom-components/CustomizedTable/CustomizedTableV2";
|
|
15
|
+
import b from "@/common/fontAwesomeIcons/FontAwesomeIcons";
|
|
16
|
+
import p from "prop-types";
|
|
17
|
+
import { useSelector as Ye } from "react-redux";
|
|
18
|
+
import { getUseSkeleton as Ge } from "@/store/reducers/SkeletonReducer";
|
|
19
|
+
import { getAssignedFeatures as Je } from "@/utils/feature";
|
|
20
|
+
import $e from "@/common/config/implementationConfig";
|
|
21
|
+
import I from "@/common/services/util/GeneralUtil";
|
|
22
|
+
import './QueryBuilder.css';const Xe = (l) => ee.put("/resource", l), St = (l) => ee.post("/resource", l), te = ({ children: l, isLoading: y }) => !Ye(Ge) || !y ? l : /* @__PURE__ */ u("div", { className: "flex flex-col gap-2", children: [
|
|
23
|
+
/* @__PURE__ */ u("div", { className: "w-full justify-between flex-wrap flex flex-row pt-6", children: [
|
|
24
|
+
/* @__PURE__ */ t("div", { children: /* @__PURE__ */ t("div", { className: "bg-gray-300 animate-pulse rounded-sm h-[36px] w-[64px]" }) }),
|
|
25
|
+
/* @__PURE__ */ u("div", { className: "flex", children: [
|
|
26
|
+
/* @__PURE__ */ t("div", { className: "bg-gray-300 animate-pulse rounded-sm h-[32px] w-[160px] mr-2" }),
|
|
27
|
+
/* @__PURE__ */ t("div", { className: "bg-gray-300 animate-pulse rounded-sm h-[32px] w-[60px]" })
|
|
28
|
+
] })
|
|
29
|
+
] }),
|
|
30
|
+
/* @__PURE__ */ t("div", { className: "bg-gray-300 animate-pulse rounded-sm w-full h-100" })
|
|
31
|
+
] });
|
|
32
|
+
te.propTypes = {
|
|
33
|
+
children: p.any,
|
|
34
|
+
isLoading: p.any
|
|
35
|
+
};
|
|
36
|
+
const Ke = F(() => import("./AddEditQueryBuilder-D-iQiVIe.js")), Ze = F(() => import("./ShowFlywayQuery-D10Olk5Z.js")), et = F(() => import("./ShowQueryHistory-DRBKYDKk.js")), z = ({ icon: l, title: y, body: x, action: q, dataTestId: T }) => /* @__PURE__ */ u(
|
|
37
|
+
h,
|
|
38
|
+
{
|
|
39
|
+
"data-testid": T,
|
|
40
|
+
sx: {
|
|
41
|
+
display: "flex",
|
|
42
|
+
flexDirection: "column",
|
|
43
|
+
alignItems: "center",
|
|
44
|
+
justifyContent: "center",
|
|
45
|
+
textAlign: "center",
|
|
46
|
+
gap: 1,
|
|
47
|
+
px: 3,
|
|
48
|
+
py: 8
|
|
49
|
+
},
|
|
50
|
+
children: [
|
|
51
|
+
/* @__PURE__ */ t(h, { sx: { color: "text.disabled" }, children: /* @__PURE__ */ t(b, { iconName: l, size: "2x" }) }),
|
|
52
|
+
/* @__PURE__ */ t(k, { variant: "subtitle1", sx: { fontWeight: 700 }, children: y }),
|
|
53
|
+
x && /* @__PURE__ */ t(k, { variant: "body2", color: "text.secondary", sx: { maxWidth: 440 }, children: x }),
|
|
54
|
+
q
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
);
|
|
58
|
+
z.propTypes = {
|
|
59
|
+
icon: p.string,
|
|
60
|
+
title: p.node,
|
|
61
|
+
body: p.node,
|
|
62
|
+
action: p.node,
|
|
63
|
+
dataTestId: p.string
|
|
64
|
+
};
|
|
65
|
+
const tt = () => {
|
|
66
|
+
const l = Ue(), [y, x] = r([]), [q, T] = r(!1), [L, re] = r([]), [C, B] = r(1), [oe, se] = r(""), [ae, ne] = r(""), [ie, le] = r({}), [ce, H] = r(!1), [de, ue] = r(""), [ye, M] = r(!1), [W, Q] = r(null), [c, v] = r(null), [j, he] = r(null), [d, pe] = r({}), [fe, U] = r(!1), [me, V] = r({}), [ge, A] = r(!1), [Y, G] = r(!1), [be, xe] = r(0), { translate: i } = ze(), [n, Ce] = r(null), we = $e.queryBuilder.showClickhouseOption, _ = [
|
|
67
|
+
{ field: "code", label: "Code", align: "left" },
|
|
68
|
+
{
|
|
69
|
+
field: "description",
|
|
70
|
+
label: "Description",
|
|
71
|
+
align: "left"
|
|
72
|
+
},
|
|
73
|
+
{ field: "query", label: "Query", align: "left" },
|
|
74
|
+
{ field: "returnsResultSet", label: "Returns Result Set" },
|
|
75
|
+
{ field: "isPublic", label: "Is Public" }
|
|
76
|
+
];
|
|
77
|
+
we && _.push({
|
|
78
|
+
field: "isClickhouseQuery",
|
|
79
|
+
label: "Is Clickhouse Query"
|
|
80
|
+
}), _.push({ field: "Actions", label: "Actions" });
|
|
81
|
+
const [S, f] = r(!1), m = 50, { data: J } = Le({
|
|
82
|
+
key: ["queries", j, C, q, n],
|
|
83
|
+
queryFn: (e) => N(e),
|
|
84
|
+
currentPage: C,
|
|
85
|
+
limit: m,
|
|
86
|
+
searchString: j || null,
|
|
87
|
+
paginationType: "traditional"
|
|
88
|
+
}), ve = (e) => {
|
|
89
|
+
const o = L.filter((s) => s.uuid === e.uuid);
|
|
90
|
+
V(o[0]), G((s) => !s), U(!0);
|
|
91
|
+
}, Se = (e) => {
|
|
92
|
+
se(
|
|
93
|
+
(e == null ? void 0 : e.state) === "ACTIVE" ? "Mark as Inactive" : "Mark as Active"
|
|
94
|
+
), ne(
|
|
95
|
+
(e == null ? void 0 : e.state) === "ACTIVE" ? "Are you sure you want to change the state from active to inactive?" : "Are you sure you want to change the state from inactive to active?"
|
|
96
|
+
);
|
|
97
|
+
const o = L.filter((s) => s.uuid === e.uuid);
|
|
98
|
+
pe(o[0]);
|
|
99
|
+
}, Ie = async () => {
|
|
100
|
+
A((e) => !e);
|
|
101
|
+
}, ke = async () => {
|
|
102
|
+
try {
|
|
103
|
+
let e = JSON.parse(JSON.stringify(d));
|
|
104
|
+
e.state = (d == null ? void 0 : d.state) === "ACTIVE" ? "INACTIVE" : "ACTIVE", await Xe(e), await E();
|
|
105
|
+
const o = await N({
|
|
106
|
+
limit: m,
|
|
107
|
+
offset: (C - 1) * m,
|
|
108
|
+
searchString: c || ""
|
|
109
|
+
});
|
|
110
|
+
w({ message: "Query state changed successfully!!", type: "success" }), D(o), T(d), A((s) => !s);
|
|
111
|
+
} catch (e) {
|
|
112
|
+
console.error(e), w({ message: "Error in toggle state", type: "error" });
|
|
113
|
+
}
|
|
114
|
+
}, qe = async () => {
|
|
115
|
+
var e, o, s;
|
|
116
|
+
try {
|
|
117
|
+
const a = {
|
|
118
|
+
code: "retrieve_logged_actions_by_table_name_query_code",
|
|
119
|
+
parameters: {
|
|
120
|
+
tableName: "query_master",
|
|
121
|
+
queryCode: d.code
|
|
122
|
+
}
|
|
123
|
+
}, g = await O(a);
|
|
124
|
+
((o = (e = g == null ? void 0 : g.data) == null ? void 0 : e.result) == null ? void 0 : o.length) === 0 ? w({
|
|
125
|
+
message: "No Query History found for Query code",
|
|
126
|
+
type: "warn"
|
|
127
|
+
}) : (le((s = g == null ? void 0 : g.data) == null ? void 0 : s.result), H((Oe) => !Oe));
|
|
128
|
+
} catch (a) {
|
|
129
|
+
console.error(a), w({ message: "Error in loading Query History", type: "error" });
|
|
130
|
+
}
|
|
131
|
+
}, Te = () => {
|
|
132
|
+
ue(d), M((e) => !e);
|
|
133
|
+
}, Qe = () => {
|
|
134
|
+
Q(d == null ? void 0 : d.uuid);
|
|
135
|
+
}, Ae = () => Q(() => null), _e = () => {
|
|
136
|
+
const e = [
|
|
137
|
+
{
|
|
138
|
+
label: "",
|
|
139
|
+
icon: /* @__PURE__ */ t(b, { iconName: "faBars" }),
|
|
140
|
+
menuClick: Se,
|
|
141
|
+
menuItems: [
|
|
142
|
+
{
|
|
143
|
+
label: i(oe),
|
|
144
|
+
onClick: Ie
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
label: "Show Flyway Query",
|
|
148
|
+
onClick: Te
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
label: "Show Query History",
|
|
152
|
+
onClick: qe
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
label: "Sync With Server",
|
|
156
|
+
onClick: Qe
|
|
157
|
+
}
|
|
158
|
+
],
|
|
159
|
+
dataTestId: "MenuIcon"
|
|
160
|
+
}
|
|
161
|
+
];
|
|
162
|
+
return I.hasCheckRights(n == null ? void 0 : n["update.admin.query"], void 0, !0) && e.unshift({
|
|
163
|
+
label: "",
|
|
164
|
+
icon: /* @__PURE__ */ t(b, { iconName: "faPen" }),
|
|
165
|
+
onClick: ve,
|
|
166
|
+
dataTestId: "EditIcon"
|
|
167
|
+
}), e;
|
|
168
|
+
};
|
|
169
|
+
R(() => {
|
|
170
|
+
(async () => (await E(), B(1), he(c)))();
|
|
171
|
+
}, [c]);
|
|
172
|
+
const E = async () => {
|
|
173
|
+
try {
|
|
174
|
+
const { data: e } = await O(
|
|
175
|
+
{
|
|
176
|
+
code: "fetch_total_count_for_query_builder",
|
|
177
|
+
parameters: {
|
|
178
|
+
state: null,
|
|
179
|
+
searchString: c || null
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
{ showLoader: !1 }
|
|
183
|
+
);
|
|
184
|
+
xe(e.result[0].count);
|
|
185
|
+
} catch (e) {
|
|
186
|
+
console.error(e);
|
|
187
|
+
}
|
|
188
|
+
}, N = async (e) => {
|
|
189
|
+
try {
|
|
190
|
+
if (I.hasCheckRights(n == null ? void 0 : n["view.admin.query"], void 0, !0)) {
|
|
191
|
+
f((s) => !s);
|
|
192
|
+
const { data: o } = await O(
|
|
193
|
+
{
|
|
194
|
+
code: "fetch_queries_for_query_builder",
|
|
195
|
+
parameters: {
|
|
196
|
+
limit: e.limit || 50,
|
|
197
|
+
offset: e.offset || 0,
|
|
198
|
+
state: null,
|
|
199
|
+
searchString: e.searchString || ""
|
|
200
|
+
}
|
|
201
|
+
},
|
|
202
|
+
{ showLoader: !1 }
|
|
203
|
+
);
|
|
204
|
+
return c !== "" && l("search_tracking", {
|
|
205
|
+
searchTerm: c,
|
|
206
|
+
results_count: o == null ? void 0 : o.length,
|
|
207
|
+
search_type: "Page Search"
|
|
208
|
+
}), f((s) => !s), o.result;
|
|
209
|
+
}
|
|
210
|
+
} catch (o) {
|
|
211
|
+
w({ message: `error ${o}`, type: "error" }), f((s) => !s);
|
|
212
|
+
}
|
|
213
|
+
}, Ee = async () => {
|
|
214
|
+
try {
|
|
215
|
+
f(!0);
|
|
216
|
+
const { data: e } = await Je("techo.manage.query");
|
|
217
|
+
Ce(JSON.parse(e)), f(!1);
|
|
218
|
+
} catch (e) {
|
|
219
|
+
console.error("Error loading rights:", e), f(!1);
|
|
220
|
+
}
|
|
221
|
+
};
|
|
222
|
+
R(() => {
|
|
223
|
+
Ee();
|
|
224
|
+
}, []);
|
|
225
|
+
const D = (e) => {
|
|
226
|
+
const o = (e == null ? void 0 : e.flat()) || [];
|
|
227
|
+
re(o);
|
|
228
|
+
const s = o.map((a) => ({
|
|
229
|
+
...a,
|
|
230
|
+
query: `${a == null ? void 0 : a.query.slice(0, 50)}...`,
|
|
231
|
+
returnsResultSet: a != null && a.returnsResultSet ? "Yes" : "No",
|
|
232
|
+
isPublic: a != null && a.isPublic ? "Yes" : "No",
|
|
233
|
+
isClickhouseQuery: a != null && a.isClickhouseQuery ? "Yes" : "No"
|
|
234
|
+
}));
|
|
235
|
+
x(s);
|
|
236
|
+
};
|
|
237
|
+
R(() => {
|
|
238
|
+
D(J);
|
|
239
|
+
}, [J]);
|
|
240
|
+
const $ = () => {
|
|
241
|
+
l("button_click", {
|
|
242
|
+
button_name: "querybuilder-add-button",
|
|
243
|
+
button_type: "navigate",
|
|
244
|
+
button_id: "querybuilder-add-button"
|
|
245
|
+
}), G((e) => !e), U(!1), V({});
|
|
246
|
+
}, Ne = async () => {
|
|
247
|
+
try {
|
|
248
|
+
if (c !== "")
|
|
249
|
+
v("");
|
|
250
|
+
else {
|
|
251
|
+
await E();
|
|
252
|
+
const e = await N({
|
|
253
|
+
limit: m,
|
|
254
|
+
offset: (C - 1) * m,
|
|
255
|
+
searchString: c || ""
|
|
256
|
+
});
|
|
257
|
+
D(e);
|
|
258
|
+
}
|
|
259
|
+
} catch (e) {
|
|
260
|
+
console.error(e);
|
|
261
|
+
}
|
|
262
|
+
}, De = I.hasCheckRights(
|
|
263
|
+
n == null ? void 0 : n["view.admin.query"],
|
|
264
|
+
void 0,
|
|
265
|
+
!0
|
|
266
|
+
), Re = I.hasCheckRights(
|
|
267
|
+
n == null ? void 0 : n["create.admin.query"],
|
|
268
|
+
void 0,
|
|
269
|
+
!0
|
|
270
|
+
), X = !S && n !== null && !De, Pe = ((y == null ? void 0 : y.length) || 0) > 0;
|
|
271
|
+
return /* @__PURE__ */ u(je, { pt: 2, children: [
|
|
272
|
+
/* @__PURE__ */ t(P, { children: Y && /* @__PURE__ */ t(
|
|
273
|
+
Ke,
|
|
274
|
+
{
|
|
275
|
+
loadInitialState: Ne,
|
|
276
|
+
isEditMode: fe,
|
|
277
|
+
editRow: me,
|
|
278
|
+
open: Y,
|
|
279
|
+
close: $,
|
|
280
|
+
"data-testid": "querybuilder-addeditquerybuilder"
|
|
281
|
+
}
|
|
282
|
+
) }),
|
|
283
|
+
W && /* @__PURE__ */ t(
|
|
284
|
+
Fe,
|
|
285
|
+
{
|
|
286
|
+
isOpen: !!Q,
|
|
287
|
+
handleClose: Ae,
|
|
288
|
+
featureUUID: W,
|
|
289
|
+
dataTestId: "querybuilder-syncwithserverdialog"
|
|
290
|
+
}
|
|
291
|
+
),
|
|
292
|
+
/* @__PURE__ */ t(P, { children: /* @__PURE__ */ t(
|
|
293
|
+
Ze,
|
|
294
|
+
{
|
|
295
|
+
configuredQuery: de,
|
|
296
|
+
open: ye,
|
|
297
|
+
onClose: () => {
|
|
298
|
+
M((e) => !e);
|
|
299
|
+
},
|
|
300
|
+
"data-testid": "querybuilder-showflywayquery"
|
|
301
|
+
}
|
|
302
|
+
) }),
|
|
303
|
+
/* @__PURE__ */ t(P, { children: /* @__PURE__ */ t(
|
|
304
|
+
et,
|
|
305
|
+
{
|
|
306
|
+
historyList: ie,
|
|
307
|
+
open: ce,
|
|
308
|
+
handleClose: () => {
|
|
309
|
+
H((e) => !e);
|
|
310
|
+
},
|
|
311
|
+
"data-testid": "querybuilder-showqueryhistory"
|
|
312
|
+
}
|
|
313
|
+
) }),
|
|
314
|
+
/* @__PURE__ */ t(
|
|
315
|
+
Be,
|
|
316
|
+
{
|
|
317
|
+
description: ae,
|
|
318
|
+
title: "CONFIRM ACTION",
|
|
319
|
+
handleClick: ke,
|
|
320
|
+
open: ge,
|
|
321
|
+
handleClose: () => A((e) => !e),
|
|
322
|
+
dataTestId: "querybuilder-customconfirmationmodal"
|
|
323
|
+
}
|
|
324
|
+
),
|
|
325
|
+
/* @__PURE__ */ t(
|
|
326
|
+
He,
|
|
327
|
+
{
|
|
328
|
+
elevation: 0,
|
|
329
|
+
sx: {
|
|
330
|
+
p: { xs: 2.5, md: 3 },
|
|
331
|
+
mb: 3,
|
|
332
|
+
border: "1px solid",
|
|
333
|
+
borderColor: "divider",
|
|
334
|
+
borderRadius: (e) => `${e.shape.cardRadius}px`,
|
|
335
|
+
backgroundColor: "background.paper"
|
|
336
|
+
},
|
|
337
|
+
children: /* @__PURE__ */ u(h, { sx: { display: "flex", flexDirection: "column", gap: 3 }, children: [
|
|
338
|
+
/* @__PURE__ */ t(te, { isLoading: S, children: /* @__PURE__ */ u(
|
|
339
|
+
h,
|
|
340
|
+
{
|
|
341
|
+
sx: {
|
|
342
|
+
display: "flex",
|
|
343
|
+
justifyContent: "space-between",
|
|
344
|
+
alignItems: "flex-start",
|
|
345
|
+
flexWrap: "wrap",
|
|
346
|
+
gap: 2
|
|
347
|
+
},
|
|
348
|
+
children: [
|
|
349
|
+
/* @__PURE__ */ u(h, { sx: { minWidth: { xs: "100%", lg: "40%" } }, children: [
|
|
350
|
+
/* @__PURE__ */ t(
|
|
351
|
+
k,
|
|
352
|
+
{
|
|
353
|
+
variant: "h5",
|
|
354
|
+
component: "h1",
|
|
355
|
+
sx: { fontWeight: 800, color: "text.primary", mb: 0.5 },
|
|
356
|
+
children: i("Queries")
|
|
357
|
+
}
|
|
358
|
+
),
|
|
359
|
+
/* @__PURE__ */ t(k, { variant: "body2", color: "text.secondary", children: i(
|
|
360
|
+
"Named SQL that reports, forms and dashboards call by code. Edit one here and every screen using it picks up the change."
|
|
361
|
+
) })
|
|
362
|
+
] }),
|
|
363
|
+
!X && /* @__PURE__ */ u(
|
|
364
|
+
h,
|
|
365
|
+
{
|
|
366
|
+
sx: {
|
|
367
|
+
display: "flex",
|
|
368
|
+
alignItems: "center",
|
|
369
|
+
gap: 1.5,
|
|
370
|
+
flexWrap: "wrap"
|
|
371
|
+
},
|
|
372
|
+
children: [
|
|
373
|
+
/* @__PURE__ */ t(
|
|
374
|
+
We,
|
|
375
|
+
{
|
|
376
|
+
value: c || "",
|
|
377
|
+
onChange: v,
|
|
378
|
+
placeholder: i("Search Code"),
|
|
379
|
+
autoFocus: !1,
|
|
380
|
+
size: "small",
|
|
381
|
+
"data-testid": "querybuilder-search-textfield",
|
|
382
|
+
sx: { width: { xs: "100%", sm: 240 } },
|
|
383
|
+
slotProps: {
|
|
384
|
+
htmlInput: { "aria-label": i("Search Code") }
|
|
385
|
+
},
|
|
386
|
+
inputProps: {
|
|
387
|
+
startAdornment: /* @__PURE__ */ t(K, { position: "start", children: /* @__PURE__ */ t(h, { sx: { color: "text.disabled", display: "flex" }, children: /* @__PURE__ */ t(
|
|
388
|
+
b,
|
|
389
|
+
{
|
|
390
|
+
iconName: "faMagnifyingGlass",
|
|
391
|
+
size: "sm"
|
|
392
|
+
}
|
|
393
|
+
) }) }),
|
|
394
|
+
endAdornment: c ? /* @__PURE__ */ t(K, { position: "end", children: /* @__PURE__ */ t(
|
|
395
|
+
Me,
|
|
396
|
+
{
|
|
397
|
+
size: "small",
|
|
398
|
+
"aria-label": i("Clear search"),
|
|
399
|
+
onClick: () => v(""),
|
|
400
|
+
children: /* @__PURE__ */ t(b, { iconName: "faXmark", size: "sm" })
|
|
401
|
+
}
|
|
402
|
+
) }) : null
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
),
|
|
406
|
+
Re && /* @__PURE__ */ u(
|
|
407
|
+
Z,
|
|
408
|
+
{
|
|
409
|
+
size: "small",
|
|
410
|
+
variant: "contained",
|
|
411
|
+
onClick: $,
|
|
412
|
+
startIcon: /* @__PURE__ */ t(b, { iconName: "faPlus" }),
|
|
413
|
+
"data-testid": "querybuilder-add-button",
|
|
414
|
+
children: [
|
|
415
|
+
i("Add"),
|
|
416
|
+
" ",
|
|
417
|
+
i("Query")
|
|
418
|
+
]
|
|
419
|
+
}
|
|
420
|
+
)
|
|
421
|
+
]
|
|
422
|
+
}
|
|
423
|
+
)
|
|
424
|
+
]
|
|
425
|
+
}
|
|
426
|
+
) }),
|
|
427
|
+
X ? /* @__PURE__ */ t(
|
|
428
|
+
z,
|
|
429
|
+
{
|
|
430
|
+
icon: "faLock",
|
|
431
|
+
title: i("You don't have access to Queries"),
|
|
432
|
+
body: i(
|
|
433
|
+
"Your role doesn't include permission to view queries. Ask an administrator to grant the view right for this module."
|
|
434
|
+
),
|
|
435
|
+
dataTestId: "no-permission-message"
|
|
436
|
+
}
|
|
437
|
+
) : !S && !Pe && c ? /* @__PURE__ */ t(
|
|
438
|
+
z,
|
|
439
|
+
{
|
|
440
|
+
icon: "faMagnifyingGlass",
|
|
441
|
+
title: i("No queries match your search"),
|
|
442
|
+
body: i("Search matches the query code. Check the spelling, or try a shorter term."),
|
|
443
|
+
action: /* @__PURE__ */ t(Z, { variant: "text", size: "small", onClick: () => v(""), children: i("Clear search") }),
|
|
444
|
+
dataTestId: "querybuilder-no-results"
|
|
445
|
+
}
|
|
446
|
+
) : /* @__PURE__ */ t(
|
|
447
|
+
Ve,
|
|
448
|
+
{
|
|
449
|
+
columns: _,
|
|
450
|
+
tableData: y,
|
|
451
|
+
actions: _e(),
|
|
452
|
+
paginationConfig: {
|
|
453
|
+
pagination: !0,
|
|
454
|
+
rowsPerPageInTable: m,
|
|
455
|
+
onPageChange: (e) => {
|
|
456
|
+
B(e);
|
|
457
|
+
},
|
|
458
|
+
currentPage: C,
|
|
459
|
+
totalRows: be
|
|
460
|
+
},
|
|
461
|
+
dataTestId: "querybuilder-customizedtable",
|
|
462
|
+
styleConfig: { tableStyle: { maxHeight: 65 } },
|
|
463
|
+
isLoading: S
|
|
464
|
+
}
|
|
465
|
+
)
|
|
466
|
+
] })
|
|
467
|
+
}
|
|
468
|
+
)
|
|
469
|
+
] });
|
|
470
|
+
}, It = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
471
|
+
__proto__: null,
|
|
472
|
+
default: tt
|
|
473
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
474
|
+
export {
|
|
475
|
+
It as Q,
|
|
476
|
+
St as s
|
|
477
|
+
};
|
|
478
|
+
//# sourceMappingURL=QueryBuilder-CXaBe6sr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryBuilder-CXaBe6sr.js","sources":["../src/services/QueryBuilder.js","../src/views/QueryBuilder/Skeletons/QueryBuilderSkeleton.jsx","../src/views/QueryBuilder/QueryBuilder.jsx"],"sourcesContent":["import { api } from \"@/common/interceptors/AxiosInterceptor\";\n\nexport const retrieveAllConfigured = (isActive) =>\n api.get(\"/resource\", { params: { is_active: isActive } });\n\nexport const toggleState = (data) => api.put(\"/resource\", data);\n\nexport const executeForFormConfigurator = (data) =>\n api.post(`/resource/getdataforformconfigurator/${data.code}`, data);\n\nexport const executeWithTimeout = (params) =>\n api.post(\"/resource/getdatawithtimeout\", params);\n\nexport const executeQueryForFamilyReport = (data) =>\n api.post(\"/resource/getdata\", data);\n\nexport const executeAllQuery = (dataList) =>\n api.post(\"/resource/getdatas\", dataList);\n\nexport const executeAll = (dataList) =>\n api.post(\"/resource/getalldata\", dataList);\n\nexport const getServerList = () =>\n api.post(\"/resource/getdata\", {\n code: \"get_runqueryactive_server_list\",\n parameters: {},\n });\n\nexport const saveOrUpdate = (data) => api.post(\"/resource\", data);\n\nexport const runQuery = (query) =>\n api.post(\"/resource/runquery\", query, {\n headers: { \"Content-Type\": \"application/json\" },\n transformRequest: [(data) => data],\n });\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { useSelector } from \"react-redux\";\nimport { getUseSkeleton } from \"@/store/reducers/SkeletonReducer\";\n\nexport const QueryBuilderSkeleton = ({children , isLoading}) => {\n const useSkeleton = useSelector(getUseSkeleton);\n if (!useSkeleton) {\n return children;\n }\n if (!isLoading) return children;\n return (\n <div className=\"flex flex-col gap-2\">\n <div className=\"w-full justify-between flex-wrap flex flex-row pt-6\">\n <div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm h-[36px] w-[64px]\"></div>\n </div>\n\n <div className=\"flex\">\n <div className=\"bg-gray-300 animate-pulse rounded-sm h-[32px] w-[160px] mr-2\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm h-[32px] w-[60px]\"></div>\n </div>\n </div>\n\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-full h-100\"></div>\n </div>\n );\n};\n\nQueryBuilderSkeleton.propTypes = {\n children: PropTypes.any,\n isLoading: PropTypes.any,\n};\n","import { lazy, default as React, Suspense, useEffect, useState } from \"react\";\nimport { useTranslateProvider } from \"@/common/languageTranslator/TranslationContext\";\nimport { toggleState } from \"../../services/QueryBuilder\";\nimport { execute } from \"@/common/services/GlobalApis\";\nimport SyncWithServerDialog from \"@/common/syncWithServer/SyncWithServerDialog\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport usePagination from \"@/hooks/usePagination\";\nimport CustomConfirmationModal from \"@/views/custom-components/CustomConfirmationModal\";\nimport \"./Styles/QueryBuilder.scss\";\nconst AddEditQueryBuilder = lazy(() => import(\"./AddEditQueryBuilder\"));\nconst ShowFlywayQuery = lazy(() => import(\"./ShowFlywayQuery\"));\nconst ShowQueryHistory = lazy(() => import(\"./ShowQueryHistory\"));\nimport {\n Box,\n Button,\n IconButton,\n InputAdornment,\n Paper,\n Typography,\n} from \"@mui/material\";\nimport DebouncedSearchInput from \"@/views/custom-components/DebouncedSearchInput\";\nimport Grid from \"@mui/material/Grid2\";\n\nimport useTrackEvent from \"@/hooks/useTrackEvent\";\nimport CustomizedTable from \"@/views/custom-components/CustomizedTable/CustomizedTableV2\";\nimport FontAwesomeIcons from \"@/common/fontAwesomeIcons/FontAwesomeIcons\";\nimport { QueryBuilderSkeleton } from \"./Skeletons/QueryBuilderSkeleton\";\nimport { getAssignedFeatures } from \"@/utils/feature\";\nimport implementationConfig from \"@/common/config/implementationConfig\";\nimport GeneralUtil from \"@/common/services/util/GeneralUtil\";\nimport PropTypes from \"prop-types\";\n\n/**\n * Centred message block used for every zero-content state on this screen, so\n * \"no matches\" and \"no permission\" read as one family rather than two\n * unrelated layouts.\n *\n * @param {Object} props\n * @param {string} props.icon - FontAwesome export name.\n * @returns {JSX.Element}\n */\nconst EmptyState = ({ icon, title, body, action, dataTestId }) => (\n <Box\n data-testid={dataTestId}\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n textAlign: \"center\",\n gap: 1,\n px: 3,\n py: 8,\n }}\n >\n <Box sx={{ color: \"text.disabled\" }}>\n <FontAwesomeIcons iconName={icon} size=\"2x\" />\n </Box>\n <Typography variant=\"subtitle1\" sx={{ fontWeight: 700 }}>\n {title}\n </Typography>\n {body && (\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ maxWidth: 440 }}>\n {body}\n </Typography>\n )}\n {action}\n </Box>\n);\n\nEmptyState.propTypes = {\n icon: PropTypes.string,\n title: PropTypes.node,\n body: PropTypes.node,\n action: PropTypes.node,\n dataTestId: PropTypes.string,\n};\n\n/**\n * @module QueryBuilder\n * @returns {JSX.Element}\n */\n\nconst QueryBuilder = () => {\n const trackEvent = useTrackEvent();\n const [queryTableValues, setQueryTableValues] = useState([]);\n const [refreshData, setRefreshData] = useState(false);\n const [actualData, setActualData] = useState([]);\n const [currentPage, setCurrentPage] = useState(1);\n const [isActiveLabel, setIsActiveLabel] = useState(\"\");\n const [isActiveDescription, setIsActiveDescription] = useState(\"\");\n const [queryHistory, setQueryHistory] = useState({});\n const [openHistory, setOpenHistory] = useState(false);\n const [configuredQuery, setConfiguredQuery] = useState(\"\");\n const [openFlywayQuery, setOpenFlywayQuery] = useState(false);\n const [featureUuid, setFeatureUuid] = useState(null);\n const [search, setSearch] = useState(null);\n const [debounceSearch, setDebounceSearch] = useState(null);\n const [clickedRow, setClickedRow] = useState({});\n const [isEdit, setIsEdit] = useState(false);\n const [editRow, setEditRow] = useState({});\n const [toggleOpen, setToggleOpen] = useState(false);\n const [addEdit, setAddEdit] = useState(false);\n const [totalRows, setTotalRows] = useState(0);\n const { translate } = useTranslateProvider();\n const [rights, setRights] = useState(null);\n\n const isClickhouseEnabledEnv = implementationConfig.queryBuilder.showClickhouseOption;\n\n const queryTableFields = [\n { field: \"code\", label: \"Code\", align: \"left\" },\n {\n field: \"description\",\n label: \"Description\",\n align: \"left\",\n },\n { field: \"query\", label: \"Query\", align: \"left\" },\n { field: \"returnsResultSet\", label: \"Returns Result Set\" },\n { field: \"isPublic\", label: \"Is Public\" },\n ];\n\n if (isClickhouseEnabledEnv) {\n queryTableFields.push({\n field: \"isClickhouseQuery\",\n label: \"Is Clickhouse Query\",\n });\n }\n\n queryTableFields.push({ field: \"Actions\", label: \"Actions\" });\n\n const [isLoading, setIsLoading] = useState(false);\n\n const pageSize = 50;\n\n /**\n * Custom hook for managing paginated user data.\n *\n * @CustomHook\n * @type {Object}\n * @property {Array} pageData - The paginated user data fetched from the server.\n * @property {Function} fetchNextPage - Function to fetch the next page of data.\n * @property {boolean} isFetchingNextPage - Indicates if the next page is currently being fetched.\n **/\n const { data: pageData } = usePagination({\n key: [\"queries\", debounceSearch, currentPage, refreshData, rights],\n queryFn: (pageParam) => loadMoreData(pageParam),\n currentPage,\n limit: pageSize,\n searchString: debounceSearch || null,\n paginationType: \"traditional\",\n });\n\n /**\n * Handles the editing of a data item.\n * @function handleEdit\n * @param {Object} data - The data item to be edited, including at least the `uuid` property.\n * @param {string} data.uuid - The unique identifier of the data item.\n * @returns {void}\n */\n\n const handleEdit = (data) => {\n const toggledData = actualData.filter((item) => item.uuid === data.uuid);\n setEditRow(toggledData[0]);\n setAddEdit((cur) => !cur);\n setIsEdit(true);\n };\n\n /**\n * Handles toggling the state of a data item between active and inactive.\n * @function handleToggleOption\n * @param {Object} data - The data item whose state is being toggled, including at least the `uuid` and `state` properties.\n * @param {string} data.uuid - The unique identifier of the data item.\n * @param {string} data.state - The current state of the data item (e.g., 'ACTIVE' or 'INACTIVE').\n * @returns {void}\n */\n\n const handleToggleOption = (data) => {\n setIsActiveLabel(\n data?.state === \"ACTIVE\" ? \"Mark as Inactive\" : \"Mark as Active\"\n );\n setIsActiveDescription(\n data?.state === \"ACTIVE\"\n ? \"Are you sure you want to change the state from active to inactive?\"\n : \"Are you sure you want to change the state from inactive to active?\"\n );\n const toggledData = actualData.filter((item) => item.uuid === data.uuid);\n setClickedRow(toggledData[0]);\n };\n\n /**\n * Toggles the state of a boolean value used to open or close a toggle component.\n * @async\n * @function handleToggle\n * @returns {void}\n */\n\n const handleToggle = async () => {\n setToggleOpen((cur) => !cur);\n };\n\n /**\n * Handles the state toggling operation and updates the UI accordingly.\n * @async\n * @function handleToggleState\n * @returns {Promise<void>} A promise that resolves when the operation is complete.\n * @throws {Error} Throws an error if `toggleState` or `loadInitialState` fails, which is caught and handled by showing a toast message.\n */\n\n const handleToggleState = async () => {\n try {\n let data = JSON.parse(JSON.stringify(clickedRow));\n data.state = clickedRow?.state === \"ACTIVE\" ? \"INACTIVE\" : \"ACTIVE\";\n await toggleState(data);\n await fetchTotalRows();\n const updatedData = await loadMoreData({\n limit: pageSize,\n offset: (currentPage - 1) * pageSize,\n searchString: search || \"\",\n });\n showToast({ message: \"Query state changed successfully!!\", type: \"success\" });\n setTableData(updatedData);\n setRefreshData(clickedRow);\n setToggleOpen((cur) => !cur);\n } catch (error) {\n console.error(error);\n showToast({ message: \"Error in toggle state\", type: \"error\" });\n }\n };\n\n /**\n * Retrieves and displays the query history for a specific query code.\n * @async\n * @function showQueryHistory\n * @returns {Promise<void>} A promise that resolves when the query history has been retrieved and displayed.\n * @throws {Error} Throws an error if `getQueryHistory` fails, which is caught and handled by showing a toast message.\n */\n\n const showQueryHistory = async () => {\n try {\n const data = {\n code: \"retrieve_logged_actions_by_table_name_query_code\",\n parameters: {\n tableName: \"query_master\",\n queryCode: clickedRow.code,\n },\n };\n const response = await execute(data);\n\n if (response?.data?.result?.length === 0) {\n showToast({\n message: \"No Query History found for Query code\",\n type: \"warn\",\n });\n } else {\n setQueryHistory(response?.data?.result);\n setOpenHistory((cur) => !cur);\n }\n } catch (error) {\n console.error(error);\n showToast({ message: \"Error in loading Query History\", type: \"error\" });\n }\n };\n\n /**\n * Toggles the display of the Flyway query configuration modal.\n * @function showFlywayQuery\n * @returns {void} This function does not return any value.\n */\n\n const showFlywayQuery = () => {\n setConfiguredQuery(clickedRow);\n setOpenFlywayQuery((cur) => !cur);\n };\n\n /**\n * Synchronizes the local feature state with the server.\n * @function syncWithServer\n * @returns {void} This function does not return any value.\n */\n\n const syncWithServer = () => {\n setFeatureUuid(clickedRow?.uuid);\n };\n\n /**\n * sets the feature UUid to null.\n * @function handleSyncClose\n * @returns {void} This function does not return any value.\n */\n\n const handleSyncClose = () => setFeatureUuid(() => null);\n\n const getActions = () => {\n const actions = [\n {\n label: \"\",\n icon: <FontAwesomeIcons iconName=\"faBars\" />,\n menuClick: handleToggleOption,\n menuItems: [\n {\n label: translate(isActiveLabel),\n onClick: handleToggle,\n },\n {\n label: \"Show Flyway Query\",\n onClick: showFlywayQuery,\n },\n {\n label: \"Show Query History\",\n onClick: showQueryHistory,\n },\n {\n label: \"Sync With Server\",\n onClick: syncWithServer,\n },\n ],\n dataTestId: \"MenuIcon\",\n },\n ];\n if (GeneralUtil.hasCheckRights(rights?.[\"update.admin.query\"], undefined, true)) {\n actions.unshift({\n label: \"\",\n icon: <FontAwesomeIcons iconName=\"faPen\" />,\n onClick: handleEdit,\n dataTestId: \"EditIcon\",\n });\n }\n return actions;\n };\n\n // DebouncedSearchInput already debounces, so this only has to reset the page\n // and refresh the count — the extra 1000ms timer that used to sit on top of\n // it made every search feel a second slower than it needed to.\n useEffect(() => {\n (async () => {\n await fetchTotalRows();\n setCurrentPage(1);\n setDebounceSearch(search);\n })();\n }, [search]);\n\n const fetchTotalRows = async () => {\n try {\n const { data: countData } = await execute(\n {\n code: \"fetch_total_count_for_query_builder\",\n parameters: {\n state: null,\n searchString: search || null,\n },\n },\n { showLoader: false }\n );\n setTotalRows(countData.result[0].count);\n } catch (error) {\n console.error(error);\n }\n };\n\n /**\n * Fetches additional query data for pagination and logs the search tracking event.\n * @async\n * @function loadMoreData\n * @param {Object} pageParam - The pagination parameters for the API request.\n * @param {number} pageParam.limit - The number of items to fetch per page.\n * @param {number} pageParam.offset - The offset for pagination.\n * @returns {Promise<Array>} - A promise that resolves to an array of user data fetched from the API.\n * @throws {Error} - Displays a toast notification if an error occurs during the API call.\n *\n **/\n\n const loadMoreData = async (pageParam) => {\n try {\n if (GeneralUtil.hasCheckRights(rights?.[\"view.admin.query\"], undefined, true)) {\n setIsLoading((cur) => !cur);\n const { data } = await execute(\n {\n code: \"fetch_queries_for_query_builder\",\n parameters: {\n limit: pageParam.limit || 50,\n offset: pageParam.offset || 0,\n state: null,\n searchString: pageParam.searchString || \"\",\n },\n },\n { showLoader: false }\n );\n search !== \"\" &&\n trackEvent(\"search_tracking\", {\n searchTerm: search,\n results_count: data?.length,\n search_type: \"Page Search\",\n });\n setIsLoading((cur) => !cur);\n return data.result;\n }\n } catch (error) {\n showToast({ message: `error ${error}`, type: \"error\" });\n setIsLoading((cur) => !cur);\n }\n };\n\n const loadRights = async () => {\n try {\n setIsLoading(true);\n const { data: featureJson } =\n await getAssignedFeatures(\"techo.manage.query\");\n setRights(JSON.parse(featureJson));\n setIsLoading(false);\n } catch (error) {\n console.error(\"Error loading rights:\", error);\n setIsLoading(false);\n }\n };\n useEffect(() => {\n loadRights();\n }, []);\n\n const setTableData = (tableData) => {\n const allQueriesData = tableData?.flat() || [];\n\n setActualData(allQueriesData);\n const data = allQueriesData.map((item) => {\n return {\n ...item,\n query: `${item?.query.slice(0, 50)}...`,\n returnsResultSet: item?.returnsResultSet ? \"Yes\" : \"No\",\n isPublic: item?.isPublic ? \"Yes\" : \"No\",\n isClickhouseQuery: item?.isClickhouseQuery ? \"Yes\" : \"No\",\n };\n });\n setQueryTableValues(data);\n };\n\n /**\n * `useEffect` hook that loads initial data when the component mounts.\n * @function useEffect\n * @async\n * @returns {void} This function does not return a value.\n */\n useEffect(() => {\n setTableData(pageData);\n }, [pageData]);\n\n /**\n * Toggles the add/edit state of the component and resets the edit row.\n * @function handleAddEdit\n */\n\n const handleAddEdit = () => {\n trackEvent(\"button_click\", {\n button_name: \"querybuilder-add-button\",\n button_type: \"navigate\",\n button_id: \"querybuilder-add-button\",\n });\n setAddEdit((cur) => !cur);\n setIsEdit(false);\n setEditRow({});\n };\n\n const addEditLoadInitial = async () => {\n try {\n if (search !== \"\") {\n setSearch(\"\");\n } else {\n await fetchTotalRows();\n const updatedData = await loadMoreData({\n limit: pageSize,\n offset: (currentPage - 1) * pageSize,\n searchString: search || \"\",\n });\n setTableData(updatedData);\n }\n } catch (error) {\n console.error(error);\n }\n };\n\n const canView = GeneralUtil.hasCheckRights(\n rights?.[\"view.admin.query\"],\n undefined,\n true,\n );\n const canCreate = GeneralUtil.hasCheckRights(\n rights?.[\"create.admin.query\"],\n undefined,\n true,\n );\n const isDenied = !isLoading && rights !== null && !canView;\n const hasQueries = (queryTableValues?.length || 0) > 0;\n\n return (\n <Grid pt={2}>\n <Suspense>\n {addEdit && (\n <AddEditQueryBuilder\n loadInitialState={addEditLoadInitial}\n isEditMode={isEdit}\n editRow={editRow}\n open={addEdit}\n close={handleAddEdit}\n data-testid=\"querybuilder-addeditquerybuilder\"\n />\n )}\n </Suspense>\n\n {featureUuid && (\n <SyncWithServerDialog\n isOpen={Boolean(setFeatureUuid)}\n handleClose={handleSyncClose}\n featureUUID={featureUuid}\n dataTestId=\"querybuilder-syncwithserverdialog\"\n />\n )}\n\n <Suspense>\n <ShowFlywayQuery\n configuredQuery={configuredQuery}\n open={openFlywayQuery}\n onClose={() => {\n setOpenFlywayQuery((cur) => !cur);\n }}\n data-testid=\"querybuilder-showflywayquery\"\n />\n </Suspense>\n\n <Suspense>\n <ShowQueryHistory\n historyList={queryHistory}\n open={openHistory}\n handleClose={() => {\n setOpenHistory((cur) => !cur);\n }}\n data-testid=\"querybuilder-showqueryhistory\"\n />\n </Suspense>\n\n <CustomConfirmationModal\n description={isActiveDescription}\n title={\"CONFIRM ACTION\"}\n handleClick={handleToggleState}\n open={toggleOpen}\n handleClose={() => setToggleOpen((cur) => !cur)}\n dataTestId=\"querybuilder-customconfirmationmodal\"\n />\n\n <Paper\n elevation={0}\n sx={{\n p: { xs: 2.5, md: 3 },\n mb: 3,\n border: \"1px solid\",\n borderColor: \"divider\",\n borderRadius: (t) => `${t.shape.cardRadius}px`,\n backgroundColor: \"background.paper\",\n }}\n >\n <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 3 }}>\n <QueryBuilderSkeleton isLoading={isLoading}>\n {/* ── Header: title block (left) + actions (right) ── */}\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"flex-start\",\n flexWrap: \"wrap\",\n gap: 2,\n }}\n >\n <Box sx={{ minWidth: { xs: \"100%\", lg: \"40%\" } }}>\n <Typography\n variant=\"h5\"\n component=\"h1\"\n sx={{ fontWeight: 800, color: \"text.primary\", mb: 0.5 }}\n >\n {translate(\"Queries\")}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {translate(\n \"Named SQL that reports, forms and dashboards call by code. Edit one here and every screen using it picks up the change.\",\n )}\n </Typography>\n </Box>\n\n {!isDenied && (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 1.5,\n flexWrap: \"wrap\",\n }}\n >\n <DebouncedSearchInput\n value={search || \"\"}\n onChange={setSearch}\n placeholder={translate(\"Search Code\")}\n autoFocus={false}\n size=\"small\"\n data-testid=\"querybuilder-search-textfield\"\n sx={{ width: { xs: \"100%\", sm: 240 } }}\n slotProps={{\n htmlInput: { \"aria-label\": translate(\"Search Code\") },\n }}\n inputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <Box sx={{ color: \"text.disabled\", display: \"flex\" }}>\n <FontAwesomeIcons\n iconName=\"faMagnifyingGlass\"\n size=\"sm\"\n />\n </Box>\n </InputAdornment>\n ),\n endAdornment: search ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n aria-label={translate(\"Clear search\")}\n onClick={() => setSearch(\"\")}\n >\n <FontAwesomeIcons iconName=\"faXmark\" size=\"sm\" />\n </IconButton>\n </InputAdornment>\n ) : null,\n }}\n />\n {canCreate && (\n <Button\n size=\"small\"\n variant=\"contained\"\n onClick={handleAddEdit}\n startIcon={<FontAwesomeIcons iconName=\"faPlus\" />}\n data-testid=\"querybuilder-add-button\"\n >\n {translate(\"Add\")} {translate(\"Query\")}\n </Button>\n )}\n </Box>\n )}\n </Box>\n </QueryBuilderSkeleton>\n\n {isDenied ? (\n <EmptyState\n icon=\"faLock\"\n title={translate(\"You don't have access to Queries\")}\n body={translate(\n \"Your role doesn't include permission to view queries. Ask an administrator to grant the view right for this module.\",\n )}\n dataTestId=\"no-permission-message\"\n />\n ) : !isLoading && !hasQueries && search ? (\n <EmptyState\n icon=\"faMagnifyingGlass\"\n title={translate(\"No queries match your search\")}\n body={translate(\"Search matches the query code. Check the spelling, or try a shorter term.\")}\n action={\n <Button variant=\"text\" size=\"small\" onClick={() => setSearch(\"\")}>\n {translate(\"Clear search\")}\n </Button>\n }\n dataTestId=\"querybuilder-no-results\"\n />\n ) : (\n <CustomizedTable\n columns={queryTableFields}\n tableData={queryTableValues}\n actions={getActions()}\n paginationConfig={{\n pagination: true,\n rowsPerPageInTable: pageSize,\n onPageChange: (newPage) => {\n setCurrentPage(newPage);\n },\n currentPage: currentPage,\n totalRows: totalRows,\n }}\n dataTestId=\"querybuilder-customizedtable\"\n styleConfig={{ tableStyle: { maxHeight: 65 } }}\n isLoading={isLoading}\n />\n )}\n </Box>\n </Paper>\n </Grid>\n );\n};\n\nexport default QueryBuilder;\n"],"names":["toggleState","data","api","saveOrUpdate","QueryBuilderSkeleton","children","isLoading","useSelector","getUseSkeleton","jsxs","jsx","PropTypes","AddEditQueryBuilder","lazy","ShowFlywayQuery","ShowQueryHistory","EmptyState","icon","title","body","action","dataTestId","Box","FontAwesomeIcons","Typography","QueryBuilder","trackEvent","useTrackEvent","queryTableValues","setQueryTableValues","useState","refreshData","setRefreshData","actualData","setActualData","currentPage","setCurrentPage","isActiveLabel","setIsActiveLabel","isActiveDescription","setIsActiveDescription","queryHistory","setQueryHistory","openHistory","setOpenHistory","configuredQuery","setConfiguredQuery","openFlywayQuery","setOpenFlywayQuery","featureUuid","setFeatureUuid","search","setSearch","debounceSearch","setDebounceSearch","clickedRow","setClickedRow","isEdit","setIsEdit","editRow","setEditRow","toggleOpen","setToggleOpen","addEdit","setAddEdit","totalRows","setTotalRows","translate","useTranslateProvider","rights","setRights","isClickhouseEnabledEnv","implementationConfig","queryTableFields","setIsLoading","pageSize","pageData","usePagination","pageParam","loadMoreData","handleEdit","toggledData","item","cur","handleToggleOption","handleToggle","handleToggleState","fetchTotalRows","updatedData","showToast","setTableData","error","showQueryHistory","response","execute","_b","_a","_c","showFlywayQuery","syncWithServer","handleSyncClose","getActions","actions","GeneralUtil","useEffect","countData","loadRights","featureJson","getAssignedFeatures","tableData","allQueriesData","handleAddEdit","addEditLoadInitial","canView","canCreate","isDenied","hasQueries","Grid","Suspense","SyncWithServerDialog","CustomConfirmationModal","Paper","t","DebouncedSearchInput","InputAdornment","IconButton","Button","CustomizedTable","newPage"],"mappings":"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"}
|