@piveau/piveau-hub-ui-modules 4.6.43 → 4.6.45
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/data-provider-interface/CatalogueMQA.vue.mjs +74 -74
- package/dist/data-provider-interface/CatalogueMQA.vue.mjs.map +1 -1
- package/dist/data-provider-interface/views/UserCataloguesPage.vue.mjs +5 -7
- package/dist/data-provider-interface/views/UserCataloguesPage.vue.mjs.map +1 -1
- package/dist/piveau-hub-ui-modules.css +1 -1
- package/dist/store/modules/authStore.d.ts +2 -0
- package/dist/store/modules/authStore.mjs +16 -13
- package/dist/store/modules/authStore.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1,62 +1,62 @@
|
|
|
1
|
-
import { computed as
|
|
2
|
-
import { useRouter as
|
|
1
|
+
import { computed as R, ref as u, getCurrentInstance as at, openBlock as r, createElementBlock as v, createElementVNode as l, createTextVNode as e, toDisplayString as i, unref as n, createCommentVNode as M, normalizeClass as k, Fragment as K, renderList as G, withDirectives as x, vModelText as N, isRef as H } from "vue";
|
|
2
|
+
import { useRouter as rt, useRoute as vt } from "vue-router";
|
|
3
3
|
import { useStore as dt, mapActions as pt } from "vuex";
|
|
4
4
|
import z from "axios";
|
|
5
5
|
import "./CatalogueMQA.vue2.mjs";
|
|
6
6
|
import mt from "../_virtual/_plugin-vue_export-helper.mjs";
|
|
7
|
-
const ft = { class: "container mb-3" }, bt = { class: "debug" }, gt = { key: 0 }, yt = { key: 1 }, kt = { key: 0 },
|
|
7
|
+
const ft = { class: "container mb-3" }, bt = { class: "debug" }, gt = { key: 0 }, yt = { key: 1 }, kt = { key: 0 }, wt = { class: "mqaWrapper" }, Ct = { key: 0 }, Mt = ["onUpdate:modelValue", "onInput"], $t = ["onClick"], St = ["onClick"], At = {
|
|
8
8
|
key: 0,
|
|
9
9
|
class: "errormsg"
|
|
10
|
-
},
|
|
10
|
+
}, It = { class: "d-flex mt-3" }, Dt = {
|
|
11
11
|
key: 1,
|
|
12
12
|
class: "errormsg"
|
|
13
|
-
}, Vt = { class: "mqaWrapper" }, Bt = { class: "d-flex mt-3" }, Ut = { class: "mr-3 my-3" }, qt = ["disabled", "onClick"],
|
|
13
|
+
}, Vt = { class: "mqaWrapper" }, Bt = { class: "d-flex mt-3" }, Ut = { class: "mr-3 my-3" }, qt = ["disabled", "onClick"], xt = { class: "my-3" }, Nt = ["disabled"], Wt = { class: "caretWrap" }, Et = { class: "mqaWrapper" }, Tt = { class: "w-50 mt-3" }, Pt = { class: "actionWrapper" }, Rt = {
|
|
14
14
|
__name: "CatalogueMQA",
|
|
15
15
|
setup(zt) {
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
const X =
|
|
16
|
+
const W = dt(), E = rt();
|
|
17
|
+
R(() => W.getters["auth/getUserDrafts"]);
|
|
18
|
+
const X = R(() => W.getters["auth/getUserData"]), B = R(() => X.value.rtpToken);
|
|
19
19
|
pt("auth", {
|
|
20
20
|
updateUserData: "updateUserData"
|
|
21
21
|
});
|
|
22
22
|
const F = (s) => {
|
|
23
|
-
|
|
23
|
+
W.dispatch("snackbar/showSnackbar", s);
|
|
24
24
|
}, U = () => {
|
|
25
25
|
F({
|
|
26
26
|
message: "Saved Successfully",
|
|
27
27
|
variant: "success"
|
|
28
28
|
});
|
|
29
29
|
}, Y = vt();
|
|
30
|
-
let y = u(!1), f = u(!1), Z = u(null), D = u("Activate"),
|
|
31
|
-
const q = Y.params.id, Q =
|
|
30
|
+
let y = u(!1), f = u(!1), Z = u(null), D = u("Activate"), T = u(!1), d = u(!1), b = u(), h = ["Mo", "Tue", "We", "Th", "Fr", "Sa", "Su"], p = u(1), A = u(!1), w = u(0), $ = u(""), g = u(""), S = u(null);
|
|
31
|
+
const q = Y.params.id, Q = at(), P = Q.appContext.app.config.globalProperties.$env.api.notificationBaseUrl;
|
|
32
32
|
Q.appContext.app.config.globalProperties.$env.api.apiKey;
|
|
33
33
|
const L = (s) => {
|
|
34
|
-
f.value && (
|
|
35
|
-
}, _ = () => {
|
|
36
|
-
f.value = !0, y.value = !1, $.value = g.value;
|
|
34
|
+
f.value && (S.value = s, g.value = S);
|
|
37
35
|
}, c = () => {
|
|
38
|
-
f.value = !
|
|
39
|
-
},
|
|
40
|
-
|
|
36
|
+
f.value = !0, y.value = !1, S.value = g.value;
|
|
37
|
+
}, _ = () => {
|
|
38
|
+
f.value = !1, y.value = !0, S.value = g.value;
|
|
39
|
+
}, C = u({}), j = (s) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(s);
|
|
40
|
+
let m = u({ mail: "", isValid: !0 }), I = u({});
|
|
41
41
|
const tt = async () => {
|
|
42
42
|
const s = {
|
|
43
43
|
method: "get",
|
|
44
|
-
url: `${
|
|
44
|
+
url: `${P}/catalogue/${q}/setting`,
|
|
45
45
|
headers: {
|
|
46
46
|
Authorization: `Bearer ${B.value}`
|
|
47
47
|
}
|
|
48
48
|
};
|
|
49
49
|
try {
|
|
50
50
|
const t = await z.request(s);
|
|
51
|
-
|
|
51
|
+
C.value = t.data, C.value.activeStatus === !0 && (d.value = !0, D.value = "Deactivate"), C.value.activeStatus === !1 && (d.value = !1, D.value = "Activate"), b.value = C.value.receiverEmailList, $.value = C.value.frequency.unit, g.value = C.value.frequency.value, w.value = C.value.threshold, $.value === "week" ? (f.value = !0, y.value = !1, S.value = g.value) : $.value === "month" && (f.value = !1, y.value = !0, p.value = g.value), console.log("Response:", t);
|
|
52
52
|
} catch (t) {
|
|
53
53
|
console.log("Full error:", t);
|
|
54
54
|
}
|
|
55
55
|
}, lt = async () => {
|
|
56
|
-
f.value === !0 ? (
|
|
56
|
+
f.value === !0 ? ($.value = "week", g.value = S.value) : y.value === !0 && ($.value = "month", g.value = p.value);
|
|
57
57
|
const s = {
|
|
58
58
|
method: "post",
|
|
59
|
-
url: `${
|
|
59
|
+
url: `${P}/catalogue/${q}/setting`,
|
|
60
60
|
headers: {
|
|
61
61
|
Authorization: `Bearer ${B.value}`,
|
|
62
62
|
"Content-Type": "application/json"
|
|
@@ -64,9 +64,9 @@ const ft = { class: "container mb-3" }, bt = { class: "debug" }, gt = { key: 0 }
|
|
|
64
64
|
withCredentials: !0,
|
|
65
65
|
data: JSON.stringify({
|
|
66
66
|
receiverEmailList: b.value,
|
|
67
|
-
threshold: Number(
|
|
67
|
+
threshold: Number(w.value),
|
|
68
68
|
frequency: {
|
|
69
|
-
unit:
|
|
69
|
+
unit: $.value,
|
|
70
70
|
value: g.value
|
|
71
71
|
},
|
|
72
72
|
activeStatus: !0
|
|
@@ -83,7 +83,7 @@ const ft = { class: "container mb-3" }, bt = { class: "debug" }, gt = { key: 0 }
|
|
|
83
83
|
const J = async () => {
|
|
84
84
|
const s = {
|
|
85
85
|
method: "post",
|
|
86
|
-
url: `${
|
|
86
|
+
url: `${P}/catalogue/${q}/setting`,
|
|
87
87
|
headers: {
|
|
88
88
|
Authorization: `Bearer ${B.value}`,
|
|
89
89
|
"Content-Type": "application/json"
|
|
@@ -100,17 +100,17 @@ const ft = { class: "container mb-3" }, bt = { class: "debug" }, gt = { key: 0 }
|
|
|
100
100
|
throw U(), console.log("Error updating settings:", t), t;
|
|
101
101
|
}
|
|
102
102
|
}, et = () => {
|
|
103
|
-
|
|
103
|
+
A.value = !0, F({
|
|
104
104
|
message: "Email added successfully.",
|
|
105
105
|
variant: "success"
|
|
106
106
|
});
|
|
107
107
|
}, nt = (s) => {
|
|
108
108
|
const t = b.value[s].trim();
|
|
109
|
-
j(t) ? (
|
|
109
|
+
j(t) ? (A.value = !1, delete I.value[s]) : I.value[s] = "*Invalid email format";
|
|
110
110
|
}, st = (s) => {
|
|
111
111
|
b.value.splice(s, 1);
|
|
112
112
|
}, O = (s) => {
|
|
113
|
-
s === "up" && p.value < 28 ? (p.value > 8 && (
|
|
113
|
+
s === "up" && p.value < 28 ? (p.value > 8 && (T.value = !0), p.value++) : p.value > 1 && (p.value < 11 && (T.value = !1), p.value--);
|
|
114
114
|
}, ot = () => {
|
|
115
115
|
if (m.value.mail.trim() === "") {
|
|
116
116
|
m.value.isValid = !1;
|
|
@@ -122,7 +122,7 @@ const ft = { class: "container mb-3" }, bt = { class: "debug" }, gt = { key: 0 }
|
|
|
122
122
|
}, it = () => {
|
|
123
123
|
E.push({ name: "DataProviderInterface-UserCatalogues" });
|
|
124
124
|
};
|
|
125
|
-
return (s, t) => (
|
|
125
|
+
return (s, t) => (r(), v("div", ft, [
|
|
126
126
|
l("div", null, [
|
|
127
127
|
l("div", null, [
|
|
128
128
|
l("div", bt, [
|
|
@@ -134,7 +134,7 @@ const ft = { class: "container mb-3" }, bt = { class: "debug" }, gt = { key: 0 }
|
|
|
134
134
|
l("textarea", null, " " + i(B.value) + " ", 1),
|
|
135
135
|
t[17] || (t[17] = e()),
|
|
136
136
|
t[18] || (t[18] = l("hr", null, null, -1)),
|
|
137
|
-
e(" " + i(
|
|
137
|
+
e(" " + i(C.value) + " ", 1),
|
|
138
138
|
t[19] || (t[19] = l("br", null, null, -1)),
|
|
139
139
|
t[20] || (t[20] = e(" --- ")),
|
|
140
140
|
t[21] || (t[21] = l("br", null, null, -1)),
|
|
@@ -155,7 +155,7 @@ const ft = { class: "container mb-3" }, bt = { class: "debug" }, gt = { key: 0 }
|
|
|
155
155
|
t[31] || (t[31] = e()),
|
|
156
156
|
t[32] || (t[32] = l("p", null, null, -1)),
|
|
157
157
|
e(`
|
|
158
|
-
unit: ` + i(n(
|
|
158
|
+
unit: ` + i(n($)) + " ", 1),
|
|
159
159
|
t[33] || (t[33] = l("br", null, null, -1)),
|
|
160
160
|
e(`
|
|
161
161
|
value: ` + i(n(g)) + " ", 1),
|
|
@@ -163,10 +163,10 @@ const ft = { class: "container mb-3" }, bt = { class: "debug" }, gt = { key: 0 }
|
|
|
163
163
|
t[35] || (t[35] = e("---")),
|
|
164
164
|
t[36] || (t[36] = l("br", null, null, -1)),
|
|
165
165
|
e(`
|
|
166
|
-
|
|
166
|
+
threshold: ` + i(n(w)), 1)
|
|
167
167
|
]),
|
|
168
168
|
t[43] || (t[43] = e()),
|
|
169
|
-
t[44] || (t[44] = l("h1", null, "MQA
|
|
169
|
+
t[44] || (t[44] = l("h1", null, "MQA notification settings", -1)),
|
|
170
170
|
t[45] || (t[45] = e()),
|
|
171
171
|
l("p", null, [
|
|
172
172
|
t[37] || (t[37] = e(`Configuration for
|
|
@@ -180,9 +180,9 @@ const ft = { class: "container mb-3" }, bt = { class: "debug" }, gt = { key: 0 }
|
|
|
180
180
|
t[40] || (t[40] = l("b", null, "MQA Rating Checks ", -1)),
|
|
181
181
|
t[41] || (t[41] = e("are currently ")),
|
|
182
182
|
l("b", null, [
|
|
183
|
-
n(d) ? M("", !0) : (
|
|
183
|
+
n(d) ? M("", !0) : (r(), v("span", gt, "deactivated")),
|
|
184
184
|
t[38] || (t[38] = e()),
|
|
185
|
-
n(d) ? (
|
|
185
|
+
n(d) ? (r(), v("span", yt, "activated")) : M("", !0)
|
|
186
186
|
]),
|
|
187
187
|
t[42] || (t[42] = e("."))
|
|
188
188
|
])
|
|
@@ -195,13 +195,13 @@ const ft = { class: "container mb-3" }, bt = { class: "debug" }, gt = { key: 0 }
|
|
|
195
195
|
}, i(n(D)), 3)
|
|
196
196
|
]),
|
|
197
197
|
t[87] || (t[87] = e()),
|
|
198
|
-
n(d) ? (
|
|
199
|
-
l("div",
|
|
198
|
+
n(d) ? (r(), v("div", kt, [
|
|
199
|
+
l("div", wt, [
|
|
200
200
|
t[55] || (t[55] = l("h3", null, "Recipients Mail", -1)),
|
|
201
201
|
t[56] || (t[56] = e()),
|
|
202
202
|
t[57] || (t[57] = l("span", null, "Add and edit mail addresses for recieving the MQA report", -1)),
|
|
203
203
|
t[58] || (t[58] = e()),
|
|
204
|
-
n(b).length
|
|
204
|
+
n(b).length !== 0 ? (r(), v("table", {
|
|
205
205
|
key: 0,
|
|
206
206
|
class: "mt-4",
|
|
207
207
|
ref_key: "mailButtonWrap",
|
|
@@ -211,51 +211,51 @@ const ft = { class: "container mb-3" }, bt = { class: "debug" }, gt = { key: 0 }
|
|
|
211
211
|
l("th", null, "Mail")
|
|
212
212
|
], -1)),
|
|
213
213
|
t[53] || (t[53] = e()),
|
|
214
|
-
(
|
|
214
|
+
(r(!0), v(K, null, G(n(b), (o, a) => (r(), v("tr", {
|
|
215
215
|
class: "mailItems",
|
|
216
|
-
key:
|
|
216
|
+
key: a
|
|
217
217
|
}, [
|
|
218
218
|
l("td", null, [
|
|
219
|
-
n(
|
|
219
|
+
n(A) ? M("", !0) : (r(), v("span", Ct, i(o), 1)),
|
|
220
220
|
t[49] || (t[49] = e()),
|
|
221
|
-
n(
|
|
221
|
+
n(A) ? x((r(), v("input", {
|
|
222
222
|
key: 1,
|
|
223
223
|
type: "text",
|
|
224
|
-
"onUpdate:modelValue": (V) => n(b)[
|
|
225
|
-
class: k(["mail-input", { invalidNewMail: n(
|
|
226
|
-
onInput: (V) => n(
|
|
224
|
+
"onUpdate:modelValue": (V) => n(b)[a] = V,
|
|
225
|
+
class: k(["mail-input", { invalidNewMail: n(I)[a] }]),
|
|
226
|
+
onInput: (V) => n(I)[a] = ""
|
|
227
227
|
}, null, 42, Mt)), [
|
|
228
|
-
[
|
|
228
|
+
[N, n(b)[a]]
|
|
229
229
|
]) : M("", !0),
|
|
230
230
|
t[50] || (t[50] = e()),
|
|
231
231
|
l("div", null, [
|
|
232
232
|
l("button", {
|
|
233
233
|
type: "button",
|
|
234
234
|
class: "btn btn-simple",
|
|
235
|
-
onClick: (V) => n(
|
|
236
|
-
}, i(n(
|
|
235
|
+
onClick: (V) => n(A) ? nt(a) : et()
|
|
236
|
+
}, i(n(A) ? "Save" : "Edit"), 9, $t),
|
|
237
237
|
t[48] || (t[48] = e()),
|
|
238
238
|
l("button", {
|
|
239
239
|
type: "button",
|
|
240
240
|
class: "btn btn-simple",
|
|
241
|
-
onClick: (V) => st(
|
|
242
|
-
}, "Delete", 8,
|
|
241
|
+
onClick: (V) => st(a)
|
|
242
|
+
}, "Delete", 8, St)
|
|
243
243
|
])
|
|
244
244
|
]),
|
|
245
245
|
t[51] || (t[51] = e()),
|
|
246
|
-
n(
|
|
246
|
+
n(I)[a] ? (r(), v("span", At, i(n(I)[a]), 1)) : M("", !0)
|
|
247
247
|
]))), 128))
|
|
248
248
|
], 512)) : M("", !0),
|
|
249
249
|
t[59] || (t[59] = e()),
|
|
250
|
-
l("div",
|
|
251
|
-
|
|
250
|
+
l("div", It, [
|
|
251
|
+
x(l("input", {
|
|
252
252
|
type: "text",
|
|
253
253
|
"onUpdate:modelValue": t[1] || (t[1] = (o) => n(m).mail = o),
|
|
254
254
|
onInput: t[2] || (t[2] = (o) => n(m).isValid = !0),
|
|
255
255
|
class: k([{ invalidNewMail: !n(m).isValid }, "mail"]),
|
|
256
256
|
placeholder: "Enter email address"
|
|
257
257
|
}, null, 34), [
|
|
258
|
-
[
|
|
258
|
+
[N, n(m).mail]
|
|
259
259
|
]),
|
|
260
260
|
t[54] || (t[54] = e()),
|
|
261
261
|
l("button", {
|
|
@@ -265,7 +265,7 @@ const ft = { class: "container mb-3" }, bt = { class: "debug" }, gt = { key: 0 }
|
|
|
265
265
|
}, "+ Add Mail")
|
|
266
266
|
]),
|
|
267
267
|
t[60] || (t[60] = e()),
|
|
268
|
-
n(m).isValid ? M("", !0) : (
|
|
268
|
+
n(m).isValid ? M("", !0) : (r(), v("span", Dt, "*Invalid email format"))
|
|
269
269
|
]),
|
|
270
270
|
t[84] || (t[84] = e()),
|
|
271
271
|
l("div", Vt, [
|
|
@@ -278,42 +278,42 @@ const ft = { class: "container mb-3" }, bt = { class: "debug" }, gt = { key: 0 }
|
|
|
278
278
|
l("button", {
|
|
279
279
|
type: "button",
|
|
280
280
|
class: k(["btn btn-simple", { activeChoiceButton: n(f) }]),
|
|
281
|
-
onClick: t[4] || (t[4] = (o) =>
|
|
281
|
+
onClick: t[4] || (t[4] = (o) => c())
|
|
282
282
|
}, "Weekly", 2),
|
|
283
283
|
t[61] || (t[61] = e()),
|
|
284
284
|
l("div", {
|
|
285
285
|
class: k(["weekdays", { blur: !n(f) }])
|
|
286
286
|
}, [
|
|
287
|
-
(
|
|
287
|
+
(r(!0), v(K, null, G(n(h), (o, a) => (r(), v("span", { key: a }, [
|
|
288
288
|
l("button", {
|
|
289
289
|
disabled: !n(f),
|
|
290
|
-
class: k(["dayButtons", { activeItem: n(
|
|
291
|
-
onClick: (V) => L(
|
|
290
|
+
class: k(["dayButtons", { activeItem: n(S) === a }]),
|
|
291
|
+
onClick: (V) => L(a)
|
|
292
292
|
}, i(o), 11, qt)
|
|
293
293
|
]))), 128))
|
|
294
294
|
], 2)
|
|
295
295
|
]),
|
|
296
296
|
t[69] || (t[69] = e()),
|
|
297
|
-
l("div",
|
|
297
|
+
l("div", xt, [
|
|
298
298
|
l("button", {
|
|
299
299
|
type: "button",
|
|
300
300
|
class: k([{ activeChoiceButton: n(y) }, "btn btn-simple"]),
|
|
301
|
-
onClick: t[5] || (t[5] = (o) =>
|
|
301
|
+
onClick: t[5] || (t[5] = (o) => _())
|
|
302
302
|
}, "Monthly", 2),
|
|
303
303
|
t[68] || (t[68] = e()),
|
|
304
304
|
l("div", {
|
|
305
305
|
class: k(["d-flex daypicker my-3", { blur: !n(y) }])
|
|
306
306
|
}, [
|
|
307
|
-
|
|
307
|
+
x(l("input", {
|
|
308
308
|
"onUpdate:modelValue": t[6] || (t[6] = (o) => H(p) ? p.value = o : p = o),
|
|
309
309
|
onInput: t[7] || (t[7] = (o) => L(s.index)),
|
|
310
|
-
class: k({ dynamicWidth: n(
|
|
310
|
+
class: k({ dynamicWidth: n(T) }),
|
|
311
311
|
disabled: !n(y)
|
|
312
|
-
}, null, 42,
|
|
313
|
-
[
|
|
312
|
+
}, null, 42, Nt), [
|
|
313
|
+
[N, n(p)]
|
|
314
314
|
]),
|
|
315
315
|
t[65] || (t[65] = e()),
|
|
316
|
-
l("div",
|
|
316
|
+
l("div", Wt, [
|
|
317
317
|
l("button", {
|
|
318
318
|
onClick: t[8] || (t[8] = (o) => O("up")),
|
|
319
319
|
class: "caretButtons ml-1"
|
|
@@ -354,11 +354,11 @@ const ft = { class: "container mb-3" }, bt = { class: "debug" }, gt = { key: 0 }
|
|
|
354
354
|
]),
|
|
355
355
|
t[85] || (t[85] = e()),
|
|
356
356
|
l("div", Et, [
|
|
357
|
-
t[79] || (t[79] = l("h3", null, "Notification
|
|
357
|
+
t[79] || (t[79] = l("h3", null, "Notification Threshold", -1)),
|
|
358
358
|
t[80] || (t[80] = e()),
|
|
359
|
-
t[81] || (t[81] = l("span", null, "
|
|
359
|
+
t[81] || (t[81] = l("span", null, "This slider sets a threshold value. A notification email will be sent when the measured value increases and the difference between the first and last measurement exceeds the set threshold.", -1)),
|
|
360
360
|
t[82] || (t[82] = e()),
|
|
361
|
-
l("div",
|
|
361
|
+
l("div", Tt, [
|
|
362
362
|
t[76] || (t[76] = l("div", { class: "d-flex justify-content-between" }, [
|
|
363
363
|
l("span", null, [
|
|
364
364
|
l("b", null, "0")
|
|
@@ -369,24 +369,24 @@ const ft = { class: "container mb-3" }, bt = { class: "debug" }, gt = { key: 0 }
|
|
|
369
369
|
])
|
|
370
370
|
], -1)),
|
|
371
371
|
t[77] || (t[77] = e()),
|
|
372
|
-
|
|
372
|
+
x(l("input", {
|
|
373
373
|
type: "range",
|
|
374
|
-
"onUpdate:modelValue": t[10] || (t[10] = (o) => H(
|
|
374
|
+
"onUpdate:modelValue": t[10] || (t[10] = (o) => H(w) ? w.value = o : w = o),
|
|
375
375
|
min: "0",
|
|
376
376
|
max: "400"
|
|
377
377
|
}, null, 512), [
|
|
378
|
-
[
|
|
378
|
+
[N, n(w)]
|
|
379
379
|
]),
|
|
380
380
|
t[78] || (t[78] = e()),
|
|
381
381
|
l("p", null, [
|
|
382
382
|
t[74] || (t[74] = e("Lower than ")),
|
|
383
|
-
l("b", null, i(n(
|
|
383
|
+
l("b", null, i(n(w)), 1),
|
|
384
384
|
t[75] || (t[75] = e(" Points"))
|
|
385
385
|
])
|
|
386
386
|
])
|
|
387
387
|
]),
|
|
388
388
|
t[86] || (t[86] = e()),
|
|
389
|
-
l("div",
|
|
389
|
+
l("div", Pt, [
|
|
390
390
|
l("button", {
|
|
391
391
|
type: "button",
|
|
392
392
|
class: "btn btn-primary",
|
|
@@ -402,7 +402,7 @@ const ft = { class: "container mb-3" }, bt = { class: "debug" }, gt = { key: 0 }
|
|
|
402
402
|
])) : M("", !0)
|
|
403
403
|
]));
|
|
404
404
|
}
|
|
405
|
-
}, Kt = /* @__PURE__ */ mt(
|
|
405
|
+
}, Kt = /* @__PURE__ */ mt(Rt, [["__scopeId", "data-v-0f58d176"]]);
|
|
406
406
|
export {
|
|
407
407
|
Kt as default
|
|
408
408
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CatalogueMQA.vue.mjs","sources":["../../lib/data-provider-interface/CatalogueMQA.vue"],"sourcesContent":["<template>\n <div class=\"container mb-3\">\n <div>\n <div>\n <div class=\"debug\">\n <strong> API object:</strong> <br><br>\n\n <textarea> {{ token }} </textarea>\n <hr>\n <!-- Disabled for PPE release (no backend on PPE yet)-->\n {{ notficationInfo }}\n\n <br> --- <br>\n\n {{ mailList }}\n\n <br>---<br>\n <strong>Fequency:</strong> <br>\n weekly: {{ weekly }}<br>\n monthly: {{ monthly }} <br>\n <p></p>\n unit: {{ frequencyUnit }} <br>\n value: {{ frequencyValue }}\n\n <br>---<br>\n treshold: {{ treshold }}\n\n </div>\n <h1>MQA Report Settings</h1>\n <p>Configuration for\n\n <strong>{{ catalogId }}</strong>\n <!-- <strong>Test Catalogue</strong> -->\n </p>\n <p>For this Catalogue the <b>MQA Rating Checks </b>are currently <b>\n <span v-if=\"!active\">deactivated</span>\n <span v-if=\"active\">activated</span></b>.</p>\n </div>\n\n <button type=\"button\" :class=\"{ 'btn btn-primary mb-5': !active, 'btn btn-secondary': active }\" @click=\"handleActivate()\">\n {{ activatedString }}\n </button>\n </div>\n \n <div v-if=\"active\">\n <div class=\"mqaWrapper\" >\n <h3>Recipients Mail</h3>\n <span>Add and edit mail addresses for recieving the MQA report</span>\n <table class=\"mt-4\" ref=\"mailButtonWrap\" v-if=\"mailList.length != 0\">\n <tr>\n <th>Mail</th>\n </tr>\n <tr v-for=\"(item, index) in mailList\" class=\"mailItems\" :key=\"index\">\n <td>\n <span v-if=\"!editMode\">{{ item }}</span>\n <input type=\"text\" v-model=\"mailList[index]\" class=\"mail-input\" v-if=\"editMode\"\n @input=\"editErrors[index] = ''\"\n :class=\"{ 'invalidNewMail': editErrors[index] }\" >\n \n <div>\n <button type=\"button\" class=\"btn btn-simple\"\n @click=\"editMode ? saveMail(index) : editMail(index)\">\n {{ editMode ? 'Save' : 'Edit' }}\n </button>\n <button type=\"button\" class=\"btn btn-simple\"\n @click=\"deleteMail(index)\">Delete</button>\n </div>\n </td>\n <span class=\"errormsg\" v-if=\"editErrors[index]\">{{ editErrors[index] }}</span>\n </tr>\n </table>\n <div class=\"d-flex mt-3\">\n <input type=\"text\" v-model=\"newMail.mail\" @input=\"newMail.isValid = true\"\n :class=\"{ 'invalidNewMail': !newMail.isValid }\" placeholder=\"Enter email address\"\n class=\"mail\">\n <button type=\"button\" class=\"btn btn-simple mx-3\" @click=\"addNewMail()\">+ Add Mail</button>\n </div>\n <span class=\"errormsg\" v-if=\"!newMail.isValid\">*Invalid email format</span>\n </div>\n <div class=\"mqaWrapper\">\n <h3>Frequency of Rating Checks</h3>\n <span>Configure the frequency of the MQA rating checks.</span>\n\n <div class=\"d-flex mt-3\">\n <div class=\"mr-3 my-3\">\n <button type=\"button\" class=\"btn btn-simple\" @click=\"setWeekly()\"\n :class=\"{ 'activeChoiceButton': weekly }\">Weekly</button>\n <div class=\"weekdays\" :class=\"{ 'blur': !weekly }\">\n <span v-for=\"(day, index) in week\" :key=\"index\">\n <button :disabled=\"!weekly\" class=\"dayButtons\"\n :class=\"{ 'activeItem': selectedDay === index }\" @click=\"selectDay(index)\">\n {{ day }}\n </button>\n </span>\n </div>\n </div>\n <div class=\"my-3\">\n <button type=\"button\" :class=\"{ 'activeChoiceButton': monthly }\" class=\"btn btn-simple\"\n @click=\"setMonthly()\">Monthly</button>\n <div class=\"d-flex daypicker my-3\" :class=\"{ 'blur': !monthly }\">\n <input v-model=\"daysInMonth\" @input=\"selectDay(index)\" :class=\"{ dynamicWidth: inputWidth }\"\n :disabled=\"!monthly\">\n <div class=\"caretWrap\">\n <button @click=\"editDate('up')\" class=\"caretButtons ml-1\"><svg\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"currentColor\"\n class=\"bi bi-caret-up-fill\" viewBox=\"0 0 16 16\">\n <path\n d=\"m7.247 4.86-4.796 5.481c-.566.647-.106 1.659.753 1.659h9.592a1 1 0 0 0 .753-1.659l-4.796-5.48a1 1 0 0 0-1.506 0z\" />\n </svg></button>\n <button @click=\"editDate()\" class=\"caretButtons mr-1\"><svg\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"currentColor\"\n class=\"bi bi-caret-down-fill\" viewBox=\"0 0 16 16\">\n <path\n d=\"M7.247 11.14 2.451 5.658C1.885 5.013 2.345 4 3.204 4h9.592a1 1 0 0 1 .753 1.659l-4.796 5.48a1 1 0 0 1-1.506 0z\" />\n </svg></button>\n </div>\n <span>day of the month</span> \n </div>\n </div>\n </div>\n </div>\n <div class=\"mqaWrapper\">\n <h3>Notification Treshold</h3>\n <span>Set the threshold for triggering the report.</span>\n <div class=\"w-50 mt-3\">\n <div class=\"d-flex justify-content-between\">\n <span><b>0</b></span>\n <span><b>400</b></span>\n </div>\n <input type=\"range\" v-model=\"treshold\" min=\"0\" max=\"400\" />\n <p>Lower than <b>{{ treshold }}</b> Points</p>\n </div>\n </div>\n <div class=\"actionWrapper\">\n <button type=\"button\" class=\"btn btn-primary\" @click=\"postNotificationSettings\">Save</button>\n <button type=\"button\" class=\"btn btn-cancel\" @click=\"back()\">Cancel</button>\n </div>\n </div>\n </div>\n\n</template>\n<script setup>\n\nimport { ref } from 'vue';\nimport { useRoute } from 'vue-router'\nimport { getCurrentInstance } from \"vue\";\nimport { useStore } from 'vuex';\nimport { useRouter } from 'vue-router';\nimport { mapActions } from 'vuex'\nimport { computed } from 'vue'\nimport { mapGetters } from 'vuex'\n\nimport axios from 'axios'\n\nconst store = useStore();\nconst router = useRouter();\nconst getUserDrafts = computed(() => store.getters['auth/getUserDrafts'])\nconst getUserData = computed(() => store.getters['auth/getUserData'])\nconst token = computed(() => getUserData.value.rtpToken)\n\n// Update the mapActions usage\nconst authActions = mapActions('auth', {\n updateUserData: 'updateUserData'\n})\n\n// Destructure the action\nconst { updateUserData } = authActions\n\nconst showSnackbar = (payload) => {\n store.dispatch('snackbar/showSnackbar', payload);\n};\n\nconst triggerSnackbar = () => {\n showSnackbar({\n message: 'Saved Successfully',\n variant: 'success',\n });\n };\n\n// Map the showSnackbar action from the snackbar module\n\nconst route = useRoute()\n\nlet monthly = ref(false)\nlet weekly = ref(false)\nlet mailButtonWrap = ref(null)\nlet activatedString = ref('Activate')\nlet inputWidth = ref(false)\nlet active = ref(false)\nlet mailList = ref()\nlet week = ['Mo', 'Tue', 'We', 'Th', 'Fr', 'Sa', 'Su']\nlet daysInMonth = ref(1)\nlet editMode = ref(false);\nlet treshold = ref(0);\nlet frequencyUnit = ref('');\nlet frequencyValue = ref('');\nlet selectedDay = ref(null);\nconst catalogId = route.params.id\nconst app = getCurrentInstance()\nconst notificationBaseUrl = app.appContext.app.config.globalProperties.$env.api.notificationBaseUrl\nconst apiKey = app.appContext.app.config.globalProperties.$env.api.apiKey\n\n\n\nconst selectDay = (index) => {\n if (weekly.value) {\n selectedDay.value = index;\n frequencyValue.value = selectedDay; // Update frequencyValue when a day is selected\n } \n};\n\nconst setWeekly = () => {\n weekly.value = true;\n monthly.value = false;\n selectedDay.value = frequencyValue.value; // Set the selected day based on frequencyValue\n};\n\nconst setMonthly = () => {\n weekly.value = false;\n monthly.value = true;\n selectedDay.value = frequencyValue.value; // Set the day of the month based on frequencyValue\n};\n\nconst notficationInfo = ref({})\n\nconst isValidEmail = (email) => {\n const regex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return regex.test(email);\n};\n\nlet newMail = ref({ mail: '', isValid: true });\nlet editErrors = ref({});\n\n// enabeld for PPE release (dummy data)\n// mailList.value = [{ 'mail': \"mail@mail2.com\" }, { 'mail': \"mail@mail1.com\" }]\n\nconst fetchNotificationInfo = async () => {\n const config = {\n method: 'get',\n url: `${notificationBaseUrl}/catalogue/${catalogId}/setting`,\n headers: {\n Authorization: `Bearer ${token.value}`,\n },\n }\n\n try {\n const response = await axios.request(config)\n notficationInfo.value = response.data\n\n if (notficationInfo.value.activeStatus === true) {\n active.value = true\n activatedString.value = 'Deactivate'\n } if (notficationInfo.value.activeStatus === false) {\n active.value = false\n activatedString.value = 'Activate'\n }\n\n mailList.value = notficationInfo.value.receiverEmailList\n frequencyUnit.value = notficationInfo.value.frequency.unit\n frequencyValue.value = notficationInfo.value.frequency.value\n treshold.value = notficationInfo.value.threshold\n\n if (frequencyUnit.value === 'week') {\n weekly.value = true\n monthly.value = false\n selectedDay.value = frequencyValue.value; // Set the selected day based on frequencyValue\n } else if (frequencyUnit.value === 'month') {\n weekly.value = false\n monthly.value = true\n daysInMonth.value = frequencyValue.value\n }\n\n console.log('Response:', response)\n } catch (error) {\n console.log('Full error:', error)\n }\n}\n\nconst postNotificationSettings = async () => {\n\n if (weekly.value === true) {\n frequencyUnit.value = \"week\"\n frequencyValue.value = selectedDay.value\n } else if (monthly.value === true) {\n frequencyUnit.value = \"month\"\n frequencyValue.value = daysInMonth.value\n }\n\n const config = {\n method: 'post',\n url: `${notificationBaseUrl}/catalogue/${catalogId}/setting`,\n headers: {\n Authorization: `Bearer ${token.value}`,\n 'Content-Type': 'application/json', \n },\n withCredentials: true,\n data: JSON.stringify({\n receiverEmailList: mailList.value,\n threshold: Number(treshold.value),\n frequency: {\n unit: frequencyUnit.value,\n value: frequencyValue.value\n },\n activeStatus: true\n })\n }\n\n try {\n const response = await axios.request(config)\n console.log('Settings updated:', response.data)\n triggerSnackbar();\n router.push({ name: 'DataProviderInterface-UserCatalogues' });\n return response.data\n \n } catch (error) {\n triggerSnackbar({\n message: 'Error updating settings.',\n variant: 'error',\n });\n\n console.log('Error updating settings:', error)\n \n throw error \n }\n}\n\nfetchNotificationInfo()\n\nconst postDeactive = async () => {\n\n const config = {\n method: 'post',\n url: `${notificationBaseUrl}/catalogue/${catalogId}/setting`,\n headers: {\n Authorization: `Bearer ${token.value}`,\n 'Content-Type': 'application/json', \n },\n withCredentials: true,\n data: JSON.stringify({\n activeStatus: active.value\n })\n }\n\n try {\n const response = await axios.request(config)\n console.log('Settings updated:', response.data)\n triggerSnackbar();\n if(!active.value) {router.push({ name: 'DataProviderInterface-UserCatalogues' });}\n return response.data\n \n\n } catch (error) {\n triggerSnackbar({\n message: 'Error updating settings.',\n variant: 'error',\n });\n\n console.log('Error updating settings:', error)\n \n throw error\n \n }\n}\n\nconst editMail = () => {\n editMode.value = true\n showSnackbar({\n message: 'Email added successfully.',\n variant: 'success',\n });\n}\n\nconst saveMail = (index) => {\n const email = mailList.value[index].trim();\n if (isValidEmail(email)) {\n editMode.value = false;\n delete editErrors.value[index];\n } else {\n editErrors.value[index] = '*Invalid email format';\n }\n};\n\nconst deleteMail = (index) => {\n mailList.value.splice(index, 1);\n}\n\nconst editDate = (count) => {\n if (count === \"up\" && daysInMonth.value < 28) {\n if (daysInMonth.value > 8) {\n inputWidth.value = true\n }\n daysInMonth.value++\n }\n else if (daysInMonth.value > 1) {\n if (daysInMonth.value < 11) {\n inputWidth.value = false\n }\n daysInMonth.value--\n }\n}\n\nconst addNewMail = () => {\n if (newMail.value.mail.trim() === '') {\n newMail.value.isValid = false;\n return;\n }\n if (isValidEmail(newMail.value.mail)) {\n mailList.value.push(newMail.value.mail);\n newMail.value.mail = ''; // Clear input after successful addition\n newMail.value.isValid = true;\n } else {\n newMail.value.isValid = false;\n }\n}\nconst handleActivate = () => {\n if (!active.value) {\n active.value = true\n activatedString.value = 'Deactivate'\n postDeactive()\n } else {\n active.value = false\n activatedString.value = 'Activate'\n postDeactive()\n }\n}\n\nconst back = () => {\n router.push({ name: 'DataProviderInterface-UserCatalogues' });\n}\n\n</script>\n<style scoped>\n.debug {\n position: fixed;\n right: 20px;\n top: 20px;\n border-radius: 20px;\n width: 400px;\n z-index: 999999;\n padding: 20px;\n background: rgba(255, 255, 255, 0.2);\n border-radius: 16px;\n box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1);\n backdrop-filter: blur(5px);\n -webkit-backdrop-filter: blur(5px);\n border: 1px solid rgba(255, 255, 255, 0.3);\n display: none; \n}\n\n.btn-simple {\n border-color: rgb(115, 115, 115);\n}\n\n.btn-cancel {\n border-color: transparent;\n}\n\n.mail {\n width: 270px;\n padding: 5px 5px 5px 10px;\n}\n\n\n.errormsg {\n color: red;\n font-size: 10px;\n}\n\n.activeChoiceButton {\n background-color: var(--primary);\n color: white;\n border-color: var(--primary);\n\n &:active {\n background-color: #3E6CD5 !important;\n }\n\n &:focus {\n outline: none;\n background-color: #3E6CD5;\n }\n\n &:focus-visible {\n outline: none;\n background-color: #3E6CD5;\n }\n}\n\n\n.invalid {\n border-bottom: 1px solid red !important;\n}\n\n.blur {\n opacity: 0.3;\n}\n\n.invalidNewMail {\n\n border-radius: 2px;\n border: 2px solid rgba(255, 0, 0, 0.336);\n\n &:focus {\n border-radius: 2px;\n box-shadow: 0 0 0 0.1rem rgba(255, 0, 0, 0.774);\n border: 1px solid rgba(255, 0, 0, 0.336);\n }\n\n &:focus-visible {\n outline: 0;\n border-radius: 2px;\n box-shadow: 0 0 0 0.1rem rgba(255, 0, 0, 0.774);\n border: 1px solid rgba(255, 0, 0, 0.336);\n }\n}\n\n.editable {\n transition: all 200ms ease-in-out;\n padding-left: 0.5rem;\n border-bottom: 2px solid var(--primary) !important;\n}\n\n.invalid {\n border-bottom: 1px solid red !important;\n}\n\n.caretButtons {\n all: unset;\n cursor: pointer;\n}\n\n.caretWrap {\n display: contents;\n\n}\n\n.actionWrapper {\n display: flex;\n flex-direction: row-reverse;\n margin-bottom: 100px;\n\n button {\n margin-left: 1rem;\n }\n}\n\ninput[type=\"range\"] {\n width: 100%;\n}\n\n.mqaWrapper {\n margin: 3rem 0;\n}\n\ntable {\n margin-top: 1rem;\n min-width: 50%;\n}\n\nth {\n border-bottom: 1px solid lightgray;\n}\n\ntd {\n display: flex;\n justify-content: space-between;\n padding: 15px 0 0 0cap;\n}\n\n.daypicker {\n padding: 1rem;\n border: 1px solid lightgray;\n border-radius: 15px;\n\n input {\n width: 25px;\n border: none;\n background-color: unset;\n font-weight: 700;\n }\n\n}\n\n.dynamicWidth {\n width: 22px !important;\n}\n\n.activeItem {\n background-color: var(--primary);\n color: white;\n}\n\n.weekdays {\n border: 1px solid lightgray;\n border-radius: 15px;\n margin: 1rem 0;\n overflow: hidden;\n\n .dayButtons {\n border: none;\n display: inline-block;\n text-align: center;\n flex-direction: row;\n min-width: 60px;\n padding: 1rem;\n border-right: 1px solid lightgray;\n cursor: pointer;\n\n &:focus-visible {\n outline: unset;\n background-color: #3E6CD5;\n color: white;\n }\n\n &:hover {\n background-color: #3E6CD5;\n color: white;\n }\n }\n\n span:last-child button {\n border: none;\n }\n}\n\n.mqaWrapper {\n padding: 1rem;\n background-color: #f3f6fc;\n border-radius: 3px;\n}\n\nbutton {\n background-color: unset;\n border: 1px solid var(--primary);\n color: black;\n\n &:hover {\n background-color: #3E6CD5;\n color: white;\n border: 1px solid #3E6CD5;\n }\n}\n\n.btn-primary {\n background-color: var(--primary);\n color: white;\n\n}\n\n.btn-secondary {\n color: #0e47cb;\n}\n\nbutton,\nspan {\n transition: all 100ms ease-in-out;\n}\n</style>"],"names":["store","useStore","router","useRouter","computed","getUserData","token","mapActions","showSnackbar","payload","triggerSnackbar","route","useRoute","monthly","ref","weekly","mailButtonWrap","activatedString","inputWidth","active","mailList","week","daysInMonth","editMode","treshold","frequencyUnit","frequencyValue","selectedDay","catalogId","app","getCurrentInstance","notificationBaseUrl","selectDay","index","setWeekly","setMonthly","notficationInfo","isValidEmail","email","newMail","editErrors","fetchNotificationInfo","config","response","axios","error","postNotificationSettings","postDeactive","editMail","saveMail","deleteMail","editDate","count","addNewMail","handleActivate","back"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CatalogueMQA.vue.mjs","sources":["../../lib/data-provider-interface/CatalogueMQA.vue"],"sourcesContent":["<template>\n <div class=\"container mb-3\">\n <div>\n <div>\n <div class=\"debug\">\n <strong> API object:</strong> <br><br>\n\n <textarea> {{ token }} </textarea>\n <hr>\n <!-- Disabled for PPE release (no backend on PPE yet)-->\n {{ notficationInfo }}\n\n <br> --- <br>\n\n {{ mailList }}\n\n <br>---<br>\n <strong>Fequency:</strong> <br>\n weekly: {{ weekly }}<br>\n monthly: {{ monthly }} <br>\n <p></p>\n unit: {{ frequencyUnit }} <br>\n value: {{ frequencyValue }}\n\n <br>---<br>\n threshold: {{ threshold }}\n\n </div>\n <h1>MQA notification settings</h1>\n <p>Configuration for\n\n <strong>{{ catalogId }}</strong>\n <!-- <strong>Test Catalogue</strong> -->\n </p>\n <p>For this Catalogue the <b>MQA Rating Checks </b>are currently <b>\n <span v-if=\"!active\">deactivated</span>\n <span v-if=\"active\">activated</span></b>.</p>\n </div>\n\n <button type=\"button\" :class=\"{ 'btn btn-primary mb-5': !active, 'btn btn-secondary': active }\" @click=\"handleActivate()\">\n {{ activatedString }}\n </button>\n </div>\n\n <div v-if=\"active\">\n <div class=\"mqaWrapper\" >\n <h3>Recipients Mail</h3>\n <span>Add and edit mail addresses for recieving the MQA report</span>\n <table class=\"mt-4\" ref=\"mailButtonWrap\" v-if=\"mailList.length !== 0\">\n <tr>\n <th>Mail</th>\n </tr>\n <tr v-for=\"(item, index) in mailList\" class=\"mailItems\" :key=\"index\">\n <td>\n <span v-if=\"!editMode\">{{ item }}</span>\n <input type=\"text\" v-model=\"mailList[index]\" class=\"mail-input\" v-if=\"editMode\"\n @input=\"editErrors[index] = ''\"\n :class=\"{ 'invalidNewMail': editErrors[index] }\" >\n\n <div>\n <button type=\"button\" class=\"btn btn-simple\"\n @click=\"editMode ? saveMail(index) : editMail(index)\">\n {{ editMode ? 'Save' : 'Edit' }}\n </button>\n <button type=\"button\" class=\"btn btn-simple\"\n @click=\"deleteMail(index)\">Delete</button>\n </div>\n </td>\n <span class=\"errormsg\" v-if=\"editErrors[index]\">{{ editErrors[index] }}</span>\n </tr>\n </table>\n <div class=\"d-flex mt-3\">\n <input type=\"text\" v-model=\"newMail.mail\" @input=\"newMail.isValid = true\"\n :class=\"{ 'invalidNewMail': !newMail.isValid }\" placeholder=\"Enter email address\"\n class=\"mail\">\n <button type=\"button\" class=\"btn btn-simple mx-3\" @click=\"addNewMail()\">+ Add Mail</button>\n </div>\n <span class=\"errormsg\" v-if=\"!newMail.isValid\">*Invalid email format</span>\n </div>\n <div class=\"mqaWrapper\">\n <h3>Frequency of Rating Checks</h3>\n <span>Configure the frequency of the MQA rating checks.</span>\n\n <div class=\"d-flex mt-3\">\n <div class=\"mr-3 my-3\">\n <button type=\"button\" class=\"btn btn-simple\" @click=\"setWeekly()\"\n :class=\"{ 'activeChoiceButton': weekly }\">Weekly</button>\n <div class=\"weekdays\" :class=\"{ 'blur': !weekly }\">\n <span v-for=\"(day, index) in week\" :key=\"index\">\n <button :disabled=\"!weekly\" class=\"dayButtons\"\n :class=\"{ 'activeItem': selectedDay === index }\" @click=\"selectDay(index)\">\n {{ day }}\n </button>\n </span>\n </div>\n </div>\n <div class=\"my-3\">\n <button type=\"button\" :class=\"{ 'activeChoiceButton': monthly }\" class=\"btn btn-simple\"\n @click=\"setMonthly()\">Monthly</button>\n <div class=\"d-flex daypicker my-3\" :class=\"{ 'blur': !monthly }\">\n <input v-model=\"daysInMonth\" @input=\"selectDay(index)\" :class=\"{ dynamicWidth: inputWidth }\"\n :disabled=\"!monthly\">\n <div class=\"caretWrap\">\n <button @click=\"editDate('up')\" class=\"caretButtons ml-1\"><svg\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"currentColor\"\n class=\"bi bi-caret-up-fill\" viewBox=\"0 0 16 16\">\n <path\n d=\"m7.247 4.86-4.796 5.481c-.566.647-.106 1.659.753 1.659h9.592a1 1 0 0 0 .753-1.659l-4.796-5.48a1 1 0 0 0-1.506 0z\" />\n </svg></button>\n <button @click=\"editDate()\" class=\"caretButtons mr-1\"><svg\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" fill=\"currentColor\"\n class=\"bi bi-caret-down-fill\" viewBox=\"0 0 16 16\">\n <path\n d=\"M7.247 11.14 2.451 5.658C1.885 5.013 2.345 4 3.204 4h9.592a1 1 0 0 1 .753 1.659l-4.796 5.48a1 1 0 0 1-1.506 0z\" />\n </svg></button>\n </div>\n <span>day of the month</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"mqaWrapper\">\n <h3>Notification Threshold</h3>\n <span>This slider sets a threshold value. A notification email will be sent when the measured value increases and the difference between the first and last measurement exceeds the set threshold.</span>\n <div class=\"w-50 mt-3\">\n <div class=\"d-flex justify-content-between\">\n <span><b>0</b></span>\n <span><b>400</b></span>\n </div>\n <input type=\"range\" v-model=\"threshold\" min=\"0\" max=\"400\" />\n <p>Lower than <b>{{ threshold }}</b> Points</p>\n </div>\n </div>\n <div class=\"actionWrapper\">\n <button type=\"button\" class=\"btn btn-primary\" @click=\"postNotificationSettings\">Save</button>\n <button type=\"button\" class=\"btn btn-cancel\" @click=\"back()\">Cancel</button>\n </div>\n </div>\n </div>\n\n</template>\n<script setup>\n\nimport { ref } from 'vue';\nimport { useRoute } from 'vue-router'\nimport { getCurrentInstance } from \"vue\";\nimport { useStore } from 'vuex';\nimport { useRouter } from 'vue-router';\nimport { mapActions } from 'vuex'\nimport { computed } from 'vue'\nimport { mapGetters } from 'vuex'\n\nimport axios from 'axios'\n\nconst store = useStore();\nconst router = useRouter();\nconst getUserDrafts = computed(() => store.getters['auth/getUserDrafts'])\nconst getUserData = computed(() => store.getters['auth/getUserData'])\nconst token = computed(() => getUserData.value.rtpToken)\n\n// Update the mapActions usage\nconst authActions = mapActions('auth', {\n updateUserData: 'updateUserData'\n})\n\n// Destructure the action\nconst { updateUserData } = authActions\n\nconst showSnackbar = (payload) => {\n store.dispatch('snackbar/showSnackbar', payload);\n};\n\nconst triggerSnackbar = () => {\n showSnackbar({\n message: 'Saved Successfully',\n variant: 'success',\n });\n };\n\n// Map the showSnackbar action from the snackbar module\n\nconst route = useRoute()\n\nlet monthly = ref(false)\nlet weekly = ref(false)\nlet mailButtonWrap = ref(null)\nlet activatedString = ref('Activate')\nlet inputWidth = ref(false)\nlet active = ref(false)\nlet mailList = ref()\nlet week = ['Mo', 'Tue', 'We', 'Th', 'Fr', 'Sa', 'Su']\nlet daysInMonth = ref(1)\nlet editMode = ref(false);\nlet threshold = ref(0);\nlet frequencyUnit = ref('');\nlet frequencyValue = ref('');\nlet selectedDay = ref(null);\nconst catalogId = route.params.id\nconst app = getCurrentInstance()\nconst notificationBaseUrl = app.appContext.app.config.globalProperties.$env.api.notificationBaseUrl\nconst apiKey = app.appContext.app.config.globalProperties.$env.api.apiKey\n\n\n\nconst selectDay = (index) => {\n if (weekly.value) {\n selectedDay.value = index;\n frequencyValue.value = selectedDay; // Update frequencyValue when a day is selected\n }\n};\n\nconst setWeekly = () => {\n weekly.value = true;\n monthly.value = false;\n selectedDay.value = frequencyValue.value; // Set the selected day based on frequencyValue\n};\n\nconst setMonthly = () => {\n weekly.value = false;\n monthly.value = true;\n selectedDay.value = frequencyValue.value; // Set the day of the month based on frequencyValue\n};\n\nconst notficationInfo = ref({})\n\nconst isValidEmail = (email) => {\n const regex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return regex.test(email);\n};\n\nlet newMail = ref({ mail: '', isValid: true });\nlet editErrors = ref({});\n\n// enabeld for PPE release (dummy data)\n// mailList.value = [{ 'mail': \"mail@mail2.com\" }, { 'mail': \"mail@mail1.com\" }]\n\nconst fetchNotificationInfo = async () => {\n const config = {\n method: 'get',\n url: `${notificationBaseUrl}/catalogue/${catalogId}/setting`,\n headers: {\n Authorization: `Bearer ${token.value}`,\n },\n }\n\n try {\n const response = await axios.request(config)\n notficationInfo.value = response.data\n\n if (notficationInfo.value.activeStatus === true) {\n active.value = true\n activatedString.value = 'Deactivate'\n } if (notficationInfo.value.activeStatus === false) {\n active.value = false\n activatedString.value = 'Activate'\n }\n\n mailList.value = notficationInfo.value.receiverEmailList\n frequencyUnit.value = notficationInfo.value.frequency.unit\n frequencyValue.value = notficationInfo.value.frequency.value\n threshold.value = notficationInfo.value.threshold\n\n if (frequencyUnit.value === 'week') {\n weekly.value = true\n monthly.value = false\n selectedDay.value = frequencyValue.value; // Set the selected day based on frequencyValue\n } else if (frequencyUnit.value === 'month') {\n weekly.value = false\n monthly.value = true\n daysInMonth.value = frequencyValue.value\n }\n\n console.log('Response:', response)\n } catch (error) {\n console.log('Full error:', error)\n }\n}\n\nconst postNotificationSettings = async () => {\n\n if (weekly.value === true) {\n frequencyUnit.value = \"week\"\n frequencyValue.value = selectedDay.value\n } else if (monthly.value === true) {\n frequencyUnit.value = \"month\"\n frequencyValue.value = daysInMonth.value\n }\n\n const config = {\n method: 'post',\n url: `${notificationBaseUrl}/catalogue/${catalogId}/setting`,\n headers: {\n Authorization: `Bearer ${token.value}`,\n 'Content-Type': 'application/json',\n },\n withCredentials: true,\n data: JSON.stringify({\n receiverEmailList: mailList.value,\n threshold: Number(threshold.value),\n frequency: {\n unit: frequencyUnit.value,\n value: frequencyValue.value\n },\n activeStatus: true\n })\n }\n\n try {\n const response = await axios.request(config)\n console.log('Settings updated:', response.data)\n triggerSnackbar();\n router.push({ name: 'DataProviderInterface-UserCatalogues' });\n return response.data\n\n } catch (error) {\n triggerSnackbar({\n message: 'Error updating settings.',\n variant: 'error',\n });\n\n console.log('Error updating settings:', error)\n\n throw error\n }\n}\n\nfetchNotificationInfo()\n\nconst postDeactive = async () => {\n\n const config = {\n method: 'post',\n url: `${notificationBaseUrl}/catalogue/${catalogId}/setting`,\n headers: {\n Authorization: `Bearer ${token.value}`,\n 'Content-Type': 'application/json',\n },\n withCredentials: true,\n data: JSON.stringify({\n activeStatus: active.value\n })\n }\n\n try {\n const response = await axios.request(config)\n console.log('Settings updated:', response.data)\n triggerSnackbar();\n if(!active.value) {router.push({ name: 'DataProviderInterface-UserCatalogues' });}\n return response.data\n\n\n } catch (error) {\n triggerSnackbar({\n message: 'Error updating settings.',\n variant: 'error',\n });\n\n console.log('Error updating settings:', error)\n\n throw error\n\n }\n}\n\nconst editMail = () => {\n editMode.value = true\n showSnackbar({\n message: 'Email added successfully.',\n variant: 'success',\n });\n}\n\nconst saveMail = (index) => {\n const email = mailList.value[index].trim();\n if (isValidEmail(email)) {\n editMode.value = false;\n delete editErrors.value[index];\n } else {\n editErrors.value[index] = '*Invalid email format';\n }\n};\n\nconst deleteMail = (index) => {\n mailList.value.splice(index, 1);\n}\n\nconst editDate = (count) => {\n if (count === \"up\" && daysInMonth.value < 28) {\n if (daysInMonth.value > 8) {\n inputWidth.value = true\n }\n daysInMonth.value++\n }\n else if (daysInMonth.value > 1) {\n if (daysInMonth.value < 11) {\n inputWidth.value = false\n }\n daysInMonth.value--\n }\n}\n\nconst addNewMail = () => {\n if (newMail.value.mail.trim() === '') {\n newMail.value.isValid = false;\n return;\n }\n if (isValidEmail(newMail.value.mail)) {\n mailList.value.push(newMail.value.mail);\n newMail.value.mail = ''; // Clear input after successful addition\n newMail.value.isValid = true;\n } else {\n newMail.value.isValid = false;\n }\n}\nconst handleActivate = () => {\n if (!active.value) {\n active.value = true\n activatedString.value = 'Deactivate'\n postDeactive()\n } else {\n active.value = false\n activatedString.value = 'Activate'\n postDeactive()\n }\n}\n\nconst back = () => {\n router.push({ name: 'DataProviderInterface-UserCatalogues' });\n}\n\n</script>\n<style scoped>\n.debug {\n position: fixed;\n right: 20px;\n top: 20px;\n border-radius: 20px;\n width: 400px;\n z-index: 999999;\n padding: 20px;\n background: rgba(255, 255, 255, 0.2);\n border-radius: 16px;\n box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1);\n backdrop-filter: blur(5px);\n -webkit-backdrop-filter: blur(5px);\n border: 1px solid rgba(255, 255, 255, 0.3);\n display: none;\n}\n\n.btn-simple {\n border-color: rgb(115, 115, 115);\n}\n\n.btn-cancel {\n border-color: transparent;\n}\n\n.mail {\n width: 270px;\n padding: 5px 5px 5px 10px;\n}\n\n\n.errormsg {\n color: red;\n font-size: 10px;\n}\n\n.activeChoiceButton {\n background-color: var(--primary);\n color: white;\n border-color: var(--primary);\n\n &:active {\n background-color: #3E6CD5 !important;\n }\n\n &:focus {\n outline: none;\n background-color: #3E6CD5;\n }\n\n &:focus-visible {\n outline: none;\n background-color: #3E6CD5;\n }\n}\n\n\n.invalid {\n border-bottom: 1px solid red !important;\n}\n\n.blur {\n opacity: 0.3;\n}\n\n.invalidNewMail {\n\n border-radius: 2px;\n border: 2px solid rgba(255, 0, 0, 0.336);\n\n &:focus {\n border-radius: 2px;\n box-shadow: 0 0 0 0.1rem rgba(255, 0, 0, 0.774);\n border: 1px solid rgba(255, 0, 0, 0.336);\n }\n\n &:focus-visible {\n outline: 0;\n border-radius: 2px;\n box-shadow: 0 0 0 0.1rem rgba(255, 0, 0, 0.774);\n border: 1px solid rgba(255, 0, 0, 0.336);\n }\n}\n\n.editable {\n transition: all 200ms ease-in-out;\n padding-left: 0.5rem;\n border-bottom: 2px solid var(--primary) !important;\n}\n\n.invalid {\n border-bottom: 1px solid red !important;\n}\n\n.caretButtons {\n all: unset;\n cursor: pointer;\n}\n\n.caretWrap {\n display: contents;\n\n}\n\n.actionWrapper {\n display: flex;\n flex-direction: row-reverse;\n margin-bottom: 100px;\n\n button {\n margin-left: 1rem;\n }\n}\n\ninput[type=\"range\"] {\n width: 100%;\n}\n\n.mqaWrapper {\n margin: 3rem 0;\n}\n\ntable {\n margin-top: 1rem;\n min-width: 50%;\n}\n\nth {\n border-bottom: 1px solid lightgray;\n}\n\ntd {\n display: flex;\n justify-content: space-between;\n padding: 15px 0 0 0cap;\n}\n\n.daypicker {\n padding: 1rem;\n border: 1px solid lightgray;\n border-radius: 15px;\n\n input {\n width: 25px;\n border: none;\n background-color: unset;\n font-weight: 700;\n }\n\n}\n\n.dynamicWidth {\n width: 22px !important;\n}\n\n.activeItem {\n background-color: var(--primary);\n color: white;\n}\n\n.weekdays {\n border: 1px solid lightgray;\n border-radius: 15px;\n margin: 1rem 0;\n overflow: hidden;\n\n .dayButtons {\n border: none;\n display: inline-block;\n text-align: center;\n flex-direction: row;\n min-width: 60px;\n padding: 1rem;\n border-right: 1px solid lightgray;\n cursor: pointer;\n\n &:focus-visible {\n outline: unset;\n background-color: #3E6CD5;\n color: white;\n }\n\n &:hover {\n background-color: #3E6CD5;\n color: white;\n }\n }\n\n span:last-child button {\n border: none;\n }\n}\n\n.mqaWrapper {\n padding: 1rem;\n background-color: #f3f6fc;\n border-radius: 3px;\n}\n\nbutton {\n background-color: unset;\n border: 1px solid var(--primary);\n color: black;\n\n &:hover {\n background-color: #3E6CD5;\n color: white;\n border: 1px solid #3E6CD5;\n }\n}\n\n.btn-primary {\n background-color: var(--primary);\n color: white;\n\n}\n\n.btn-secondary {\n color: #0e47cb;\n}\n\nbutton,\nspan {\n transition: all 100ms ease-in-out;\n}\n</style>\n"],"names":["store","useStore","router","useRouter","computed","getUserData","token","mapActions","showSnackbar","payload","triggerSnackbar","route","useRoute","monthly","ref","weekly","mailButtonWrap","activatedString","inputWidth","active","mailList","week","daysInMonth","editMode","threshold","frequencyUnit","frequencyValue","selectedDay","catalogId","app","getCurrentInstance","notificationBaseUrl","selectDay","index","setWeekly","setMonthly","notficationInfo","isValidEmail","email","newMail","editErrors","fetchNotificationInfo","config","response","axios","error","postNotificationSettings","postDeactive","editMail","saveMail","deleteMail","editDate","count","addNewMail","handleActivate","back"],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ import _ from "../../_virtual/_plugin-vue_export-helper.mjs";
|
|
|
9
9
|
const j = { class: "catOverview" }, x = { class: "d-flex flex-column bg-transparent container-fluid justify-content-between content" }, E = { class: "small-headline" }, Q = { class: "m-0" }, S = ["onClick"], V = {
|
|
10
10
|
__name: "UserCataloguesPage",
|
|
11
11
|
setup(B) {
|
|
12
|
-
const
|
|
12
|
+
const m = P(), p = U();
|
|
13
13
|
let f = h().appContext.app.config.globalProperties.$env;
|
|
14
14
|
const c = L();
|
|
15
15
|
let s = y([]), g = $(() => c.getters["auth/getUserCatalogIds"]), C = async () => {
|
|
@@ -21,10 +21,10 @@ const j = { class: "catOverview" }, x = { class: "d-flex flex-column bg-transpar
|
|
|
21
21
|
}), s.value = s.value.filter((t) => g.value.includes(t.id)).map((t) => ({ id: t.id, name: t.title }));
|
|
22
22
|
};
|
|
23
23
|
const v = (a) => {
|
|
24
|
-
|
|
24
|
+
m.push({
|
|
25
25
|
name: "DataProviderInterface-MQASettings",
|
|
26
26
|
params: { id: a.id },
|
|
27
|
-
query: { locale:
|
|
27
|
+
query: { locale: p.query.locale }
|
|
28
28
|
}).catch(() => {
|
|
29
29
|
});
|
|
30
30
|
};
|
|
@@ -68,16 +68,14 @@ const j = { class: "catOverview" }, x = { class: "d-flex flex-column bg-transpar
|
|
|
68
68
|
type: "button",
|
|
69
69
|
class: "btn btn-action",
|
|
70
70
|
onClick: (O) => v(n)
|
|
71
|
-
},
|
|
72
|
-
|
|
73
|
-
`, 8, S)
|
|
71
|
+
}, "Configure MQA notifications", 8, S)
|
|
74
72
|
])
|
|
75
73
|
]))), 128))
|
|
76
74
|
])
|
|
77
75
|
])
|
|
78
76
|
]));
|
|
79
77
|
}
|
|
80
|
-
}, W = /* @__PURE__ */ _(V, [["__scopeId", "data-v-
|
|
78
|
+
}, W = /* @__PURE__ */ _(V, [["__scopeId", "data-v-f18026de"]]);
|
|
81
79
|
export {
|
|
82
80
|
W as default
|
|
83
81
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserCataloguesPage.vue.mjs","sources":["../../../lib/data-provider-interface/views/UserCataloguesPage.vue"],"sourcesContent":["<script setup>\nimport { useStore } from 'vuex';\nimport { ref, computed, onMounted, } from 'vue';\nimport AppLink from \"../../widgets/AppLink.vue\";\nimport axios from 'axios'\nimport { useRouter, useRoute } from 'vue-router';\nimport { getCurrentInstance } from \"vue\";\n\nimport {\n has,\n isNil,\n} from 'lodash-es';\n\nconst router = useRouter();\nconst route = useRoute();\n\nlet env = getCurrentInstance().appContext.app.config.globalProperties.$env;\nconst store = useStore();\nlet filteredCatalogs = ref([])\nlet userCatIDList = computed(() => store.getters['auth/getUserCatalogIds'])\n\nlet filterCatList = async () => {\n let cache;\n await axios\n .get(env.api.baseUrl + 'search?filter=catalogue&limit=1000')\n .then(response => (cache = response))\n .catch((err) => {\n reject(err);\n });\n\n cache.data.result.results.forEach((e) => {\n if (has(e, 'title') && !isNil(e.title) && has(e, 'id') && !isNil(e.id)) filteredCatalogs.value.push({ title: Object.values(e.title)[0], id: e.id })\n });\n\n filteredCatalogs.value = filteredCatalogs.value\n .filter(item => userCatIDList.value.includes(item.id))\n .map(item => ({ id: item.id, name: item.title }));\n}\nconst handleMQA = (cat) => {\n\n router.push({\n name: 'DataProviderInterface-MQASettings',\n params: { id: cat.id },\n query: { locale: route.query.locale }\n }).catch(() => { });\n}\nconst handleEdit = () => {\n\n}\nonMounted(async () => {\n filterCatList()\n});\n</script>\n<template>\n <div class=\"catOverview\">\n <div class=\"d-flex flex-column bg-transparent container-fluid justify-content-between content \">\n <h1 class=\"small-headline\">{{ $t('message.dataupload.info.userCatalogues') }}</h1>\n <p class=\"m-0 \">{{ $t('message.dataupload.info.userCatDescription') }}</p>\n <!-- <div class=\"catWrap\">\n <div v-for=\"(catalog, index) in filteredCatalogs\" :key=\"index\" class=\"annifItems \">\n <app-link\n :to=\"{ name: 'CatalogueDetails', query: { locale: $route.query.locale }, params: { ctlg_id: catalog.id } }\">{{\n catalog.name }}</app-link>\n </div>\n <div v-if=\"filteredCatalogs.length === 0\" v-for=\"(catalog, index) in userCatIDList\" :key=\"index\"\n class=\"annifItems \">\n <app-link\n :to=\"{ name: 'CatalogueDetails', query: { locale: $route.query.locale }, params: { ctlg_id: catalog } }\">{{\n catalog }}</app-link>\n </div>\n </div> -->\n\n\n
|
|
1
|
+
{"version":3,"file":"UserCataloguesPage.vue.mjs","sources":["../../../lib/data-provider-interface/views/UserCataloguesPage.vue"],"sourcesContent":["<script setup>\nimport { useStore } from 'vuex';\nimport { ref, computed, onMounted, } from 'vue';\nimport AppLink from \"../../widgets/AppLink.vue\";\nimport axios from 'axios'\nimport { useRouter, useRoute } from 'vue-router';\nimport { getCurrentInstance } from \"vue\";\n\nimport {\n has,\n isNil,\n} from 'lodash-es';\n\nconst router = useRouter();\nconst route = useRoute();\n\nlet env = getCurrentInstance().appContext.app.config.globalProperties.$env;\nconst store = useStore();\nlet filteredCatalogs = ref([])\nlet userCatIDList = computed(() => store.getters['auth/getUserCatalogIds'])\n\nlet filterCatList = async () => {\n let cache;\n await axios\n .get(env.api.baseUrl + 'search?filter=catalogue&limit=1000')\n .then(response => (cache = response))\n .catch((err) => {\n reject(err);\n });\n\n cache.data.result.results.forEach((e) => {\n if (has(e, 'title') && !isNil(e.title) && has(e, 'id') && !isNil(e.id)) filteredCatalogs.value.push({ title: Object.values(e.title)[0], id: e.id })\n });\n\n filteredCatalogs.value = filteredCatalogs.value\n .filter(item => userCatIDList.value.includes(item.id))\n .map(item => ({ id: item.id, name: item.title }));\n}\nconst handleMQA = (cat) => {\n\n router.push({\n name: 'DataProviderInterface-MQASettings',\n params: { id: cat.id },\n query: { locale: route.query.locale }\n }).catch(() => { });\n}\nconst handleEdit = () => {\n\n}\nonMounted(async () => {\n filterCatList()\n});\n</script>\n<template>\n <div class=\"catOverview\">\n <div class=\"d-flex flex-column bg-transparent container-fluid justify-content-between content \">\n <h1 class=\"small-headline\">{{ $t('message.dataupload.info.userCatalogues') }}</h1>\n <p class=\"m-0 \">{{ $t('message.dataupload.info.userCatDescription') }}</p>\n <!-- <div class=\"catWrap\">\n <div v-for=\"(catalog, index) in filteredCatalogs\" :key=\"index\" class=\"annifItems \">\n <app-link\n :to=\"{ name: 'CatalogueDetails', query: { locale: $route.query.locale }, params: { ctlg_id: catalog.id } }\">{{\n catalog.name }}</app-link>\n </div>\n <div v-if=\"filteredCatalogs.length === 0\" v-for=\"(catalog, index) in userCatIDList\" :key=\"index\"\n class=\"annifItems \">\n <app-link\n :to=\"{ name: 'CatalogueDetails', query: { locale: $route.query.locale }, params: { ctlg_id: catalog } }\">{{\n catalog }}</app-link>\n </div>\n </div> -->\n\n\n\n\n\n\n\n <table>\n <thead>\n <tr>\n <th>{{ $t('message.metadata.catalog') }} - ID</th>\n <th>{{ $t('message.metadata.description') }}</th>\n <th>{{ $t('message.dataupload.menu.actions') }}</th>\n </tr>\n </thead>\n\n <tr v-for=\"(catalog, index) in filteredCatalogs\" :key=\"index\">\n <td>\n\n <app-link\n :to=\"{ name: 'CatalogueDetails', query: { locale: $route.query.locale }, params: { ctlg_id: catalog.id } }\">{{\n catalog.id }}</app-link>\n\n </td>\n <td>\n <span>{{ catalog.name }}</span>\n\n </td>\n <td>\n <!-- <button type=\"button\" class=\"btn btn-secondary\" @click=\"handleEdit(id, catalog)\">{{\n $t('message.metadata.linkedData') }}</button>\n <button type=\"button\" class=\"btn btn-secondary\" @click=\"handleEdit(id, catalog)\">{{\n $t('message.dataupload.menu.edit') }}</button> -->\n\n <button type=\"button\" class=\"btn btn-action\" @click=\"handleMQA(catalog)\">Configure MQA notifications</button>\n\n </td>\n </tr>\n\n\n\n </table>\n\n</div>\n </div>\n\n</template>\n<style scoped>\n\ntable {\nmargin-top: 50px !important;\nmargin-left: 0px !important;\n}\n.catOverview {\n min-height: 60vh;\n}\n\n.btn-action {\n border: solid 1px #3f3f3f;\n}\n\n.btn-action:hover {\n border: solid 1px #3f3f3f;\n background-color: #3f3f3f;\n color: #fff;\n}\n\n.catWrap {\n display: flex;\n flex-wrap: wrap;\n margin-top: 10px;\n padding-top: 10px;\n border-top: 1px solid lightgray;\n justify-content: space-between;\n}\n\n.catWrap .annifItems {\n background: #ECECEC;\n flex-grow: 1;\n text-align: center;\n}\n\n.subline {\n font-size: 12px;\n color: lightgray;\n\n}\n\n\nth,\ntd {\n padding: 1rem;\n\n}\n\ntr {\n padding: 1rem;\n border-bottom: 1px solid lightgray;\n}\n\nthead {\n border-bottom: 1px solid lightgray;\n}\n</style>\n"],"names":["router","useRouter","route","useRoute","env","getCurrentInstance","store","useStore","filteredCatalogs","ref","userCatIDList","computed","filterCatList","cache","axios","response","err","e","has","isNil","item","handleMQA","cat","onMounted"],"mappings":";;;;;;;;;;;AAaA,UAAMA,IAASC,EAAS,GAClBC,IAAQC,EAAQ;AAEtB,QAAIC,IAAMC,EAAkB,EAAG,WAAW,IAAI,OAAO,iBAAiB;AACtE,UAAMC,IAAQC,EAAQ;AACtB,QAAIC,IAAmBC,EAAI,EAAE,GACzBC,IAAgBC,EAAS,MAAML,EAAM,QAAQ,wBAAwB,CAAC,GAEtEM,IAAgB,YAAY;AAC9B,UAAIC;AACJ,YAAMC,EACH,IAAIV,EAAI,IAAI,UAAU,oCAAoC,EAC1D,KAAK,CAAAW,MAAaF,IAAQE,CAAS,EACnC,MAAM,CAACC,MAAQ;AACd,eAAOA,CAAG;AAAA,MAChB,CAAK,GAEHH,EAAM,KAAK,OAAO,QAAQ,QAAQ,CAACI,MAAM;AACvC,QAAIC,EAAID,GAAG,OAAO,KAAK,CAACE,EAAMF,EAAE,KAAK,KAAKC,EAAID,GAAG,IAAI,KAAK,CAACE,EAAMF,EAAE,EAAE,KAAGT,EAAiB,MAAM,KAAK,EAAE,OAAO,OAAO,OAAOS,EAAE,KAAK,EAAE,CAAC,GAAG,IAAIA,EAAE,GAAE,CAAE;AAAA,MACtJ,CAAG,GAEDT,EAAiB,QAAQA,EAAiB,MACvC,OAAO,CAAAY,MAAQV,EAAc,MAAM,SAASU,EAAK,EAAE,CAAC,EACpD,IAAI,CAAAA,OAAS,EAAE,IAAIA,EAAK,IAAI,MAAMA,EAAK,MAAO,EAAC;AAAA,IACpD;AACA,UAAMC,IAAY,CAACC,MAAQ;AAEzB,MAAAtB,EAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,QAAQ,EAAE,IAAIsB,EAAI,GAAI;AAAA,QACtB,OAAO,EAAE,QAAQpB,EAAM,MAAM,OAAO;AAAA,MACxC,CAAG,EAAE,MAAM,MAAM;AAAA,MAAA,CAAG;AAAA,IACpB;AAIA,WAAAqB,EAAU,YAAY;AACpB,MAAAX,EAAc;AAAA,IAChB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|