@feedmepos/mf-report 5.26.0 → 5.26.1-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. package/dist/{App-CQuu5Qh9.js → App-Cq967VA5.js} +60 -60
  2. package/dist/{DateRangeSelect.vue_vue_type_script_setup_true_lang-DIOs00I6.js → DateRangeSelect.vue_vue_type_script_setup_true_lang-B8ZGp45p.js} +1 -1
  3. package/dist/{Default.vue_vue_type_script_setup_true_lang-BCUt2m1j.js → Default.vue_vue_type_script_setup_true_lang-BBZHO2eu.js} +1 -1
  4. package/dist/{DynamicWidget.vue_vue_type_script_setup_true_lang-_PjzwK_1.js → DynamicWidget.vue_vue_type_script_setup_true_lang-AFf7ykZ0.js} +3 -3
  5. package/dist/{GlobalFilterSelect.vue_vue_type_script_setup_true_lang-C_BhUOiu.js → GlobalFilterSelect.vue_vue_type_script_setup_true_lang-WsX9TkYh.js} +1340 -1303
  6. package/dist/{InsightView-DU5nEtt-.js → InsightView-Cpk-nu3M.js} +4 -4
  7. package/dist/{Integration-zDSEzsXb.js → Integration-Cu5shP_-.js} +3 -3
  8. package/dist/{Integrations-BkCpKkwh.js → Integrations-D2Uu4mLJ.js} +2 -2
  9. package/dist/{Layout-D77m6Zv2.js → Layout-C7IPbeSX.js} +1 -1
  10. package/dist/{MenuTab.vue_vue_type_script_setup_true_lang-CwBBgpSs.js → MenuTab.vue_vue_type_script_setup_true_lang-BuxlwF3-.js} +4 -4
  11. package/dist/{NavigationTab.vue_vue_type_script_setup_true_lang-BAhz4G07.js → NavigationTab.vue_vue_type_script_setup_true_lang-th8FXOFu.js} +3 -3
  12. package/dist/{OverviewView-CXFRHSE6.js → OverviewView-BoVQoGGh.js} +4 -4
  13. package/dist/{Report-DF-35jde.js → Report-DH6uFjBL.js} +3 -3
  14. package/dist/ReportEditor-BXonwurv.js +1594 -0
  15. package/dist/{ReportView-B1ZAs4yf.js → ReportView-vry-wc-j.js} +6 -6
  16. package/dist/{Setting-meufQSiN.js → Setting-Bib_AXAQ.js} +3 -3
  17. package/dist/{Template-Cuw48oZu.js → Template-BvLRwy18.js} +3 -3
  18. package/dist/{TileEditor-CJ19iLga.js → TileEditor-DNY8bOEq.js} +5 -5
  19. package/dist/{TransitionFade-CRz0oSgy.js → TransitionFade-DrqfMLM2.js} +4 -4
  20. package/dist/{app-CBAx0gGV.js → app-BDQ3NF5t.js} +561 -525
  21. package/dist/app.js +1 -1
  22. package/dist/{useRestaurantPermission-DYQQYVie.js → useRestaurantPermission-ClcrTOv0.js} +1 -1
  23. package/package.json +1 -1
  24. package/dist/ReportEditor-D6jLHYOI.js +0 -1469
@@ -1,1469 +0,0 @@
1
- import { defineComponent as ye, mergeModels as ge, useModel as be, ref as R, computed as T, resolveComponent as h, createBlock as V, openBlock as s, withCtx as v, createElementVNode as g, createVNode as n, unref as o, normalizeClass as ke, createTextVNode as Ae, toDisplayString as G, createElementBlock as C, Fragment as Z, renderSlot as Ye, createCommentVNode as A, watch as fe, renderList as ce, resolveDynamicComponent as sl, isRef as Ze, normalizeStyle as He, onMounted as ul } from "vue";
2
- import { W as dl, g as ml, _ as cl, a as pl, i as vl, S as Ee, d as Ge, T as fl, b as gl } from "./TransitionFade-CRz0oSgy.js";
3
- import { C as ve, D as X, c as Ve, g as bl, u as el, a as yl, d as Ke, v as Te, b as Qe } from "./GlobalFilterSelect.vue_vue_type_script_setup_true_lang-C_BhUOiu.js";
4
- import { storeToRefs as Re } from "pinia";
5
- import { useRouter as ll, useRoute as tl } from "vue-router";
6
- import { useBreakpoints as Ie, useSnackbar as ol, FmButtonColorThemeVariant as xe } from "@feedmepos/ui-library";
7
- import { u as al } from "./message-dialog-UoMWOnil.js";
8
- import { u as Oe, a as hl } from "./vue-i18n-DVWuTfed.js";
9
- import { r as Se } from "./i18n-CI_sQ5d_.js";
10
- import { _ as Pe } from "./DynamicWidget.vue_vue_type_script_setup_true_lang-_PjzwK_1.js";
11
- import { a as Je, _ as Le } from "./SelectComponent.vue_vue_type_script_setup_true_lang-BL1jpiXN.js";
12
- import { useCoreStore as _l } from "@feedmepos/mf-common";
13
- const wl = /* @__PURE__ */ ye({
14
- __name: "WidgetDialog",
15
- props: /* @__PURE__ */ ge({
16
- isOpen: { type: Boolean }
17
- }, {
18
- modelValue: {},
19
- modelModifiers: {}
20
- }),
21
- emits: /* @__PURE__ */ ge(["update:isOpen"], ["update:modelValue"]),
22
- setup(D, { emit: r }) {
23
- const { t: a } = Oe(), { breakpoints: m } = Ie(), x = be(D, "modelValue"), f = D, S = r;
24
- function E() {
25
- S("update:isOpen", !1);
26
- }
27
- function w() {
28
- u.value && (x.value = u.value, u.value = void 0, S("update:isOpen", !1));
29
- }
30
- const u = R(), M = T(() => !u.value);
31
- return (Y, B) => {
32
- const P = h("FmButton"), _ = h("FmDialog");
33
- return s(), V(_, {
34
- "model-value": f.isOpen
35
- }, {
36
- "dialog-header": v(() => [
37
- Ae(G(o(a)("report.widget.type")), 1)
38
- ]),
39
- default: v(() => [
40
- n(dl, {
41
- modelValue: u.value,
42
- "onUpdate:modelValue": B[0] || (B[0] = (F) => u.value = F),
43
- class: ke(`grid ${o(m).lg || o(m).md ? "grid-cols-3 gap-3" : "grid-cols-2 gap-3"}`),
44
- "child-class": "p-[8px] flex flex-col"
45
- }, null, 8, ["modelValue", "class"])
46
- ]),
47
- "dialog-footer": v(() => [
48
- B[1] || (B[1] = g("div", { class: "grow" }, null, -1)),
49
- n(P, {
50
- label: o(a)("report.common.cancel"),
51
- variant: "tertiary",
52
- onClick: E
53
- }, null, 8, ["label"]),
54
- n(P, {
55
- label: o(a)("report.common.confirm"),
56
- disabled: M.value,
57
- onClick: w
58
- }, null, 8, ["label", "disabled"])
59
- ]),
60
- _: 1
61
- }, 8, ["model-value"]);
62
- };
63
- }
64
- }), Fl = { class: "fm-typo-en-body-lg-600" }, je = /* @__PURE__ */ ye({
65
- __name: "ReportEditorTabHeader",
66
- props: /* @__PURE__ */ ge({
67
- icon: {
68
- type: String,
69
- required: !0
70
- }
71
- }, {
72
- modelValue: { type: Boolean, required: !0, default: !1 },
73
- modelModifiers: {}
74
- }),
75
- emits: ["update:modelValue"],
76
- setup(D) {
77
- const { t: r } = Oe(), a = be(D, "modelValue"), m = D;
78
- return (x, f) => {
79
- const S = h("FmIcon");
80
- return s(), C("div", {
81
- class: "px-6 py-16 flex items-center gap-2 bg-fm-color-neutral-white border cursor-pointer",
82
- onClick: f[0] || (f[0] = (E) => a.value = !a.value)
83
- }, [
84
- g("p", Fl, G(o(r)("report.editor.customizeReport")), 1),
85
- f[1] || (f[1] = g("div", { class: "grow" }, null, -1)),
86
- n(S, {
87
- name: m.icon
88
- }, null, 8, ["name"])
89
- ]);
90
- };
91
- }
92
- }), Vl = /* @__PURE__ */ ye({
93
- __name: "ReportEditorTabDesktop",
94
- props: {
95
- modelValue: { required: !0, default: !1 },
96
- modelModifiers: {}
97
- },
98
- emits: ["update:modelValue"],
99
- setup(D) {
100
- const r = be(D, "modelValue");
101
- return (a, m) => (s(), C(Z, null, [
102
- n(je, {
103
- modelValue: r.value,
104
- "onUpdate:modelValue": m[0] || (m[0] = (x) => r.value = x),
105
- icon: "keyboard_double_arrow_left"
106
- }, null, 8, ["modelValue"]),
107
- Ye(a.$slots, "default")
108
- ], 64));
109
- }
110
- }), xl = /* @__PURE__ */ ye({
111
- __name: "ReportEditorTabMobile",
112
- props: {
113
- modelValue: { required: !0, default: !1 },
114
- modelModifiers: {}
115
- },
116
- emits: ["update:modelValue"],
117
- setup(D) {
118
- const r = be(D, "modelValue");
119
- return (a, m) => {
120
- const x = h("FmTopSheet"), f = h("FmCard");
121
- return s(), V(f, { class: "fixed bottom-0 w-full" }, {
122
- default: v(() => [
123
- n(je, {
124
- modelValue: r.value,
125
- "onUpdate:modelValue": m[0] || (m[0] = (S) => r.value = S),
126
- icon: "keyboard_double_arrow_up"
127
- }, null, 8, ["modelValue"]),
128
- n(x, {
129
- modelValue: r.value,
130
- "onUpdate:modelValue": m[2] || (m[2] = (S) => r.value = S),
131
- "fullscreen-size": "sm"
132
- }, {
133
- default: v(() => [
134
- n(je, {
135
- modelValue: r.value,
136
- "onUpdate:modelValue": m[1] || (m[1] = (S) => r.value = S),
137
- icon: "keyboard_double_arrow_down"
138
- }, null, 8, ["modelValue"]),
139
- r.value ? Ye(a.$slots, "default", { key: 0 }) : A("", !0)
140
- ]),
141
- _: 3
142
- }, 8, ["modelValue"])
143
- ]),
144
- _: 3
145
- });
146
- };
147
- }
148
- }), kl = {
149
- key: 2,
150
- class: "flex flex-col gap-3 mt-2 border border-neutral-300 p-3"
151
- }, Cl = { class: "grid grid-cols-1 gap-2 rounded-md border border-neutral-300 p-2 sm:grid-cols-[1.3fr_1fr_1fr_auto] sm:items-end" }, Tl = {
152
- key: 0,
153
- class: "flex justify-end sm:pb-[2px]"
154
- }, Sl = { class: "fm-typo-en-body-lg-600 text-fm-color-typo-primary" }, Ol = { class: "pl-1" }, $l = {
155
- key: 0,
156
- class: "flex justify-end sm:pb-[2px]"
157
- }, Nl = {
158
- key: 4,
159
- class: "flex flex-col gap-2"
160
- }, Ul = /* @__PURE__ */ ye({
161
- __name: "GlobalFilterDialog",
162
- props: /* @__PURE__ */ ge({
163
- schemas: {
164
- type: Array,
165
- default: () => []
166
- },
167
- tiles: {
168
- type: Array,
169
- required: !0
170
- }
171
- }, {
172
- globalFilter: {
173
- default: () => null
174
- },
175
- globalFilterModifiers: {},
176
- isOpen: { type: Boolean, default: () => !1, required: !0 },
177
- isOpenModifiers: {}
178
- }),
179
- emits: ["update:globalFilter", "update:isOpen"],
180
- setup(D) {
181
- const { t: r, te: a } = Oe(), m = be(D, "globalFilter"), x = be(D, "isOpen"), f = ol(), S = D, E = R(""), w = R(), u = R(), M = R(), Y = R([]), B = R([]), P = R(""), _ = R(!1), F = R(!1), O = R([]), $ = R([]), K = R(ve.Equal);
182
- function ee(e) {
183
- return JSON.parse(JSON.stringify(e));
184
- }
185
- function W(e, l) {
186
- return { hour: e, minute: l };
187
- }
188
- function p(e) {
189
- return e ? `${String(e.hour).padStart(2, "0")}:${String(e.minute).padStart(2, "0")}` : null;
190
- }
191
- function ie(e) {
192
- if (!e) return null;
193
- const [l, d] = e.split(":").map(Number);
194
- return Number.isNaN(l) || Number.isNaN(d) ? null : { hour: l, minute: d };
195
- }
196
- const le = T(() => u.value ? !(u.value.type === X.Timestamp && M.value === Ve.DateTime) : !1), Q = T(
197
- () => {
198
- var e;
199
- return ((e = u.value) == null ? void 0 : e.type) === X.Timestamp && M.value === Ve.TimeOfDay;
200
- }
201
- ), se = T(() => {
202
- var e;
203
- return (((e = u.value) == null ? void 0 : e.filterOperators) ?? []).filter((l) => l !== ve.And && l !== ve.Or).map((l) => ({
204
- label: r(`report.section.comparisonOperator.${l}`),
205
- value: l
206
- }));
207
- });
208
- function ae() {
209
- var l;
210
- const e = (l = se.value[0]) == null ? void 0 : l.value;
211
- return e || (u.value ? Ce(u.value.type, M.value ?? null) : ve.Equal);
212
- }
213
- function pe(e) {
214
- if (u.value)
215
- return bl({
216
- operator: e ?? ae(),
217
- dataType: u.value.type,
218
- dimensionOption: u.value.type === X.Timestamp ? M.value ?? null : null,
219
- t: r
220
- });
221
- }
222
- function N(e, l) {
223
- if (typeof (l == null ? void 0 : l.default) == "boolean" || e.length > 0 && e.every((b) => typeof b == "boolean")) {
224
- const b = e.reduce((k, z) => (typeof z == "boolean" && k.push(z), k), []);
225
- if (l)
226
- for (l.fixed && b.splice(l.count); b.length < l.count; )
227
- b.push(typeof l.default == "boolean" ? l.default : !1);
228
- return b;
229
- }
230
- const c = e.reduce((b, k) => (typeof k == "string" && b.push(k), b), []);
231
- if (l)
232
- for (l.fixed && c.splice(l.count); c.length < l.count; )
233
- c.push(typeof l.default == "string" ? l.default : "");
234
- return c;
235
- }
236
- function I(e = K.value) {
237
- const l = pe(e), d = N(
238
- l ? Array(l.count).fill(l.default) : [],
239
- l
240
- );
241
- return {
242
- label: "",
243
- operator: e,
244
- values: d
245
- };
246
- }
247
- function J() {
248
- return {
249
- name: "",
250
- startTime: W(0, 0),
251
- endTime: W(23, 59)
252
- };
253
- }
254
- function ue() {
255
- if (!(!le.value || !F.value)) {
256
- if (Q.value) {
257
- $.value.length === 0 && ($.value = [J()]);
258
- return;
259
- }
260
- O.value.length === 0 && (O.value = [I()]);
261
- }
262
- }
263
- function he() {
264
- var d, c, b;
265
- const e = ee(((d = m.value) == null ? void 0 : d.customOptions) ?? []), l = ee(((c = m.value) == null ? void 0 : c.customTimeRanges) ?? []);
266
- K.value = ((b = e[0]) == null ? void 0 : b.operator) ?? ae(), F.value = e.length > 0 || l.length > 0, O.value = e, $.value = l, ue();
267
- }
268
- function L(e) {
269
- K.value = e, O.value = O.value.map((l, d) => {
270
- const c = O.value[d];
271
- if (!c)
272
- return I(e);
273
- const b = pe(e), k = N(
274
- Array.isArray(c.values) ? [...c.values] : [],
275
- b
276
- );
277
- return {
278
- ...c,
279
- operator: e,
280
- values: k
281
- };
282
- });
283
- }
284
- function _e() {
285
- O.value = [...O.value, I()];
286
- }
287
- function te(e) {
288
- O.value.length <= 1 || (O.value = O.value.filter((l, d) => d !== e));
289
- }
290
- function $e() {
291
- $.value = [...$.value, J()];
292
- }
293
- function Ne(e) {
294
- $.value.length <= 1 || ($.value = $.value.filter(
295
- (l, d) => d !== e
296
- ));
297
- }
298
- function Ue(e, l, d) {
299
- const c = $.value[e];
300
- c && ($.value[e] = {
301
- ...c,
302
- [l]: ie(d)
303
- });
304
- }
305
- function We(e) {
306
- return e.length === 0 || e.some((l) => l == null || l === "");
307
- }
308
- function i() {
309
- if (!F.value) return !0;
310
- if (Q.value) {
311
- const d = $.value.map((b) => b.name.trim()).filter(Boolean);
312
- return $.value.some(
313
- (b) => !b.name.trim() || !b.startTime || !b.endTime
314
- ) ? (f.open({
315
- message: r("report.section.filter.invalidCustomTimeRange"),
316
- type: "error"
317
- }), !1) : new Set(d).size !== d.length ? (f.open({
318
- message: r("report.section.filter.customTimeRangeNamesMustBeUnique"),
319
- type: "error"
320
- }), !1) : !0;
321
- }
322
- const e = O.value.map((d) => d.label.trim()).filter(Boolean);
323
- return O.value.some(
324
- (d) => !d.label.trim() || We(d.values)
325
- ) ? (f.open({ message: r("report.section.filter.invalidCustomOption"), type: "error" }), !1) : new Set(e).size !== e.length ? (f.open({
326
- message: r("report.section.filter.customOptionLabelsMustBeUnique"),
327
- type: "error"
328
- }), !1) : !0;
329
- }
330
- fe(x, (e) => {
331
- var l, d, c, b, k, z, de;
332
- e && (E.value = ((l = m.value) == null ? void 0 : l.label) || "", w.value = S.schemas.find(
333
- (me) => {
334
- var H;
335
- return me.name === ((H = m.value) == null ? void 0 : H.schemaName);
336
- }
337
- ), u.value = (d = q.value.find(
338
- (me) => {
339
- var H;
340
- return me.value.name === ((H = m.value) == null ? void 0 : H.name);
341
- }
342
- )) == null ? void 0 : d.value, M.value = (c = m.value) == null ? void 0 : c.option, Y.value = ((b = m.value) == null ? void 0 : b.tileIds) || [], B.value = ((k = m.value) == null ? void 0 : k.filters) || [], _.value = !!((z = m.value) != null && z.dataFormula), P.value = ((de = m.value) == null ? void 0 : de.dataFormula) || "", he());
343
- }), fe(F, (e) => {
344
- var l;
345
- e && (K.value = ((l = O.value[0]) == null ? void 0 : l.operator) ?? ae(), ue());
346
- }), fe(le, (e) => {
347
- if (!e) {
348
- F.value = !1, O.value = [], $.value = [];
349
- return;
350
- }
351
- ue();
352
- }), fe(Q, () => {
353
- ue();
354
- }), fe(se, (e) => {
355
- var d;
356
- const l = (d = e[0]) == null ? void 0 : d.value;
357
- l && (e.some((c) => c.value === K.value) || L(l));
358
- });
359
- const t = T(
360
- () => S.schemas.map((e) => ({
361
- label: e.label || e.name,
362
- value: e
363
- }))
364
- ), q = T(() => {
365
- var e;
366
- return (((e = w.value) == null ? void 0 : e.fields) || []).filter((l) => l.type !== X.Numeric).map((l) => ({
367
- label: l.label || l.name,
368
- value: l
369
- }));
370
- }), U = T(() => {
371
- var e;
372
- return ((e = u.value) == null ? void 0 : e.type) !== X.Timestamp ? [] : ml(r);
373
- }), j = T(() => S.tiles.reduce((e, l, d) => {
374
- var k, z;
375
- const c = l.widget.config.schemaNames ?? [], b = (l.widget.config.joinDatasources ?? []).flatMap(
376
- (de) => de.schemaNames ?? []
377
- );
378
- return [...c, ...b].includes(((k = w.value) == null ? void 0 : k.name) || "") && e.push({
379
- label: (z = l == null ? void 0 : l.widget.title) != null && z.trim() ? l.widget.title : `Widget ${d + 1}`,
380
- value: l.id
381
- }), e;
382
- }, [])), ne = T(
383
- () => S.schemas.flatMap(
384
- (e) => (e.fields ?? []).map((l) => ({
385
- ...l,
386
- labels: [
387
- Se(r, a, e.label, "schema"),
388
- Se(r, a, l.label || l.name, "other")
389
- ]
390
- }))
391
- )
392
- );
393
- function we(e) {
394
- var l;
395
- e.name !== ((l = w.value) == null ? void 0 : l.name) && (w.value = e, u.value = void 0, K.value = ve.Equal, F.value = !1, O.value = [], $.value = []);
396
- }
397
- function Fe(e) {
398
- u.value = e, M.value = e.type === X.Timestamp ? Ve.DateTime : void 0, K.value = ae(), F.value = !1, O.value = [], $.value = [];
399
- }
400
- function Ce(e, l) {
401
- switch (e) {
402
- case X.Timestamp:
403
- return l === Ve.DateTime || l === Ve.TimeOfDay ? ve.Between : ve.Equal;
404
- case X.Bool:
405
- case X.String:
406
- case X.Numeric:
407
- return ve.Equal;
408
- default:
409
- throw new Error(`Unsupported data type: ${e}`);
410
- }
411
- }
412
- function De() {
413
- if (!w.value) {
414
- f.open({ message: r("report.section.filter.invalidSchema"), type: "error" });
415
- return;
416
- }
417
- if (!u.value) {
418
- f.open({ message: r("report.section.filter.invalidDimension"), type: "error" });
419
- return;
420
- }
421
- const e = B.value.filter((c) => c ? !t.value.some((k) => k.value.name === c.schemaName) : !0);
422
- if (e.length > 0) {
423
- const c = e.filter((k) => !!k).map((k) => k.schemaName), b = e.some((k) => !k) ? `, ${r("report.section.filter.unknownFilters")}` : "";
424
- f.open({
425
- message: r("report.section.filter.invalidFiltersSchemaNotFound", {
426
- schemas: c.join(", "),
427
- unknownFiltersSuffix: b
428
- }),
429
- type: "error"
430
- });
431
- return;
432
- }
433
- if (!i())
434
- return;
435
- const l = F.value && !Q.value ? O.value.map((c) => ({
436
- label: c.label.trim(),
437
- operator: c.operator ?? ae(),
438
- values: N(
439
- [...c.values],
440
- pe(c.operator)
441
- )
442
- })) : void 0, d = F.value && Q.value ? $.value.map((c) => ({
443
- name: c.name.trim(),
444
- startTime: c.startTime,
445
- endTime: c.endTime
446
- })) : void 0;
447
- m.value = {
448
- schemaName: w.value.name,
449
- name: u.value.name,
450
- label: E.value,
451
- operator: Ce(
452
- u.value.type,
453
- u.value.type === X.Timestamp ? M.value ?? Ve.DateTime : null
454
- ),
455
- option: u.value.type === X.Timestamp ? M.value : null,
456
- values: [],
457
- tileIds: [...Y.value],
458
- filters: ee(B.value),
459
- dataFormula: _.value ? P.value : void 0,
460
- customOptions: l,
461
- customTimeRanges: d
462
- }, x.value = !1;
463
- }
464
- function Me() {
465
- x.value = !1;
466
- }
467
- const qe = T(() => {
468
- var e;
469
- return [
470
- (e = w.value) == null ? void 0 : e.name,
471
- ...B.value.map((l) => l.schemaName)
472
- ];
473
- });
474
- function ze(e) {
475
- var k, z, de, me;
476
- const l = S.tiles.find((H) => H.id === e.value), d = ((z = (k = l == null ? void 0 : l.widget) == null ? void 0 : k.config) == null ? void 0 : z.schemaNames) ?? [], c = (((me = (de = l == null ? void 0 : l.widget) == null ? void 0 : de.config) == null ? void 0 : me.joinDatasources) ?? []).flatMap(
477
- (H) => H.schemaNames ?? []
478
- ), b = [...d, ...c];
479
- return qe.value.filter((H) => !!H).some((H) => !b.includes(H));
480
- }
481
- return (e, l) => {
482
- const d = h("FmTextField"), c = h("FmSelect"), b = h("FmCheckbox"), k = h("FmTimePicker"), z = h("FmButton"), de = h("FmTextarea"), me = h("FmLabel"), H = h("FmIcon"), nl = h("FmTooltip"), rl = h("FmForm"), il = h("FmDialog");
483
- return s(), V(il, {
484
- modelValue: x.value,
485
- "onUpdate:modelValue": l[11] || (l[11] = (Be) => x.value = Be),
486
- overlay: !0,
487
- "z-index": 10
488
- }, {
489
- "dialog-header": v(() => [
490
- Ae(G(o(r)("report.section.filter.globalFilter")), 1)
491
- ]),
492
- default: v(() => [
493
- n(rl, {
494
- ref: "form",
495
- class: "flex flex-col gap-2 w-[490px]"
496
- }, {
497
- default: v(() => {
498
- var Be;
499
- return [
500
- n(d, {
501
- modelValue: E.value,
502
- "onUpdate:modelValue": l[0] || (l[0] = (y) => E.value = y),
503
- placeholder: o(r)("report.section.filter.displayName"),
504
- label: o(r)("report.section.filter.displayName"),
505
- class: "mb-2"
506
- }, null, 8, ["modelValue", "placeholder", "label"]),
507
- n(Je, {
508
- "model-value": w.value,
509
- items: t.value,
510
- placeholder: o(r)("report.section.schema.title"),
511
- label: o(r)("report.section.schema.title"),
512
- "onUpdate:modelValue": l[1] || (l[1] = (y) => we(y))
513
- }, null, 8, ["model-value", "items", "placeholder", "label"]),
514
- n(Je, {
515
- "model-value": u.value,
516
- items: q.value,
517
- placeholder: o(r)("report.section.dimension.title"),
518
- label: o(r)("report.section.dimension.title"),
519
- "onUpdate:modelValue": l[2] || (l[2] = (y) => Fe(y))
520
- }, null, 8, ["model-value", "items", "placeholder", "label"]),
521
- ((Be = u.value) == null ? void 0 : Be.type) === o(X).Timestamp ? (s(), V(c, {
522
- key: 0,
523
- modelValue: M.value,
524
- "onUpdate:modelValue": l[3] || (l[3] = (y) => M.value = y),
525
- items: U.value,
526
- placeholder: o(r)("report.section.filter.timeFormatter"),
527
- label: o(r)("report.section.filter.timeFormatter")
528
- }, null, 8, ["modelValue", "items", "placeholder", "label"])) : A("", !0),
529
- le.value ? (s(), V(b, {
530
- key: 1,
531
- modelValue: F.value,
532
- "onUpdate:modelValue": l[4] || (l[4] = (y) => F.value = y),
533
- label: o(r)("report.section.filter.customOptions"),
534
- value: !0
535
- }, null, 8, ["modelValue", "label"])) : A("", !0),
536
- le.value && F.value ? (s(), C("div", kl, [
537
- Q.value ? (s(!0), C(Z, { key: 0 }, ce($.value, (y, re) => (s(), C("div", {
538
- key: `custom-time-range-${re}`,
539
- class: "flex flex-col gap-2"
540
- }, [
541
- g("div", Cl, [
542
- n(d, {
543
- modelValue: y.name,
544
- "onUpdate:modelValue": (oe) => y.name = oe,
545
- label: o(r)("report.section.filter.label")
546
- }, null, 8, ["modelValue", "onUpdate:modelValue", "label"]),
547
- n(k, {
548
- "model-value": p(y.startTime),
549
- label: o(r)("report.date.startingTime"),
550
- "onUpdate:modelValue": (oe) => Ue(re, "startTime", oe)
551
- }, null, 8, ["model-value", "label", "onUpdate:modelValue"]),
552
- n(k, {
553
- "model-value": p(y.endTime),
554
- label: o(r)("report.date.endingTime"),
555
- "onUpdate:modelValue": (oe) => Ue(re, "endTime", oe)
556
- }, null, 8, ["model-value", "label", "onUpdate:modelValue"]),
557
- $.value.length > 1 ? (s(), C("div", Tl, [
558
- n(z, {
559
- icon: "delete",
560
- variant: "tertiary",
561
- onClick: (oe) => Ne(re)
562
- }, null, 8, ["onClick"])
563
- ])) : A("", !0)
564
- ])
565
- ]))), 128)) : (s(), C(Z, { key: 1 }, [
566
- g("p", Sl, G(o(r)("report.section.filter.operator")), 1),
567
- se.value.length > 0 ? (s(), V(Je, {
568
- key: 0,
569
- "model-value": K.value,
570
- items: se.value,
571
- placeholder: o(r)("report.section.filter.operator"),
572
- "onUpdate:modelValue": l[5] || (l[5] = (y) => L(y))
573
- }, null, 8, ["model-value", "items", "placeholder"])) : A("", !0),
574
- (s(!0), C(Z, null, ce(O.value, (y, re) => (s(), C("div", {
575
- key: `custom-option-${re}`,
576
- class: "flex flex-col gap-2"
577
- }, [
578
- g("div", {
579
- class: ke([
580
- "grid grid-cols-1 gap-2 p-2 sm:items-end text-fm-color-typo-primary fm-typo-en-body-lg-600 border-neutral-300 rounded-md border",
581
- "sm:grid-cols-[1fr_1.6fr_auto]"
582
- ])
583
- }, [
584
- g("span", Ol, G(o(r)("report.section.filter.label")), 1),
585
- n(d, {
586
- modelValue: y.label,
587
- "onUpdate:modelValue": (oe) => y.label = oe
588
- }, null, 8, ["modelValue", "onUpdate:modelValue"]),
589
- (s(), V(cl, {
590
- key: `custom-option-value-${re}-${y.operator ?? ""}-${M.value ?? ""}`,
591
- modelValue: y.values,
592
- "onUpdate:modelValue": (oe) => y.values = oe,
593
- config: pe(y.operator),
594
- option: M.value
595
- }, null, 8, ["modelValue", "onUpdate:modelValue", "config", "option"])),
596
- O.value.length > 1 ? (s(), C("div", $l, [
597
- n(z, {
598
- icon: "delete",
599
- variant: "tertiary",
600
- onClick: (oe) => te(re)
601
- }, null, 8, ["onClick"])
602
- ])) : A("", !0)
603
- ])
604
- ]))), 128))
605
- ], 64)),
606
- n(z, {
607
- class: "w-full",
608
- variant: "primary",
609
- icon: "add",
610
- "icon-position": "prepend",
611
- onClick: l[6] || (l[6] = (y) => Q.value ? $e() : _e())
612
- })
613
- ])) : A("", !0),
614
- n(b, {
615
- modelValue: _.value,
616
- "onUpdate:modelValue": l[7] || (l[7] = (y) => _.value = y),
617
- label: o(r)("report.section.filter.advance"),
618
- value: !0
619
- }, null, 8, ["modelValue", "label"]),
620
- _.value ? (s(), V(de, {
621
- key: 3,
622
- modelValue: P.value,
623
- "onUpdate:modelValue": l[8] || (l[8] = (y) => P.value = y),
624
- placeholder: o(r)("report.section.filter.dataFormula")
625
- }, null, 8, ["modelValue", "placeholder"])) : A("", !0),
626
- n(pl, {
627
- modelValue: B.value,
628
- "onUpdate:modelValue": l[9] || (l[9] = (y) => B.value = y),
629
- options: ne.value
630
- }, null, 8, ["modelValue", "options"]),
631
- n(me, { class: "mt-2 fm-typo-en-body-lg-600" }, {
632
- default: v(() => [
633
- Ae(G(o(r)("report.section.filter.applyWidget")), 1)
634
- ]),
635
- _: 1
636
- }),
637
- D.tiles.length > 0 ? (s(), C("div", Nl, [
638
- (s(!0), C(Z, null, ce(j.value, (y) => (s(), C("div", {
639
- key: y.value,
640
- class: "flex items-center"
641
- }, [
642
- n(b, {
643
- modelValue: Y.value,
644
- "onUpdate:modelValue": l[10] || (l[10] = (re) => Y.value = re),
645
- label: y.label,
646
- value: y.value
647
- }, null, 8, ["modelValue", "label", "value"]),
648
- ze(y) ? (s(), V(nl, {
649
- key: 0,
650
- content: o(r)("report.section.filter.missingFilterSchema"),
651
- "z-index": 99,
652
- class: "ml-2"
653
- }, {
654
- default: v(() => [
655
- n(H, {
656
- name: "warning",
657
- class: "text-fm-color-system-error-300"
658
- })
659
- ]),
660
- _: 1
661
- }, 8, ["content"])) : A("", !0)
662
- ]))), 128))
663
- ])) : (s(), V(me, {
664
- key: 5,
665
- class: "fm-typo-en-body-lg-400",
666
- label: o(r)("report.section.filter.noWidget")
667
- }, null, 8, ["label"]))
668
- ];
669
- }),
670
- _: 1
671
- }, 512)
672
- ]),
673
- "dialog-footer": v(() => [
674
- l[12] || (l[12] = g("div", { class: "grow" }, null, -1)),
675
- n(z, {
676
- label: o(r)("report.common.cancel"),
677
- variant: "tertiary",
678
- onClick: Me
679
- }, null, 8, ["label"]),
680
- n(z, {
681
- label: o(r)("report.common.confirm"),
682
- onClick: De
683
- }, null, 8, ["label"])
684
- ]),
685
- _: 1
686
- }, 8, ["modelValue"]);
687
- };
688
- }
689
- }), Dl = { class: "flex flex-col gap-24 top-0 bg-fm-color-neutral-white z-10" }, Ml = { class: "flex flex-col gap-24 top-0 bg-fm-color-neutral-white z-10" }, ql = { class: "flex items-center gap-8" }, Bl = { class: "flex flex-col gap-24 top-0 bg-fm-color-neutral-white z-10" }, Rl = { class: "flex items-center gap-1 max-w-[195px] w-[195px]" }, Il = { class: "line-clamp-2 overflow-hidden max-w-[195px] w-[195px]" }, Wl = { class: "flex flex-col gap-24" }, zl = { class: "line-clamp-2 overflow-hidden max-w-[195px] w-[195px]" }, Xe = /* @__PURE__ */ ye({
690
- __name: "ReportEditorTab",
691
- props: /* @__PURE__ */ ge({
692
- hideConfiguration: {
693
- type: Boolean,
694
- default: !1
695
- }
696
- }, {
697
- modelValue: { required: !0 },
698
- modelModifiers: {}
699
- }),
700
- emits: /* @__PURE__ */ ge(["hideConfiguration"], ["update:modelValue"]),
701
- setup(D, { emit: r }) {
702
- const a = be(D, "modelValue"), { breakpoints: m } = Ie(), x = D, f = r, S = ll(), E = tl(), w = R(), {
703
- currentSelectWidgetType: u,
704
- categories: M,
705
- editingTile: Y,
706
- editingTileIndex: B,
707
- editingGlobalFilter: P,
708
- editingGlobalFilterIndex: _
709
- } = Re(el()), { schemas: F } = Re(yl()), { globalFilters: O } = Re(Ke()), { getGlobalFilterLabel: $ } = Ke(), { promptMessage: K } = al(), ee = R(!1), W = R(!1), { t: p, te: ie, locale: le } = Oe(), Q = R(void 0), se = T(() => {
710
- const i = a.value.tiles.flatMap((t) => {
711
- var j;
712
- const q = t.widget.config.schemaNames ?? [], U = ((j = t.widget.config.joinDatasources) == null ? void 0 : j.flatMap((ne) => ne.schemaNames ?? [])) ?? [];
713
- return [...q, ...U];
714
- });
715
- return [...new Set(i)].reduce((t, q) => {
716
- const U = F.value.find((j) => j.name === q);
717
- return U && t.push(U), t;
718
- }, []);
719
- });
720
- function ae(i) {
721
- if (!i) return "";
722
- const t = `report.widget.types.${i.toLowerCase()}`;
723
- return ie(t) ? p(t) : Se(p, ie, i, "other");
724
- }
725
- fe(
726
- () => u.value,
727
- () => {
728
- u.value !== void 0 && (Q.value = vl(u.value), Y.value = Q.value, B.value = -1, S.push({
729
- name: "tileEditor",
730
- query: E.query
731
- }));
732
- },
733
- { immediate: !0 }
734
- ), fe(
735
- () => a.value.tiles,
736
- (i) => {
737
- i.forEach((t) => {
738
- t.id || (t.id = Te());
739
- });
740
- },
741
- { immediate: !0, deep: !0 }
742
- );
743
- const pe = [
744
- {
745
- label: "report.common.edit",
746
- selected: !1,
747
- variant: "tertiary",
748
- onClick: (i) => {
749
- B.value = i, Y.value = JSON.parse(JSON.stringify(a.value.tiles[i])), S.push({
750
- name: "tileEditor",
751
- query: E.query
752
- });
753
- }
754
- },
755
- {
756
- label: "report.common.duplicate",
757
- selected: !1,
758
- variant: "tertiary",
759
- onClick: (i) => {
760
- const t = {
761
- ...JSON.parse(JSON.stringify(a.value.tiles[i])),
762
- id: Te()
763
- };
764
- a.value.tiles.push(t);
765
- }
766
- },
767
- {
768
- label: "report.common.remove",
769
- selected: !1,
770
- variant: "destructive",
771
- onClick: async (i) => {
772
- if (await K({
773
- title: p("report.editor.deleteWidget"),
774
- message: p("report.editor.deleteWidgetConfirm", {
775
- title: a.value.tiles[i].widget.title
776
- })
777
- })) {
778
- const q = a.value.tiles[i].id;
779
- a.value.tiles.splice(i, 1), a.value.globalFilters && a.value.globalFilters.forEach((U) => {
780
- var j;
781
- U.tileIds = (j = U.tileIds) == null ? void 0 : j.filter((ne) => ne !== q);
782
- });
783
- }
784
- }
785
- }
786
- ], N = [
787
- {
788
- label: "report.common.edit",
789
- selected: !1,
790
- variant: "tertiary",
791
- onClick: (i) => {
792
- var t;
793
- _.value = i, P.value = JSON.parse(JSON.stringify((t = a.value.globalFilters) == null ? void 0 : t[i])), ee.value = !0;
794
- }
795
- },
796
- {
797
- label: "report.common.duplicate",
798
- selected: !1,
799
- variant: "tertiary",
800
- onClick: (i) => {
801
- var U;
802
- const t = (U = a.value.globalFilters) == null ? void 0 : U[i];
803
- if (!t) return;
804
- const q = JSON.parse(JSON.stringify(t));
805
- a.value.globalFilters || (a.value.globalFilters = []), a.value.globalFilters.push(q);
806
- }
807
- },
808
- {
809
- label: "report.common.remove",
810
- selected: !1,
811
- variant: "destructive",
812
- onClick: async (i) => {
813
- var U, j;
814
- const t = (U = a.value.globalFilters) == null ? void 0 : U[i];
815
- if (!t) return;
816
- await K({
817
- title: p("report.editor.deleteWidget"),
818
- message: p("report.editor.deleteWidgetConfirm", {
819
- title: $(t)
820
- })
821
- }) && ((j = a.value.globalFilters) == null || j.splice(i, 1));
822
- }
823
- }
824
- ], I = T(() => M.value.map((i) => ({
825
- label: p(`report.category.${i.name}`),
826
- value: i.id
827
- }))), { sessionUser: J } = _l(), ue = T(
828
- () => {
829
- var i, t, q, U;
830
- return ((t = (i = J.value) == null ? void 0 : i.role) == null ? void 0 : t.isAdmin) === !0 || ((U = (q = J.value) == null ? void 0 : q.role) == null ? void 0 : U.isStaff) === !0;
831
- }
832
- ), he = T({
833
- get: () => a.value.queryVersion === "v2",
834
- set: (i) => {
835
- a.value.queryVersion = i ? "v2" : "v1", i ? a.value.queryDatasource = a.value.queryDatasource ?? "pg" : a.value.queryDatasource = void 0;
836
- }
837
- }), L = [
838
- { label: p("report.common.postgresql"), value: "pg" },
839
- { label: p("report.common.bigquery"), value: "bq" }
840
- ], _e = [
841
- { label: p("report.common.noBatch"), value: "none" },
842
- { label: p("report.common.days"), value: "days" },
843
- { label: p("report.common.locations"), value: "locations" }
844
- ], te = T({
845
- get: () => {
846
- var i, t;
847
- return (i = a.value.batch) != null && i.days ? "days" : (t = a.value.batch) != null && t.locations ? "locations" : "none";
848
- },
849
- set: (i) => {
850
- var t, q;
851
- i === "none" ? a.value.batch = void 0 : i === "days" ? a.value.batch = { days: ((t = a.value.batch) == null ? void 0 : t.days) || 1 } : i === "locations" && (a.value.batch = { locations: ((q = a.value.batch) == null ? void 0 : q.locations) || 10 });
852
- }
853
- }), $e = T({
854
- get: () => {
855
- var i, t;
856
- if (te.value === "days") return ((i = a.value.batch) == null ? void 0 : i.days) ?? 1;
857
- if (te.value === "locations") return ((t = a.value.batch) == null ? void 0 : t.locations) ?? 1;
858
- },
859
- set: (i) => {
860
- i && (te.value === "days" ? a.value.batch = { days: i } : te.value === "locations" && (a.value.batch = { locations: i }));
861
- }
862
- }), Ne = T({
863
- get: () => Se(p, ie, a.value.name, "other"),
864
- set: (i) => {
865
- a.value.name = i;
866
- }
867
- });
868
- function Ue(i) {
869
- var t;
870
- return !((t = i.tileIds) != null && t.length);
871
- }
872
- function We(i) {
873
- return !se.value.find((t) => t.name === i.schemaName);
874
- }
875
- return fe(
876
- () => a.value.globalFilters,
877
- (i) => {
878
- O.value = JSON.parse(JSON.stringify(i || []));
879
- },
880
- { deep: !0, immediate: !0 }
881
- ), (i, t) => {
882
- const q = h("FmTextField"), U = h("FmSelect"), j = h("FmSwitch"), ne = h("FmButton"), we = h("FmIcon"), Fe = h("FmTooltip"), Ce = h("FmMenuItem"), De = h("FmMenu"), Me = h("FmListItem"), qe = h("FmList"), ze = h("FmForm");
883
- return s(), V(sl(o(m).lg || o(m).md ? Vl : xl), {
884
- "model-value": x.hideConfiguration,
885
- "onUpdate:modelValue": t[13] || (t[13] = (e) => f("hideConfiguration", e))
886
- }, {
887
- default: v(() => [
888
- n(Ul, {
889
- "is-open": ee.value,
890
- "onUpdate:isOpen": t[0] || (t[0] = (e) => ee.value = e),
891
- "global-filter": o(P),
892
- tiles: a.value.tiles,
893
- schemas: se.value,
894
- "onUpdate:globalFilter": t[1] || (t[1] = (e) => {
895
- e && (a.value.globalFilters || (a.value.globalFilters = []), typeof o(_) == "number" && o(_) >= 0 ? a.value.globalFilters[o(_)] = e : a.value.globalFilters.push(e));
896
- })
897
- }, null, 8, ["is-open", "global-filter", "tiles", "schemas"]),
898
- n(wl, {
899
- modelValue: o(u),
900
- "onUpdate:modelValue": t[2] || (t[2] = (e) => Ze(u) ? u.value = e : null),
901
- "is-open": W.value,
902
- "onUpdate:isOpen": t[3] || (t[3] = (e) => W.value = e)
903
- }, null, 8, ["modelValue", "is-open"]),
904
- n(ze, {
905
- ref_key: "form",
906
- ref: w,
907
- class: "px-6 py-16 flex flex-col gap-24 overflow-y-auto overflow-x-hidden"
908
- }, {
909
- default: v(() => [
910
- n(Ee, { class: "border-solid" }, {
911
- header: v(() => [
912
- g("p", null, G(o(p)("report.editor.reportInfo")), 1),
913
- t[14] || (t[14] = g("div", { class: "grow" }, null, -1))
914
- ]),
915
- content: v(() => [
916
- g("div", Dl, [
917
- n(q, {
918
- modelValue: Ne.value,
919
- "onUpdate:modelValue": t[4] || (t[4] = (e) => Ne.value = e),
920
- label: o(p)("report.common.name"),
921
- placeholder: o(p)("report.common.name")
922
- }, null, 8, ["modelValue", "label", "placeholder"]),
923
- (s(), V(U, {
924
- key: `category-${o(le)}`,
925
- modelValue: a.value.category,
926
- "onUpdate:modelValue": t[5] || (t[5] = (e) => a.value.category = e),
927
- label: o(p)("report.common.category"),
928
- items: I.value
929
- }, null, 8, ["modelValue", "label", "items"])),
930
- n(q, {
931
- modelValue: a.value.description,
932
- "onUpdate:modelValue": t[6] || (t[6] = (e) => a.value.description = e),
933
- label: o(p)("report.common.description"),
934
- placeholder: o(p)("report.common.description")
935
- }, null, 8, ["modelValue", "label", "placeholder"])
936
- ])
937
- ]),
938
- _: 1
939
- }),
940
- n(Ee, {
941
- class: "border-solid",
942
- "is-open": !1
943
- }, {
944
- header: v(() => [
945
- g("p", null, G(o(p)("report.editor.advancedUsage")), 1),
946
- t[15] || (t[15] = g("div", { class: "grow" }, null, -1))
947
- ]),
948
- content: v(() => [
949
- g("div", Ml, [
950
- g("div", ql, [
951
- t[16] || (t[16] = g("span", { class: "fm-typo-en-body-sm-400 text-fm-color-typo-secondary" }, "V2", -1)),
952
- n(j, {
953
- modelValue: he.value,
954
- "onUpdate:modelValue": t[7] || (t[7] = (e) => he.value = e)
955
- }, null, 8, ["modelValue"])
956
- ]),
957
- he.value && ue.value ? (s(), V(U, {
958
- key: 0,
959
- modelValue: a.value.queryDatasource,
960
- "onUpdate:modelValue": t[8] || (t[8] = (e) => a.value.queryDatasource = e),
961
- label: o(p)("report.common.queryDatasource"),
962
- items: L
963
- }, null, 8, ["modelValue", "label"])) : A("", !0),
964
- n(U, {
965
- modelValue: te.value,
966
- "onUpdate:modelValue": t[9] || (t[9] = (e) => te.value = e),
967
- label: o(p)("report.common.batch"),
968
- items: _e
969
- }, null, 8, ["modelValue", "label"]),
970
- te.value !== "none" ? (s(), V(q, {
971
- key: 1,
972
- modelValue: $e.value,
973
- "onUpdate:modelValue": t[10] || (t[10] = (e) => $e.value = e),
974
- modelModifiers: { number: !0 },
975
- label: te.value === "days" ? o(p)("report.common.days") : o(p)("report.common.locations"),
976
- type: "number"
977
- }, null, 8, ["modelValue", "label"])) : A("", !0)
978
- ])
979
- ]),
980
- _: 1
981
- }),
982
- n(Ee, {
983
- class: "border-solid",
984
- "is-open": !1
985
- }, {
986
- header: v(() => [
987
- g("p", null, G(o(p)("report.section.filter.globalFilter")), 1),
988
- t[17] || (t[17] = g("div", { class: "grow" }, null, -1))
989
- ]),
990
- content: v(() => [
991
- g("div", Bl, [
992
- n(ne, {
993
- label: o(p)("report.section.filter.addGlobalFilter"),
994
- variant: "secondary",
995
- icon: "add",
996
- "icon-position": "prepend",
997
- "border-color": o(xe).ColorPrimary,
998
- "text-color": o(xe).ColorPrimary,
999
- onClick: t[11] || (t[11] = () => {
1000
- _.value = null, P.value = null, ee.value = !0;
1001
- })
1002
- }, null, 8, ["label", "border-color", "text-color"]),
1003
- n(qe, null, {
1004
- default: v(() => [
1005
- n(o(Ge), {
1006
- list: a.value.globalFilters,
1007
- "item-key": "`${element.schemaName}-${element.name}`",
1008
- class: "flex flex-col gap-2 cursor-grab",
1009
- handle: ".handle"
1010
- }, {
1011
- item: v(({ element: e, index: l }) => [
1012
- n(Me, { class: "!cursor-grab border rounded-md border-neutral-300" }, {
1013
- default: v(() => [
1014
- n(we, {
1015
- name: "drag_handle",
1016
- class: "handle"
1017
- }),
1018
- g("div", Rl, [
1019
- n(Fe, {
1020
- "z-index": 99,
1021
- content: o($)(e),
1022
- class: "handle"
1023
- }, {
1024
- default: v(() => [
1025
- g("p", Il, G(o($)(e)), 1)
1026
- ]),
1027
- _: 2
1028
- }, 1032, ["content"]),
1029
- We(e) ? (s(), V(Fe, {
1030
- key: 0,
1031
- content: o(p)("report.section.filter.missingSchema"),
1032
- "z-index": 99
1033
- }, {
1034
- default: v(() => [
1035
- n(we, {
1036
- name: "warning",
1037
- class: "text-fm-color-system-error-300"
1038
- })
1039
- ]),
1040
- _: 1
1041
- }, 8, ["content"])) : Ue(e) ? (s(), V(Fe, {
1042
- key: 1,
1043
- content: o(p)("report.section.filter.missingTileIds"),
1044
- "z-index": 99
1045
- }, {
1046
- default: v(() => [
1047
- n(we, {
1048
- name: "warning",
1049
- class: "text-fm-color-system-warning-300"
1050
- })
1051
- ]),
1052
- _: 1
1053
- }, 8, ["content"])) : A("", !0)
1054
- ]),
1055
- t[18] || (t[18] = g("div", { class: "grow" }, null, -1)),
1056
- n(De, {
1057
- trigger: "click",
1058
- shift: !0,
1059
- "stop-click-propagation": !0
1060
- }, {
1061
- "menu-button": v(() => [
1062
- n(ne, {
1063
- "append-icon": "more_vert",
1064
- variant: "tertiary"
1065
- })
1066
- ]),
1067
- default: v(() => [
1068
- (s(), C(Z, null, ce(N, (d, c) => n(Ce, {
1069
- key: c,
1070
- onClick: (b) => d.onClick(l)
1071
- }, {
1072
- label: v(() => [
1073
- g("p", {
1074
- class: ke(
1075
- d.variant === "destructive" ? " text-fm-color-system-error-300" : ""
1076
- )
1077
- }, G(o(p)(d.label)), 3)
1078
- ]),
1079
- _: 2
1080
- }, 1032, ["onClick"])), 64))
1081
- ]),
1082
- _: 2
1083
- }, 1024)
1084
- ]),
1085
- _: 2
1086
- }, 1024)
1087
- ]),
1088
- _: 1
1089
- }, 8, ["list"])
1090
- ]),
1091
- _: 1
1092
- })
1093
- ])
1094
- ]),
1095
- _: 1
1096
- }),
1097
- g("div", Wl, [
1098
- n(ne, {
1099
- label: o(p)("report.editor.addWidget"),
1100
- variant: "secondary",
1101
- icon: "add",
1102
- "icon-position": "prepend",
1103
- "border-color": o(xe).ColorPrimary,
1104
- "text-color": o(xe).ColorPrimary,
1105
- onClick: t[12] || (t[12] = (e) => W.value = !0)
1106
- }, null, 8, ["label", "border-color", "text-color"]),
1107
- n(qe, null, {
1108
- default: v(() => [
1109
- n(o(Ge), {
1110
- list: a.value.tiles,
1111
- "item-key": "id",
1112
- class: "flex flex-col gap-2 cursor-grab",
1113
- handle: ".handle"
1114
- }, {
1115
- item: v(({ element: e, index: l }) => [
1116
- n(Me, { class: "!cursor-grab border rounded-md border-neutral-300" }, {
1117
- default: v(() => [
1118
- n(we, {
1119
- name: "drag_handle",
1120
- class: "handle"
1121
- }),
1122
- n(Fe, {
1123
- content: e.widget.title ? ae(e.widget.title) : o(p)("report.editor.widget", { index: l + 1 }),
1124
- class: "handle"
1125
- }, {
1126
- default: v(() => [
1127
- g("p", zl, G(e.widget.title ? ae(e.widget.title) : o(p)("report.editor.widget", { index: l + 1 })), 1)
1128
- ]),
1129
- _: 2
1130
- }, 1032, ["content"]),
1131
- t[19] || (t[19] = g("div", { class: "grow" }, null, -1)),
1132
- n(De, {
1133
- trigger: "click",
1134
- shift: !0,
1135
- "stop-click-propagation": !0
1136
- }, {
1137
- "menu-button": v(() => [
1138
- n(ne, {
1139
- "append-icon": "more_vert",
1140
- variant: "tertiary"
1141
- })
1142
- ]),
1143
- default: v(() => [
1144
- (s(), C(Z, null, ce(pe, (d, c) => n(Ce, {
1145
- key: c,
1146
- onClick: (b) => d.onClick(l)
1147
- }, {
1148
- label: v(() => [
1149
- g("p", {
1150
- class: ke(
1151
- d.variant === "destructive" ? " text-fm-color-system-error-300" : ""
1152
- )
1153
- }, G(o(p)(d.label)), 3)
1154
- ]),
1155
- _: 2
1156
- }, 1032, ["onClick"])), 64))
1157
- ]),
1158
- _: 2
1159
- }, 1024)
1160
- ]),
1161
- _: 2
1162
- }, 1024)
1163
- ]),
1164
- _: 1
1165
- }, 8, ["list"])
1166
- ]),
1167
- _: 1
1168
- })
1169
- ])
1170
- ]),
1171
- _: 1
1172
- }, 512)
1173
- ]),
1174
- _: 1
1175
- }, 8, ["model-value"]);
1176
- };
1177
- }
1178
- }), El = { class: "h-full w-full overflow-x-hidden" }, Pl = { class: "flex flex-col bg-fm-color-neutral-white w-[400px]" }, Jl = { class: "flex bg-fm-color-neutral-white w-[88px]" }, Ll = {
1179
- key: 1,
1180
- class: "w-full overflow-y-auto"
1181
- }, Al = {
1182
- key: 0,
1183
- class: "w-full grid grid-cols-12 gap-[24px] p-24"
1184
- }, Hl = { class: "col-span-12 mb-4 flex flex-wrap gap-2 pb-2" }, jl = { key: 2 }, Gl = {
1185
- key: 0,
1186
- class: "grid grid-cols-12 gap-[16px]"
1187
- }, Kl = { class: "col-span-12 mb-4 flex flex-wrap gap-2 pb-2" }, Ql = {
1188
- key: 3,
1189
- class: "h-full w-full flex items-start justify-center bg-fm-color-neutral-white py-24",
1190
- style: { backgroundColor: "#F6F8FC" }
1191
- }, Xl = {
1192
- key: 0,
1193
- class: "w-full grid grid-cols-12 gap-[24px] p-24"
1194
- }, Yl = /* @__PURE__ */ ye({
1195
- __name: "ReportEditorViewport",
1196
- props: /* @__PURE__ */ ge({
1197
- hideConfiguration: { type: Boolean, required: !1, default: !1 },
1198
- previewWidth: { type: Number, required: !0 },
1199
- previewHeight: { type: Number, required: !0 },
1200
- previewScale: { type: Number, required: !0 }
1201
- }, {
1202
- modelValue: { required: !0, default: () => {
1203
- } },
1204
- modelModifiers: {}
1205
- }),
1206
- emits: /* @__PURE__ */ ge(["hideConfiguration"], ["update:modelValue"]),
1207
- setup(D, { emit: r }) {
1208
- const { breakpoints: a } = Ie(), m = be(D, "modelValue"), x = D, f = T(() => x.previewWidth > 0 && x.previewHeight > 0), S = T(() => a.value.sm || a.value.xs), E = r;
1209
- return (w, u) => {
1210
- const M = h("FmCircularProgress"), Y = h("FmButton"), B = h("FmMenuDivider"), P = h("FmCard");
1211
- return s(), C("div", El, [
1212
- m.value ? (s(), C(Z, { key: 1 }, [
1213
- f.value ? A("", !0) : (s(), V(fl, {
1214
- key: 0,
1215
- "model-value": !x.hideConfiguration
1216
- }, {
1217
- right: v(() => [
1218
- g("div", Pl, [
1219
- m.value ? (s(), V(Xe, {
1220
- key: 0,
1221
- modelValue: m.value,
1222
- "onUpdate:modelValue": u[0] || (u[0] = (_) => m.value = _),
1223
- "hide-configuration": x.hideConfiguration,
1224
- onHideConfiguration: u[1] || (u[1] = (_) => E("hideConfiguration", _))
1225
- }, null, 8, ["modelValue", "hide-configuration"])) : A("", !0)
1226
- ])
1227
- ]),
1228
- left: v(() => [
1229
- g("div", Jl, [
1230
- n(Y, {
1231
- variant: "secondary",
1232
- icon: "keyboard_double_arrow_right",
1233
- "border-color": o(xe).ColorPrimary,
1234
- "text-color": o(xe).ColorPrimary,
1235
- class: "m-24 my-16",
1236
- size: "md",
1237
- onClick: u[2] || (u[2] = (_) => E("hideConfiguration", !x.hideConfiguration))
1238
- }, null, 8, ["border-color", "text-color"])
1239
- ])
1240
- ]),
1241
- _: 1
1242
- }, 8, ["model-value"])),
1243
- n(B, {
1244
- vertical: "",
1245
- style: { margin: "0px" }
1246
- }),
1247
- !S.value && !f.value ? (s(), C("div", Ll, [
1248
- m.value.tiles.length > 0 ? (s(), C("div", Al, [
1249
- g("div", Hl, [
1250
- n(Qe)
1251
- ]),
1252
- (s(!0), C(Z, null, ce(m.value.tiles, (_, F) => (s(), V(Pe, {
1253
- key: `${o(Te)()}_${F}`,
1254
- "model-value": _,
1255
- index: F,
1256
- "hide-export": !0
1257
- }, null, 8, ["model-value", "index"]))), 128))
1258
- ])) : (s(), V(Le, { key: 1 }))
1259
- ])) : S.value && !f.value ? (s(), C("div", jl, [
1260
- n(P, { class: "px-5 pb-28" }, {
1261
- default: v(() => [
1262
- m.value.tiles.length > 0 ? (s(), C("div", Gl, [
1263
- g("div", Kl, [
1264
- n(Qe)
1265
- ]),
1266
- (s(!0), C(Z, null, ce(m.value.tiles, (_, F) => (s(), V(Pe, {
1267
- key: `${o(Te)()}_${F}`,
1268
- "model-value": _,
1269
- index: F,
1270
- "hide-export": !0
1271
- }, null, 8, ["model-value", "index"]))), 128))
1272
- ])) : (s(), V(Le, { key: 1 }))
1273
- ]),
1274
- _: 1
1275
- }),
1276
- m.value ? (s(), V(Xe, {
1277
- key: 0,
1278
- modelValue: m.value,
1279
- "onUpdate:modelValue": u[3] || (u[3] = (_) => m.value = _),
1280
- "hide-configuration": x.hideConfiguration,
1281
- onHideConfiguration: u[4] || (u[4] = (_) => {
1282
- E("hideConfiguration", _);
1283
- })
1284
- }, null, 8, ["modelValue", "hide-configuration"])) : A("", !0)
1285
- ])) : (s(), C("div", Ql, [
1286
- g("div", {
1287
- style: He({
1288
- transformOrigin: "top center",
1289
- transform: `scale(${x.previewScale})`
1290
- })
1291
- }, [
1292
- g("div", {
1293
- class: "overflow-y-auto bg-white rounded-lg",
1294
- style: He({
1295
- width: x.previewWidth + "px",
1296
- height: x.previewHeight + "px"
1297
- })
1298
- }, [
1299
- m.value.tiles.length > 0 ? (s(), C("div", Xl, [
1300
- (s(!0), C(Z, null, ce(m.value.tiles, (_, F) => (s(), V(Pe, {
1301
- key: `${o(Te)()}_${F}`,
1302
- "model-value": _,
1303
- index: F,
1304
- "hide-export": !0,
1305
- "custom-screen-width": x.previewWidth
1306
- }, null, 8, ["model-value", "index", "custom-screen-width"]))), 128))
1307
- ])) : (s(), V(Le, { key: 1 }))
1308
- ], 4)
1309
- ], 4)
1310
- ]))
1311
- ], 64)) : (s(), V(M, { key: 0 }))
1312
- ]);
1313
- };
1314
- }
1315
- }), Zl = { class: "flex items-center gap-4" }, et = { class: "flex justify-center items-center gap-2 w-full" }, lt = { class: "flex gap-4" }, vt = /* @__PURE__ */ ye({
1316
- __name: "ReportEditor",
1317
- setup(D) {
1318
- const r = ll(), a = tl(), m = el(), { promptLoader: x } = hl(), { t: f, te: S } = Oe(), { currentReport: E, editingReport: w } = Re(m), { breakpoints: u } = Ie(), M = T(() => {
1319
- var N;
1320
- return !((N = w.value) != null && N.editable);
1321
- }), Y = T(() => {
1322
- var N;
1323
- return ((N = w.value) == null ? void 0 : N.name) ?? f("report.editor.newReport");
1324
- }), B = T(() => Se(f, S, Y.value, "other")), P = ol(), { promptMessage: _ } = al(), F = R(!1), O = T(() => [
1325
- { label: f("report.common.cancel"), value: "cancel", isPrimary: !1 },
1326
- { label: f("report.common.save"), value: "save", isPrimary: !0, prependIcon: "download" }
1327
- ]);
1328
- async function $() {
1329
- if (!w.value || w.value.tiles.length === 0) {
1330
- P.open({ message: f("report.messages.noWidget"), type: "error" });
1331
- return;
1332
- }
1333
- const N = M.value ? f("report.common.clone") : f("report.common.save");
1334
- if (await _({
1335
- title: `${f("report.messages.saveReport")}`,
1336
- message: f("report.messages.confirmAction", { action: N, name: B.value })
1337
- }))
1338
- try {
1339
- await x(async () => {
1340
- if (M.value) {
1341
- const J = JSON.parse(JSON.stringify(w.value));
1342
- J.editable = !0, J.id = "", J.name = `${J.name} ${f("report.common.duplicate")}`, J.isDefault = !1, await m.createOrUpdateReport(J);
1343
- } else
1344
- w.value && await m.createOrUpdateReport(w.value);
1345
- r.push({
1346
- name: "reportView",
1347
- query: a.query
1348
- });
1349
- });
1350
- } catch (J) {
1351
- console.log(J), P.open({
1352
- message: f("report.messages.failedToAction", { action: N }),
1353
- type: "error"
1354
- });
1355
- }
1356
- }
1357
- async function K() {
1358
- var I;
1359
- if (!w.value) return;
1360
- await _({
1361
- title: f("report.common.report", 1),
1362
- message: f("report.editor.notSaved", { name: (I = w.value) == null ? void 0 : I.name })
1363
- }) && (w.value = JSON.parse(JSON.stringify(E.value)), r.back());
1364
- }
1365
- ul(() => {
1366
- w.value || r.push({ name: "reports" });
1367
- });
1368
- const ee = [
1369
- {
1370
- labelKey: "report.common.default",
1371
- width: void 0,
1372
- height: void 0
1373
- },
1374
- {
1375
- labelKey: "report.editor.devices.desktop",
1376
- width: 1920,
1377
- height: 1080
1378
- },
1379
- {
1380
- labelKey: "report.editor.devices.tablet",
1381
- width: 820,
1382
- height: 1180
1383
- },
1384
- {
1385
- labelKey: "report.editor.devices.phone",
1386
- width: 390,
1387
- height: 859
1388
- }
1389
- ], W = R(ee[0]), p = R(!1), ie = T(() => p.value ? Math.max(W.value.width || 0, W.value.height || 0) : Math.min(W.value.width || 0, W.value.height || 0)), le = T(() => p.value ? Math.min(W.value.width || 0, W.value.height || 0) : Math.max(W.value.width || 0, W.value.height || 0)), Q = T(() => window.innerHeight - 72 - 56), se = T(() => {
1390
- if (!ie.value) return 1;
1391
- let N = (Q.value - 48) / ie.value, I = le.value * N;
1392
- return I > window.innerWidth && (N = window.innerWidth / le.value, I = le.value * N), N > 1 ? 1 : N;
1393
- });
1394
- function ae(N) {
1395
- W.value = N;
1396
- }
1397
- function pe() {
1398
- p.value = !p.value;
1399
- }
1400
- return (N, I) => {
1401
- const J = h("FmTooltip"), ue = h("FmButton"), he = h("FmPageHead");
1402
- return s(), V(gl, null, {
1403
- default: v(() => [
1404
- n(he, {
1405
- "data-editor-header": "true",
1406
- actions: O.value,
1407
- "onClick:action": I[0] || (I[0] = (L) => {
1408
- L === "cancel" && K(), L === "save" && $();
1409
- })
1410
- }, {
1411
- title: v(() => [
1412
- g("div", Zl, [
1413
- n(J, {
1414
- content: B.value,
1415
- placement: "bottom"
1416
- }, {
1417
- default: v(() => [
1418
- g("p", {
1419
- class: ke(`${o(u).sm || o(u).xs ? "hidden" : ""} text-ellipsis overflow-hidden text-nowrap fm-typo-en-title-md-600 w-[250px]`)
1420
- }, G(B.value), 3)
1421
- ]),
1422
- _: 1
1423
- }, 8, ["content"]),
1424
- g("div", et, [
1425
- g("div", lt, [
1426
- (s(), C(Z, null, ce(ee, (L) => {
1427
- var _e;
1428
- return n(ue, {
1429
- key: L.labelKey,
1430
- label: o(f)(L.labelKey),
1431
- variant: ((_e = W.value) == null ? void 0 : _e.labelKey) === L.labelKey ? "primary" : "secondary",
1432
- size: "md",
1433
- onClick: (te) => ae(L)
1434
- }, null, 8, ["label", "variant", "onClick"]);
1435
- }), 64))
1436
- ]),
1437
- n(ue, {
1438
- icon: "screen_rotation",
1439
- variant: "tertiary",
1440
- size: "md",
1441
- class: "text-fm-color-typo-primary",
1442
- onClick: pe
1443
- })
1444
- ])
1445
- ])
1446
- ]),
1447
- _: 1
1448
- }, 8, ["actions"]),
1449
- o(w) ? (s(), V(Yl, {
1450
- key: 0,
1451
- modelValue: o(w),
1452
- "onUpdate:modelValue": I[1] || (I[1] = (L) => Ze(w) ? w.value = L : null),
1453
- style: He({ height: Q.value + "px" }),
1454
- class: ke(o(u).lg || o(u).md ? "flex" : ""),
1455
- "hide-configuration": F.value,
1456
- "preview-width": le.value,
1457
- "preview-height": ie.value,
1458
- "preview-scale": se.value,
1459
- onHideConfiguration: I[2] || (I[2] = (L) => F.value = L)
1460
- }, null, 8, ["modelValue", "style", "class", "hide-configuration", "preview-width", "preview-height", "preview-scale"])) : A("", !0)
1461
- ]),
1462
- _: 1
1463
- });
1464
- };
1465
- }
1466
- });
1467
- export {
1468
- vt as default
1469
- };