@argusoft/medplat-core 1.0.19 → 1.0.20
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-Bvd5Bm5K.js → AccessRights-CupmTG3T.js} +2 -2
- package/dist/{AccessRights-Bvd5Bm5K.js.map → AccessRights-CupmTG3T.js.map} +1 -1
- package/dist/{AddEditQueryBuilder-Bcjl5mXE.js → AddEditQueryBuilder-C8ZSkOF0.js} +60 -60
- package/dist/AddEditQueryBuilder-C8ZSkOF0.js.map +1 -0
- package/dist/{AddFeatures-CE5rBxEG.js → AddFeatures-CiZZZ0GL.js} +2 -2
- package/dist/{AddFeatures-CE5rBxEG.js.map → AddFeatures-CiZZZ0GL.js.map} +1 -1
- package/dist/{AddRoleDrawer-Bc655LQU.js → AddRoleDrawer-CQdzQZLb.js} +36 -36
- package/dist/AddRoleDrawer-CQdzQZLb.js.map +1 -0
- package/dist/{ConditionConfig-D2hOAa4n.js → ConditionConfig-C3rF2wXU.js} +2 -2
- package/dist/{ConditionConfig-D2hOAa4n.js.map → ConditionConfig-C3rF2wXU.js.map} +1 -1
- package/dist/{EventConfigurations-D8juDb29.js → EventConfigurations-BGffjVC7.js} +3 -3
- package/dist/{EventConfigurations-D8juDb29.js.map → EventConfigurations-BGffjVC7.js.map} +1 -1
- package/dist/{EventsExceptionModal-DsvngLi8.js → EventsExceptionModal-D4Bf1ilS.js} +2 -2
- package/dist/{EventsExceptionModal-DsvngLi8.js.map → EventsExceptionModal-D4Bf1ilS.js.map} +1 -1
- package/dist/EventsSkeleton-8iiETGcf.js +76 -0
- package/dist/EventsSkeleton-8iiETGcf.js.map +1 -0
- package/dist/{FeatureMenu-CLX8VNZ-.js → FeatureMenu-DUZL32RI.js} +3 -3
- package/dist/{FeatureMenu-CLX8VNZ-.js.map → FeatureMenu-DUZL32RI.js.map} +1 -1
- package/dist/Features-CObdzJp_.js +13 -0
- package/dist/Features-CObdzJp_.js.map +1 -0
- package/dist/{ManageDynamicFeature-i6ARKe36.js → ManageDynamicFeature-BhONvfC_.js} +2 -2
- package/dist/{ManageDynamicFeature-i6ARKe36.js.map → ManageDynamicFeature-BhONvfC_.js.map} +1 -1
- package/dist/{ManageEventConfiguration-CHugu2vQ.js → ManageEventConfiguration-BntUc_YI.js} +5 -5
- package/dist/{ManageEventConfiguration-CHugu2vQ.js.map → ManageEventConfiguration-BntUc_YI.js.map} +1 -1
- package/dist/{ManageNotification-BUAvg5Ge.js → ManageNotification-CSl02Wq7.js} +2 -2
- package/dist/{ManageNotification-BUAvg5Ge.js.map → ManageNotification-CSl02Wq7.js.map} +1 -1
- package/dist/{ManageRole-Cbs9dUhc.js → ManageRole-tdzAiCOE.js} +222 -229
- package/dist/ManageRole-tdzAiCOE.js.map +1 -0
- package/dist/{MobileTypeEventConfigModal-2w0WQ3WY.js → MobileTypeEventConfigModal-BNjZ8pnq.js} +2 -2
- package/dist/{MobileTypeEventConfigModal-2w0WQ3WY.js.map → MobileTypeEventConfigModal-BNjZ8pnq.js.map} +1 -1
- package/dist/{NotificationList-CUZSWp2J.js → NotificationList-D1U1LYnz.js} +140 -139
- package/dist/NotificationList-D1U1LYnz.js.map +1 -0
- package/dist/{OtherTypeEventConfigModal-D1p8M39y.js → OtherTypeEventConfigModal-DiVhWDpG.js} +2 -2
- package/dist/{OtherTypeEventConfigModal-D1p8M39y.js.map → OtherTypeEventConfigModal-DiVhWDpG.js.map} +1 -1
- package/dist/{QueryBuilder-DXexUIe8.js → QueryBuilder-DI0wCJbz.js} +85 -84
- package/dist/QueryBuilder-DI0wCJbz.js.map +1 -0
- package/dist/{RoleManagement-BThAL5LO.js → RoleManagement-Cg8-EiVr.js} +83 -82
- package/dist/RoleManagement-Cg8-EiVr.js.map +1 -0
- package/dist/{ShowFlywayQuery-BkyA6QaA.js → ShowFlywayQuery-tj42YQAS.js} +33 -33
- package/dist/ShowFlywayQuery-tj42YQAS.js.map +1 -0
- package/dist/{SubMenu-BGznOP2a.js → SubMenu-CM_4wNCR.js} +2 -2
- package/dist/{SubMenu-BGznOP2a.js.map → SubMenu-CM_4wNCR.js.map} +1 -1
- package/dist/{TypeConfiguration-D-3xNcyd.js → TypeConfiguration-CupQxH9Y.js} +28 -28
- package/dist/TypeConfiguration-CupQxH9Y.js.map +1 -0
- package/dist/{UserList-D7GL7jvO.js → UserList-BzHsbYel.js} +186 -185
- package/dist/UserList-BzHsbYel.js.map +1 -0
- package/dist/{WidgetList-B3Sm9weK.js → WidgetList-B7X8Awkg.js} +2 -2
- package/dist/{WidgetList-B3Sm9weK.js.map → WidgetList-B7X8Awkg.js.map} +1 -1
- package/dist/index.js +9 -9
- package/package.json +1 -1
- package/dist/AddEditQueryBuilder-Bcjl5mXE.js.map +0 -1
- package/dist/AddRoleDrawer-Bc655LQU.js.map +0 -1
- package/dist/EventsSkeleton-DCXwwPbb.js +0 -76
- package/dist/EventsSkeleton-DCXwwPbb.js.map +0 -1
- package/dist/Features-Cpf1PDx0.js +0 -13
- package/dist/Features-Cpf1PDx0.js.map +0 -1
- package/dist/ManageRole-Cbs9dUhc.js.map +0 -1
- package/dist/NotificationList-CUZSWp2J.js.map +0 -1
- package/dist/QueryBuilder-DXexUIe8.js.map +0 -1
- package/dist/RoleManagement-BThAL5LO.js.map +0 -1
- package/dist/ShowFlywayQuery-BkyA6QaA.js.map +0 -1
- package/dist/TypeConfiguration-D-3xNcyd.js.map +0 -1
- package/dist/UserList-D7GL7jvO.js.map +0 -1
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
import { jsxs as r, jsx as t, Fragment as L } from "react/jsx-runtime";
|
|
2
|
-
import
|
|
3
|
-
import { useState as m, useEffect as
|
|
4
|
-
import { Box as p, Card as
|
|
5
|
-
import { alpha as
|
|
6
|
-
import { useTranslateProvider as
|
|
7
|
-
import
|
|
2
|
+
import g from "@/common/services/util/GeneralUtil";
|
|
3
|
+
import { useState as m, useEffect as de, Suspense as H, lazy as X } from "react";
|
|
4
|
+
import { Box as p, Card as C, Typography as d, Button as S, TextField as K, Switch as me, Chip as $ } from "@mui/material";
|
|
5
|
+
import { alpha as T } from "@mui/material/styles";
|
|
6
|
+
import { useTranslateProvider as ue } from "@/common/languageTranslator/TranslationContext";
|
|
7
|
+
import V from "@/common/config/implementationConfig";
|
|
8
|
+
import { api as f } from "@/common/interceptors/AxiosInterceptor";
|
|
8
9
|
import { getRoleList as _ } from "@/common/services/GlobalApis.js";
|
|
9
|
-
import { getAssignedFeatures as
|
|
10
|
+
import { getAssignedFeatures as fe } from "@/utils/feature.js";
|
|
10
11
|
import { showToast as x } from "@/common/toaster/toaster";
|
|
11
|
-
import { FontAwesomeIcon as
|
|
12
|
+
import { FontAwesomeIcon as pe } from "@fortawesome/react-fontawesome";
|
|
12
13
|
import { faTrash as he } from "@fortawesome/free-solid-svg-icons";
|
|
13
|
-
import
|
|
14
|
+
import ge from "@/hooks/useTrackEvent";
|
|
14
15
|
import z from "prop-types";
|
|
15
|
-
import { useSelector as
|
|
16
|
-
import { getUseSkeleton as
|
|
17
|
-
const j = () =>
|
|
16
|
+
import { useSelector as Z } from "react-redux";
|
|
17
|
+
import { getUseSkeleton as xe } from "@/store/reducers/SkeletonReducer";
|
|
18
|
+
const j = () => f.get("/role"), ve = (l) => f.delete(V.api.useQueryParamStyle ? `/menuconfig/usermenuitem/delete?empMenuItemId=${l}` : `/menuconfig/usermenuitem/${l}`), ye = (l) => f.get(V.api.useQueryParamStyle ? `/role/retrieveById?id=${l}` : `/role/${l}`), Be = (l) => f.post("/role", { ...l }), De = (l) => V.api.useQueryParamStyle ? f.put("/role/update", { ...l }) : f.post("/role", { ...l }), be = (l) => f.put(`role/?is_active=${l.state === "INACTIVE" ? "true" : "false"}`, {
|
|
18
19
|
...l
|
|
19
|
-
}),
|
|
20
|
+
}), Ue = (l, n) => f.post(`/menuconfig/assignnewfeature?roleId=${n}`, { ...l }), ee = ({ children: l, isLoading: n = !0 }) => !Z(xe) || !n ? l : /* @__PURE__ */ r("div", { className: "pt-6 relative h-[90vh]", children: [
|
|
20
21
|
/* @__PURE__ */ r("div", { className: "flex flex-row h-[80vh] ", children: [
|
|
21
22
|
/* @__PURE__ */ r("div", { className: "flex flex-col border border-gray-300 w-[20%] p-2 mr-3 rounded-md", children: [
|
|
22
23
|
" ",
|
|
@@ -38,64 +39,64 @@ const j = () => h.get("/role"), xe = (l) => h.delete(u.isTecho ? `/menuconfig/us
|
|
|
38
39
|
] }),
|
|
39
40
|
/* @__PURE__ */ t("div", { className: "absolute bottom-20 right-[10px] ", children: /* @__PURE__ */ t("div", { className: "bg-gray-300 animate-pulse rounded-full w-[40px] h-[40px]" }) })
|
|
40
41
|
] });
|
|
41
|
-
|
|
42
|
+
ee.propTypes = {
|
|
42
43
|
children: z.any,
|
|
43
44
|
loading: z.any,
|
|
44
45
|
isLoading: z.any
|
|
45
46
|
};
|
|
46
|
-
const
|
|
47
|
-
function
|
|
47
|
+
const we = X(() => import("./AddFeatures-CiZZZ0GL.js")), Ne = X(() => import("./ManageRole-tdzAiCOE.js"));
|
|
48
|
+
function Ie() {
|
|
48
49
|
var q;
|
|
49
|
-
const { translate: l } =
|
|
50
|
+
const { translate: l } = ue(), [n, y] = m(""), [o, b] = m(n[0]), [A, te] = m(!1), [O, u] = m(!1), [P, B] = m(!1), [F, D] = m(0), [U, k] = m(""), [w, W] = m(""), [c, ae] = m({}), Y = ge(), Q = Z((e) => e.Authenticate.user.roleId), [E, se] = m([]), N = async (e = !1) => {
|
|
50
51
|
var a;
|
|
51
52
|
try {
|
|
52
|
-
|
|
53
|
+
u(!0);
|
|
53
54
|
const s = A ? j() : _();
|
|
54
|
-
let i,
|
|
55
|
-
if (
|
|
55
|
+
let i, h = [];
|
|
56
|
+
if (Q) {
|
|
56
57
|
const [{ data: v }, M] = await Promise.all([
|
|
57
58
|
s,
|
|
58
|
-
|
|
59
|
+
ye(Q)
|
|
59
60
|
]);
|
|
60
|
-
i = v,
|
|
61
|
+
i = v, h = ((a = M == null ? void 0 : M.data) == null ? void 0 : a.roleIds) || [];
|
|
61
62
|
} else {
|
|
62
63
|
const { data: v } = await s;
|
|
63
64
|
i = v;
|
|
64
65
|
}
|
|
65
|
-
|
|
66
|
-
const R =
|
|
67
|
-
|
|
66
|
+
se(h);
|
|
67
|
+
const R = h.length > 0 ? i.filter((v) => h.includes(v.id)) : i;
|
|
68
|
+
y(R), !e && R.length > 0 && b(R[0]);
|
|
68
69
|
} catch (s) {
|
|
69
70
|
console.error(s), x({ message: "Error in getting role data", type: "error" });
|
|
70
71
|
} finally {
|
|
71
|
-
|
|
72
|
+
u(!1);
|
|
72
73
|
}
|
|
73
74
|
};
|
|
74
|
-
|
|
75
|
+
de(function() {
|
|
75
76
|
(async () => {
|
|
76
|
-
const { data: a } = await
|
|
77
|
-
a &&
|
|
77
|
+
const { data: a } = await fe("techo.manage.role");
|
|
78
|
+
a && ae(JSON.parse(a));
|
|
78
79
|
})(), N();
|
|
79
80
|
}, []);
|
|
80
|
-
const
|
|
81
|
+
const re = async (e) => {
|
|
81
82
|
let a = e.target.checked;
|
|
82
|
-
|
|
83
|
+
te(e.target.checked);
|
|
83
84
|
try {
|
|
84
|
-
|
|
85
|
+
u((i) => !i);
|
|
85
86
|
let s;
|
|
86
87
|
a ? { data: s } = await j() : { data: s } = await _(), E && E.length > 0 && (s = s.filter(
|
|
87
88
|
(i) => E.includes(i.id)
|
|
88
|
-
)),
|
|
89
|
+
)), y(s), b(s[0]), u((i) => !i), k("");
|
|
89
90
|
} catch (s) {
|
|
90
|
-
console.error(s), x({ message: "Error in getting role data", type: "error" }),
|
|
91
|
+
console.error(s), x({ message: "Error in getting role data", type: "error" }), u((i) => !i);
|
|
91
92
|
}
|
|
92
93
|
}, J = n ? n == null ? void 0 : n.filter(
|
|
93
94
|
(e) => e.name.toLowerCase().includes(U.toLowerCase())
|
|
94
|
-
) : [],
|
|
95
|
+
) : [], le = (e) => {
|
|
95
96
|
if (!e) return "";
|
|
96
|
-
const a = new Date(Number(e)), s = String(a.getDate()).padStart(2, "0"), i = String(a.getMonth() + 1).padStart(2, "0"),
|
|
97
|
-
return `${s}/${i}/${
|
|
98
|
-
},
|
|
97
|
+
const a = new Date(Number(e)), s = String(a.getDate()).padStart(2, "0"), i = String(a.getMonth() + 1).padStart(2, "0"), h = a.getFullYear();
|
|
98
|
+
return `${s}/${i}/${h}`;
|
|
99
|
+
}, oe = async () => {
|
|
99
100
|
try {
|
|
100
101
|
const e = n == null ? void 0 : n.find((s) => s.id === o.id);
|
|
101
102
|
await be(e), x({
|
|
@@ -103,9 +104,9 @@ function Ne() {
|
|
|
103
104
|
type: "success"
|
|
104
105
|
});
|
|
105
106
|
let a;
|
|
106
|
-
|
|
107
|
+
u((s) => !s), A ? a = await j() : a = await _(), y(a.data), b(a.data[0]), u((s) => !s);
|
|
107
108
|
} catch (e) {
|
|
108
|
-
console.error(e), x({ message: "Error in handle active", type: "error" }),
|
|
109
|
+
console.error(e), x({ message: "Error in handle active", type: "error" }), u((a) => !a);
|
|
109
110
|
}
|
|
110
111
|
}, I = n ? (q = n.find((e) => e.id === o.id)) == null ? void 0 : q.assignedFeatureList.filter(
|
|
111
112
|
(e) => {
|
|
@@ -115,9 +116,9 @@ function Ne() {
|
|
|
115
116
|
).sort((e, a) => {
|
|
116
117
|
var s;
|
|
117
118
|
return (s = e.featureName) == null ? void 0 : s.localeCompare(a.featureName);
|
|
118
|
-
}) : [],
|
|
119
|
+
}) : [], ne = async (e) => {
|
|
119
120
|
try {
|
|
120
|
-
await
|
|
121
|
+
await ve(e.userMenuItemId), await N(!0), W(""), x({ message: "Feature deleted successfully!", type: "success" });
|
|
121
122
|
} catch (a) {
|
|
122
123
|
x({ message: a, type: "error" });
|
|
123
124
|
}
|
|
@@ -127,9 +128,9 @@ function Ne() {
|
|
|
127
128
|
button_type: "navigate",
|
|
128
129
|
button_id: `roles-${e === 1 ? "add" : "edit"}-button`
|
|
129
130
|
});
|
|
130
|
-
},
|
|
131
|
+
}, ie = () => {
|
|
131
132
|
N(), k("");
|
|
132
|
-
},
|
|
133
|
+
}, ce = async () => {
|
|
133
134
|
try {
|
|
134
135
|
B(!0), await Y("button_click", {
|
|
135
136
|
button_name: "add feature button",
|
|
@@ -140,15 +141,15 @@ function Ne() {
|
|
|
140
141
|
console.error(e);
|
|
141
142
|
}
|
|
142
143
|
};
|
|
143
|
-
return
|
|
144
|
-
|
|
144
|
+
return g.isTecho && !O && !(c != null && c["view.manage.role"]) ? /* @__PURE__ */ t(p, { className: "flex justify-center items-center w-full h-[80vh]", children: /* @__PURE__ */ t(
|
|
145
|
+
C,
|
|
145
146
|
{
|
|
146
147
|
className: "h-80 w-150 flex justify-center items-center",
|
|
147
148
|
children: /* @__PURE__ */ t(d, { variant: "h5", className: "text-customBlue", children: "You dont have permission to view Roles" })
|
|
148
149
|
}
|
|
149
|
-
) }) : /* @__PURE__ */ t(
|
|
150
|
+
) }) : /* @__PURE__ */ t(ee, { isLoading: O, children: /* @__PURE__ */ r(p, { className: "flex flex-col gap-4 p-4 min-[900px]:flex-row min-[900px]:h-[calc(100vh-80px)]", children: [
|
|
150
151
|
/* @__PURE__ */ r(
|
|
151
|
-
|
|
152
|
+
C,
|
|
152
153
|
{
|
|
153
154
|
variant: "outlined",
|
|
154
155
|
className: "w-full min-[900px]:w-[300px] flex flex-col p-4",
|
|
@@ -163,8 +164,8 @@ function Ne() {
|
|
|
163
164
|
children: "User Roles"
|
|
164
165
|
}
|
|
165
166
|
),
|
|
166
|
-
(!
|
|
167
|
-
|
|
167
|
+
(!g.isTecho || (c == null ? void 0 : c["create.manage.role"])) && /* @__PURE__ */ t(
|
|
168
|
+
S,
|
|
168
169
|
{
|
|
169
170
|
size: "small",
|
|
170
171
|
variant: "contained",
|
|
@@ -189,24 +190,24 @@ function Ne() {
|
|
|
189
190
|
),
|
|
190
191
|
/* @__PURE__ */ r("div", { className: "flex items-center gap-2 mt-3", children: [
|
|
191
192
|
/* @__PURE__ */ t(
|
|
192
|
-
|
|
193
|
+
me,
|
|
193
194
|
{
|
|
194
195
|
size: "small",
|
|
195
196
|
checked: A,
|
|
196
|
-
onChange:
|
|
197
|
+
onChange: re
|
|
197
198
|
}
|
|
198
199
|
),
|
|
199
200
|
/* @__PURE__ */ t(d, { variant: "body2", children: "Include Inactive" })
|
|
200
201
|
] }),
|
|
201
202
|
/* @__PURE__ */ t("div", { className: "flex-1 overflow-y-auto mt-4", children: J.length > 0 && /* @__PURE__ */ t(L, { children: J.map((e) => /* @__PURE__ */ r(
|
|
202
|
-
|
|
203
|
+
C,
|
|
203
204
|
{
|
|
204
205
|
variant: "outlined",
|
|
205
|
-
onClick: () =>
|
|
206
|
+
onClick: () => b(e),
|
|
206
207
|
className: `p-3 cursor-pointer transition
|
|
207
208
|
${o.id === e.id ? "border-b-2" : "border-b-2 border-0"}`,
|
|
208
209
|
sx: o.id === e.id ? {
|
|
209
|
-
bgcolor: (a) =>
|
|
210
|
+
bgcolor: (a) => T(a.palette.primary.main, 0.08)
|
|
210
211
|
} : {},
|
|
211
212
|
children: [
|
|
212
213
|
/* @__PURE__ */ r(d, { fontWeight: 600, children: [
|
|
@@ -226,7 +227,7 @@ function Ne() {
|
|
|
226
227
|
}
|
|
227
228
|
),
|
|
228
229
|
/* @__PURE__ */ r(
|
|
229
|
-
|
|
230
|
+
C,
|
|
230
231
|
{
|
|
231
232
|
variant: "outlined",
|
|
232
233
|
className: "w-full min-[900px]:flex-1 flex flex-col p-5",
|
|
@@ -254,23 +255,23 @@ function Ne() {
|
|
|
254
255
|
className: "mt-1",
|
|
255
256
|
children: [
|
|
256
257
|
"Created on ",
|
|
257
|
-
|
|
258
|
+
le(o == null ? void 0 : o.createdOn)
|
|
258
259
|
]
|
|
259
260
|
}
|
|
260
261
|
)
|
|
261
262
|
] }),
|
|
262
263
|
/* @__PURE__ */ r("div", { className: "flex gap-2", children: [
|
|
263
|
-
(!
|
|
264
|
-
|
|
264
|
+
(!g.isTecho || (c == null ? void 0 : c["update.manage.role.toggleActive"])) && /* @__PURE__ */ t(
|
|
265
|
+
S,
|
|
265
266
|
{
|
|
266
267
|
variant: "outlined",
|
|
267
268
|
size: "small",
|
|
268
|
-
onClick: () =>
|
|
269
|
+
onClick: () => oe(),
|
|
269
270
|
children: (o == null ? void 0 : o.state) === "ACTIVE" ? "Deactivate" : "Activate"
|
|
270
271
|
}
|
|
271
272
|
),
|
|
272
|
-
(!
|
|
273
|
-
|
|
273
|
+
(!g.isTecho || (c == null ? void 0 : c["update.manage.role"])) && /* @__PURE__ */ t(
|
|
274
|
+
S,
|
|
274
275
|
{
|
|
275
276
|
variant: "contained",
|
|
276
277
|
size: "small",
|
|
@@ -312,7 +313,7 @@ function Ne() {
|
|
|
312
313
|
className: "grid grid-cols-[minmax(340px,1.5fr)_120px] px-4 py-2 text-[15px] font-semibold border-b min-w-[500px]",
|
|
313
314
|
sx: {
|
|
314
315
|
color: "text.secondary",
|
|
315
|
-
bgcolor: (e) =>
|
|
316
|
+
bgcolor: (e) => T(e.palette.action.hover, 0.04)
|
|
316
317
|
},
|
|
317
318
|
children: [
|
|
318
319
|
/* @__PURE__ */ t("div", { children: l("FEATURE NAME") }),
|
|
@@ -334,17 +335,17 @@ function Ne() {
|
|
|
334
335
|
className: "grid grid-cols-[minmax(340px,1.5fr)_120px] px-4 py-3 items-center border-b last:border-b-0 transition",
|
|
335
336
|
sx: {
|
|
336
337
|
"&:hover": {
|
|
337
|
-
bgcolor: (s) =>
|
|
338
|
+
bgcolor: (s) => T(s.palette.action.hover, 0.04)
|
|
338
339
|
}
|
|
339
340
|
},
|
|
340
341
|
children: [
|
|
341
342
|
/* @__PURE__ */ t("div", { className: "flex flex-col", children: /* @__PURE__ */ t(d, { sx: { fontSize: "13px", fontWeight: 600 }, children: e.featureName }) }),
|
|
342
|
-
/* @__PURE__ */ t("div", { className: "flex justify-center", children: (!
|
|
343
|
-
|
|
343
|
+
/* @__PURE__ */ t("div", { className: "flex justify-center", children: (!g.isTecho || (c == null ? void 0 : c["view.manage.role.unassignFeature"])) && /* @__PURE__ */ t(
|
|
344
|
+
pe,
|
|
344
345
|
{
|
|
345
346
|
icon: he,
|
|
346
347
|
onClick: () => {
|
|
347
|
-
|
|
348
|
+
ne(e);
|
|
348
349
|
},
|
|
349
350
|
color: "error",
|
|
350
351
|
className: "text-red-400 cursor-pointer",
|
|
@@ -373,29 +374,29 @@ function Ne() {
|
|
|
373
374
|
{
|
|
374
375
|
className: "border-t p-4",
|
|
375
376
|
sx: {
|
|
376
|
-
bgcolor: (e) =>
|
|
377
|
+
bgcolor: (e) => T(e.palette.primary.main, 0.06)
|
|
377
378
|
},
|
|
378
|
-
children: (!
|
|
379
|
+
children: (!g.isTecho || (c == null ? void 0 : c["view.manage.role.assignFeature"])) && /* @__PURE__ */ t(S, { variant: "outlined", size: "small", onClick: ce, children: "+ Add More Features" })
|
|
379
380
|
}
|
|
380
381
|
)
|
|
381
382
|
]
|
|
382
383
|
}
|
|
383
384
|
),
|
|
384
385
|
/* @__PURE__ */ t(H, { children: /* @__PURE__ */ t(
|
|
385
|
-
|
|
386
|
+
Ne,
|
|
386
387
|
{
|
|
387
388
|
isUpdate: F !== 1,
|
|
388
389
|
selectedId: F === 2 ? o.id : null,
|
|
389
390
|
"data-testid": "roles-managerole-add-button",
|
|
390
391
|
open: F,
|
|
391
392
|
setOpen: D,
|
|
392
|
-
isRoleListModified:
|
|
393
|
+
isRoleListModified: ie
|
|
393
394
|
}
|
|
394
395
|
) }),
|
|
395
|
-
/* @__PURE__ */ t(H, { fallback: /* @__PURE__ */ t("div", { className: "animate-pulse w-80 h-20 " }), children:
|
|
396
|
-
|
|
396
|
+
/* @__PURE__ */ t(H, { fallback: /* @__PURE__ */ t("div", { className: "animate-pulse w-80 h-20 " }), children: P === !0 && /* @__PURE__ */ t(
|
|
397
|
+
we,
|
|
397
398
|
{
|
|
398
|
-
open:
|
|
399
|
+
open: P,
|
|
399
400
|
setOpenModal: B,
|
|
400
401
|
selectedId: o.id,
|
|
401
402
|
setData: () => N(!0),
|
|
@@ -408,15 +409,15 @@ function Ne() {
|
|
|
408
409
|
) })
|
|
409
410
|
] }) });
|
|
410
411
|
}
|
|
411
|
-
const
|
|
412
|
+
const We = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
412
413
|
__proto__: null,
|
|
413
|
-
default:
|
|
414
|
+
default: Ie
|
|
414
415
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
415
416
|
export {
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
417
|
+
We as R,
|
|
418
|
+
De as a,
|
|
419
|
+
Be as b,
|
|
420
|
+
ye as g,
|
|
421
|
+
Ue as p
|
|
421
422
|
};
|
|
422
|
-
//# sourceMappingURL=RoleManagement-
|
|
423
|
+
//# sourceMappingURL=RoleManagement-Cg8-EiVr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoleManagement-Cg8-EiVr.js","sources":["../src/services/Roles.js","../src/views/Roles/Skeletons/RoleManagementSkeleton.jsx","../src/views/Roles/RoleManagement.jsx"],"sourcesContent":["import implementationConfig from \"@/common/config/implementationConfig\";\nimport { api } from \"@/common/interceptors/AxiosInterceptor\";\n\nexport const getAllRoleList = () => api.get(\"/role\");\n\nexport const deleteRoleFeature = (id) =>\n api.delete(implementationConfig.api.useQueryParamStyle ? `/menuconfig/usermenuitem/delete?empMenuItemId=${id}` : `/menuconfig/usermenuitem/${id}`);\n\nexport const getRoleById = (id) => api.get(implementationConfig.api.useQueryParamStyle ? `/role/retrieveById?id=${id}` : `/role/${id}`);\n\nexport const postRole = (params) => api.post(\"/role\", { ...params });\n\nexport const putRole = (params) => implementationConfig.api.useQueryParamStyle ? api.put(\"/role/update\", { ...params }) : api.post(\"/role\", { ...params });\n\nexport const ToggleState = (params) =>\n api.put(`role/?is_active=${params.state === \"INACTIVE\" ? \"true\" : \"false\"}`, {\n ...params,\n });\nexport const postNewFeature = (params, id) =>\n api.post(`/menuconfig/assignnewfeature?roleId=${id}`, { ...params });\n","import PropTypes from \"prop-types\";\nimport React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { getUseSkeleton } from \"@/store/reducers/SkeletonReducer\";\n\nconst RoleManagementSkeleton = ({ children, isLoading = true }) => {\n const useSkeleton = useSelector(getUseSkeleton);\n if (!useSkeleton) {\n return children;\n }\n if (!isLoading) {\n return children;\n }\n\n return (\n <div className=\"pt-6 relative h-[90vh]\">\n {/* skleton for roles and add button */}\n\n <div className=\"flex flex-row h-[80vh] \">\n <div className=\"flex flex-col border border-gray-300 w-[20%] p-2 mr-3 rounded-md\">\n {\" \"}\n <div className=\"flex justify-between\">\n {/* skleton for list of roles and toogle roles */}\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-23 h-[40px] mr-3\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-40 h-[40px]\"></div>\n </div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm mt-2 w-full h-[50px]\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm mt-2 w-full h-full\"></div>\n </div>\n <div className=\"flex flex-col border border-gray-300 w-[80%] p-2 rounded-md\">\n <div className=\"flex justify-between\">\n {/* skleton for role name and options */}\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-24 h-[40px]\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm w-21 h-[40px]\"></div>\n </div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm mt-2 w-full h-[50px]\"></div>\n <div className=\"bg-gray-300 animate-pulse rounded-sm mt-2 w-full h-full\"></div>\n </div>\n </div>\n\n <div className=\"absolute bottom-20 right-[10px] \">\n <div className=\"bg-gray-300 animate-pulse rounded-full w-[40px] h-[40px]\"></div>\n </div>\n </div>\n );\n};\n\nRoleManagementSkeleton.propTypes = {\n children: PropTypes.any,\n loading: PropTypes.any,\n isLoading: PropTypes.any,\n};\n\nexport default RoleManagementSkeleton;\n","import GeneralUtil from \"@/common/services/util/GeneralUtil\";\nimport { Suspense, useEffect, useState, lazy } from \"react\";\nimport {\n Box,\n Card,\n Switch,\n TextField,\n Button,\n Chip,\n Typography,\n} from \"@mui/material\";\nimport { alpha } from \"@mui/material/styles\";\nimport { useTranslateProvider } from \"@/common/languageTranslator/TranslationContext\";\nimport {\n getAllRoleList,\n ToggleState,\n deleteRoleFeature,\n getRoleById,\n} from \"../../services/Roles.js\";\nimport { getRoleList } from \"@/common/services/GlobalApis.js\";\nimport { getAssignedFeatures } from \"@/utils/feature.js\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faTrash } from \"@fortawesome/free-solid-svg-icons\";\nimport useTrackEvent from \"@/hooks/useTrackEvent\";\nimport RoleManagementSkeleton from \"./Skeletons/RoleManagementSkeleton.jsx\";\nimport { useSelector } from \"react-redux\";\nconst AddFeatures = lazy(() => import(\"./AddFeatures.jsx\"));\nconst ManageRole = lazy(() => import(\"./ManageRole.jsx\"));\n\nexport default function RoleManagement() {\n const { translate } = useTranslateProvider();\n const [Data, setData] = useState(\"\");\n const [selectedRole, setSelectedRole] = useState(Data[0]);\n const [includeInActive, setincludeInActive] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [openModal, setOpenModal] = useState(false);\n const [openManageRole, setOpenManageRole] = useState(0);\n const [searchText, setSearchText] = useState(\"\");\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [rights, setRights] = useState({});\n const trackEvent = useTrackEvent();\n const currentLoogedInUserRoleId = useSelector((state) => state.Authenticate.user.roleId);\n const [allowedRoleIds, setallowedRoleIds] = useState([]);\n\n const getAllData = async (isPreserveRole = false) => {\n try {\n setIsLoading(true);\n const roleListPromise = includeInActive ? getAllRoleList() : getRoleList();\n let data, userRoleIds = [];\n if (currentLoogedInUserRoleId) {\n // Run both APIs in parallel\n const [{ data: roleData }, currRoleData] = await Promise.all([\n roleListPromise,\n getRoleById(currentLoogedInUserRoleId),\n ]);\n data = roleData;\n userRoleIds = currRoleData?.data?.roleIds || [];\n } else {\n // Only fetch role list\n const { data: roleData } = await roleListPromise;\n data = roleData;\n }\n setallowedRoleIds(userRoleIds);\n // ✅ Filter logic (keep only allowed roles)\n const filteredData =\n userRoleIds.length > 0\n ? data.filter((role) => userRoleIds.includes(role.id))\n : data; // fallback: show all if no roleIds\n setData(filteredData);\n if (!isPreserveRole && filteredData.length > 0) {\n setSelectedRole(filteredData[0]);\n }\n } catch (error) {\n console.error(error);\n showToast({ message: \"Error in getting role data\", type: \"error\" });\n } finally {\n setIsLoading(false);\n }\n };\n\n useEffect(function () {\n const fetchRights = async () => {\n const { data: featureJson } = await getAssignedFeatures(\"techo.manage.role\");\n if (featureJson) setRights(JSON.parse(featureJson));\n };\n fetchRights();\n getAllData();\n }, []);\n\n const handleCheckboxChange = async (event) => {\n let isChecked = event.target.checked;\n setincludeInActive(event.target.checked);\n try {\n setIsLoading((cur) => !cur);\n let data;\n if (isChecked) {\n ({ data } = await getAllRoleList());\n } else {\n ({ data } = await getRoleList());\n }\n if (allowedRoleIds && allowedRoleIds.length > 0) {\n data = data.filter(\n (role) => allowedRoleIds.includes(role.id)\n );\n }\n setData(data);\n setSelectedRole(data[0]);\n setIsLoading((cur) => !cur);\n setSearchText(\"\");\n } catch (error) {\n console.error(error);\n showToast({ message: \"Error in getting role data\", type: \"error\" });\n setIsLoading((cur) => !cur);\n }\n };\n\n const filterData = Data\n ? Data?.filter((feature) =>\n feature.name.toLowerCase().includes(searchText.toLowerCase())\n )\n : [];\n\n const formatDateDDMMYYYY = (timestamp) => {\n if (!timestamp) return \"\";\n const date = new Date(Number(timestamp));\n const day = String(date.getDate()).padStart(2, \"0\");\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const year = date.getFullYear();\n return `${day}/${month}/${year}`;\n };\n\n const handleToggleState = async () => {\n try {\n const payload = Data?.find((data) => data.id === selectedRole.id);\n await ToggleState(payload);\n showToast({\n message: `State succesfully changed from ${payload?.state === \"INACTIVE\" ? \"inactive\" : \"active\"} to ${payload?.state === \"INACTIVE\" ? \"active\" : \"inactive\"}`,\n type: \"success\",\n });\n let res;\n setIsLoading((cur) => !cur);\n if (includeInActive) {\n res = await getAllRoleList();\n } else {\n res = await getRoleList();\n }\n\n setData(res.data);\n setSelectedRole(res.data[0]);\n setIsLoading((cur) => !cur);\n } catch (error) {\n console.error(error);\n showToast({ message: \"Error in handle active\", type: \"error\" });\n setIsLoading((cur) => !cur);\n }\n };\n\n const sortedFilteredFeatures = Data\n ? Data.find((obj) => obj.id === selectedRole.id)\n ?.assignedFeatureList.filter((feature) =>\n feature.featureName\n ?.toLowerCase()\n .includes(searchQuery?.toLowerCase())\n )\n .sort((a, b) => a.featureName?.localeCompare(b.featureName))\n : [];\n\n const handleDeleteRoleFeature = async (feature) => {\n try {\n await deleteRoleFeature(feature.userMenuItemId);\n await getAllData(true);\n setSearchQuery(\"\");\n showToast({ message: \"Feature deleted successfully!\", type: \"success\" });\n } catch (error) {\n showToast({ message: error, type: \"error\" });\n }\n };\n\n const handleManageRoleModel = (index) => {\n setOpenManageRole(index);\n trackEvent(\"button_click\", {\n button_name: `${index === 1 ? \"add\" : \"edit\"} role modal button`,\n button_type: \"navigate\",\n button_id: `roles-${index === 1 ? \"add\" : \"edit\"}-button`,\n });\n };\n\n const isRoleListModified = () => {\n getAllData();\n setSearchText(\"\");\n };\n\n const handleOpen = async () => {\n try {\n setOpenModal(true);\n await trackEvent(\"button_click\", {\n button_name: \"add feature button\",\n button_type: \"navigate\",\n button_id: \"roles-addfeatures-button-add\",\n });\n } catch (error) {\n console.error(error);\n }\n };\n\n return GeneralUtil.isTecho && !isLoading && !rights?.[\"view.manage.role\"] ? (\n <Box className=\"flex justify-center items-center w-full h-[80vh]\">\n <Card\n className=\"h-80 w-150 flex justify-center items-center\"\n >\n <Typography variant=\"h5\" className=\"text-customBlue\">\n You dont have permission to view Roles\n </Typography>\n </Card>\n </Box>\n ) : (\n <RoleManagementSkeleton isLoading={isLoading}>\n <Box className=\"flex flex-col gap-4 p-4 min-[900px]:flex-row min-[900px]:h-[calc(100vh-80px)]\">\n <Card\n variant=\"outlined\"\n className=\"w-full min-[900px]:w-[300px] flex flex-col p-4\"\n >\n <div className=\"flex justify-between items-center mb-3\">\n <Typography\n variant=\"h6\"\n fontWeight={600}\n className=\"text-customBlue\"\n >\n User Roles\n </Typography>\n {(!GeneralUtil.isTecho || rights?.['create.manage.role']) && (\n <Button\n size=\"small\"\n variant=\"contained\"\n color=\"primary\"\n onClick={() => handleManageRoleModel(1)}\n data-testid=\"managerole-add-button\"\n >\n {translate(\"+ Add Role\")}\n </Button>\n )}\n </div>\n <TextField\n size=\"small\"\n variant=\"outlined\"\n placeholder=\"Search roles...\"\n fullWidth\n value={searchText}\n onChange={(e) => setSearchText(e.target.value)}\n data-testid=\"listofroles-search-input\"\n />\n <div className=\"flex items-center gap-2 mt-3\">\n <Switch\n size=\"small\"\n checked={includeInActive}\n onChange={handleCheckboxChange}\n />\n <Typography variant=\"body2\">Include Inactive</Typography>\n </div>\n <div className=\"flex-1 overflow-y-auto mt-4\">\n {filterData.length > 0 && (\n <>\n {filterData.map((role) => (\n <Card\n key={role.id}\n variant=\"outlined\"\n onClick={() => setSelectedRole(role)}\n className={`p-3 cursor-pointer transition\n ${selectedRole.id === role.id\n ? \"border-b-2\"\n : \"border-b-2 border-0\"\n }`}\n sx={\n selectedRole.id === role.id\n ? {\n bgcolor: (t) => alpha(t.palette.primary.main, 0.08),\n }\n : {}\n }\n >\n <Typography fontWeight={600}>\n {role.name}\n \n {role?.state === \"INACTIVE\" && (\n <Chip label=\"INACTIVE\" color=\"disabled\" size=\"small\" />\n )}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {role.assignedFeatureList.length} Features\n </Typography>\n </Card>\n ))}\n </>\n )}\n </div>\n </Card>\n <Card\n variant=\"outlined\"\n className=\"w-full min-[900px]:flex-1 flex flex-col p-5\"\n >\n <div className=\"flex flex-col sm:flex-row justify-between items-start border-b pb-4 gap-4\">\n <div className=\"flex flex-col gap-1 w-full sm:w-auto\">\n <div className=\"flex items-center gap-2\">\n <Typography\n variant=\"h5\"\n fontWeight={600}\n className=\"text-customBlue\"\n >\n {selectedRole?.name || \"Select Role\"}\n </Typography>\n {selectedRole?.state === \"ACTIVE\" && (\n <Chip label=\"ACTIVE\" color=\"success\" size=\"small\" />\n )}\n {selectedRole?.state === \"INACTIVE\" && (\n <Chip label=\"INACTIVE\" color=\"disabled\" size=\"small\" />\n )}\n </div>\n <Typography\n variant=\"body2\"\n color=\"text.secondary\"\n className=\"mt-1\"\n >\n Created on {formatDateDDMMYYYY(selectedRole?.createdOn)}\n </Typography>\n </div>\n <div className=\"flex gap-2\">\n {(!GeneralUtil.isTecho || rights?.['update.manage.role.toggleActive']) && (\n <Button\n variant=\"outlined\"\n size=\"small\"\n onClick={() => handleToggleState(1)}\n >\n {selectedRole?.state === \"ACTIVE\" ? \"Deactivate\" : \"Activate\"}\n </Button>\n )}\n {(!GeneralUtil.isTecho || rights?.['update.manage.role']) && (\n <Button\n variant=\"contained\"\n size=\"small\"\n onClick={() => handleManageRoleModel(2)}\n >\n ✏️ Edit Role\n </Button>\n )}\n </div>\n </div>\n {/* ASSIGNED FEATURES */}\n <div className=\"mt-5 flex flex-col flex-1 overflow-hidden\">\n <div className=\"flex flex-col sm:flex-row justify-between items-start sm:items-center mb-4 gap-4\">\n <div className=\"flex flex-row items-center gap-2 w-full sm:w-auto\">\n <Typography fontWeight={600}>{translate(\"Assigned Features\")}</Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n ({sortedFilteredFeatures.length} {translate(\"features active for this role\")})\n </Typography>\n </div>\n <TextField\n size=\"small\"\n sx={{ width: { xs: \"100%\", sm: \"60%\" } }}\n placeholder=\"Search Feature Name\"\n variant=\"outlined\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n data-testid=\"assignedfeatures-search-input\"\n />\n </div>\n <Box className=\"overflow-x-auto w-full\">\n <Box\n className=\"grid grid-cols-[minmax(340px,1.5fr)_120px] px-4 py-2 text-[15px] font-semibold border-b min-w-[500px]\"\n sx={{\n color: \"text.secondary\",\n bgcolor: (t) => alpha(t.palette.action.hover, 0.04),\n }}\n >\n <div>{translate(\"FEATURE NAME\")}</div>\n <div className=\"text-center\">{translate(\"ACTIONS\")}</div>\n </Box>\n <Box\n className=\"h-[calc(100vh-440px)] overflow-y-auto min-w-[500px]\"\n sx={{\n bgcolor: \"background.paper\",\n }}\n >\n {sortedFilteredFeatures.length > 0 && (\n <>\n {sortedFilteredFeatures.map((feature, index) => (\n <Box\n key={feature.id}\n className=\"grid grid-cols-[minmax(340px,1.5fr)_120px] px-4 py-3 items-center border-b last:border-b-0 transition\"\n sx={{\n \"&:hover\": {\n bgcolor: (t) => alpha(t.palette.action.hover, 0.04),\n },\n }}\n >\n <div className=\"flex flex-col\">\n <Typography sx={{ fontSize: \"13px\", fontWeight: 600 }}>\n {feature.featureName}\n </Typography>\n </div>\n <div className=\"flex justify-center\">\n {(!GeneralUtil.isTecho || rights?.['view.manage.role.unassignFeature']) && (\n <FontAwesomeIcon\n icon={faTrash}\n onClick={() => {\n handleDeleteRoleFeature(feature);\n }}\n color=\"error\"\n className=\"text-red-400 cursor-pointer\"\n data-testid={`assignedfeatures-delete-icon-${index}`}\n />\n )}\n </div>\n </Box>\n ))}\n </>\n )}\n {sortedFilteredFeatures.length === 0 && (\n <>\n <Typography\n className=\"p-4\"\n sx={{ fontSize: \"13px\", fontStyle: \"italic\" }}\n >\n No Features assigned yet!\n </Typography>\n </>\n )}\n </Box>\n </Box>\n </div>\n <Box\n className=\"border-t p-4\"\n sx={{\n bgcolor: (t) => alpha(t.palette.primary.main, 0.06),\n }}\n >\n {(!GeneralUtil.isTecho || rights?.['view.manage.role.assignFeature']) && (\n <Button variant=\"outlined\" size=\"small\" onClick={handleOpen}>\n + Add More Features\n </Button>\n )}\n </Box>\n </Card>\n <Suspense>\n <ManageRole\n isUpdate={openManageRole !== 1}\n selectedId={openManageRole === 2 ? selectedRole.id : null}\n data-testid=\"roles-managerole-add-button\"\n open={openManageRole}\n setOpen={setOpenManageRole}\n isRoleListModified={isRoleListModified}\n />\n </Suspense>\n <Suspense fallback={<div className=\"animate-pulse w-80 h-20 \"></div>}>\n {openModal === true && (\n <AddFeatures\n open={openModal}\n setOpenModal={setOpenModal}\n selectedId={selectedRole.id}\n setData={() => getAllData(true)}\n assignedFeatureList={\n Data\n ? (() =>\n Data?.find((data) => data?.id === selectedRole.id)\n ?.assignedFeatureList\n ? Data?.find((data) => data?.id === selectedRole.id)\n ?.assignedFeatureList\n : Data[0]?.assignedFeatureList)()\n : []\n }\n data-testid=\"roles-addfeatures-component\"\n />\n )}\n </Suspense>\n </Box>\n </RoleManagementSkeleton>\n );\n}\n"],"names":["getAllRoleList","api","deleteRoleFeature","id","implementationConfig","getRoleById","postRole","params","putRole","ToggleState","postNewFeature","RoleManagementSkeleton","children","isLoading","useSelector","getUseSkeleton","jsxs","jsx","PropTypes","AddFeatures","lazy","ManageRole","RoleManagement","translate","useTranslateProvider","Data","setData","useState","selectedRole","setSelectedRole","includeInActive","setincludeInActive","setIsLoading","openModal","setOpenModal","openManageRole","setOpenManageRole","searchText","setSearchText","searchQuery","setSearchQuery","rights","setRights","trackEvent","useTrackEvent","currentLoogedInUserRoleId","state","allowedRoleIds","setallowedRoleIds","getAllData","isPreserveRole","roleListPromise","getRoleList","data","userRoleIds","roleData","currRoleData","_a","filteredData","role","error","showToast","useEffect","featureJson","getAssignedFeatures","handleCheckboxChange","event","isChecked","cur","filterData","feature","formatDateDDMMYYYY","timestamp","date","day","month","year","handleToggleState","payload","res","sortedFilteredFeatures","obj","a","b","handleDeleteRoleFeature","handleManageRoleModel","index","isRoleListModified","handleOpen","GeneralUtil","Box","Card","Typography","Button","TextField","Switch","Fragment","t","alpha","Chip","FontAwesomeIcon","faTrash","Suspense","_b","_c"],"mappings":"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"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { jsxs as d, Fragment as q, jsx as a } from "react/jsx-runtime";
|
|
2
|
-
import { useTranslateProvider as
|
|
3
|
-
import { showToast as
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import { Dialog as
|
|
2
|
+
import { useTranslateProvider as R } from "@/common/languageTranslator/TranslationContext";
|
|
3
|
+
import { showToast as v } from "@/common/toaster/toaster";
|
|
4
|
+
import I from "@/hooks/useTrackEvent";
|
|
5
|
+
import O from "@/views/custom-components/CustomConfirmationModal";
|
|
6
|
+
import { Dialog as S, DialogTitle as D, DialogContent as F, TextField as A, DialogActions as B, Button as c } from "@mui/material";
|
|
7
7
|
import p from "prop-types";
|
|
8
|
-
import { useState as m, useCallback as
|
|
9
|
-
import
|
|
10
|
-
const
|
|
11
|
-
const [n, C] = m(""), [
|
|
8
|
+
import { useState as m, useCallback as M, useEffect as z } from "react";
|
|
9
|
+
import N from "@/common/config/implementationConfig";
|
|
10
|
+
const U = ({ configuredQuery: t, open: b, onClose: s }) => {
|
|
11
|
+
const [n, C] = m(""), [_, T] = m(!1), [E, r] = m(!1), x = I(), { translate: i } = R(), y = N.queryBuilder.showClickhouseOption, w = M(() => {
|
|
12
12
|
const o = t.query.includes("public");
|
|
13
13
|
T(o);
|
|
14
14
|
let e = `DELETE FROM QUERY_MASTER WHERE CODE='${t.code}';
|
|
@@ -23,41 +23,41 @@ VALUES (
|
|
|
23
23
|
`, e += t.description ? `'${t.description}',
|
|
24
24
|
` : `null,
|
|
25
25
|
`, e += t.returnsResultSet !== void 0 ? `${t.returnsResultSet}, ` : "false, ", e += t.state ? `'${t.state}', ` : "'ACTIVE', ", e += ` ${t == null ? void 0 : t.isMobileQuery},`, e += `${t == null ? void 0 : t.isPublic}`, y && (e += `,${t.isClickhouseQuery || !1}`), e += ");", C(e);
|
|
26
|
-
}, [t]),
|
|
26
|
+
}, [t]), $ = () => {
|
|
27
27
|
navigator.clipboard.writeText(n).then(() => {
|
|
28
|
-
|
|
28
|
+
v({ message: "Query Copied", type: "success" }), s();
|
|
29
29
|
});
|
|
30
|
-
},
|
|
31
|
-
|
|
32
|
-
},
|
|
33
|
-
const o = new Blob([n], { type: "text/plain" }), e = (o.size / 1024).toFixed(2),
|
|
34
|
-
l.href =
|
|
30
|
+
}, f = () => {
|
|
31
|
+
u(), r((o) => !o);
|
|
32
|
+
}, u = () => {
|
|
33
|
+
const o = new Blob([n], { type: "text/plain" }), e = (o.size / 1024).toFixed(2), h = URL.createObjectURL(o), l = document.createElement("a");
|
|
34
|
+
l.href = h, l.download = `V${(/* @__PURE__ */ new Date()).getTime()}__CHANGE_IN_${t.code}.sql`, document.body.appendChild(l), l.click(), x("file_download", {
|
|
35
35
|
file_type: "sql",
|
|
36
36
|
file_name: l.download,
|
|
37
37
|
file_size: `${e} KB`,
|
|
38
38
|
download_status: "success"
|
|
39
|
-
}), document.body.removeChild(l), URL.revokeObjectURL(
|
|
40
|
-
},
|
|
41
|
-
|
|
39
|
+
}), document.body.removeChild(l), URL.revokeObjectURL(h), s();
|
|
40
|
+
}, k = () => {
|
|
41
|
+
_ ? r((o) => !o) : u();
|
|
42
42
|
};
|
|
43
|
-
return
|
|
43
|
+
return z(() => {
|
|
44
44
|
t && w();
|
|
45
45
|
}, [t, w]), /* @__PURE__ */ d(q, { children: [
|
|
46
46
|
/* @__PURE__ */ a(
|
|
47
|
-
|
|
47
|
+
O,
|
|
48
48
|
{
|
|
49
49
|
description: "This Flyway contains keyword 'public'. Are you sure you want to download?",
|
|
50
50
|
title: "CONFIRM ACTION",
|
|
51
|
-
handleClick:
|
|
52
|
-
open:
|
|
51
|
+
handleClick: f,
|
|
52
|
+
open: E,
|
|
53
53
|
handleClose: () => r((o) => !o),
|
|
54
54
|
dataTestId: "showflywayquery-customconfirmationmodal"
|
|
55
55
|
}
|
|
56
56
|
),
|
|
57
|
-
/* @__PURE__ */ d(
|
|
58
|
-
/* @__PURE__ */ a(
|
|
59
|
-
/* @__PURE__ */ a(
|
|
60
|
-
|
|
57
|
+
/* @__PURE__ */ d(S, { open: b, onClose: s, fullWidth: !0, maxWidth: "md", children: [
|
|
58
|
+
/* @__PURE__ */ a(D, { className: "p-2.5 px-5 flex border-b font-medium text-lg", children: i("Flyway Query") }),
|
|
59
|
+
/* @__PURE__ */ a(F, { children: /* @__PURE__ */ a(
|
|
60
|
+
A,
|
|
61
61
|
{
|
|
62
62
|
multiline: !0,
|
|
63
63
|
rows: 10,
|
|
@@ -81,11 +81,11 @@ VALUES (
|
|
|
81
81
|
"data-testid": "showflywayquery-textfield"
|
|
82
82
|
}
|
|
83
83
|
) }),
|
|
84
|
-
/* @__PURE__ */ d(
|
|
84
|
+
/* @__PURE__ */ d(B, { children: [
|
|
85
85
|
/* @__PURE__ */ a(
|
|
86
86
|
c,
|
|
87
87
|
{
|
|
88
|
-
onClick:
|
|
88
|
+
onClick: k,
|
|
89
89
|
variant: "contained",
|
|
90
90
|
size: "small",
|
|
91
91
|
color: "primary",
|
|
@@ -96,7 +96,7 @@ VALUES (
|
|
|
96
96
|
/* @__PURE__ */ a(
|
|
97
97
|
c,
|
|
98
98
|
{
|
|
99
|
-
onClick:
|
|
99
|
+
onClick: $,
|
|
100
100
|
variant: "contained",
|
|
101
101
|
size: "small",
|
|
102
102
|
color: "primary",
|
|
@@ -119,12 +119,12 @@ VALUES (
|
|
|
119
119
|
] })
|
|
120
120
|
] });
|
|
121
121
|
};
|
|
122
|
-
|
|
122
|
+
U.propTypes = {
|
|
123
123
|
configuredQuery: p.any,
|
|
124
124
|
open: p.any,
|
|
125
125
|
onClose: p.any
|
|
126
126
|
};
|
|
127
127
|
export {
|
|
128
|
-
|
|
128
|
+
U as default
|
|
129
129
|
};
|
|
130
|
-
//# sourceMappingURL=ShowFlywayQuery-
|
|
130
|
+
//# sourceMappingURL=ShowFlywayQuery-tj42YQAS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShowFlywayQuery-tj42YQAS.js","sources":["../src/views/QueryBuilder/ShowFlywayQuery.jsx"],"sourcesContent":["import { useTranslateProvider } from '@/common/languageTranslator/TranslationContext';\nimport { showToast } from '@/common/toaster/toaster';\nimport useTrackEvent from '@/hooks/useTrackEvent';\nimport CustomConfirmationModal from '@/views/custom-components/CustomConfirmationModal';\nimport { Button, Dialog, DialogActions, DialogContent, DialogTitle, TextField } from '@mui/material';\nimport PropTypes from 'prop-types';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport implementationConfig from \"@/common/config/implementationConfig\";\n\n/**\n * A React functional component that displays a configured Flyway query.\n * @mdoule ShowFlywayQuery\n * @param {Object} props - Component properties.\n * @param {Object} props.configuredQuery - The query configuration object to display.\n * @param {boolean} props.open - Boolean flag indicating if the component should be visible.\n * @param {function} props.onClose - Callback function to close the component.\n */\n\nconst ShowFlywayQuery = ({ configuredQuery, open, onClose }) => {\n const [text, setText] = useState('');\n const [isPublicKeyword, setIsPublicKeyword] = useState(false);\n const [openConfirm, setOpenConfirm] = useState(false);\n const trackEvent = useTrackEvent();\n const { translate } = useTranslateProvider();\n const isClickhouseEnabledEnv = implementationConfig.queryBuilder.showClickhouseOption;\n\n /**\n *\n * Generates a SQL query string based on the `configuredQuery` object.\n * @function generateQueryText\n * @param {Object} configuredQuery - The query configuration object used to generate the SQL query.\n * @param {string} configuredQuery.code - The unique code for the query.\n * @param {string} configuredQuery.uuid - The unique identifier for the query.\n * @param {number} configuredQuery.createdBy - The ID of the user who created the query.\n * @param {string} [configuredQuery.params] - The parameters for the query.\n * @param {string} configuredQuery.query - The actual SQL query text.\n * @param {string} [configuredQuery.description] - A description of the query.\n * @param {boolean} [configuredQuery.returnsResultSet] - Flag indicating if the query returns a result set.\n * @param {string} [configuredQuery.state] - The state of the query (e.g., 'ACTIVE').\n * @returns {void}\n */\n\n const generateQueryText = useCallback(() => {\n const publicKeyword = configuredQuery.query.includes('public');\n setIsPublicKeyword(publicKeyword);\n\n let queryText = `DELETE FROM QUERY_MASTER WHERE CODE='${configuredQuery.code}';\\n\\n`;\n queryText += `INSERT INTO QUERY_MASTER (uuid, created_by, created_on, modified_by, modified_on, code, params, query, description, returns_result_set, state, is_mobile_query, is_public ${isClickhouseEnabledEnv ? ', is_clickhouse_query' : ''}) \\nVALUES ( \\n`;\n queryText += `'${configuredQuery.uuid}', ${configuredQuery.createdBy}, current_date, ${configuredQuery.createdBy}, current_date, `;\n queryText += `'${configuredQuery.code}', \\n`;\n\n queryText += configuredQuery.params ? `'${configuredQuery.params}', \\n` : 'null, \\n';\n queryText += `'${configuredQuery.query.replace(/'/g, \"''\")}', \\n`;\n queryText += configuredQuery.description ? `'${configuredQuery.description}', \\n` : 'null, \\n';\n queryText += configuredQuery.returnsResultSet !== undefined ? `${configuredQuery.returnsResultSet}, ` : 'false, ';\n queryText += configuredQuery.state ? `'${configuredQuery.state}', ` : `'ACTIVE', `;\n queryText += ` ${configuredQuery?.isMobileQuery},`;\n queryText += `${configuredQuery?.isPublic}`;\n if (isClickhouseEnabledEnv) queryText += `,${configuredQuery.isClickhouseQuery || false}`;\n queryText += ');';\n\n setText(queryText);\n }, [configuredQuery]);\n\n /**\n *\n * Copies the generated query text to the clipboard and displays a success message.\n * @function copyQuery\n * @returns {void}\n */\n\n const copyQuery = () => {\n navigator.clipboard.writeText(text).then(() => {\n showToast({ message: 'Query Copied', type: 'success' });\n onClose();\n });\n };\n\n /**\n * Triggers a download operation and toggles the confirmation dialog visibility.\n * The function assumes that `download` and `setOpenConfirm` are available in the current scope.\n * @function askForConfirmation\n * @returns {void}\n */\n\n const askForConfirmation = () => {\n download();\n setOpenConfirm((cur) => !cur);\n };\n\n /**\n * Creates and triggers a download of a text file containing the query text.\n *\n * @function download\n * @returns {void}\n */\n\n const download = () => {\n const blob = new Blob([text], { type: 'text/plain' });\n const blobSizeInKB = (blob.size / 1024).toFixed(2);\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = `V${new Date().getTime()}__CHANGE_IN_${configuredQuery.code}.sql`;\n document.body.appendChild(a);\n\n a.click();\n trackEvent('file_download', {\n file_type: 'sql',\n file_name: a.download,\n file_size: `${blobSizeInKB} KB`,\n download_status: 'success',\n });\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n onClose();\n };\n\n /**\n *\n * Handles the download process based on the presence of a public keyword in the query text.\n * @function handleDownload\n * @returns {void}\n */\n\n const handleDownload = () => {\n if (isPublicKeyword) {\n setOpenConfirm((cur) => !cur);\n } else {\n download();\n }\n };\n\n /**\n * `useEffect` Hook to Generate Query Text\n *\n * This effect hook is used to generate the SQL query text whenever the `configuredQuery` dependency changes.\n *\n * @function useEffect\n * @param {Object} configuredQuery - The query configuration object used to generate the SQL query text.\n * @param {function} generateQueryText - A function that generates the query text based on `configuredQuery`.\n */\n\n useEffect(() => {\n if (configuredQuery) {\n generateQueryText();\n }\n }, [configuredQuery, generateQueryText]);\n return (\n <>\n <CustomConfirmationModal\n description={\"This Flyway contains keyword 'public'. Are you sure you want to download?\"}\n title={'CONFIRM ACTION'}\n handleClick={askForConfirmation}\n open={openConfirm}\n handleClose={() => setOpenConfirm((cur) => !cur)}\n dataTestId=\"showflywayquery-customconfirmationmodal\"\n />\n <Dialog open={open} onClose={onClose} fullWidth maxWidth=\"md\">\n <DialogTitle className=\"p-2.5 px-5 flex border-b font-medium text-lg\">{translate('Flyway Query')}</DialogTitle>\n <DialogContent>\n <TextField\n multiline\n rows={10}\n variant=\"outlined\"\n fullWidth\n value={text}\n sx={{\n '& .MuiInputBase-input': {\n fontSize: '14px',\n },\n '& .MuiOutlinedInput-root': {\n // fontSize: '14px'\n borderRadius: '5px',\n },\n }}\n slotProps={{\n input: {\n readOnly: true,\n },\n }}\n data-testid=\"showflywayquery-textfield\"\n />\n </DialogContent>\n <DialogActions>\n <Button\n onClick={handleDownload}\n variant=\"contained\"\n size=\"small\"\n color=\"primary\"\n data-testid=\"showflywayquery-button-download\"\n >\n {translate('Download')}\n </Button>\n <Button\n onClick={copyQuery}\n variant=\"contained\"\n size=\"small\"\n color=\"primary\"\n data-testid=\"showflywayquery-button-copyquery\"\n >\n {translate('Copy Query')}\n </Button>\n <Button\n onClick={onClose}\n variant=\"contained\"\n color=\"secondary\"\n size=\"small\"\n data-testid=\"showflywayquery-button-cancel\"\n >\n {translate('Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n </>\n );\n};\n\nShowFlywayQuery.propTypes = {\n configuredQuery: PropTypes.any,\n open: PropTypes.any,\n onClose: PropTypes.any,\n};\n\nexport default ShowFlywayQuery;\n"],"names":["ShowFlywayQuery","configuredQuery","open","onClose","text","setText","useState","isPublicKeyword","setIsPublicKeyword","openConfirm","setOpenConfirm","trackEvent","useTrackEvent","translate","useTranslateProvider","isClickhouseEnabledEnv","implementationConfig","generateQueryText","useCallback","publicKeyword","queryText","copyQuery","showToast","askForConfirmation","download","cur","blob","blobSizeInKB","url","a","handleDownload","useEffect","jsxs","Fragment","jsx","CustomConfirmationModal","Dialog","DialogTitle","DialogContent","TextField","DialogActions","Button","PropTypes"],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ import o from "prop-types";
|
|
|
9
9
|
import { useNavigate as ce } from "react-router-dom";
|
|
10
10
|
import { FontAwesomeIcon as f } from "@fortawesome/react-fontawesome";
|
|
11
11
|
import { faArrowsRotate as de, faPen as ie, faFloppyDisk as ue } from "@fortawesome/free-solid-svg-icons";
|
|
12
|
-
import { S as me } from "./FeatureMenu-
|
|
12
|
+
import { S as me } from "./FeatureMenu-DUZL32RI.js";
|
|
13
13
|
import h from "@/common/services/util/GeneralUtil";
|
|
14
14
|
const pe = L(() => import("./FlywayQuery-Cx2sly6g.js")), ye = L(() => import("./ServerSyncModal-D_oFpv3C.js"));
|
|
15
15
|
function fe({
|
|
@@ -188,4 +188,4 @@ fe.propTypes = {
|
|
|
188
188
|
export {
|
|
189
189
|
fe as default
|
|
190
190
|
};
|
|
191
|
-
//# sourceMappingURL=SubMenu-
|
|
191
|
+
//# sourceMappingURL=SubMenu-CM_4wNCR.js.map
|