admins-components 9.0.50 → 9.0.52
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/admins-components.js +35 -33
- package/dist/admins-components100.js +245 -3
- package/dist/admins-components100.js.map +1 -1
- package/dist/admins-components102.js +6 -52
- package/dist/admins-components102.js.map +1 -1
- package/dist/admins-components103.js +3 -82
- package/dist/admins-components103.js.map +1 -1
- package/dist/admins-components104.js +3 -113
- package/dist/admins-components104.js.map +1 -1
- package/dist/admins-components105.js +49 -44
- package/dist/admins-components105.js.map +1 -1
- package/dist/admins-components106.js +80 -104
- package/dist/admins-components106.js.map +1 -1
- package/dist/admins-components107.js +109 -16
- package/dist/admins-components107.js.map +1 -1
- package/dist/admins-components108.js +46 -6
- package/dist/admins-components108.js.map +1 -1
- package/dist/admins-components109.js +100 -246
- package/dist/admins-components109.js.map +1 -1
- package/dist/admins-components110.js +19 -26
- package/dist/admins-components110.js.map +1 -1
- package/dist/admins-components111.js +6 -27
- package/dist/admins-components111.js.map +1 -1
- package/dist/admins-components112.js +239 -159
- package/dist/admins-components112.js.map +1 -1
- package/dist/admins-components113.js +26 -67
- package/dist/admins-components113.js.map +1 -1
- package/dist/admins-components114.js +25 -64
- package/dist/admins-components114.js.map +1 -1
- package/dist/admins-components115.js +169 -27
- package/dist/admins-components115.js.map +1 -1
- package/dist/admins-components116.js +65 -13
- package/dist/admins-components116.js.map +1 -1
- package/dist/admins-components117.js +64 -24
- package/dist/admins-components117.js.map +1 -1
- package/dist/admins-components118.js +29 -8
- package/dist/admins-components118.js.map +1 -1
- package/dist/admins-components119.js +16 -4
- package/dist/admins-components119.js.map +1 -1
- package/dist/admins-components120.js +27 -3
- package/dist/admins-components120.js.map +1 -1
- package/dist/admins-components121.js +8 -2
- package/dist/admins-components121.js.map +1 -1
- package/dist/admins-components122.js +4 -21
- package/dist/admins-components122.js.map +1 -1
- package/dist/admins-components123.js +3 -14
- package/dist/admins-components123.js.map +1 -1
- package/dist/admins-components124.js +3 -8
- package/dist/admins-components124.js.map +1 -1
- package/dist/admins-components125.js +19 -11
- package/dist/admins-components125.js.map +1 -1
- package/dist/admins-components126.js +14 -26
- package/dist/admins-components126.js.map +1 -1
- package/dist/admins-components127.js +7 -82
- package/dist/admins-components127.js.map +1 -1
- package/dist/admins-components128.js +9 -7
- package/dist/admins-components128.js.map +1 -1
- package/dist/admins-components129.js +25 -4
- package/dist/admins-components129.js.map +1 -1
- package/dist/admins-components130.js +81 -6
- package/dist/admins-components130.js.map +1 -1
- package/dist/admins-components131.js +10 -6
- package/dist/admins-components131.js.map +1 -1
- package/dist/admins-components132.js +2 -3
- package/dist/admins-components132.js.map +1 -1
- package/dist/admins-components133.js +8 -15
- package/dist/admins-components133.js.map +1 -1
- package/dist/admins-components134.js +6 -12
- package/dist/admins-components134.js.map +1 -1
- package/dist/admins-components135.js +6 -30
- package/dist/admins-components135.js.map +1 -1
- package/dist/admins-components136.js +15 -4
- package/dist/admins-components136.js.map +1 -1
- package/dist/admins-components137.js +13 -29
- package/dist/admins-components137.js.map +1 -1
- package/dist/admins-components138.js +30 -5
- package/dist/admins-components138.js.map +1 -1
- package/dist/admins-components139.js +4 -5
- package/dist/admins-components139.js.map +1 -1
- package/dist/admins-components140.js +28 -7
- package/dist/admins-components140.js.map +1 -1
- package/dist/admins-components141.js +4 -73
- package/dist/admins-components141.js.map +1 -1
- package/dist/admins-components142.js +4 -28
- package/dist/admins-components142.js.map +1 -1
- package/dist/admins-components143.js +8 -59
- package/dist/admins-components143.js.map +1 -1
- package/dist/admins-components144.js +72 -22
- package/dist/admins-components144.js.map +1 -1
- package/dist/admins-components145.js +26 -47
- package/dist/admins-components145.js.map +1 -1
- package/dist/admins-components146.js +58 -30
- package/dist/admins-components146.js.map +1 -1
- package/dist/admins-components147.js +24 -3
- package/dist/admins-components147.js.map +1 -1
- package/dist/admins-components148.js +44 -173
- package/dist/admins-components148.js.map +1 -1
- package/dist/admins-components149.js +28 -43
- package/dist/admins-components149.js.map +1 -1
- package/dist/admins-components150.js +3 -37
- package/dist/admins-components150.js.map +1 -1
- package/dist/admins-components151.js +176 -43
- package/dist/admins-components151.js.map +1 -1
- package/dist/admins-components152.js +41 -136
- package/dist/admins-components152.js.map +1 -1
- package/dist/admins-components153.js +36 -57
- package/dist/admins-components153.js.map +1 -1
- package/dist/admins-components154.js +44 -5
- package/dist/admins-components154.js.map +1 -1
- package/dist/admins-components155.js +141 -6
- package/dist/admins-components155.js.map +1 -1
- package/dist/admins-components156.js +57 -75
- package/dist/admins-components156.js.map +1 -1
- package/dist/admins-components157.js +6 -28
- package/dist/admins-components157.js.map +1 -1
- package/dist/admins-components158.js +5 -1930
- package/dist/admins-components158.js.map +1 -1
- package/dist/admins-components159.js +75 -24810
- package/dist/admins-components159.js.map +1 -1
- package/dist/admins-components16.js +4 -3
- package/dist/admins-components16.js.map +1 -1
- package/dist/admins-components160.js +28 -8
- package/dist/admins-components160.js.map +1 -1
- package/dist/admins-components161.js +1929 -5
- package/dist/admins-components161.js.map +1 -0
- package/dist/admins-components162.js +24809 -140
- package/dist/admins-components162.js.map +1 -1
- package/dist/admins-components163.js +3 -3
- package/dist/admins-components163.js.map +1 -1
- package/dist/admins-components164.js +7 -9
- package/dist/admins-components165.js +143 -0
- package/dist/admins-components165.js.map +1 -0
- package/dist/admins-components166.js +8 -167
- package/dist/admins-components166.js.map +1 -1
- package/dist/admins-components167.js +8 -50
- package/dist/admins-components167.js.map +1 -1
- package/dist/admins-components169.js +161 -43
- package/dist/admins-components169.js.map +1 -1
- package/dist/admins-components17.js.map +1 -1
- package/dist/admins-components170.js +51 -6
- package/dist/admins-components170.js.map +1 -1
- package/dist/admins-components171.js +8 -79
- package/dist/admins-components171.js.map +1 -1
- package/dist/admins-components172.js +35 -43
- package/dist/admins-components172.js.map +1 -1
- package/dist/admins-components173.js +6 -59
- package/dist/admins-components173.js.map +1 -1
- package/dist/admins-components174.js +79 -8
- package/dist/admins-components174.js.map +1 -1
- package/dist/admins-components175.js +43 -37
- package/dist/admins-components175.js.map +1 -1
- package/dist/admins-components176.js +58 -8
- package/dist/admins-components176.js.map +1 -1
- package/dist/admins-components177.js +10 -0
- package/dist/admins-components177.js.map +1 -0
- package/dist/admins-components178.js +44 -50
- package/dist/admins-components178.js.map +1 -1
- package/dist/admins-components179.js +10 -0
- package/dist/admins-components179.js.map +1 -0
- package/dist/admins-components181.js +59 -0
- package/dist/admins-components181.js.map +1 -0
- package/dist/admins-components5.js +30 -28
- package/dist/admins-components5.js.map +1 -1
- package/dist/admins-components58.js.map +1 -1
- package/dist/admins-components6.js.map +1 -1
- package/dist/admins-components60.js +1 -1
- package/dist/admins-components60.js.map +1 -1
- package/dist/admins-components65.js +66 -42
- package/dist/admins-components65.js.map +1 -1
- package/dist/admins-components67.js.map +1 -1
- package/dist/admins-components68.js +102 -95
- package/dist/admins-components68.js.map +1 -1
- package/dist/admins-components70.js.map +1 -1
- package/dist/admins-components72.js +135 -126
- package/dist/admins-components72.js.map +1 -1
- package/dist/admins-components74.js.map +1 -1
- package/dist/admins-components76.js +32 -122
- package/dist/admins-components76.js.map +1 -1
- package/dist/admins-components77.js +146 -0
- package/dist/admins-components77.js.map +1 -0
- package/dist/admins-components79.js +6 -59
- package/dist/admins-components79.js.map +1 -1
- package/dist/admins-components80.js +140 -67
- package/dist/admins-components80.js.map +1 -1
- package/dist/admins-components82.js +7 -0
- package/dist/admins-components82.js.map +1 -0
- package/dist/admins-components83.js +59 -6
- package/dist/admins-components83.js.map +1 -1
- package/dist/admins-components84.js +66 -229
- package/dist/admins-components84.js.map +1 -1
- package/dist/{admins-components81.js → admins-components85.js} +2 -2
- package/dist/{admins-components81.js.map → admins-components85.js.map} +1 -1
- package/dist/admins-components87.js +6 -37
- package/dist/admins-components87.js.map +1 -1
- package/dist/admins-components88.js +231 -0
- package/dist/admins-components88.js.map +1 -0
- package/dist/admins-components90.js +6 -199
- package/dist/admins-components90.js.map +1 -1
- package/dist/admins-components91.js +38 -0
- package/dist/{admins-components89.js.map → admins-components91.js.map} +1 -1
- package/dist/admins-components93.js +6 -16
- package/dist/admins-components93.js.map +1 -1
- package/dist/admins-components94.js +188 -64
- package/dist/admins-components94.js.map +1 -1
- package/dist/admins-components96.js +2 -2
- package/dist/admins-components96.js.map +1 -1
- package/dist/admins-components97.js +76 -198
- package/dist/admins-components97.js.map +1 -1
- package/dist/admins-components99.js +2 -2
- package/dist/admins-components99.js.map +1 -1
- package/dist/main.css +1 -1
- package/dist/main.css.map +1 -1
- package/dist/src/components/TextInput.vue.d.ts +2 -0
- package/dist/src/components/data-table/DataList.vue.d.ts +12 -3
- package/dist/src/components/data-table/DataPaginator.vue.d.ts +5 -1
- package/dist/src/components/data-table/DataSearch.vue.d.ts +9 -0
- package/dist/src/components/data-table/DataSort.vue.d.ts +51 -0
- package/dist/src/components/data-table/DataTable.vue.d.ts +12 -0
- package/dist/src/index.d.ts +4 -0
- package/dist/src/styles/components/data-table/data-cards.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/src/styles/components/data-table/data-list.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/src/styles/components/data-table/data-search.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/src/styles/components/data-table/data-sort.scss_vue_type_style_index_0_src_true_lang.css +1 -0
- package/dist/src/styles/components/data-table/data-table.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/src/styles/components/dropdown-select.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/src/types/data-list.d.ts +1 -0
- package/dist/src/utils/url.d.ts +21 -0
- package/package.json +1 -1
- package/dist/admins-components101.js +0 -4
- package/dist/admins-components101.js.map +0 -1
- package/dist/admins-components164.js.map +0 -1
- package/dist/admins-components168.js +0 -10
- package/dist/admins-components168.js.map +0 -1
- package/dist/admins-components78.js +0 -7
- package/dist/admins-components78.js.map +0 -1
- package/dist/admins-components86.js +0 -7
- package/dist/admins-components86.js.map +0 -1
- package/dist/admins-components89.js +0 -7
- package/dist/admins-components92.js +0 -7
- package/dist/admins-components92.js.map +0 -1
|
@@ -1,231 +1,68 @@
|
|
|
1
|
-
import e from "./admins-
|
|
2
|
-
import t from "./admins-
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
open: {
|
|
20
|
-
type: Boolean,
|
|
21
|
-
default: !1
|
|
22
|
-
},
|
|
23
|
-
position: { default: "left" },
|
|
24
|
-
lazy: {
|
|
25
|
-
type: Boolean,
|
|
26
|
-
default: !0
|
|
27
|
-
},
|
|
28
|
-
handleUrl: {
|
|
29
|
-
type: Boolean,
|
|
30
|
-
default: !1
|
|
31
|
-
},
|
|
32
|
-
historyEnabled: {
|
|
33
|
-
type: Boolean,
|
|
34
|
-
default: !0
|
|
35
|
-
},
|
|
36
|
-
storageKey: {}
|
|
37
|
-
},
|
|
38
|
-
emits: ["close", "change"],
|
|
39
|
-
setup(v, { expose: j, emit: M }) {
|
|
40
|
-
let N = v, P = M, F = S(c(N.items, N.storageKey, !1)), I = S({});
|
|
41
|
-
function L(e, t) {
|
|
42
|
-
t ? I.value[e] = t : delete I.value[e];
|
|
43
|
-
}
|
|
44
|
-
function R(e) {
|
|
45
|
-
return {
|
|
46
|
-
...e.config ?? {},
|
|
47
|
-
showTime: e.type === "datetime",
|
|
48
|
-
placeholder: e.placeholder ?? (e.type === "datetime" ? "Időpont" : "Dátum")
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
function z(e) {
|
|
52
|
-
return {
|
|
53
|
-
...e.config ?? {},
|
|
54
|
-
...e.fullWidth ? {} : { compact: !0 },
|
|
55
|
-
showTime: e.type === "datetimerange"
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
function B(e, t) {
|
|
59
|
-
let n = typeof t == "string" ? t.trim() : t;
|
|
60
|
-
F.value = {
|
|
61
|
-
...F.value,
|
|
62
|
-
[e.key]: n
|
|
63
|
-
}, e.onChange && e.onChange(n), N.lazy || U();
|
|
64
|
-
}
|
|
65
|
-
let V = f(() => Object.values(F.value).some((e) => e !== null && e !== "" && e !== void 0));
|
|
66
|
-
function H() {
|
|
67
|
-
let e = {};
|
|
68
|
-
for (let t of N.items) {
|
|
69
|
-
if (t.type === "separator") continue;
|
|
70
|
-
let n = F.value[t.key];
|
|
71
|
-
t.transformer ? Object.assign(e, t.transformer(n) ?? {}) : e[t.key] = n;
|
|
72
|
-
}
|
|
73
|
-
return {
|
|
74
|
-
values: s(F.value),
|
|
75
|
-
transformed: s(e)
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
function U() {
|
|
79
|
-
N.handleUrl && l(N.items, F.value), P("change", H());
|
|
80
|
-
}
|
|
81
|
-
function W() {
|
|
82
|
-
U(), P("close");
|
|
83
|
-
}
|
|
84
|
-
function G() {
|
|
85
|
-
F.value = {}, U();
|
|
86
|
-
}
|
|
87
|
-
function K(e) {
|
|
88
|
-
F.value = {
|
|
89
|
-
...F.value,
|
|
90
|
-
[e]: null
|
|
91
|
-
}, U();
|
|
92
|
-
}
|
|
93
|
-
function q(e) {
|
|
94
|
-
let t = I.value[e];
|
|
95
|
-
t && (typeof t.focusAndOpen == "function" ? t.focusAndOpen() : typeof t.focus == "function" && t.focus());
|
|
96
|
-
}
|
|
97
|
-
function J(e) {
|
|
98
|
-
let t = { ...F.value };
|
|
99
|
-
for (let n of N.items) n.type !== "separator" && n.key in e && (t[n.key] = e[n.key] ?? null);
|
|
100
|
-
F.value = t, U();
|
|
101
|
-
}
|
|
102
|
-
j({
|
|
103
|
-
clearFilter: K,
|
|
104
|
-
focusFilter: q
|
|
105
|
-
});
|
|
106
|
-
function Y(e) {
|
|
107
|
-
e.key === "Enter" && e.target?.tagName !== "TEXTAREA" && (e.preventDefault(), W());
|
|
108
|
-
}
|
|
109
|
-
function X(e, t) {
|
|
110
|
-
e.onInnerSearch && e.onInnerSearch(t);
|
|
111
|
-
}
|
|
112
|
-
return (s, c) => (x(), p(o, {
|
|
113
|
-
open: v.open,
|
|
114
|
-
title: "Szűrők",
|
|
115
|
-
position: v.position,
|
|
116
|
-
onClose: c[0] ||= (e) => P("close")
|
|
117
|
-
}, {
|
|
118
|
-
default: T(() => [
|
|
119
|
-
g("div", {
|
|
120
|
-
class: "data-filters",
|
|
121
|
-
onKeydown: Y
|
|
122
|
-
}, [(x(!0), h(d, null, C(v.items, (e) => (x(), h("div", {
|
|
123
|
-
key: e.key,
|
|
124
|
-
class: b(["data-filters__field", { "data-filters__field--full": e.fullWidth || e.type === "separator" }])
|
|
125
|
-
}, [e.type === "separator" ? (x(), h("hr", E)) : e.type === "checkbox" ? (x(), p(r, y({
|
|
126
|
-
key: 1,
|
|
127
|
-
ref_for: !0,
|
|
128
|
-
ref: (t) => L(e.key, t),
|
|
129
|
-
"model-value": F.value[e.key] ?? !1,
|
|
130
|
-
label: e.label ?? e.key,
|
|
131
|
-
"onUpdate:modelValue": (t) => B(e, t)
|
|
132
|
-
}, { ref_for: !0 }, e.config), null, 16, [
|
|
133
|
-
"model-value",
|
|
134
|
-
"label",
|
|
135
|
-
"onUpdate:modelValue"
|
|
136
|
-
])) : [
|
|
137
|
-
"text",
|
|
138
|
-
"number",
|
|
139
|
-
"textarea"
|
|
140
|
-
].includes(e.type) ? (x(), p(n, y({
|
|
141
|
-
key: 2,
|
|
142
|
-
type: e.type,
|
|
143
|
-
ref_for: !0,
|
|
144
|
-
ref: (t) => L(e.key, t),
|
|
145
|
-
id: `df-${e.key}`,
|
|
146
|
-
"model-value": F.value[e.key] ?? "",
|
|
147
|
-
label: e.label ?? e.key,
|
|
148
|
-
placeholder: e.placeholder,
|
|
149
|
-
"onUpdate:modelValue": (t) => B(e, t || null)
|
|
150
|
-
}, { ref_for: !0 }, e.config), null, 16, [
|
|
151
|
-
"type",
|
|
152
|
-
"id",
|
|
153
|
-
"model-value",
|
|
154
|
-
"label",
|
|
155
|
-
"placeholder",
|
|
156
|
-
"onUpdate:modelValue"
|
|
157
|
-
])) : e.type === "date" || e.type === "datetime" ? (x(), h(d, { key: 3 }, [g("label", {
|
|
158
|
-
class: "c-label",
|
|
159
|
-
for: `df-${e.key}`
|
|
160
|
-
}, w(e.label ?? e.key), 9, D), _(t, {
|
|
161
|
-
ref_for: !0,
|
|
162
|
-
ref: (t) => L(e.key, t),
|
|
163
|
-
id: `df-${e.key}`,
|
|
164
|
-
"model-value": F.value[e.key] ?? null,
|
|
165
|
-
config: R(e),
|
|
166
|
-
"onUpdate:modelValue": (t) => B(e, t)
|
|
167
|
-
}, null, 8, [
|
|
168
|
-
"id",
|
|
169
|
-
"model-value",
|
|
170
|
-
"config",
|
|
171
|
-
"onUpdate:modelValue"
|
|
172
|
-
])], 64)) : e.type === "daterange" || e.type === "datetimerange" ? (x(), h(d, { key: 4 }, [g("span", O, w(e.label ?? e.key), 1), _(i, {
|
|
173
|
-
ref_for: !0,
|
|
174
|
-
ref: (t) => L(e.key, t),
|
|
175
|
-
"model-value": F.value[e.key] ?? null,
|
|
176
|
-
config: z(e),
|
|
177
|
-
"onUpdate:modelValue": (t) => B(e, t)
|
|
178
|
-
}, null, 8, [
|
|
179
|
-
"model-value",
|
|
180
|
-
"config",
|
|
181
|
-
"onUpdate:modelValue"
|
|
182
|
-
])], 64)) : e.type === "dropdown" ? (x(), h(d, { key: 5 }, [g("span", k, w(e.label ?? e.key), 1), _(a, {
|
|
183
|
-
ref_for: !0,
|
|
184
|
-
ref: (t) => L(e.key, t),
|
|
185
|
-
"model-value": F.value[e.key] ?? null,
|
|
186
|
-
options: e.options ?? [],
|
|
187
|
-
config: {
|
|
188
|
-
...e.config ?? {},
|
|
189
|
-
placeholder: e.placeholder ?? "Válassz...",
|
|
190
|
-
clearable: !0,
|
|
191
|
-
filterable: !0
|
|
192
|
-
},
|
|
193
|
-
onFilterInput: (t) => X(e, t),
|
|
194
|
-
"onUpdate:modelValue": (t) => B(e, t)
|
|
195
|
-
}, null, 8, [
|
|
196
|
-
"model-value",
|
|
197
|
-
"options",
|
|
198
|
-
"config",
|
|
199
|
-
"onFilterInput",
|
|
200
|
-
"onUpdate:modelValue"
|
|
201
|
-
])], 64)) : m("", !0)], 2))), 128))], 32),
|
|
202
|
-
g("div", A, [_(e, {
|
|
203
|
-
icon: "fa-solid fa-trash-can",
|
|
204
|
-
disabled: !V.value,
|
|
205
|
-
label: "Szűrők törlése",
|
|
206
|
-
"aria-label": "Szűrők törlése",
|
|
207
|
-
size: "small",
|
|
208
|
-
onClick: G
|
|
209
|
-
}, null, 8, ["disabled"]), _(e, {
|
|
210
|
-
label: "Szűrés",
|
|
211
|
-
"aria-label": "Szűrés",
|
|
212
|
-
type: "success",
|
|
213
|
-
onClick: W
|
|
214
|
-
})]),
|
|
215
|
-
v.historyEnabled ? (x(), h(d, { key: 0 }, [c[1] ||= g("hr", { class: "separator my-3" }, null, -1), _(u, {
|
|
216
|
-
items: v.items,
|
|
217
|
-
values: F.value,
|
|
218
|
-
"storage-key": v.storageKey,
|
|
219
|
-
onLoad: J
|
|
220
|
-
}, null, 8, [
|
|
221
|
-
"items",
|
|
222
|
-
"values",
|
|
223
|
-
"storage-key"
|
|
224
|
-
])], 64)) : m("", !0)
|
|
225
|
-
]),
|
|
226
|
-
_: 1
|
|
227
|
-
}, 8, ["open", "position"]));
|
|
1
|
+
import { getFullStorageKey as e } from "./admins-components75.js";
|
|
2
|
+
import { getUrlParam as t, removeUrlParam as n, setUrlParam as r } from "./admins-components76.js";
|
|
3
|
+
import { parseDropdownValue as i } from "./admins-components83.js";
|
|
4
|
+
//#region src/utils/dataFilters.ts
|
|
5
|
+
function a(e, t, n = !0) {
|
|
6
|
+
let r = o(e), i = Object.keys(r).length > 0, a = (i ? null : c(t))?.values ?? {}, s = {};
|
|
7
|
+
for (let t of e) {
|
|
8
|
+
if (t.type === "separator") continue;
|
|
9
|
+
let e;
|
|
10
|
+
if (t.key in r) e = r[t.key];
|
|
11
|
+
else if (i) continue;
|
|
12
|
+
else if (t.key in a) e = a[t.key];
|
|
13
|
+
else if (t.value !== void 0) e = t.value;
|
|
14
|
+
else continue;
|
|
15
|
+
if (e != null) if (n && t.transformer) {
|
|
16
|
+
let n = t.transformer(e);
|
|
17
|
+
n && Object.assign(s, n);
|
|
18
|
+
} else s[t.key] = e;
|
|
228
19
|
}
|
|
229
|
-
|
|
20
|
+
return s;
|
|
21
|
+
}
|
|
22
|
+
function o(e) {
|
|
23
|
+
let n = {};
|
|
24
|
+
for (let r of e) {
|
|
25
|
+
if (r.type === "separator") continue;
|
|
26
|
+
let e = t(r.key);
|
|
27
|
+
e && (n[r.key] = u(r.type, e, r.value));
|
|
28
|
+
}
|
|
29
|
+
return n;
|
|
30
|
+
}
|
|
31
|
+
function s(t) {
|
|
32
|
+
try {
|
|
33
|
+
let n = e("filters", t), r = JSON.parse(localStorage.getItem(n) ?? "[]");
|
|
34
|
+
return Array.isArray(r) ? r.filter((e) => e && typeof e == "object" && typeof e.id == "string" && e.values && typeof e.savedAt == "string") : [];
|
|
35
|
+
} catch {
|
|
36
|
+
return [];
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function c(e) {
|
|
40
|
+
return s(e).find((e) => e.isDefault) ?? null;
|
|
41
|
+
}
|
|
42
|
+
function l(e) {
|
|
43
|
+
return Object.fromEntries(Object.entries(e).filter(([e, t]) => t !== null && t !== "" && t !== void 0));
|
|
44
|
+
}
|
|
45
|
+
function u(e, t, n) {
|
|
46
|
+
if (e === "number") {
|
|
47
|
+
let e = Number(t);
|
|
48
|
+
return isNaN(e) ? n ?? null : e;
|
|
49
|
+
}
|
|
50
|
+
return e === "date" || e === "datetime" ? { utc: t } : e === "daterange" || e === "datetimerange" ? d(t, n) : e === "dropdown" ? i(t) : e === "checkbox" ? t === "true" : t;
|
|
51
|
+
}
|
|
52
|
+
function d(e, t) {
|
|
53
|
+
try {
|
|
54
|
+
let t = JSON.parse(e);
|
|
55
|
+
return t && typeof t == "object" && "local" in t && t.local && (t.local = new Date(t.local)), t;
|
|
56
|
+
} catch {
|
|
57
|
+
return t ?? null;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function f(e, t) {
|
|
61
|
+
for (let i of e) {
|
|
62
|
+
if (i.type === "separator") continue;
|
|
63
|
+
let e = t[i.key];
|
|
64
|
+
e == null || e === "" ? n(i.key) : i.type === "date" || i.type === "datetime" ? r(i.key, e.utc) : typeof e == "object" ? r(i.key, JSON.stringify(e)) : r(i.key, String(e));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
230
67
|
//#endregion
|
|
231
|
-
export {
|
|
68
|
+
export { l as filterEmptyValues, a as getDefaultFilters, c as getDefaultSavedFilter, o as getFilterUrlParams, s as getSavedFilters, f as writeFilterParams };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admins-components84.js","names":[],"sources":["../src/components/data-table/DataFilters.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { DropdownOption } from '@/components/DropdownSelect.vue'\n\nexport interface FilterItem {\n type: FilterItemType\n key: string\n label?: string\n placeholder?: string\n value?: any\n options?: DropdownOption[]\n fullWidth?: boolean\n config?: Record<string, any>\n displayClass?: string\n transformer?: (value: any) => Record<string, any> | null | undefined\n onInnerSearch?: (value: string) => void\n onChange?: (value: any) => void\n}\n\nexport interface FilterResponse {\n values: Record<string, any>\n transformed: Record<string, any>\n}\n\nexport interface DataFiltersProps {\n items: FilterItem[]\n open?: boolean\n position?: SidebarPosition\n lazy?: boolean\n handleUrl?: boolean\n historyEnabled?: boolean\n storageKey?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport Sidebar, { type SidebarPosition } from '@/components/Sidebar.vue'\nimport DatePicker from '@/components/DatePicker.vue'\nimport DateRangePicker from '@/components/DateRangePicker.vue'\nimport DropdownSelect from '@/components/DropdownSelect.vue'\nimport TextInput, { type TextInputType } from '@/components/TextInput.vue'\nimport Button from '@/components/Button.vue'\nimport Checkbox from '@/components/Checkbox.vue'\nimport FiltersHistory from '@/components/data-table/FiltersHistory.vue'\nimport type { DatePickerConfig, DateRangePickerConfig } from '@/types/datepickers'\nimport type { FilterItemType, PickedDate, PickedUtcRange } from '@/types/types'\nimport { filterEmptyValues, getDefaultFilters, writeFilterParams } from '@/utils/dataFilters'\n\nconst props = withDefaults(defineProps<DataFiltersProps>(), {\n open: false,\n position: 'left',\n lazy: true,\n handleUrl: false,\n historyEnabled: true,\n})\n\nconst emit = defineEmits<{\n close: []\n change: [response: FilterResponse]\n}>()\n\nconst values = ref<Record<string, any>>(getDefaultFilters(props.items, props.storageKey, false))\nconst filterRefs = ref<Record<string, any>>({})\n\nfunction setFilterRef(key: string, el: any) {\n if (el) filterRefs.value[key] = el\n else delete filterRefs.value[key]\n}\n\nfunction buildDatePickerConfig(item: FilterItem): DatePickerConfig {\n return {\n ...(item.config ?? {}),\n showTime: item.type === 'datetime',\n placeholder: item.placeholder ?? (item.type === 'datetime' ? 'Időpont' : 'Dátum'),\n }\n}\n\nfunction buildDateRangePickerConfig(item: FilterItem): DateRangePickerConfig {\n return {\n ...(item.config ?? {}),\n ...(!item.fullWidth ? { compact: true } : {}),\n showTime: item.type === 'datetimerange',\n }\n}\n\nfunction update(item: FilterItem, value: any) {\n const stored = typeof value === 'string' ? value.trim() : value\n values.value = { ...values.value, [item.key]: stored }\n if (item.onChange) item.onChange(stored)\n if (!props.lazy) emitChange()\n}\n\nconst hasActiveFilters = computed(() =>\n Object.values(values.value).some((v) => v !== null && v !== '' && v !== undefined),\n)\n\nfunction buildResponse(): FilterResponse {\n const transformed: Record<string, any> = {}\n for (const item of props.items) {\n if (item.type === 'separator') continue\n const val = values.value[item.key]\n if (item.transformer) Object.assign(transformed, item.transformer(val) ?? {})\n else transformed[item.key] = val\n }\n return { values: filterEmptyValues(values.value), transformed: filterEmptyValues(transformed) }\n}\n\nfunction emitChange() {\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', buildResponse())\n}\n\nfunction confirm() {\n emitChange()\n emit('close')\n}\n\nfunction clearAll() {\n values.value = {}\n emitChange()\n}\n\nfunction clearFilter(key: string) {\n values.value = { ...values.value, [key]: null }\n emitChange()\n}\n\nfunction focusFilter(key: string) {\n const el = (filterRefs.value as Record<string, any>)[key]\n if (!el) return\n\n if (typeof el.focusAndOpen === 'function') el.focusAndOpen()\n else if (typeof el.focus === 'function') el.focus()\n}\n\nfunction onHistoryLoad(loaded: Record<string, any>) {\n const next: Record<string, any> = { ...values.value }\n for (const item of props.items) {\n if (item.type === 'separator') continue\n if (item.key in loaded) next[item.key] = loaded[item.key] ?? null\n }\n values.value = next\n emitChange()\n}\n\ndefineExpose({ clearFilter, focusFilter })\n\nfunction handleFilterKeydown(event: KeyboardEvent) {\n if (event.key !== 'Enter') return\n\n // Allow Enter in textarea for line breaks\n const target = event.target as HTMLElement\n if (target?.tagName === 'TEXTAREA') return\n\n event.preventDefault()\n confirm()\n}\n\nfunction handleDropdownFilterInput(item: FilterItem, text: string) {\n if (item.onInnerSearch) item.onInnerSearch(text)\n}\n</script>\n\n<template>\n <Sidebar :open=\"open\" title=\"Szűrők\" :position=\"position\" @close=\"emit('close')\">\n <div class=\"data-filters\" @keydown=\"handleFilterKeydown\">\n <div\n v-for=\"item in items\"\n :key=\"item.key\"\n class=\"data-filters__field\"\n :class=\"{ 'data-filters__field--full': item.fullWidth || item.type === 'separator' }\"\n >\n <hr v-if=\"item.type === 'separator'\" class=\"data-filters__separator\" />\n <template v-else-if=\"item.type === 'checkbox'\">\n <Checkbox\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as boolean) ?? false\"\n :label=\"item.label ?? item.key\"\n @update:model-value=\"(val) => update(item, val)\"\n v-bind=\"item.config\"\n />\n </template>\n <template v-else-if=\"['text', 'number', 'textarea'].includes(item.type)\">\n <TextInput\n :type=\"item.type as TextInputType\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n :model-value=\"(values[item.key] as string) ?? ''\"\n :label=\"item.label ?? item.key\"\n :placeholder=\"item.placeholder\"\n @update:model-value=\"(val) => update(item, val || null)\"\n v-bind=\"item.config\"\n />\n </template>\n <template v-else-if=\"item.type === 'date' || item.type === 'datetime'\">\n <label class=\"c-label\" :for=\"`df-${item.key}`\">{{ item.label ?? item.key }}</label>\n <DatePicker\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n :model-value=\"(values[item.key] as PickedDate) ?? null\"\n :config=\"buildDatePickerConfig(item)\"\n @update:model-value=\"(val) => update(item, val)\"\n />\n </template>\n <template v-else-if=\"item.type === 'daterange' || item.type === 'datetimerange'\">\n <span class=\"c-label\">{{ item.label ?? item.key }}</span>\n <DateRangePicker\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as PickedUtcRange) ?? null\"\n :config=\"buildDateRangePickerConfig(item)\"\n @update:model-value=\"(val) => update(item, val)\"\n />\n </template>\n <template v-else-if=\"item.type === 'dropdown'\">\n <span class=\"c-label\">{{ item.label ?? item.key }}</span>\n <DropdownSelect\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as string) ?? null\"\n :options=\"item.options ?? []\"\n :config=\"{\n ...(item.config ?? {}),\n placeholder: item.placeholder ?? 'Válassz...',\n clearable: true,\n filterable: true,\n }\"\n @filter-input=\"handleDropdownFilterInput(item, $event)\"\n @update:model-value=\"(val) => update(item, val)\"\n />\n </template>\n </div>\n </div>\n <div class=\"data-filters__footer\">\n <Button\n icon=\"fa-solid fa-trash-can\"\n :disabled=\"!hasActiveFilters\"\n label=\"Szűrők törlése\"\n aria-label=\"Szűrők törlése\"\n size=\"small\"\n @click=\"clearAll\"\n />\n <Button label=\"Szűrés\" aria-label=\"Szűrés\" type=\"success\" @click=\"confirm\" />\n </div>\n <template v-if=\"historyEnabled\">\n <hr class=\"separator my-3\" />\n <FiltersHistory\n :items=\"items\"\n :values=\"values\"\n :storage-key=\"storageKey\"\n @load=\"onHistoryLoad\"\n />\n </template>\n </Sidebar>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-filters.scss\"></style>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"admins-components84.js","names":[],"sources":["../src/utils/dataFilters.ts"],"sourcesContent":["import type { FilterItem } from '@/components/data-table/DataFilters.vue'\nimport type { SavedFilter } from '@/components/data-table/FiltersHistory.vue'\nimport { parseDropdownValue } from '@/utils/filterDisplay'\nimport { getFullStorageKey } from '@/utils/storageKey'\nimport { getUrlParam, setUrlParam, removeUrlParam } from '@/utils/url'\n\n export function getDefaultFilters(\n items: FilterItem[],\n storageKey?: string,\n useTransformers = true,\n): Record<string, unknown> {\n const urlFilters = getFilterUrlParams(items)\n const hasUrlParams = Object.keys(urlFilters).length > 0\n const defaultFilter = hasUrlParams ? null : getDefaultSavedFilter(storageKey)\n const defaultSavedValues = defaultFilter?.values ?? {}\n\n const result: Record<string, unknown> = {}\n\n for (const item of items) {\n if (item.type === 'separator') continue\n\n let value: unknown\n\n if (item.key in urlFilters) {\n value = urlFilters[item.key]\n } else if (hasUrlParams) {\n continue\n } else if (item.key in defaultSavedValues) {\n value = defaultSavedValues[item.key]\n } else if (item.value !== undefined) {\n value = item.value\n } else {\n continue\n }\n\n if (value == null) continue\n\n if (useTransformers && item.transformer) {\n const transformed = item.transformer(value)\n if (transformed) {\n Object.assign(result, transformed)\n }\n } else {\n result[item.key] = value\n }\n }\n\n return result\n}\n\nexport function getFilterUrlParams(items: FilterItem[]): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n\n for (const item of items) {\n if (item.type === 'separator') continue\n\n const raw = getUrlParam(item.key)\n if (raw) {\n result[item.key] = parseFilterValue(item.type, raw, item.value)\n }\n }\n return result\n}\n\nexport function getSavedFilters(storageKey?: string): SavedFilter[] {\n try {\n const fullStorageKey = getFullStorageKey('filters', storageKey)\n const parsed = JSON.parse(localStorage.getItem(fullStorageKey) ?? '[]')\n return Array.isArray(parsed)\n ? parsed.filter(\n (e) =>\n e &&\n typeof e === 'object' &&\n typeof e.id === 'string' &&\n e.values &&\n typeof e.savedAt === 'string',\n )\n : []\n } catch {\n return []\n }\n}\n\nexport function getDefaultSavedFilter(storageKey?: string): SavedFilter | null {\n const savedFilters = getSavedFilters(storageKey)\n return savedFilters.find((f) => f.isDefault) ?? null\n}\n\nexport function filterEmptyValues(filters: Record<string, any>): Record<string, any> {\n return Object.fromEntries(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Object.entries(filters).filter(([_, val]) => val !== null && val !== '' && val !== undefined),\n )\n}\n\nfunction parseFilterValue(type: FilterItem['type'], raw: string, fallback: unknown): unknown {\n if (type === 'number') {\n const n = Number(raw)\n return isNaN(n) ? (fallback ?? null) : n\n }\n if (type === 'date' || type === 'datetime') {\n return { utc: raw }\n }\n if (type === 'daterange' || type === 'datetimerange') {\n return parseRangeValue(raw, fallback)\n }\n if (type === 'dropdown') {\n return parseDropdownValue(raw)\n }\n if (type === 'checkbox') {\n return raw === 'true'\n }\n\n return raw\n}\n\nfunction parseRangeValue(raw: string, fallback: unknown): unknown {\n try {\n const parsed = JSON.parse(raw)\n if (parsed && typeof parsed === 'object' && 'local' in parsed && parsed.local) {\n parsed.local = new Date(parsed.local)\n }\n return parsed\n } catch {\n return fallback ?? null\n }\n}\n\nexport function writeFilterParams(items: FilterItem[], vals: Record<string, unknown>) {\n for (const item of items) {\n if (item.type === 'separator') continue\n const v = vals[item.key]\n if (v === null || v === undefined || v === '') {\n removeUrlParam(item.key)\n } else if (item.type === 'date' || item.type === 'datetime') {\n setUrlParam(item.key, (v as { utc: string }).utc)\n } else if (typeof v === 'object') {\n setUrlParam(item.key, JSON.stringify(v))\n } else {\n setUrlParam(item.key, String(v))\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -2,8 +2,8 @@ import { formatDate as e } from "./admins-components3.js";
|
|
|
2
2
|
import t from "./admins-components6.js";
|
|
3
3
|
import n from "./admins-components42.js";
|
|
4
4
|
import { getFullStorageKey as r } from "./admins-components75.js";
|
|
5
|
-
import { buildFilterDisplay as i } from "./admins-
|
|
6
|
-
import { getSavedFilters as ee } from "./admins-
|
|
5
|
+
import { buildFilterDisplay as i } from "./admins-components83.js";
|
|
6
|
+
import { getSavedFilters as ee } from "./admins-components84.js";
|
|
7
7
|
import { Fragment as a, computed as o, createBlock as s, createCommentVNode as c, createElementBlock as l, createElementVNode as u, createTextVNode as d, createVNode as te, defineComponent as f, nextTick as p, normalizeClass as m, onMounted as ne, openBlock as h, ref as g, renderList as _, resolveDirective as v, toDisplayString as y, vModelText as b, watch as re, withDirectives as x, withKeys as S, withModifiers as C } from "vue";
|
|
8
8
|
//#region src/components/data-table/FiltersHistory.vue?vue&type=script&setup=true&lang.ts
|
|
9
9
|
var ie = { class: "ac-component" }, ae = { class: "filters-history" }, oe = ["aria-expanded"], se = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admins-components81.js","names":[],"sources":["../src/components/data-table/FiltersHistory.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface SavedFilter {\n id: string\n savedAt: string\n name?: string\n values: Record<string, any>\n isDefault?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, ref, watch, nextTick } from 'vue'\nimport Button from '@/components/Button.vue'\nimport ConfirmModal from '@/components/ConfirmModal.vue'\nimport type { FilterItem } from '@/components/data-table/DataFilters.vue'\nimport { formatDate } from '@/utils/date'\nimport { buildFilterDisplay } from '@/utils/filterDisplay'\nimport { getSavedFilters } from '@/utils/dataFilters'\nimport { getFullStorageKey } from '@/utils/storageKey'\n\nconst props = defineProps<{\n items: FilterItem[]\n values: Record<string, any>\n storageKey?: string\n}>()\n\nconst MAX_ITEM_LIMIT = 50\nconst MAX_ITEM_WARNING_THRESHOLD = 7\n\nconst emit = defineEmits<{\n load: [values: Record<string, any>]\n}>()\n\nconst open = ref(false)\nconst entries = ref<SavedFilter[]>([])\nconst filterSetName = ref('')\nconst expandedIds = ref<Set<string>>(new Set())\nconst confirmingClearAll = ref(false)\n\nfunction isExpanded(id: string): boolean {\n return expandedIds.value.has(id)\n}\n\nfunction toggleExpanded(id: string): void {\n const next = new Set(expandedIds.value)\n if (next.has(id)) {\n next.delete(id)\n } else {\n next.add(id)\n }\n expandedIds.value = next\n}\n\nfunction loadFromStorage() {\n entries.value = getSavedFilters(props.storageKey)\n}\n\nfunction persist() {\n try {\n const fullStorageKey = getFullStorageKey('filters', props.storageKey)\n localStorage.setItem(fullStorageKey, JSON.stringify(entries.value))\n } catch {\n console.warn('Failed to persist saved filters to localStorage')\n }\n}\n\nonMounted(loadFromStorage)\n\nconst hasActiveFilters = computed(() =>\n Object.values(props.values).some((v) => v !== null && v !== '' && v !== undefined),\n)\n\nfunction makeId(): string {\n return Date.now().toString(36)\n}\n\nwatch(\n () => [props.values, filterSetName.value],\n () => {\n if (justSaved.value) {\n justSaved.value = false\n }\n },\n { deep: true },\n)\n\nconst justSaved = ref(false)\n\nfunction save() {\n if (!hasActiveFilters.value) return\n\n const trimmed = filterSetName.value.trim()\n const entry: SavedFilter = {\n id: makeId(),\n savedAt: new Date().toISOString(),\n name: trimmed || undefined,\n values: { ...props.values },\n }\n entries.value = [entry, ...entries.value].slice(0, MAX_ITEM_LIMIT)\n filterSetName.value = ''\n\n persist()\n nextTick(() => {\n justSaved.value = true\n })\n}\n\nfunction load(entry: SavedFilter) {\n emit('load', { ...entry.values })\n}\n\nfunction remove(entry: SavedFilter) {\n entries.value = entries.value.filter((e) => e.id !== entry.id)\n if (expandedIds.value.has(entry.id)) {\n const next = new Set(expandedIds.value)\n next.delete(entry.id)\n expandedIds.value = next\n }\n persist()\n}\n\nfunction clearAll() {\n entries.value = []\n expandedIds.value = new Set()\n persist()\n confirmingClearAll.value = false\n}\n\nfunction buildEntry(entry: SavedFilter) {\n return buildFilterDisplay(props.items, entry.values)\n}\n\nconst entryDisplays = computed(() => {\n const map = new Map<string, ReturnType<typeof buildEntry>>()\n for (const entry of entries.value) {\n map.set(entry.id, buildEntry(entry))\n }\n return map\n})\n\nfunction getEntryDisplay(entry: SavedFilter) {\n return entryDisplays.value.get(entry.id) ?? buildEntry(entry)\n}\n\nconst sortedEntries = computed(() => {\n const defaultEntry = entries.value.find((e) => e.isDefault)\n if (!defaultEntry) return entries.value\n return [defaultEntry, ...entries.value.filter((e) => !e.isDefault)]\n})\n\nconst hasWarning = computed(() => {\n return entries.value.length >= MAX_ITEM_LIMIT - MAX_ITEM_WARNING_THRESHOLD\n})\n\nfunction formatSavedAt(iso: string): string {\n const d = new Date(iso)\n if (isNaN(d.getTime())) return iso\n return formatDate(d, 'YYYY-MM-DD HH:mm')\n}\n\nfunction toggleDefault(entry: SavedFilter) {\n if (entry.isDefault) {\n entry.isDefault = false\n } else {\n entries.value.forEach((e) => {\n e.isDefault = false\n })\n entry.isDefault = true\n }\n persist()\n}\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div class=\"filters-history\">\n <button\n type=\"button\"\n class=\"filters-history__toggle\"\n :class=\"{ 'is-open': open }\"\n :aria-expanded=\"open\"\n @click=\"open = !open\"\n >\n <i class=\"fa-solid fa-sliders filters-history__toggle-icon\"></i>\n <span class=\"filters-history__toggle-label\">Mentett szűrők</span>\n <span v-if=\"entries.length\" class=\"c-indicator\">{{ entries.length }}</span>\n <span v-if=\"hasWarning\" v-tooltip=\"`Maximum ${MAX_ITEM_LIMIT} szűrő menthető`\"\n >/ {{ MAX_ITEM_LIMIT }}</span\n >\n <i\n class=\"fa-solid filters-history__chevron\"\n :class=\"open ? 'fa-chevron-up' : 'fa-chevron-down'\"\n ></i>\n </button>\n\n <div v-if=\"open\" class=\"filters-history__panel c-scroll\">\n <div class=\"filters-history__save-row\">\n <input\n v-model=\"filterSetName\"\n type=\"text\"\n class=\"c-input-row c-input-row--sm\"\n placeholder=\"Elnevezés\"\n @keydown.enter=\"save\"\n />\n <Button\n icon=\"fa-solid fa-bookmark\"\n label=\"Mentés\"\n size=\"small\"\n type=\"info\"\n :disabled=\"!hasActiveFilters || justSaved\"\n @click=\"save\"\n />\n </div>\n\n <p v-if=\"!hasActiveFilters && entries.length === 0\" class=\"filters-history__hint\">\n Nincs aktív szűrő. Adj meg értékeket a mentéshez.\n </p>\n <p v-else-if=\"entries.length === 0\" class=\"filters-history__hint\">\n Még nincs mentett szűrő.<br />\n Az aktuális beállítások a „Mentés\" gombbal menthetők.<br />\n Az „Elnevezés\" mező csak a könnyebb azonosítás miatt van, megadása nem kötelező.\n </p>\n\n <template v-if=\"entries.length > 0\">\n <ul class=\"filters-history__list\">\n <li\n v-for=\"entry in sortedEntries\"\n :key=\"entry.id\"\n class=\"filters-history__item\"\n :class=\"{ 'is-open': isExpanded(entry.id), 'is-default': entry.isDefault }\"\n >\n <div\n class=\"filters-history__item-header\"\n role=\"button\"\n tabindex=\"0\"\n :aria-expanded=\"isExpanded(entry.id)\"\n @click=\"toggleExpanded(entry.id)\"\n @keydown.enter.prevent=\"toggleExpanded(entry.id)\"\n @keydown.space.prevent=\"toggleExpanded(entry.id)\"\n >\n <i\n class=\"fa-solid filters-history__item-chevron\"\n :class=\"isExpanded(entry.id) ? 'fa-chevron-down' : 'fa-chevron-right'\"\n ></i>\n <span class=\"filters-history__item-header-text\">\n <span class=\"filters-history__item-name\">{{ entry.name }}</span>\n <span v-if=\"entry.name\" class=\"filters-history__item-date\">{{\n formatSavedAt(entry.savedAt)\n }}</span>\n </span>\n <div class=\"filters-history__item-actions\" @click.stop>\n <button\n type=\"button\"\n class=\"c-indicator filters-history__item-btn filters-history__item-default\"\n @click=\"toggleDefault(entry)\"\n :class=\"{ active: entry.isDefault }\"\n :aria-label=\"\n entry.isDefault\n ? 'Alapértelmezett szűrő törlése'\n : 'Alapértelmezett szűrő beállítása'\n \"\n :title=\"\n entry.isDefault\n ? 'Alapértelmezett szűrő törlése'\n : 'Alapértelmezett szűrő beállítása'\n \"\n >\n <i\n class=\"fa-star fix-icon-pos\"\n :class=\"entry.isDefault ? 'fa-solid' : 'fa-regular'\"\n ></i>\n </button>\n <button\n type=\"button\"\n class=\"c-indicator filters-history__item-btn filters-history__item-load\"\n aria-label=\"Betöltés\"\n title=\"Betöltés\"\n @click=\"load(entry)\"\n >\n <i class=\"fa-solid fa-check\"></i>\n </button>\n <span\n v-if=\"getEntryDisplay(entry).length\"\n class=\"c-indicator\"\n @click.stop=\"toggleExpanded(entry.id)\"\n v-tooltip=\"`${getEntryDisplay(entry).length} szűrési feltétel`\"\n >{{ getEntryDisplay(entry).length }}</span\n >\n <button\n type=\"button\"\n class=\"c-indicator filters-history__item-btn filters-history__item-remove\"\n aria-label=\"Törlés\"\n title=\"Törlés\"\n @click=\"remove(entry)\"\n >\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n </div>\n <div v-if=\"isExpanded(entry.id)\" class=\"filters-history__item-content\">\n <div v-if=\"getEntryDisplay(entry).length\" class=\"filters-history__item-body\">\n <span\n v-for=\"(part, idx) in getEntryDisplay(entry)\"\n :key=\"idx\"\n class=\"c-chip\"\n :class=\"part.displayClass\"\n >\n {{ part.text }}\n </span>\n </div>\n <p v-else class=\"filters-history__item-empty\">Nincs megjeleníthető szűrő.</p>\n </div>\n </li>\n </ul>\n </template>\n\n <div v-if=\"entries.length > 3\">\n <hr class=\"separator my-1\" />\n <a\n v-if=\"entries.length\"\n class=\"filters-history__clear-all px-2\"\n @click=\"confirmingClearAll = true\"\n >Összes törlése</a\n >\n <ConfirmModal\n v-if=\"confirmingClearAll\"\n title=\"Mentett szűrők törlése\"\n message=\"Biztosan törlöd az összes mentett szűrőt?\"\n confirm-label=\"Törlés\"\n cancel-label=\"Mégse\"\n type=\"error\"\n @confirm=\"clearAll()\"\n @cancel=\"confirmingClearAll = false\"\n />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/filters-history.scss\"></style>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"admins-components85.js","names":[],"sources":["../src/components/data-table/FiltersHistory.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface SavedFilter {\n id: string\n savedAt: string\n name?: string\n values: Record<string, any>\n isDefault?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, ref, watch, nextTick } from 'vue'\nimport Button from '@/components/Button.vue'\nimport ConfirmModal from '@/components/ConfirmModal.vue'\nimport type { FilterItem } from '@/components/data-table/DataFilters.vue'\nimport { formatDate } from '@/utils/date'\nimport { buildFilterDisplay } from '@/utils/filterDisplay'\nimport { getSavedFilters } from '@/utils/dataFilters'\nimport { getFullStorageKey } from '@/utils/storageKey'\n\nconst props = defineProps<{\n items: FilterItem[]\n values: Record<string, any>\n storageKey?: string\n}>()\n\nconst MAX_ITEM_LIMIT = 50\nconst MAX_ITEM_WARNING_THRESHOLD = 7\n\nconst emit = defineEmits<{\n load: [values: Record<string, any>]\n}>()\n\nconst open = ref(false)\nconst entries = ref<SavedFilter[]>([])\nconst filterSetName = ref('')\nconst expandedIds = ref<Set<string>>(new Set())\nconst confirmingClearAll = ref(false)\n\nfunction isExpanded(id: string): boolean {\n return expandedIds.value.has(id)\n}\n\nfunction toggleExpanded(id: string): void {\n const next = new Set(expandedIds.value)\n if (next.has(id)) {\n next.delete(id)\n } else {\n next.add(id)\n }\n expandedIds.value = next\n}\n\nfunction loadFromStorage() {\n entries.value = getSavedFilters(props.storageKey)\n}\n\nfunction persist() {\n try {\n const fullStorageKey = getFullStorageKey('filters', props.storageKey)\n localStorage.setItem(fullStorageKey, JSON.stringify(entries.value))\n } catch {\n console.warn('Failed to persist saved filters to localStorage')\n }\n}\n\nonMounted(loadFromStorage)\n\nconst hasActiveFilters = computed(() =>\n Object.values(props.values).some((v) => v !== null && v !== '' && v !== undefined),\n)\n\nfunction makeId(): string {\n return Date.now().toString(36)\n}\n\nwatch(\n () => [props.values, filterSetName.value],\n () => {\n if (justSaved.value) {\n justSaved.value = false\n }\n },\n { deep: true },\n)\n\nconst justSaved = ref(false)\n\nfunction save() {\n if (!hasActiveFilters.value) return\n\n const trimmed = filterSetName.value.trim()\n const entry: SavedFilter = {\n id: makeId(),\n savedAt: new Date().toISOString(),\n name: trimmed || undefined,\n values: { ...props.values },\n }\n entries.value = [entry, ...entries.value].slice(0, MAX_ITEM_LIMIT)\n filterSetName.value = ''\n\n persist()\n nextTick(() => {\n justSaved.value = true\n })\n}\n\nfunction load(entry: SavedFilter) {\n emit('load', { ...entry.values })\n}\n\nfunction remove(entry: SavedFilter) {\n entries.value = entries.value.filter((e) => e.id !== entry.id)\n if (expandedIds.value.has(entry.id)) {\n const next = new Set(expandedIds.value)\n next.delete(entry.id)\n expandedIds.value = next\n }\n persist()\n}\n\nfunction clearAll() {\n entries.value = []\n expandedIds.value = new Set()\n persist()\n confirmingClearAll.value = false\n}\n\nfunction buildEntry(entry: SavedFilter) {\n return buildFilterDisplay(props.items, entry.values)\n}\n\nconst entryDisplays = computed(() => {\n const map = new Map<string, ReturnType<typeof buildEntry>>()\n for (const entry of entries.value) {\n map.set(entry.id, buildEntry(entry))\n }\n return map\n})\n\nfunction getEntryDisplay(entry: SavedFilter) {\n return entryDisplays.value.get(entry.id) ?? buildEntry(entry)\n}\n\nconst sortedEntries = computed(() => {\n const defaultEntry = entries.value.find((e) => e.isDefault)\n if (!defaultEntry) return entries.value\n return [defaultEntry, ...entries.value.filter((e) => !e.isDefault)]\n})\n\nconst hasWarning = computed(() => {\n return entries.value.length >= MAX_ITEM_LIMIT - MAX_ITEM_WARNING_THRESHOLD\n})\n\nfunction formatSavedAt(iso: string): string {\n const d = new Date(iso)\n if (isNaN(d.getTime())) return iso\n return formatDate(d, 'YYYY-MM-DD HH:mm')\n}\n\nfunction toggleDefault(entry: SavedFilter) {\n if (entry.isDefault) {\n entry.isDefault = false\n } else {\n entries.value.forEach((e) => {\n e.isDefault = false\n })\n entry.isDefault = true\n }\n persist()\n}\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div class=\"filters-history\">\n <button\n type=\"button\"\n class=\"filters-history__toggle\"\n :class=\"{ 'is-open': open }\"\n :aria-expanded=\"open\"\n @click=\"open = !open\"\n >\n <i class=\"fa-solid fa-sliders filters-history__toggle-icon\"></i>\n <span class=\"filters-history__toggle-label\">Mentett szűrők</span>\n <span v-if=\"entries.length\" class=\"c-indicator\">{{ entries.length }}</span>\n <span v-if=\"hasWarning\" v-tooltip=\"`Maximum ${MAX_ITEM_LIMIT} szűrő menthető`\"\n >/ {{ MAX_ITEM_LIMIT }}</span\n >\n <i\n class=\"fa-solid filters-history__chevron\"\n :class=\"open ? 'fa-chevron-up' : 'fa-chevron-down'\"\n ></i>\n </button>\n\n <div v-if=\"open\" class=\"filters-history__panel c-scroll\">\n <div class=\"filters-history__save-row\">\n <input\n v-model=\"filterSetName\"\n type=\"text\"\n class=\"c-input-row c-input-row--sm\"\n placeholder=\"Elnevezés\"\n @keydown.enter=\"save\"\n />\n <Button\n icon=\"fa-solid fa-bookmark\"\n label=\"Mentés\"\n size=\"small\"\n type=\"info\"\n :disabled=\"!hasActiveFilters || justSaved\"\n @click=\"save\"\n />\n </div>\n\n <p v-if=\"!hasActiveFilters && entries.length === 0\" class=\"filters-history__hint\">\n Nincs aktív szűrő. Adj meg értékeket a mentéshez.\n </p>\n <p v-else-if=\"entries.length === 0\" class=\"filters-history__hint\">\n Még nincs mentett szűrő.<br />\n Az aktuális beállítások a „Mentés\" gombbal menthetők.<br />\n Az „Elnevezés\" mező csak a könnyebb azonosítás miatt van, megadása nem kötelező.\n </p>\n\n <template v-if=\"entries.length > 0\">\n <ul class=\"filters-history__list\">\n <li\n v-for=\"entry in sortedEntries\"\n :key=\"entry.id\"\n class=\"filters-history__item\"\n :class=\"{ 'is-open': isExpanded(entry.id), 'is-default': entry.isDefault }\"\n >\n <div\n class=\"filters-history__item-header\"\n role=\"button\"\n tabindex=\"0\"\n :aria-expanded=\"isExpanded(entry.id)\"\n @click=\"toggleExpanded(entry.id)\"\n @keydown.enter.prevent=\"toggleExpanded(entry.id)\"\n @keydown.space.prevent=\"toggleExpanded(entry.id)\"\n >\n <i\n class=\"fa-solid filters-history__item-chevron\"\n :class=\"isExpanded(entry.id) ? 'fa-chevron-down' : 'fa-chevron-right'\"\n ></i>\n <span class=\"filters-history__item-header-text\">\n <span class=\"filters-history__item-name\">{{ entry.name }}</span>\n <span v-if=\"entry.name\" class=\"filters-history__item-date\">{{\n formatSavedAt(entry.savedAt)\n }}</span>\n </span>\n <div class=\"filters-history__item-actions\" @click.stop>\n <button\n type=\"button\"\n class=\"c-indicator filters-history__item-btn filters-history__item-default\"\n @click=\"toggleDefault(entry)\"\n :class=\"{ active: entry.isDefault }\"\n :aria-label=\"\n entry.isDefault\n ? 'Alapértelmezett szűrő törlése'\n : 'Alapértelmezett szűrő beállítása'\n \"\n :title=\"\n entry.isDefault\n ? 'Alapértelmezett szűrő törlése'\n : 'Alapértelmezett szűrő beállítása'\n \"\n >\n <i\n class=\"fa-star fix-icon-pos\"\n :class=\"entry.isDefault ? 'fa-solid' : 'fa-regular'\"\n ></i>\n </button>\n <button\n type=\"button\"\n class=\"c-indicator filters-history__item-btn filters-history__item-load\"\n aria-label=\"Betöltés\"\n title=\"Betöltés\"\n @click=\"load(entry)\"\n >\n <i class=\"fa-solid fa-check\"></i>\n </button>\n <span\n v-if=\"getEntryDisplay(entry).length\"\n class=\"c-indicator\"\n @click.stop=\"toggleExpanded(entry.id)\"\n v-tooltip=\"`${getEntryDisplay(entry).length} szűrési feltétel`\"\n >{{ getEntryDisplay(entry).length }}</span\n >\n <button\n type=\"button\"\n class=\"c-indicator filters-history__item-btn filters-history__item-remove\"\n aria-label=\"Törlés\"\n title=\"Törlés\"\n @click=\"remove(entry)\"\n >\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n </div>\n <div v-if=\"isExpanded(entry.id)\" class=\"filters-history__item-content\">\n <div v-if=\"getEntryDisplay(entry).length\" class=\"filters-history__item-body\">\n <span\n v-for=\"(part, idx) in getEntryDisplay(entry)\"\n :key=\"idx\"\n class=\"c-chip\"\n :class=\"part.displayClass\"\n >\n {{ part.text }}\n </span>\n </div>\n <p v-else class=\"filters-history__item-empty\">Nincs megjeleníthető szűrő.</p>\n </div>\n </li>\n </ul>\n </template>\n\n <div v-if=\"entries.length > 3\">\n <hr class=\"separator my-1\" />\n <a\n v-if=\"entries.length\"\n class=\"filters-history__clear-all px-2\"\n @click=\"confirmingClearAll = true\"\n >Összes törlése</a\n >\n <ConfirmModal\n v-if=\"confirmingClearAll\"\n title=\"Mentett szűrők törlése\"\n message=\"Biztosan törlöd az összes mentett szűrőt?\"\n confirm-label=\"Törlés\"\n cancel-label=\"Mégse\"\n type=\"error\"\n @confirm=\"clearAll()\"\n @cancel=\"confirmingClearAll = false\"\n />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/filters-history.scss\"></style>\n"],"mappings":"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"}
|
|
@@ -1,38 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
props: {
|
|
7
|
-
filters: {},
|
|
8
|
-
items: {},
|
|
9
|
-
itemClass: {}
|
|
10
|
-
},
|
|
11
|
-
emits: ["remove", "openFilter"],
|
|
12
|
-
setup(a, { emit: g }) {
|
|
13
|
-
let _ = a, v = g;
|
|
14
|
-
function y(e) {
|
|
15
|
-
return _.items.find((t) => t.key === e);
|
|
16
|
-
}
|
|
17
|
-
function b(e) {
|
|
18
|
-
return y(e)?.label ?? e;
|
|
19
|
-
}
|
|
20
|
-
return (g, _) => (s(), r("div", d, [(s(!0), r(t, null, c(a.filters, (c, d) => (s(), r(t, { key: d }, [c != null && c !== "" ? (s(), r("span", {
|
|
21
|
-
key: 0,
|
|
22
|
-
class: o(["filter-tags__tag c-chip", [a.itemClass, y(d)?.displayClass]])
|
|
23
|
-
}, [i("span", {
|
|
24
|
-
class: "filter-tags__content align-center-fix",
|
|
25
|
-
onClick: (e) => v("openFilter", String(d))
|
|
26
|
-
}, [i("span", p, l(b(String(d))) + ":", 1), i("span", {
|
|
27
|
-
class: "filter-tags__value",
|
|
28
|
-
title: u(e)(a.items, String(d), c)
|
|
29
|
-
}, l(u(e)(a.items, String(d), c)), 9, m)], 8, f), i("button", {
|
|
30
|
-
type: "button",
|
|
31
|
-
class: "filter-tags__remove",
|
|
32
|
-
onClick: (e) => v("remove", String(d)),
|
|
33
|
-
"aria-label": "Remove filter"
|
|
34
|
-
}, [..._[0] ||= [i("i", { class: "fa-solid fa-fw fa-xmark" }, null, -1)]], 8, h)], 2)) : n("", !0)], 64))), 128))]));
|
|
35
|
-
}
|
|
36
|
-
});
|
|
1
|
+
import './src/styles/components/data-table/filters-history.scss_vue_type_style_index_0_src_true_lang.css';
|
|
2
|
+
import e from "./admins-components85.js";
|
|
3
|
+
/* empty css */
|
|
4
|
+
//#region src/components/data-table/FiltersHistory.vue
|
|
5
|
+
var t = e;
|
|
37
6
|
//#endregion
|
|
38
|
-
export {
|
|
7
|
+
export { t as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admins-components87.js","names":[],"sources":["../src/components/data-table/FilterTags.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { FilterItem } from '@/components/data-table/DataFilters.vue'\nimport { displayFilterValue } from '@/utils/filterDisplay'\n\nconst props = defineProps<{\n filters: Record<string, any>\n items: FilterItem[]\n itemClass?: string\n}>()\nconst emit = defineEmits<{\n remove: [key: string]\n openFilter: [key: string]\n}>()\n\nfunction getFilterItem(key: string): FilterItem | undefined {\n return props.items.find((i) => i.key === key)\n}\n\nfunction getLabel(key: string): string {\n return getFilterItem(key)?.label ?? key\n}\n</script>\n\n<template>\n <div class=\"filter-tags ac-component gap-1\">\n <template v-for=\"(value, key) in filters\" :key=\"key\">\n <span\n v-if=\"value != null && value !== ''\"\n class=\"filter-tags__tag c-chip\"\n :class=\"[itemClass, getFilterItem(key)?.displayClass]\"\n >\n <span\n class=\"filter-tags__content align-center-fix\"\n @click=\"emit('openFilter', String(key))\"\n >\n <span class=\"filter-tags__key\">{{ getLabel(String(key)) }}:</span>\n <span class=\"filter-tags__value\" :title=\"displayFilterValue(items, String(key), value)\">{{\n displayFilterValue(items, String(key), value)\n }}</span>\n </span>\n\n <button\n type=\"button\"\n class=\"filter-tags__remove\"\n @click=\"emit('remove', String(key))\"\n aria-label=\"Remove filter\"\n >\n <i class=\"fa-solid fa-fw fa-xmark\"></i>\n </button>\n </span>\n </template>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/filter-tags.scss\"></style>\n"],"mappings":";;;;;;;;;;;;EAIA,IAAM,IAAQ,GAKR,IAAO;EAKb,SAAS,EAAc,GAAqC;GAC1D,OAAO,EAAM,MAAM,MAAM,MAAM,EAAE,QAAQ,CAAG;EAC9C;EAEA,SAAS,EAAS,GAAqB;GACrC,OAAO,EAAc,CAAG,GAAG,SAAS;EACtC;yBAIE,EA2BM,OA3BN,GA2BM,EAAA,EAAA,EAAA,GA1BJ,EAyBW,GAAA,MAAA,EAzBsB,EAAA,UAAf,GAAO,mBAAuB,OAAG,GAAA,CAEzC,KAAK,QAAY,MAAK,MAAA,EAAA,GAD9B,EAuBO,QAAA;;GArBL,OAAK,EAAA,CAAC,2BAAyB,CACtB,EAAA,WAAW,EAAc,CAAG,GAAG,YAAY,CAAA,CAAA;MAEpD,EAQO,QAAA;GAPL,OAAM;GACL,UAAK,MAAE,EAAI,cAAe,OAAO,CAAG,CAAA;MAErC,EAAkE,QAAlE,GAAkE,EAAhC,EAAS,OAAO,CAAG,CAAA,CAAA,IAAK,KAAC,CAAA,GAC3D,EAES,QAAA;GAFH,OAAM;GAAsB,OAAO,EAAA,CAAA,EAAmB,EAAA,OAAO,OAAO,CAAG,GAAG,CAAK;OACnF,EAAA,CAAA,EAAmB,EAAA,OAAO,OAAO,CAAG,GAAG,CAAK,CAAA,GAAA,GAAA,CAAA,CAAA,GAAA,GAAA,CAAA,GAIhD,EAOS,UAAA;GANP,MAAK;GACL,OAAM;GACL,UAAK,MAAE,EAAI,UAAW,OAAO,CAAG,CAAA;GACjC,cAAW;mBAEX,EAAuC,KAAA,EAApC,OAAM,0BAAyB,GAAA,MAAA,EAAA,CAAA,CAAA,GAAA,GAAA,CAAA,CAAA,GAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,GAAA,EAAA"}
|
|
1
|
+
{"version":3,"file":"admins-components87.js","names":[],"sources":["../src/components/data-table/FiltersHistory.vue"],"sourcesContent":["<script lang=\"ts\">\nexport interface SavedFilter {\n id: string\n savedAt: string\n name?: string\n values: Record<string, any>\n isDefault?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, ref, watch, nextTick } from 'vue'\nimport Button from '@/components/Button.vue'\nimport ConfirmModal from '@/components/ConfirmModal.vue'\nimport type { FilterItem } from '@/components/data-table/DataFilters.vue'\nimport { formatDate } from '@/utils/date'\nimport { buildFilterDisplay } from '@/utils/filterDisplay'\nimport { getSavedFilters } from '@/utils/dataFilters'\nimport { getFullStorageKey } from '@/utils/storageKey'\n\nconst props = defineProps<{\n items: FilterItem[]\n values: Record<string, any>\n storageKey?: string\n}>()\n\nconst MAX_ITEM_LIMIT = 50\nconst MAX_ITEM_WARNING_THRESHOLD = 7\n\nconst emit = defineEmits<{\n load: [values: Record<string, any>]\n}>()\n\nconst open = ref(false)\nconst entries = ref<SavedFilter[]>([])\nconst filterSetName = ref('')\nconst expandedIds = ref<Set<string>>(new Set())\nconst confirmingClearAll = ref(false)\n\nfunction isExpanded(id: string): boolean {\n return expandedIds.value.has(id)\n}\n\nfunction toggleExpanded(id: string): void {\n const next = new Set(expandedIds.value)\n if (next.has(id)) {\n next.delete(id)\n } else {\n next.add(id)\n }\n expandedIds.value = next\n}\n\nfunction loadFromStorage() {\n entries.value = getSavedFilters(props.storageKey)\n}\n\nfunction persist() {\n try {\n const fullStorageKey = getFullStorageKey('filters', props.storageKey)\n localStorage.setItem(fullStorageKey, JSON.stringify(entries.value))\n } catch {\n console.warn('Failed to persist saved filters to localStorage')\n }\n}\n\nonMounted(loadFromStorage)\n\nconst hasActiveFilters = computed(() =>\n Object.values(props.values).some((v) => v !== null && v !== '' && v !== undefined),\n)\n\nfunction makeId(): string {\n return Date.now().toString(36)\n}\n\nwatch(\n () => [props.values, filterSetName.value],\n () => {\n if (justSaved.value) {\n justSaved.value = false\n }\n },\n { deep: true },\n)\n\nconst justSaved = ref(false)\n\nfunction save() {\n if (!hasActiveFilters.value) return\n\n const trimmed = filterSetName.value.trim()\n const entry: SavedFilter = {\n id: makeId(),\n savedAt: new Date().toISOString(),\n name: trimmed || undefined,\n values: { ...props.values },\n }\n entries.value = [entry, ...entries.value].slice(0, MAX_ITEM_LIMIT)\n filterSetName.value = ''\n\n persist()\n nextTick(() => {\n justSaved.value = true\n })\n}\n\nfunction load(entry: SavedFilter) {\n emit('load', { ...entry.values })\n}\n\nfunction remove(entry: SavedFilter) {\n entries.value = entries.value.filter((e) => e.id !== entry.id)\n if (expandedIds.value.has(entry.id)) {\n const next = new Set(expandedIds.value)\n next.delete(entry.id)\n expandedIds.value = next\n }\n persist()\n}\n\nfunction clearAll() {\n entries.value = []\n expandedIds.value = new Set()\n persist()\n confirmingClearAll.value = false\n}\n\nfunction buildEntry(entry: SavedFilter) {\n return buildFilterDisplay(props.items, entry.values)\n}\n\nconst entryDisplays = computed(() => {\n const map = new Map<string, ReturnType<typeof buildEntry>>()\n for (const entry of entries.value) {\n map.set(entry.id, buildEntry(entry))\n }\n return map\n})\n\nfunction getEntryDisplay(entry: SavedFilter) {\n return entryDisplays.value.get(entry.id) ?? buildEntry(entry)\n}\n\nconst sortedEntries = computed(() => {\n const defaultEntry = entries.value.find((e) => e.isDefault)\n if (!defaultEntry) return entries.value\n return [defaultEntry, ...entries.value.filter((e) => !e.isDefault)]\n})\n\nconst hasWarning = computed(() => {\n return entries.value.length >= MAX_ITEM_LIMIT - MAX_ITEM_WARNING_THRESHOLD\n})\n\nfunction formatSavedAt(iso: string): string {\n const d = new Date(iso)\n if (isNaN(d.getTime())) return iso\n return formatDate(d, 'YYYY-MM-DD HH:mm')\n}\n\nfunction toggleDefault(entry: SavedFilter) {\n if (entry.isDefault) {\n entry.isDefault = false\n } else {\n entries.value.forEach((e) => {\n e.isDefault = false\n })\n entry.isDefault = true\n }\n persist()\n}\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div class=\"filters-history\">\n <button\n type=\"button\"\n class=\"filters-history__toggle\"\n :class=\"{ 'is-open': open }\"\n :aria-expanded=\"open\"\n @click=\"open = !open\"\n >\n <i class=\"fa-solid fa-sliders filters-history__toggle-icon\"></i>\n <span class=\"filters-history__toggle-label\">Mentett szűrők</span>\n <span v-if=\"entries.length\" class=\"c-indicator\">{{ entries.length }}</span>\n <span v-if=\"hasWarning\" v-tooltip=\"`Maximum ${MAX_ITEM_LIMIT} szűrő menthető`\"\n >/ {{ MAX_ITEM_LIMIT }}</span\n >\n <i\n class=\"fa-solid filters-history__chevron\"\n :class=\"open ? 'fa-chevron-up' : 'fa-chevron-down'\"\n ></i>\n </button>\n\n <div v-if=\"open\" class=\"filters-history__panel c-scroll\">\n <div class=\"filters-history__save-row\">\n <input\n v-model=\"filterSetName\"\n type=\"text\"\n class=\"c-input-row c-input-row--sm\"\n placeholder=\"Elnevezés\"\n @keydown.enter=\"save\"\n />\n <Button\n icon=\"fa-solid fa-bookmark\"\n label=\"Mentés\"\n size=\"small\"\n type=\"info\"\n :disabled=\"!hasActiveFilters || justSaved\"\n @click=\"save\"\n />\n </div>\n\n <p v-if=\"!hasActiveFilters && entries.length === 0\" class=\"filters-history__hint\">\n Nincs aktív szűrő. Adj meg értékeket a mentéshez.\n </p>\n <p v-else-if=\"entries.length === 0\" class=\"filters-history__hint\">\n Még nincs mentett szűrő.<br />\n Az aktuális beállítások a „Mentés\" gombbal menthetők.<br />\n Az „Elnevezés\" mező csak a könnyebb azonosítás miatt van, megadása nem kötelező.\n </p>\n\n <template v-if=\"entries.length > 0\">\n <ul class=\"filters-history__list\">\n <li\n v-for=\"entry in sortedEntries\"\n :key=\"entry.id\"\n class=\"filters-history__item\"\n :class=\"{ 'is-open': isExpanded(entry.id), 'is-default': entry.isDefault }\"\n >\n <div\n class=\"filters-history__item-header\"\n role=\"button\"\n tabindex=\"0\"\n :aria-expanded=\"isExpanded(entry.id)\"\n @click=\"toggleExpanded(entry.id)\"\n @keydown.enter.prevent=\"toggleExpanded(entry.id)\"\n @keydown.space.prevent=\"toggleExpanded(entry.id)\"\n >\n <i\n class=\"fa-solid filters-history__item-chevron\"\n :class=\"isExpanded(entry.id) ? 'fa-chevron-down' : 'fa-chevron-right'\"\n ></i>\n <span class=\"filters-history__item-header-text\">\n <span class=\"filters-history__item-name\">{{ entry.name }}</span>\n <span v-if=\"entry.name\" class=\"filters-history__item-date\">{{\n formatSavedAt(entry.savedAt)\n }}</span>\n </span>\n <div class=\"filters-history__item-actions\" @click.stop>\n <button\n type=\"button\"\n class=\"c-indicator filters-history__item-btn filters-history__item-default\"\n @click=\"toggleDefault(entry)\"\n :class=\"{ active: entry.isDefault }\"\n :aria-label=\"\n entry.isDefault\n ? 'Alapértelmezett szűrő törlése'\n : 'Alapértelmezett szűrő beállítása'\n \"\n :title=\"\n entry.isDefault\n ? 'Alapértelmezett szűrő törlése'\n : 'Alapértelmezett szűrő beállítása'\n \"\n >\n <i\n class=\"fa-star fix-icon-pos\"\n :class=\"entry.isDefault ? 'fa-solid' : 'fa-regular'\"\n ></i>\n </button>\n <button\n type=\"button\"\n class=\"c-indicator filters-history__item-btn filters-history__item-load\"\n aria-label=\"Betöltés\"\n title=\"Betöltés\"\n @click=\"load(entry)\"\n >\n <i class=\"fa-solid fa-check\"></i>\n </button>\n <span\n v-if=\"getEntryDisplay(entry).length\"\n class=\"c-indicator\"\n @click.stop=\"toggleExpanded(entry.id)\"\n v-tooltip=\"`${getEntryDisplay(entry).length} szűrési feltétel`\"\n >{{ getEntryDisplay(entry).length }}</span\n >\n <button\n type=\"button\"\n class=\"c-indicator filters-history__item-btn filters-history__item-remove\"\n aria-label=\"Törlés\"\n title=\"Törlés\"\n @click=\"remove(entry)\"\n >\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n </div>\n <div v-if=\"isExpanded(entry.id)\" class=\"filters-history__item-content\">\n <div v-if=\"getEntryDisplay(entry).length\" class=\"filters-history__item-body\">\n <span\n v-for=\"(part, idx) in getEntryDisplay(entry)\"\n :key=\"idx\"\n class=\"c-chip\"\n :class=\"part.displayClass\"\n >\n {{ part.text }}\n </span>\n </div>\n <p v-else class=\"filters-history__item-empty\">Nincs megjeleníthető szűrő.</p>\n </div>\n </li>\n </ul>\n </template>\n\n <div v-if=\"entries.length > 3\">\n <hr class=\"separator my-1\" />\n <a\n v-if=\"entries.length\"\n class=\"filters-history__clear-all px-2\"\n @click=\"confirmingClearAll = true\"\n >Összes törlése</a\n >\n <ConfirmModal\n v-if=\"confirmingClearAll\"\n title=\"Mentett szűrők törlése\"\n message=\"Biztosan törlöd az összes mentett szűrőt?\"\n confirm-label=\"Törlés\"\n cancel-label=\"Mégse\"\n type=\"error\"\n @confirm=\"clearAll()\"\n @cancel=\"confirmingClearAll = false\"\n />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/filters-history.scss\"></style>\n"],"mappings":""}
|