@platforma-sdk/ui-vue 1.63.12 → 1.65.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.
- package/.turbo/turbo-build.log +38 -32
- package/.turbo/turbo-formatter$colon$check.log +2 -2
- package/.turbo/turbo-linter$colon$check.log +2 -2
- package/.turbo/turbo-types$colon$check.log +1 -1
- package/CHANGELOG.md +24 -0
- package/dist/components/PlAdvancedFilter/FilterEditor.js.map +1 -1
- package/dist/components/PlAdvancedFilter/FilterEditor.style.js.map +1 -1
- package/dist/components/PlAdvancedFilter/FilterEditor.vue.d.ts +3 -8
- package/dist/components/PlAdvancedFilter/FilterEditor.vue.d.ts.map +1 -1
- package/dist/components/PlAdvancedFilter/FilterEditor.vue2.js +164 -151
- package/dist/components/PlAdvancedFilter/FilterEditor.vue2.js.map +1 -1
- package/dist/components/PlAdvancedFilter/PlAdvancedFilter.js.map +1 -1
- package/dist/components/PlAdvancedFilter/PlAdvancedFilter.style.js +8 -7
- package/dist/components/PlAdvancedFilter/PlAdvancedFilter.style.js.map +1 -1
- package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue.css +1 -1
- package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue.d.ts +24 -8
- package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue.d.ts.map +1 -1
- package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue2.js +176 -110
- package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue2.js.map +1 -1
- package/dist/components/PlAdvancedFilter/types.d.ts +2 -0
- package/dist/components/PlAdvancedFilter/types.d.ts.map +1 -1
- package/dist/components/PlAgDataTable/PlAgDataTableV2.js.map +1 -1
- package/dist/components/PlAgDataTable/PlAgDataTableV2.style.js.map +1 -1
- package/dist/components/PlAgDataTable/PlAgDataTableV2.vue.d.ts.map +1 -1
- package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js +116 -109
- package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js.map +1 -1
- package/dist/components/PlAgDataTable/compositions/useFilterableColumns.js +3 -3
- package/dist/components/PlAgDataTable/compositions/useFilterableColumns.js.map +1 -1
- package/dist/components/PlAgDataTable/sources/table-source-v2.d.ts +6 -5
- package/dist/components/PlAgDataTable/sources/table-source-v2.d.ts.map +1 -1
- package/dist/components/PlAgDataTable/sources/table-source-v2.js +122 -88
- package/dist/components/PlAgDataTable/sources/table-source-v2.js.map +1 -1
- package/dist/components/PlAgDataTable/sources/table-state-v2.d.ts +6 -3
- package/dist/components/PlAgDataTable/sources/table-state-v2.d.ts.map +1 -1
- package/dist/components/PlAgDataTable/sources/table-state-v2.js +182 -97
- package/dist/components/PlAgDataTable/sources/table-state-v2.js.map +1 -1
- package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.js.map +1 -1
- package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.style.js.map +1 -1
- package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue.d.ts.map +1 -1
- package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue2.js +37 -42
- package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue2.js.map +1 -1
- package/dist/components/PlAgGridColumnManager/useFilteredItems.d.ts +5 -5
- package/dist/components/PlAgGridColumnManager/useFilteredItems.d.ts.map +1 -1
- package/dist/components/PlAgGridColumnManager/useFilteredItems.js +2 -2
- package/dist/components/PlAgGridColumnManager/useFilteredItems.js.map +1 -1
- package/dist/components/PlAgGridColumnManager/useGridColumns.js +14 -0
- package/dist/components/PlAgGridColumnManager/useGridColumns.js.map +1 -0
- package/dist/components/PlAnnotations/components/FilterSidebar.js.map +1 -1
- package/dist/components/PlAnnotations/components/FilterSidebar.style.js.map +1 -1
- package/dist/components/PlAnnotations/components/FilterSidebar.vue.d.ts.map +1 -1
- package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js +7 -4
- package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js.map +1 -1
- package/dist/components/PlTableFilters/PlTableFiltersV2.js.map +1 -1
- package/dist/components/PlTableFilters/PlTableFiltersV2.style.js +5 -1
- package/dist/components/PlTableFilters/PlTableFiltersV2.style.js.map +1 -1
- package/dist/components/PlTableFilters/PlTableFiltersV2.vue.css +1 -1
- package/dist/components/PlTableFilters/PlTableFiltersV2.vue.d.ts +7 -9
- package/dist/components/PlTableFilters/PlTableFiltersV2.vue.d.ts.map +1 -1
- package/dist/components/PlTableFilters/PlTableFiltersV2.vue2.js +72 -47
- package/dist/components/PlTableFilters/PlTableFiltersV2.vue2.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/util/helpers/dist/functions.js.map +1 -1
- package/dist/lib/util/helpers/dist/objects.js +4 -1
- package/dist/lib/util/helpers/dist/objects.js.map +1 -1
- package/package.json +8 -7
- package/src/components/PlAdvancedFilter/FilterEditor.vue +99 -55
- package/src/components/PlAdvancedFilter/PlAdvancedFilter.vue +163 -95
- package/src/components/PlAdvancedFilter/types.ts +6 -1
- package/src/components/PlAgDataTable/PlAgDataTableV2.vue +26 -7
- package/src/components/PlAgDataTable/compositions/useFilterableColumns.ts +4 -4
- package/src/components/PlAgDataTable/sources/table-source-v2.ts +231 -131
- package/src/components/PlAgDataTable/sources/table-state-v2.ts +249 -70
- package/src/components/PlAgGridColumnManager/PlAgGridColumnManager.vue +17 -35
- package/src/components/PlAgGridColumnManager/useFilteredItems.ts +9 -11
- package/src/components/PlAgGridColumnManager/useGridColumns.ts +26 -0
- package/src/components/PlAnnotations/components/FilterSidebar.vue +3 -2
- package/src/components/PlTableFilters/PlTableFiltersV2.vue +76 -26
- package/src/index.ts +4 -0
|
@@ -1,104 +1,214 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { randomInt as
|
|
1
|
+
import { getField as e, isJsonEqual as t } from "../../../lib/util/helpers/dist/objects.js";
|
|
2
|
+
import { randomInt as n } from "../../../lib/util/helpers/dist/random.js";
|
|
3
3
|
import "../../../lib/util/helpers/dist/index.js";
|
|
4
|
-
import { isNumericValueType as
|
|
5
|
-
import { computed as
|
|
6
|
-
import { canonicalizeJson as
|
|
7
|
-
import { computedCached as
|
|
8
|
-
import { debounce as
|
|
4
|
+
import { isNumericValueType as r, isStringValueType as i } from "../../PlAdvancedFilter/utils.js";
|
|
5
|
+
import { computed as a } from "vue";
|
|
6
|
+
import { canonicalizeJson as o, createDefaultPTableParams as s, distillFilterSpec as c, getPTableColumnId as l, parseJson as u, upgradePlDataTableStateV2 as d } from "@platforma-sdk/model";
|
|
7
|
+
import { computedCached as f } from "@milaboratories/uikit";
|
|
8
|
+
import { debounce as p, isNil as m } from "es-toolkit";
|
|
9
9
|
//#region src/components/PlAgDataTable/sources/table-state-v2.ts
|
|
10
|
-
function
|
|
11
|
-
let
|
|
12
|
-
get: () =>
|
|
13
|
-
set:
|
|
14
|
-
}),
|
|
10
|
+
function h(e, n, r, i) {
|
|
11
|
+
let o = f({
|
|
12
|
+
get: () => d(e.value),
|
|
13
|
+
set: p((t) => e.value = t, 300)
|
|
14
|
+
}), c = a({
|
|
15
15
|
get: () => {
|
|
16
|
-
let e =
|
|
17
|
-
if (!t &&
|
|
18
|
-
let i = t ??
|
|
19
|
-
return i ?
|
|
16
|
+
let e = D(), t = n.value.sourceId, r = "error" in n.value && n.value.error == null;
|
|
17
|
+
if (!t && r) return e;
|
|
18
|
+
let i = t ?? o.value.stateCache.at(-1)?.sourceId;
|
|
19
|
+
return i ? o.value.stateCache.find((e) => e.sourceId === i) || {
|
|
20
20
|
...e,
|
|
21
21
|
sourceId: i
|
|
22
22
|
} : e;
|
|
23
23
|
},
|
|
24
|
-
set: (
|
|
24
|
+
set: (e) => {
|
|
25
25
|
let n = {
|
|
26
|
-
...
|
|
27
|
-
pTableParams:
|
|
26
|
+
...o.value,
|
|
27
|
+
pTableParams: s()
|
|
28
28
|
};
|
|
29
|
-
if (
|
|
30
|
-
n.pTableParams =
|
|
31
|
-
let
|
|
32
|
-
|
|
29
|
+
if (e.sourceId) {
|
|
30
|
+
n.pTableParams = g(e, r.value);
|
|
31
|
+
let t = n.stateCache.findIndex((t) => t.sourceId === e.sourceId);
|
|
32
|
+
t !== -1 && n.stateCache.splice(t, 1), n.stateCache.push(e), n.stateCache = n.stateCache.slice(-5);
|
|
33
33
|
}
|
|
34
|
-
|
|
34
|
+
t(o.value, n) || (o.value = n);
|
|
35
35
|
}
|
|
36
|
-
}),
|
|
37
|
-
get: () =>
|
|
36
|
+
}), l = a({
|
|
37
|
+
get: () => c.value.gridState,
|
|
38
38
|
set: (e) => {
|
|
39
|
-
let t =
|
|
40
|
-
t.sourceId && (
|
|
39
|
+
let t = c.value;
|
|
40
|
+
t.sourceId && (c.value = {
|
|
41
41
|
...t,
|
|
42
42
|
gridState: e
|
|
43
43
|
});
|
|
44
44
|
}
|
|
45
|
-
}),
|
|
46
|
-
get: () =>
|
|
45
|
+
}), u = a({
|
|
46
|
+
get: () => c.value.sheetsState,
|
|
47
47
|
set: (e) => {
|
|
48
|
-
let t =
|
|
49
|
-
t.sourceId && (
|
|
48
|
+
let t = c.value;
|
|
49
|
+
t.sourceId && (c.value = {
|
|
50
50
|
...t,
|
|
51
51
|
sheetsState: e
|
|
52
52
|
});
|
|
53
53
|
}
|
|
54
|
-
}),
|
|
54
|
+
}), h = a({
|
|
55
55
|
get: () => {
|
|
56
|
-
let e =
|
|
57
|
-
return e
|
|
58
|
-
id: t(),
|
|
59
|
-
type: "and",
|
|
60
|
-
isExpanded: !0,
|
|
61
|
-
filters: []
|
|
62
|
-
};
|
|
56
|
+
let e = c.value.filtersState;
|
|
57
|
+
return m(e) ? y() : _(e);
|
|
63
58
|
},
|
|
64
59
|
set: (e) => {
|
|
65
|
-
let t =
|
|
66
|
-
t.sourceId && (
|
|
60
|
+
let t = c.value;
|
|
61
|
+
t.sourceId && (c.value = {
|
|
67
62
|
...t,
|
|
68
63
|
filtersState: e
|
|
69
64
|
});
|
|
70
65
|
}
|
|
71
|
-
}), v = a(
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
66
|
+
}), v = a({
|
|
67
|
+
get: () => {
|
|
68
|
+
let e = c.value.defaultFiltersState;
|
|
69
|
+
return m(e) ? m(i.value) ? null : S(_(i.value)) : _(e);
|
|
70
|
+
},
|
|
71
|
+
set: (e) => {
|
|
72
|
+
let t = c.value;
|
|
73
|
+
t.sourceId && (c.value = {
|
|
74
|
+
...t,
|
|
75
|
+
defaultFiltersState: e
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
function b() {
|
|
80
|
+
v.value = m(i.value) ? null : S(_(i.value));
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
gridState: l,
|
|
84
|
+
sheetsState: u,
|
|
85
|
+
searchString: a({
|
|
86
|
+
get: () => c.value.searchString ?? "",
|
|
78
87
|
set: (e) => {
|
|
79
|
-
let t =
|
|
80
|
-
t.sourceId && (
|
|
88
|
+
let t = c.value;
|
|
89
|
+
t.sourceId && (c.value = {
|
|
81
90
|
...t,
|
|
82
91
|
searchString: e
|
|
83
92
|
});
|
|
84
93
|
}
|
|
85
|
-
})
|
|
94
|
+
}),
|
|
95
|
+
filtersState: h,
|
|
96
|
+
defaultFiltersState: v,
|
|
97
|
+
resetDefaultFilters: b
|
|
86
98
|
};
|
|
87
99
|
}
|
|
88
|
-
function
|
|
100
|
+
function g(e, t) {
|
|
101
|
+
let n = x(t, e.searchString), r = m(e.filtersState) ? null : b(e.filtersState), i = [
|
|
102
|
+
...w(e.sheetsState),
|
|
103
|
+
...m(r) ? [] : [r],
|
|
104
|
+
...m(n) ? [] : [n]
|
|
105
|
+
], a = c(i.length === 0 ? null : i.length === 1 ? i[0] : {
|
|
106
|
+
type: "and",
|
|
107
|
+
filters: i
|
|
108
|
+
}), o = m(e.defaultFiltersState) ? null : b(e.defaultFiltersState), s = m(o) ? null : c(o) ?? v();
|
|
89
109
|
return {
|
|
90
|
-
sourceId:
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
110
|
+
sourceId: e.sourceId,
|
|
111
|
+
hiddenColIds: E(e.gridState.columnVisibility),
|
|
112
|
+
sorting: T(e.gridState.sort),
|
|
113
|
+
filters: a,
|
|
114
|
+
defaultFilters: s
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
function _(e) {
|
|
118
|
+
return e.type !== "and" && e.type !== "or" && e.type !== "not" ? "type" in e && !m(e.type) ? {
|
|
119
|
+
id: n(),
|
|
120
|
+
type: "and",
|
|
121
|
+
isExpanded: !0,
|
|
122
|
+
filters: [{
|
|
123
|
+
id: n(),
|
|
124
|
+
type: "and",
|
|
125
|
+
isExpanded: !0,
|
|
126
|
+
filters: [e]
|
|
127
|
+
}]
|
|
128
|
+
} : y() : (e.type === "and" || e.type === "or") && "filters" in e && Array.isArray(e.filters) ? e.filters.every((e) => e.type === "and" || e.type === "or" || e.type === "not") ? e : {
|
|
129
|
+
id: n(),
|
|
130
|
+
type: e.type,
|
|
131
|
+
isExpanded: !0,
|
|
132
|
+
filters: [{
|
|
133
|
+
id: n(),
|
|
134
|
+
type: e.type,
|
|
135
|
+
isExpanded: !0,
|
|
136
|
+
filters: e.filters
|
|
137
|
+
}]
|
|
138
|
+
} : y();
|
|
139
|
+
}
|
|
140
|
+
function v() {
|
|
141
|
+
return {
|
|
142
|
+
type: "and",
|
|
143
|
+
filters: []
|
|
94
144
|
};
|
|
95
145
|
}
|
|
96
|
-
function
|
|
97
|
-
return
|
|
146
|
+
function y() {
|
|
147
|
+
return {
|
|
148
|
+
...v(),
|
|
149
|
+
id: n(),
|
|
150
|
+
isExpanded: !0
|
|
151
|
+
};
|
|
98
152
|
}
|
|
99
|
-
function
|
|
153
|
+
function b(e) {
|
|
154
|
+
return {
|
|
155
|
+
...e,
|
|
156
|
+
filters: e.filters.filter((e) => !("isSuppressed" in e && e.isSuppressed === !0)).map((e) => "filters" in e && (e.type === "and" || e.type === "or") ? b(e) : e)
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
function x(e, t) {
|
|
160
|
+
let n = t?.trim();
|
|
161
|
+
if (m(n) || n.length === 0) return null;
|
|
162
|
+
let a = [], s = Number(n), c = n.length > 0 && !isNaN(s) && isFinite(s);
|
|
163
|
+
for (let t of e) {
|
|
164
|
+
let e = o(l(t)), u = t.spec;
|
|
165
|
+
i(u) && a.push({
|
|
166
|
+
type: "patternEquals",
|
|
167
|
+
column: e,
|
|
168
|
+
value: n
|
|
169
|
+
}), r(u) && c && a.push({
|
|
170
|
+
type: "equal",
|
|
171
|
+
column: e,
|
|
172
|
+
x: s
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
return a.length === 0 ? null : {
|
|
176
|
+
type: "or",
|
|
177
|
+
filters: a
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
function S(e) {
|
|
181
|
+
return C(e);
|
|
182
|
+
}
|
|
183
|
+
function C(t) {
|
|
184
|
+
switch (t.type) {
|
|
185
|
+
case "and": return {
|
|
186
|
+
id: e(t, "id") ?? n(),
|
|
187
|
+
isExpanded: e(t, "isExpanded") ?? !0,
|
|
188
|
+
type: "and",
|
|
189
|
+
filters: t.filters.map((e) => C(e))
|
|
190
|
+
};
|
|
191
|
+
case "or": return {
|
|
192
|
+
id: e(t, "id") ?? n(),
|
|
193
|
+
isExpanded: e(t, "isExpanded") ?? !0,
|
|
194
|
+
type: "or",
|
|
195
|
+
filters: t.filters.map((e) => C(e))
|
|
196
|
+
};
|
|
197
|
+
case "not": return {
|
|
198
|
+
id: n(),
|
|
199
|
+
isExpanded: !0,
|
|
200
|
+
type: "not",
|
|
201
|
+
filter: C(t.filter)
|
|
202
|
+
};
|
|
203
|
+
default: return {
|
|
204
|
+
...t,
|
|
205
|
+
id: e(t, "id") ?? n()
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
function w(e) {
|
|
100
210
|
return e.map((e) => {
|
|
101
|
-
let t =
|
|
211
|
+
let t = o({
|
|
102
212
|
type: "axis",
|
|
103
213
|
id: e.axisId
|
|
104
214
|
});
|
|
@@ -113,9 +223,9 @@ function y(e) {
|
|
|
113
223
|
};
|
|
114
224
|
});
|
|
115
225
|
}
|
|
116
|
-
function
|
|
226
|
+
function T(e) {
|
|
117
227
|
return e?.sortModel.map((e) => {
|
|
118
|
-
let { spec: t, ...n } =
|
|
228
|
+
let { spec: t, ...n } = u(e.colId).labeled;
|
|
119
229
|
return {
|
|
120
230
|
column: n,
|
|
121
231
|
ascending: e.sort === "asc",
|
|
@@ -123,44 +233,19 @@ function b(e) {
|
|
|
123
233
|
};
|
|
124
234
|
}) ?? [];
|
|
125
235
|
}
|
|
126
|
-
function
|
|
127
|
-
|
|
128
|
-
if (h(i) || i.length === 0) return null;
|
|
129
|
-
let a = [], o = Number(i), c = i.length > 0 && !isNaN(o) && isFinite(o);
|
|
130
|
-
for (let t of e) {
|
|
131
|
-
let e = s(u(t)), l = t.spec;
|
|
132
|
-
r(l) && a.push({
|
|
133
|
-
type: "patternEquals",
|
|
134
|
-
column: e,
|
|
135
|
-
value: i
|
|
136
|
-
}), n(l) && c && a.push({
|
|
137
|
-
type: "equal",
|
|
138
|
-
column: e,
|
|
139
|
-
x: o
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
return a.length === 0 ? null : {
|
|
143
|
-
type: "or",
|
|
144
|
-
filters: a
|
|
145
|
-
};
|
|
236
|
+
function E(e) {
|
|
237
|
+
return e?.hiddenColIds?.map((e) => l(u(e).source)) ?? null;
|
|
146
238
|
}
|
|
147
|
-
function
|
|
148
|
-
let n = x(t, e.searchString), r = [
|
|
149
|
-
...y(e.sheetsState),
|
|
150
|
-
...e.filtersState ? [e.filtersState] : [],
|
|
151
|
-
...n ? [n] : []
|
|
152
|
-
], i = l(r.length === 0 ? null : r.length === 1 ? r[0] : {
|
|
153
|
-
type: "and",
|
|
154
|
-
filters: r
|
|
155
|
-
});
|
|
239
|
+
function D() {
|
|
156
240
|
return {
|
|
157
|
-
sourceId:
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
241
|
+
sourceId: null,
|
|
242
|
+
gridState: {},
|
|
243
|
+
sheetsState: [],
|
|
244
|
+
filtersState: null,
|
|
245
|
+
defaultFiltersState: null
|
|
161
246
|
};
|
|
162
247
|
}
|
|
163
248
|
//#endregion
|
|
164
|
-
export {
|
|
249
|
+
export { h as useTableState };
|
|
165
250
|
|
|
166
251
|
//# sourceMappingURL=table-state-v2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-state-v2.js","names":[],"sources":["../../../../src/components/PlAgDataTable/sources/table-state-v2.ts"],"sourcesContent":["import {\n createDefaultPTableParams,\n parseJson,\n canonicalizeJson,\n upgradePlDataTableStateV2,\n type FilterSpec,\n type FilterSpecLeaf,\n type PTableColumnId,\n type PTableColumnSpec,\n type PlDataTableGridStateCore,\n type PlDataTableSheetState,\n type PlDataTableStateV2,\n type PlDataTableStateV2CacheEntry,\n type PlDataTableStateV2Normalized,\n type PObjectId,\n type PTableParamsV2,\n type PTableSorting,\n type PlDataTableFilters,\n distillFilterSpec,\n PlDataTableFiltersWithMeta,\n getPTableColumnId,\n CanonicalizedJson,\n} from \"@platforma-sdk/model\";\nimport { computed, ref, watch, type Ref, type WritableComputedRef } from \"vue\";\nimport type { PlDataTableSettingsV2 } from \"../types\";\nimport { isJsonEqual, randomInt } from \"@milaboratories/helpers\";\nimport { computedCached } from \"@milaboratories/uikit\";\nimport { isStringValueType, isNumericValueType } from \"../../PlAdvancedFilter/utils\";\nimport { debounce, isNil } from \"es-toolkit\";\n\nexport function useTableState(\n tableStateDenormalized: Ref<PlDataTableStateV2>,\n settings: Ref<PlDataTableSettingsV2>,\n columns: Ref<PTableColumnSpec[]>,\n): {\n gridState: WritableComputedRef<PlDataTableGridStateCore>;\n sheetsState: WritableComputedRef<PlDataTableSheetState[]>;\n filtersState: Ref<PlDataTableFiltersWithMeta>;\n searchString: WritableComputedRef<string>;\n} {\n const tableStateNormalized = computedCached<PlDataTableStateV2Normalized>({\n get: () => upgradePlDataTableStateV2(tableStateDenormalized.value),\n set: debounce((newState) => (tableStateDenormalized.value = newState), 300),\n });\n\n const tableState = computed<PlDataTableStateV2CacheEntryNullable>({\n get: () => {\n const defaultState = makeDefaultState();\n\n const sourceId = settings.value.sourceId;\n const undefinedSourceId = \"error\" in settings.value && settings.value.error == null;\n if (!sourceId && undefinedSourceId) return defaultState;\n\n const suitableSourceId = sourceId ?? tableStateNormalized.value.stateCache.at(-1)?.sourceId;\n if (!suitableSourceId) return defaultState;\n\n const cachedState = tableStateNormalized.value.stateCache.find(\n (entry) => entry.sourceId === suitableSourceId,\n );\n if (!cachedState) return { ...defaultState, sourceId: suitableSourceId };\n\n return cachedState;\n },\n set: (state) => {\n const newState: PlDataTableStateV2Normalized = {\n ...tableStateNormalized.value,\n pTableParams: createDefaultPTableParams(),\n };\n\n if (state.sourceId) {\n newState.pTableParams = createPTableParams(state, columns.value);\n\n const stateIdx = newState.stateCache.findIndex(\n (entry) => entry.sourceId === state.sourceId,\n );\n if (stateIdx !== -1) {\n newState.stateCache.splice(stateIdx, 1);\n }\n const CacheDepth = 5;\n newState.stateCache.push(state);\n newState.stateCache = newState.stateCache.slice(-CacheDepth);\n }\n\n if (!isJsonEqual(tableStateNormalized.value, newState)) {\n tableStateNormalized.value = newState;\n }\n },\n });\n\n const gridState = computed<PlDataTableGridStateCore>({\n get: () => tableState.value.gridState,\n set: (gridState) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n gridState,\n };\n }\n },\n });\n\n const sheetsState = computed<PlDataTableSheetState[]>({\n get: () => tableState.value.sheetsState,\n set: (sheetsState) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n sheetsState,\n };\n }\n },\n });\n\n const filtersState = computed<PlDataTableFiltersWithMeta>({\n get: () => {\n const raw = tableState.value.filtersState;\n const isCorrect =\n raw &&\n (raw.type === \"and\" || raw.type === \"or\") &&\n \"filters\" in raw &&\n Array.isArray(raw.filters);\n\n return isCorrect\n ? (raw satisfies PlDataTableFiltersWithMeta)\n : { id: randomInt(), type: \"and\" as const, isExpanded: true, filters: [] };\n },\n set: (filtersState: PlDataTableFiltersWithMeta) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n filtersState,\n };\n }\n },\n });\n const filtersStateDeepReactive = ref(filtersState);\n watch(\n () => filtersStateDeepReactive.value,\n (newValue) => (filtersState.value = newValue),\n { deep: true },\n );\n\n const searchString = computed<string>({\n get: () => tableState.value.searchString ?? \"\",\n set: (searchString: string) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n searchString,\n };\n }\n },\n });\n\n return { gridState, sheetsState, filtersState: filtersStateDeepReactive, searchString };\n}\n\ntype PlDataTableStateV2CacheEntryNullable =\n | PlDataTableStateV2CacheEntry\n | {\n sourceId: null;\n gridState: Record<string, never>;\n sheetsState: [];\n filtersState: null;\n searchString?: string;\n };\n\nfunction makeDefaultState(): PlDataTableStateV2CacheEntryNullable {\n return {\n sourceId: null,\n gridState: {},\n sheetsState: [],\n filtersState: null,\n };\n}\n\nfunction getHiddenColIds(state: PlDataTableGridStateCore[\"columnVisibility\"]): PObjectId[] | null {\n return (\n state?.hiddenColIds?.map(parseJson).reduce((acc, c) => {\n if (c.source.type === \"column\") {\n acc.push(c.source.id);\n }\n return acc;\n }, [] as PObjectId[]) ?? null\n );\n}\n\nfunction convertPartitionFiltersToFilterSpec(\n sheetsState: PlDataTableSheetState[],\n): FilterSpec<FilterSpecLeaf<CanonicalizedJson<PTableColumnId>>>[] {\n return sheetsState.map((s) => {\n const column = canonicalizeJson<PTableColumnId>({ type: \"axis\", id: s.axisId });\n return typeof s.value === \"number\"\n ? { type: \"equal\" as const, column, x: s.value }\n : { type: \"patternEquals\" as const, column, value: s.value };\n });\n}\n\nfunction convertAgSortingToPTableSorting(state: PlDataTableGridStateCore[\"sort\"]): PTableSorting[] {\n return (\n state?.sortModel.map((item) => {\n const { spec: _, ...column } = parseJson(item.colId).labeled;\n return {\n column,\n ascending: item.sort === \"asc\",\n naAndAbsentAreLeastValues: item.sort === \"asc\",\n };\n }) ?? []\n );\n}\n\nfunction createSearchFilterNode(\n columns: PTableColumnSpec[],\n search: null | undefined | string,\n): null | FilterSpec<FilterSpecLeaf<CanonicalizedJson<PTableColumnId>>> {\n const trimmed = search?.trim();\n if (isNil(trimmed) || trimmed.length === 0) return null;\n\n const parts: FilterSpec<FilterSpecLeaf<CanonicalizedJson<PTableColumnId>>>[] = [];\n const numericValue = Number(trimmed);\n const isValidNumber = trimmed.length > 0 && !isNaN(numericValue) && isFinite(numericValue);\n\n for (const col of columns) {\n const column = canonicalizeJson<PTableColumnId>(getPTableColumnId(col));\n const spec = col.spec;\n\n if (isStringValueType(spec)) {\n parts.push({ type: \"patternEquals\", column, value: trimmed });\n }\n\n if (isNumericValueType(spec) && isValidNumber) {\n parts.push({ type: \"equal\", column, x: numericValue });\n }\n }\n\n if (parts.length === 0) return null;\n\n return { type: \"or\", filters: parts };\n}\n\nfunction createPTableParams(\n state: PlDataTableStateV2CacheEntry,\n filterableColumns: PTableColumnSpec[],\n): PTableParamsV2 {\n const searchNode = createSearchFilterNode(filterableColumns, state.searchString);\n const parts = [\n ...convertPartitionFiltersToFilterSpec(state.sheetsState),\n ...(state.filtersState ? [state.filtersState] : []),\n ...(searchNode ? [searchNode] : []),\n ];\n const filters: null | PlDataTableFilters = distillFilterSpec(\n parts.length === 0 ? null : parts.length === 1 ? parts[0] : { type: \"and\", filters: parts },\n );\n\n return {\n sourceId: state.sourceId,\n hiddenColIds: getHiddenColIds(state.gridState.columnVisibility),\n filters,\n sorting: convertAgSortingToPTableSorting(state.gridState.sort),\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"table-state-v2.js","names":[],"sources":["../../../../src/components/PlAgDataTable/sources/table-state-v2.ts"],"sourcesContent":["import {\n createDefaultPTableParams,\n parseJson,\n canonicalizeJson,\n upgradePlDataTableStateV2,\n type FilterSpec,\n type FilterSpecLeaf,\n type PTableColumnId,\n type PTableColumnSpec,\n type PlDataTableGridStateCore,\n type PlDataTableSheetState,\n type PlDataTableStateV2,\n type PlDataTableStateV2CacheEntry,\n type PlDataTableStateV2Normalized,\n type PTableParamsV2,\n type PTableSorting,\n type PlDataTableFilterSpecLeaf,\n type PlDataTableFilterMeta,\n type PlDataTableFilters,\n distillFilterSpec,\n PlDataTableFiltersWithMeta,\n getPTableColumnId,\n CanonicalizedJson,\n} from \"@platforma-sdk/model\";\nimport { computed, type Ref, type WritableComputedRef } from \"vue\";\nimport type { PlDataTableSettingsV2 } from \"../types\";\nimport { isJsonEqual, randomInt, getField, Nil } from \"@milaboratories/helpers\";\nimport { computedCached } from \"@milaboratories/uikit\";\nimport { isStringValueType, isNumericValueType } from \"../../PlAdvancedFilter/utils\";\nimport { debounce, isNil } from \"es-toolkit\";\n\nexport function useTableState(\n tableStateDenormalized: Ref<PlDataTableStateV2>,\n settings: Ref<PlDataTableSettingsV2>,\n columns: Ref<PTableColumnSpec[]>,\n defaultFilters: Ref<Nil | PlDataTableFilters>,\n): {\n gridState: WritableComputedRef<PlDataTableGridStateCore>;\n sheetsState: WritableComputedRef<PlDataTableSheetState[]>;\n\n searchString: WritableComputedRef<string>;\n filtersState: Ref<PlDataTableFiltersWithMeta>;\n defaultFiltersState: Ref<null | PlDataTableFiltersWithMeta>;\n resetDefaultFilters: () => void;\n} {\n const tableStateNormalized = computedCached<PlDataTableStateV2Normalized>({\n get: () => upgradePlDataTableStateV2(tableStateDenormalized.value),\n set: debounce((newState) => (tableStateDenormalized.value = newState), 300),\n });\n\n const tableState = computed<PlDataTableStateV2CacheEntryNullable>({\n get: () => {\n const defaultState = makeDefaultState();\n\n const sourceId = settings.value.sourceId;\n const undefinedSourceId = \"error\" in settings.value && settings.value.error == null;\n if (!sourceId && undefinedSourceId) return defaultState;\n\n const suitableSourceId = sourceId ?? tableStateNormalized.value.stateCache.at(-1)?.sourceId;\n if (!suitableSourceId) return defaultState;\n\n const cachedState = tableStateNormalized.value.stateCache.find(\n (entry) => entry.sourceId === suitableSourceId,\n );\n if (!cachedState) return { ...defaultState, sourceId: suitableSourceId };\n\n return cachedState;\n },\n set: (state) => {\n const newState: PlDataTableStateV2Normalized = {\n ...tableStateNormalized.value,\n pTableParams: createDefaultPTableParams(),\n };\n\n if (state.sourceId) {\n newState.pTableParams = createPTableParams(state, columns.value);\n\n const stateIdx = newState.stateCache.findIndex(\n (entry) => entry.sourceId === state.sourceId,\n );\n if (stateIdx !== -1) {\n newState.stateCache.splice(stateIdx, 1);\n }\n const CacheDepth = 5;\n newState.stateCache.push(state);\n newState.stateCache = newState.stateCache.slice(-CacheDepth);\n }\n\n if (!isJsonEqual(tableStateNormalized.value, newState)) {\n tableStateNormalized.value = newState;\n }\n },\n });\n\n const gridState = computed<PlDataTableGridStateCore>({\n get: () => tableState.value.gridState,\n set: (gridState) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n gridState,\n };\n }\n },\n });\n\n const sheetsState = computed<PlDataTableSheetState[]>({\n get: () => tableState.value.sheetsState,\n set: (sheetsState) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n sheetsState,\n };\n }\n },\n });\n\n // --- User filters (editable by user) ---\n const filtersState = computed<PlDataTableFiltersWithMeta>({\n get: () => {\n const raw = tableState.value.filtersState;\n return isNil(raw) ? getEmptyGroupWithMeta() : normalizeFiltersState(raw);\n },\n set: (filtersState: PlDataTableFiltersWithMeta) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n filtersState,\n };\n }\n },\n });\n\n // --- Default filters (from model, separate list) ---\n const defaultFiltersState = computed<null | PlDataTableFiltersWithMeta>({\n get: () => {\n const raw = tableState.value.defaultFiltersState;\n if (!isNil(raw)) {\n return normalizeFiltersState(raw);\n }\n if (!isNil(defaultFilters.value)) {\n return annotateFiltersWithIds(normalizeFiltersState(defaultFilters.value));\n }\n return null;\n },\n set: (defaultFiltersState: null | PlDataTableFiltersWithMeta) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n defaultFiltersState,\n };\n }\n },\n });\n\n function resetDefaultFilters(): void {\n defaultFiltersState.value = isNil(defaultFilters.value)\n ? null\n : annotateFiltersWithIds(normalizeFiltersState(defaultFilters.value));\n }\n\n const searchString = computed<string>({\n get: () => tableState.value.searchString ?? \"\",\n set: (searchString: string) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n searchString,\n };\n }\n },\n });\n\n return {\n gridState,\n sheetsState,\n searchString,\n filtersState,\n defaultFiltersState,\n resetDefaultFilters,\n };\n}\n\n// --- Types ---\n\ntype PlDataTableStateV2CacheEntryNullable =\n | PlDataTableStateV2CacheEntry\n | {\n sourceId: null;\n gridState: Record<string, never>;\n sheetsState: [];\n filtersState: null;\n defaultFiltersState: null;\n searchString?: string;\n };\n\ntype FilterNode = FilterSpec<PlDataTableFilterSpecLeaf>;\ntype AnnotatedFilterSpec = FilterSpec<PlDataTableFilterSpecLeaf, PlDataTableFilterMeta>;\n\n// --- Core ---\n\nfunction createPTableParams(\n state: PlDataTableStateV2CacheEntry,\n filterableColumns: PTableColumnSpec[],\n): PTableParamsV2 {\n // User filters: sheets + user filter state + search\n const searchNode = createSearchFilterNode(filterableColumns, state.searchString);\n const unsuppressedUserFilters = isNil(state.filtersState)\n ? null\n : stripSuppressedFilters(state.filtersState);\n const userParts = [\n ...convertPartitionFiltersToFilterSpec(state.sheetsState),\n ...(isNil(unsuppressedUserFilters) ? [] : [unsuppressedUserFilters]),\n ...(isNil(searchNode) ? [] : [searchNode]),\n ];\n const filters: null | PlDataTableFilters = distillFilterSpec(\n userParts.length === 0\n ? null\n : userParts.length === 1\n ? userParts[0]\n : { type: \"and\", filters: userParts },\n );\n const unsuppressedDefaultFilters = isNil(state.defaultFiltersState)\n ? null\n : stripSuppressedFilters(state.defaultFiltersState);\n const defaultFilters: null | PlDataTableFilters = isNil(unsuppressedDefaultFilters)\n ? null\n : // If all filters are suppressed, we should pass an empty filter group instead of null to prevent fallback to defaults in the model\n (distillFilterSpec(unsuppressedDefaultFilters) ?? getEmptyGroup());\n\n return {\n sourceId: state.sourceId,\n hiddenColIds: getHiddenColIds(state.gridState.columnVisibility),\n sorting: convertAgSortingToPTableSorting(state.gridState.sort),\n filters,\n defaultFilters,\n };\n}\n\n/**\n * Normalizes raw filter state into a valid root filter structure.\n * Valid structure is Root(Group, Group, ...) — double nesting required:\n * root is and/or group, each child is also and/or group containing leaf filters.\n * - null/undefined/invalid → empty root\n * - Leaf node → Root(Group(leaf))\n * - Group with leaf children → Root(Group(leaves...))\n * - Group with group children → as-is\n */\nfunction normalizeFiltersState(raw: FilterNode) {\n // Leaf node → wrap in double nesting: Root(Group(leaf))\n if (raw.type !== \"and\" && raw.type !== \"or\" && raw.type !== \"not\") {\n if (\"type\" in raw && !isNil(raw.type)) {\n return {\n id: randomInt(),\n type: \"and\" as const,\n isExpanded: true,\n filters: [\n {\n id: randomInt(),\n type: \"and\" as const,\n isExpanded: true,\n filters: [raw as AnnotatedFilterSpec],\n } as AnnotatedFilterSpec,\n ],\n };\n }\n return getEmptyGroupWithMeta();\n }\n\n // Already a group — ensure children are also groups (double nesting)\n if ((raw.type === \"and\" || raw.type === \"or\") && \"filters\" in raw && Array.isArray(raw.filters)) {\n const allChildrenAreGroups = raw.filters.every(\n (f: FilterNode) => f.type === \"and\" || f.type === \"or\" || f.type === \"not\",\n );\n if (allChildrenAreGroups) {\n return raw as PlDataTableFiltersWithMeta;\n }\n // Children are leaves — wrap them in a single group\n return {\n id: randomInt(),\n type: raw.type as \"and\" | \"or\",\n isExpanded: true,\n filters: [\n {\n id: randomInt(),\n type: raw.type as \"and\" | \"or\",\n isExpanded: true,\n filters: raw.filters as AnnotatedFilterSpec[],\n } as AnnotatedFilterSpec,\n ],\n };\n }\n\n return getEmptyGroupWithMeta();\n}\n\nfunction getEmptyGroup(): PlDataTableFilters {\n return {\n type: \"and\" as const,\n filters: [],\n };\n}\nfunction getEmptyGroupWithMeta(): PlDataTableFiltersWithMeta {\n return {\n ...getEmptyGroup(),\n id: randomInt(),\n isExpanded: true,\n } as PlDataTableFiltersWithMeta;\n}\n\n/**\n * Recursively removes nodes where isSuppressed === true from a PlDataTableFiltersWithMeta tree.\n */\nfunction stripSuppressedFilters(node: PlDataTableFiltersWithMeta): PlDataTableFiltersWithMeta {\n return {\n ...node,\n filters: node.filters\n .filter((child) => !(\"isSuppressed\" in child && child.isSuppressed === true))\n .map((child) =>\n \"filters\" in child && (child.type === \"and\" || child.type === \"or\")\n ? stripSuppressedFilters(child as PlDataTableFiltersWithMeta)\n : child,\n ),\n };\n}\n\nfunction createSearchFilterNode(\n columns: PTableColumnSpec[],\n search: null | undefined | string,\n): null | FilterSpec<FilterSpecLeaf<CanonicalizedJson<PTableColumnId>>> {\n const trimmed = search?.trim();\n if (isNil(trimmed) || trimmed.length === 0) return null;\n\n const parts: FilterSpec<FilterSpecLeaf<CanonicalizedJson<PTableColumnId>>>[] = [];\n const numericValue = Number(trimmed);\n const isValidNumber = trimmed.length > 0 && !isNaN(numericValue) && isFinite(numericValue);\n\n for (const col of columns) {\n const column = canonicalizeJson<PTableColumnId>(getPTableColumnId(col));\n const spec = col.spec;\n\n if (isStringValueType(spec)) {\n parts.push({ type: \"patternEquals\", column, value: trimmed });\n }\n\n if (isNumericValueType(spec) && isValidNumber) {\n parts.push({ type: \"equal\", column, x: numericValue });\n }\n }\n\n if (parts.length === 0) return null;\n\n return { type: \"or\", filters: parts };\n}\n\n// --- Helpers ---\n\n/**\n * Recursively ensures every node in a filter tree has an `id` field.\n * Does not set `source` meta — defaults are now a separate list.\n */\nfunction annotateFiltersWithIds(\n filters: PlDataTableFilters | PlDataTableFiltersWithMeta,\n): PlDataTableFiltersWithMeta {\n return annotateNodeWithIds(filters) as PlDataTableFiltersWithMeta;\n}\n\nfunction annotateNodeWithIds(\n node: FilterNode | PlDataTableFilters | PlDataTableFiltersWithMeta,\n): AnnotatedFilterSpec {\n switch (node.type) {\n case \"and\":\n return {\n id: getField(node, \"id\") ?? randomInt(),\n isExpanded: getField(node, \"isExpanded\") ?? true,\n type: \"and\" as const,\n filters: node.filters.map((child) => annotateNodeWithIds(child)),\n };\n case \"or\":\n return {\n id: getField(node, \"id\") ?? randomInt(),\n isExpanded: getField(node, \"isExpanded\") ?? true,\n type: \"or\" as const,\n filters: node.filters.map((child) => annotateNodeWithIds(child)),\n };\n case \"not\":\n return {\n id: randomInt(),\n isExpanded: true,\n type: \"not\" as const,\n filter: annotateNodeWithIds(node.filter),\n };\n default:\n return { ...node, id: getField(node, \"id\") ?? randomInt() } as AnnotatedFilterSpec;\n }\n}\n\n// --- Utilities ---\n\nfunction convertPartitionFiltersToFilterSpec(\n sheetsState: PlDataTableSheetState[],\n): FilterSpec<FilterSpecLeaf<CanonicalizedJson<PTableColumnId>>>[] {\n return sheetsState.map((s) => {\n const column = canonicalizeJson<PTableColumnId>({ type: \"axis\", id: s.axisId });\n return typeof s.value === \"number\"\n ? { type: \"equal\" as const, column, x: s.value }\n : { type: \"patternEquals\" as const, column, value: s.value };\n });\n}\n\nfunction convertAgSortingToPTableSorting(state: PlDataTableGridStateCore[\"sort\"]): PTableSorting[] {\n return (\n state?.sortModel.map((item) => {\n const { spec: _, ...column } = parseJson(item.colId).labeled;\n return {\n column,\n ascending: item.sort === \"asc\",\n naAndAbsentAreLeastValues: item.sort === \"asc\",\n };\n }) ?? []\n );\n}\n\nfunction getHiddenColIds(\n state: PlDataTableGridStateCore[\"columnVisibility\"],\n): PTableColumnId[] | null {\n return state?.hiddenColIds?.map((json) => getPTableColumnId(parseJson(json).source)) ?? null;\n}\n\nfunction makeDefaultState(): PlDataTableStateV2CacheEntryNullable {\n return {\n sourceId: null,\n gridState: {},\n sheetsState: [],\n filtersState: null,\n defaultFiltersState: null,\n };\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlAgGridColumnManager.js","names":[],"sources":["../../../src/components/PlAgGridColumnManager/PlAgGridColumnManager.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n PlBtnGhost,\n PlElementList,\n PlSearchField,\n PlSlideModal,\n usePlBlockPageTitleTeleportTarget,\n} from \"@milaboratories/uikit\";\nimport { type
|
|
1
|
+
{"version":3,"file":"PlAgGridColumnManager.js","names":[],"sources":["../../../src/components/PlAgGridColumnManager/PlAgGridColumnManager.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n PlBtnGhost,\n PlElementList,\n PlSearchField,\n PlSlideModal,\n usePlBlockPageTitleTeleportTarget,\n} from \"@milaboratories/uikit\";\nimport { type GridApi } from \"ag-grid-enterprise\";\nimport { computed, ref } from \"vue\";\nimport { PlAgDataTableRowNumberColId } from \"../PlAgDataTable/sources/row-number\";\nimport { useFilteredItems } from \"./useFilteredItems\";\nimport { useGridColumns } from \"./useGridColumns\";\n\nconst props = defineProps<{\n /**\n * The GridApi is an API interface provided by the table/grid component\n * for interacting programmatically with the grid's features and functionality.\n * It allows you to control and manipulate grid behavior, access data, and\n * trigger specific actions.\n */\n api: GridApi;\n /**\n * Css Column Manager (Panel) modal width (default value is `368px`)\n */\n width?: string;\n}>();\n\nconst query = ref(\"\");\nconst slideModal = ref(false);\nconst teleportTarget = usePlBlockPageTitleTeleportTarget(\"PlAgGridColumnManager\");\n\nconst columns = useGridColumns(props);\n\nconst items = computed(() => {\n return columns.value.map((col, i) => ({\n column: col,\n id: col.getId(),\n label: col.getColDef().headerName ?? `Unnamed Column (${i + 1})`,\n }));\n});\n\nconst { filteredItems, segments } = useFilteredItems({\n items,\n query,\n getStrings: (item) => [item.label],\n});\n</script>\n\n<template>\n <Teleport v-if=\"teleportTarget\" :to=\"teleportTarget\">\n <PlBtnGhost icon=\"columns\" @click.stop=\"slideModal = !slideModal\"> Columns </PlBtnGhost>\n </Teleport>\n\n <PlSlideModal v-model=\"slideModal\" :width=\"width\" close-on-outside-click>\n <template #title>Manage Columns</template>\n <PlSearchField v-model=\"query\" clearable />\n <PlElementList\n :items=\"filteredItems\"\n :get-item-key=\"(item) => item.id\"\n :is-draggable=\"(item) => !item.column.getColDef().lockPosition\"\n :on-sort=\"\n (fromIndex, toIndex) => {\n if (!props.api.isDestroyed()) {\n const columnToMove = columns[fromIndex];\n props.api.moveColumns([columnToMove], toIndex);\n }\n return true; // Let PlElementList handle the visual update\n }\n \"\n :on-toggle=\"\n (item) => {\n if (!props.api.isDestroyed()) {\n props.api.setColumnsVisible([item.column], !item.column.isVisible());\n }\n }\n \"\n :is-toggled=\"(item) => !item.column.isVisible()\"\n :is-toggable=\"(item) => item.id !== PlAgDataTableRowNumberColId\"\n :is-pinned=\"(item) => !!item.column.getColDef().lockPosition\"\n :is-pinnable=\"() => false\"\n :disable-dragging=\"query.length > 0\"\n disable-removing\n >\n <template #item-title=\"{ item }\">\n <span>\n <span\n v-for=\"(segment, i) of segments.get(item.label)\"\n :key=\"i\"\n :class=\"{ [$style.match]: segment.match }\"\n >{{ segment.value }}</span\n >\n </span>\n </template>\n </PlElementList>\n </PlSlideModal>\n</template>\n\n<style module>\n.match {\n background-color: var(--color-active-select);\n border-radius: 2px;\n}\n</style>\n"],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlAgGridColumnManager.vue_vue_type_style_index_0_lang.module.js","names":[],"sources":["../../../src/components/PlAgGridColumnManager/PlAgGridColumnManager.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n PlBtnGhost,\n PlElementList,\n PlSearchField,\n PlSlideModal,\n usePlBlockPageTitleTeleportTarget,\n} from \"@milaboratories/uikit\";\nimport { type
|
|
1
|
+
{"version":3,"file":"PlAgGridColumnManager.vue_vue_type_style_index_0_lang.module.js","names":[],"sources":["../../../src/components/PlAgGridColumnManager/PlAgGridColumnManager.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n PlBtnGhost,\n PlElementList,\n PlSearchField,\n PlSlideModal,\n usePlBlockPageTitleTeleportTarget,\n} from \"@milaboratories/uikit\";\nimport { type GridApi } from \"ag-grid-enterprise\";\nimport { computed, ref } from \"vue\";\nimport { PlAgDataTableRowNumberColId } from \"../PlAgDataTable/sources/row-number\";\nimport { useFilteredItems } from \"./useFilteredItems\";\nimport { useGridColumns } from \"./useGridColumns\";\n\nconst props = defineProps<{\n /**\n * The GridApi is an API interface provided by the table/grid component\n * for interacting programmatically with the grid's features and functionality.\n * It allows you to control and manipulate grid behavior, access data, and\n * trigger specific actions.\n */\n api: GridApi;\n /**\n * Css Column Manager (Panel) modal width (default value is `368px`)\n */\n width?: string;\n}>();\n\nconst query = ref(\"\");\nconst slideModal = ref(false);\nconst teleportTarget = usePlBlockPageTitleTeleportTarget(\"PlAgGridColumnManager\");\n\nconst columns = useGridColumns(props);\n\nconst items = computed(() => {\n return columns.value.map((col, i) => ({\n column: col,\n id: col.getId(),\n label: col.getColDef().headerName ?? `Unnamed Column (${i + 1})`,\n }));\n});\n\nconst { filteredItems, segments } = useFilteredItems({\n items,\n query,\n getStrings: (item) => [item.label],\n});\n</script>\n\n<template>\n <Teleport v-if=\"teleportTarget\" :to=\"teleportTarget\">\n <PlBtnGhost icon=\"columns\" @click.stop=\"slideModal = !slideModal\"> Columns </PlBtnGhost>\n </Teleport>\n\n <PlSlideModal v-model=\"slideModal\" :width=\"width\" close-on-outside-click>\n <template #title>Manage Columns</template>\n <PlSearchField v-model=\"query\" clearable />\n <PlElementList\n :items=\"filteredItems\"\n :get-item-key=\"(item) => item.id\"\n :is-draggable=\"(item) => !item.column.getColDef().lockPosition\"\n :on-sort=\"\n (fromIndex, toIndex) => {\n if (!props.api.isDestroyed()) {\n const columnToMove = columns[fromIndex];\n props.api.moveColumns([columnToMove], toIndex);\n }\n return true; // Let PlElementList handle the visual update\n }\n \"\n :on-toggle=\"\n (item) => {\n if (!props.api.isDestroyed()) {\n props.api.setColumnsVisible([item.column], !item.column.isVisible());\n }\n }\n \"\n :is-toggled=\"(item) => !item.column.isVisible()\"\n :is-toggable=\"(item) => item.id !== PlAgDataTableRowNumberColId\"\n :is-pinned=\"(item) => !!item.column.getColDef().lockPosition\"\n :is-pinnable=\"() => false\"\n :disable-dragging=\"query.length > 0\"\n disable-removing\n >\n <template #item-title=\"{ item }\">\n <span>\n <span\n v-for=\"(segment, i) of segments.get(item.label)\"\n :key=\"i\"\n :class=\"{ [$style.match]: segment.match }\"\n >{{ segment.value }}</span\n >\n </span>\n </template>\n </PlElementList>\n </PlSlideModal>\n</template>\n\n<style module>\n.match {\n background-color: var(--color-active-select);\n border-radius: 2px;\n}\n</style>\n"],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlAgGridColumnManager.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlAgGridColumnManager/PlAgGridColumnManager.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PlAgGridColumnManager.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlAgGridColumnManager/PlAgGridColumnManager.vue"],"names":[],"mappings":"AAiHA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAMlD,KAAK,WAAW,GAAG;IACjB;;;;;OAKG;IACH,GAAG,EAAE,OAAO,CAAC;IACb;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;;AAiNF,wBAMG"}
|
|
@@ -1,75 +1,70 @@
|
|
|
1
1
|
import { PlAgDataTableRowNumberColId as e } from "../PlAgDataTable/sources/row-number.js";
|
|
2
2
|
import { useFilteredItems as t } from "./useFilteredItems.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { useGridColumns as n } from "./useGridColumns.js";
|
|
4
|
+
import { Fragment as r, Teleport as i, computed as a, createBlock as o, createCommentVNode as s, createElementBlock as c, createElementVNode as l, createTextVNode as u, createVNode as d, defineComponent as f, normalizeClass as p, openBlock as m, ref as h, renderList as g, toDisplayString as _, unref as v, withCtx as y, withModifiers as b } from "vue";
|
|
5
|
+
import { PlBtnGhost as x, PlElementList as S, PlSearchField as C, PlSlideModal as w, usePlBlockPageTitleTeleportTarget as T } from "@milaboratories/uikit";
|
|
5
6
|
//#region src/components/PlAgGridColumnManager/PlAgGridColumnManager.vue?vue&type=script&setup=true&lang.ts
|
|
6
|
-
var
|
|
7
|
+
var E = /* @__PURE__ */ f({
|
|
7
8
|
__name: "PlAgGridColumnManager",
|
|
8
9
|
props: {
|
|
9
10
|
api: {},
|
|
10
11
|
width: {}
|
|
11
12
|
},
|
|
12
|
-
setup(
|
|
13
|
-
let
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
column: e,
|
|
21
|
-
id: e.getId(),
|
|
22
|
-
label: e.getColDef().headerName
|
|
23
|
-
}))), A = m(""), j = m(!1), M = E("PlAgGridColumnManager"), { filteredItems: N, segments: P } = t(() => ({
|
|
24
|
-
items: k.value,
|
|
25
|
-
query: A.value,
|
|
13
|
+
setup(f) {
|
|
14
|
+
let E = f, D = h(""), O = h(!1), k = T("PlAgGridColumnManager"), A = n(E), { filteredItems: j, segments: M } = t({
|
|
15
|
+
items: a(() => A.value.map((e, t) => ({
|
|
16
|
+
column: e,
|
|
17
|
+
id: e.getId(),
|
|
18
|
+
label: e.getColDef().headerName ?? `Unnamed Column (${t + 1})`
|
|
19
|
+
}))),
|
|
20
|
+
query: D,
|
|
26
21
|
getStrings: (e) => [e.label]
|
|
27
|
-
})
|
|
28
|
-
return (t,
|
|
22
|
+
});
|
|
23
|
+
return (t, n) => (m(), c(r, null, [v(k) ? (m(), o(i, {
|
|
29
24
|
key: 0,
|
|
30
|
-
to: v(
|
|
31
|
-
}, [
|
|
25
|
+
to: v(k)
|
|
26
|
+
}, [d(v(x), {
|
|
32
27
|
icon: "columns",
|
|
33
|
-
onClick:
|
|
28
|
+
onClick: n[0] ||= b((e) => O.value = !O.value, ["stop"])
|
|
34
29
|
}, {
|
|
35
|
-
default:
|
|
30
|
+
default: y(() => [...n[3] ||= [u(" Columns ", -1)]]),
|
|
36
31
|
_: 1
|
|
37
|
-
})], 8, ["to"])) :
|
|
38
|
-
modelValue:
|
|
39
|
-
"onUpdate:modelValue":
|
|
40
|
-
width:
|
|
32
|
+
})], 8, ["to"])) : s("", !0), d(v(w), {
|
|
33
|
+
modelValue: O.value,
|
|
34
|
+
"onUpdate:modelValue": n[2] ||= (e) => O.value = e,
|
|
35
|
+
width: f.width,
|
|
41
36
|
"close-on-outside-click": ""
|
|
42
37
|
}, {
|
|
43
|
-
title:
|
|
44
|
-
default:
|
|
45
|
-
modelValue:
|
|
46
|
-
"onUpdate:modelValue":
|
|
38
|
+
title: y(() => [...n[4] ||= [u("Manage Columns", -1)]]),
|
|
39
|
+
default: y(() => [d(v(C), {
|
|
40
|
+
modelValue: D.value,
|
|
41
|
+
"onUpdate:modelValue": n[1] ||= (e) => D.value = e,
|
|
47
42
|
clearable: ""
|
|
48
|
-
}, null, 8, ["modelValue"]),
|
|
49
|
-
items: v(
|
|
43
|
+
}, null, 8, ["modelValue"]), d(v(S), {
|
|
44
|
+
items: v(j),
|
|
50
45
|
"get-item-key": (e) => e.id,
|
|
51
46
|
"is-draggable": (e) => !e.column.getColDef().lockPosition,
|
|
52
47
|
"on-sort": (e, t) => {
|
|
53
|
-
if (!
|
|
54
|
-
let n =
|
|
55
|
-
|
|
48
|
+
if (!E.api.isDestroyed()) {
|
|
49
|
+
let n = v(A)[e];
|
|
50
|
+
E.api.moveColumns([n], t);
|
|
56
51
|
}
|
|
57
52
|
return !0;
|
|
58
53
|
},
|
|
59
54
|
"on-toggle": (e) => {
|
|
60
|
-
|
|
55
|
+
E.api.isDestroyed() || E.api.setColumnsVisible([e.column], !e.column.isVisible());
|
|
61
56
|
},
|
|
62
57
|
"is-toggled": (e) => !e.column.isVisible(),
|
|
63
58
|
"is-toggable": (t) => t.id !== v(e),
|
|
64
59
|
"is-pinned": (e) => !!e.column.getColDef().lockPosition,
|
|
65
60
|
"is-pinnable": () => !1,
|
|
66
|
-
"disable-dragging":
|
|
61
|
+
"disable-dragging": D.value.length > 0,
|
|
67
62
|
"disable-removing": ""
|
|
68
63
|
}, {
|
|
69
|
-
"item-title":
|
|
64
|
+
"item-title": y(({ item: e }) => [l("span", null, [(m(!0), c(r, null, g(v(M).get(e.label), (e, n) => (m(), c("span", {
|
|
70
65
|
key: n,
|
|
71
|
-
class:
|
|
72
|
-
},
|
|
66
|
+
class: p({ [t.$style.match]: e.match })
|
|
67
|
+
}, _(e.value), 3))), 128))])]),
|
|
73
68
|
_: 1
|
|
74
69
|
}, 8, [
|
|
75
70
|
"items",
|
|
@@ -87,6 +82,6 @@ var D = /* @__PURE__ */ d({
|
|
|
87
82
|
}
|
|
88
83
|
});
|
|
89
84
|
//#endregion
|
|
90
|
-
export {
|
|
85
|
+
export { E as default };
|
|
91
86
|
|
|
92
87
|
//# sourceMappingURL=PlAgGridColumnManager.vue2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlAgGridColumnManager.vue_vue_type_script_setup_true_lang.js","names":["$style"],"sources":["../../../src/components/PlAgGridColumnManager/PlAgGridColumnManager.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n PlBtnGhost,\n PlElementList,\n PlSearchField,\n PlSlideModal,\n usePlBlockPageTitleTeleportTarget,\n} from \"@milaboratories/uikit\";\nimport { type
|
|
1
|
+
{"version":3,"file":"PlAgGridColumnManager.vue_vue_type_script_setup_true_lang.js","names":["$style"],"sources":["../../../src/components/PlAgGridColumnManager/PlAgGridColumnManager.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n PlBtnGhost,\n PlElementList,\n PlSearchField,\n PlSlideModal,\n usePlBlockPageTitleTeleportTarget,\n} from \"@milaboratories/uikit\";\nimport { type GridApi } from \"ag-grid-enterprise\";\nimport { computed, ref } from \"vue\";\nimport { PlAgDataTableRowNumberColId } from \"../PlAgDataTable/sources/row-number\";\nimport { useFilteredItems } from \"./useFilteredItems\";\nimport { useGridColumns } from \"./useGridColumns\";\n\nconst props = defineProps<{\n /**\n * The GridApi is an API interface provided by the table/grid component\n * for interacting programmatically with the grid's features and functionality.\n * It allows you to control and manipulate grid behavior, access data, and\n * trigger specific actions.\n */\n api: GridApi;\n /**\n * Css Column Manager (Panel) modal width (default value is `368px`)\n */\n width?: string;\n}>();\n\nconst query = ref(\"\");\nconst slideModal = ref(false);\nconst teleportTarget = usePlBlockPageTitleTeleportTarget(\"PlAgGridColumnManager\");\n\nconst columns = useGridColumns(props);\n\nconst items = computed(() => {\n return columns.value.map((col, i) => ({\n column: col,\n id: col.getId(),\n label: col.getColDef().headerName ?? `Unnamed Column (${i + 1})`,\n }));\n});\n\nconst { filteredItems, segments } = useFilteredItems({\n items,\n query,\n getStrings: (item) => [item.label],\n});\n</script>\n\n<template>\n <Teleport v-if=\"teleportTarget\" :to=\"teleportTarget\">\n <PlBtnGhost icon=\"columns\" @click.stop=\"slideModal = !slideModal\"> Columns </PlBtnGhost>\n </Teleport>\n\n <PlSlideModal v-model=\"slideModal\" :width=\"width\" close-on-outside-click>\n <template #title>Manage Columns</template>\n <PlSearchField v-model=\"query\" clearable />\n <PlElementList\n :items=\"filteredItems\"\n :get-item-key=\"(item) => item.id\"\n :is-draggable=\"(item) => !item.column.getColDef().lockPosition\"\n :on-sort=\"\n (fromIndex, toIndex) => {\n if (!props.api.isDestroyed()) {\n const columnToMove = columns[fromIndex];\n props.api.moveColumns([columnToMove], toIndex);\n }\n return true; // Let PlElementList handle the visual update\n }\n \"\n :on-toggle=\"\n (item) => {\n if (!props.api.isDestroyed()) {\n props.api.setColumnsVisible([item.column], !item.column.isVisible());\n }\n }\n \"\n :is-toggled=\"(item) => !item.column.isVisible()\"\n :is-toggable=\"(item) => item.id !== PlAgDataTableRowNumberColId\"\n :is-pinned=\"(item) => !!item.column.getColDef().lockPosition\"\n :is-pinnable=\"() => false\"\n :disable-dragging=\"query.length > 0\"\n disable-removing\n >\n <template #item-title=\"{ item }\">\n <span>\n <span\n v-for=\"(segment, i) of segments.get(item.label)\"\n :key=\"i\"\n :class=\"{ [$style.match]: segment.match }\"\n >{{ segment.value }}</span\n >\n </span>\n </template>\n </PlElementList>\n </PlSlideModal>\n</template>\n\n<style module>\n.match {\n background-color: var(--color-active-select);\n border-radius: 2px;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;EAcA,IAAM,IAAQ,GAcR,IAAQ,EAAI,GAAG,EACf,IAAa,EAAI,GAAM,EACvB,IAAiB,EAAkC,wBAAwB,EAE3E,IAAU,EAAe,EAAM,EAU/B,EAAE,kBAAe,gBAAa,EAAiB;GACnD,OATY,QACL,EAAQ,MAAM,KAAK,GAAK,OAAO;IACpC,QAAQ;IACR,IAAI,EAAI,OAAO;IACf,OAAO,EAAI,WAAW,CAAC,cAAc,mBAAmB,IAAI,EAAE;IAC/D,EAAE,CACH;GAIA;GACA,aAAa,MAAS,CAAC,EAAK,MAAM;GACnC,CAAC;qCAIgB,EAAA,EAAc,IAAA,GAAA,EAA9B,EAEW,GAAA;;GAFsB,IAAI,EAAA,EAAc;MACjD,EAAwF,EAAA,EAAA,EAAA;GAA5E,MAAK;GAAW,SAAK,AAAA,EAAA,OAAA,GAAA,MAAO,EAAA,QAAU,CAAI,EAAA,OAAU,CAAA,OAAA,CAAA;;oBAAW,CAAA,GAAA,AAAA,EAAA,OAAA,CAAA,EAAT,aAAS,GAAA,CAAA,CAAA,CAAA;;gCAG7E,EAyCe,EAAA,EAAA,EAAA;eAzCQ,EAAA;4CAAU,QAAA;GAAG,OAAO,EAAA;GAAO,0BAAA;;GACrC,OAAK,QAAe,CAAA,GAAA,AAAA,EAAA,OAAA,CAAA,EAAd,kBAAc,GAAA,CAAA,CAAA,CAAA;oBACY,CAA3C,EAA2C,EAAA,EAAA,EAAA;gBAAnB,EAAA;6CAAK,QAAA;IAAE,WAAA;gCAC/B,EAqCgB,EAAA,EAAA,EAAA;IApCb,OAAO,EAAA,EAAa;IACpB,iBAAe,MAAS,EAAK;IAC7B,iBAAe,MAAI,CAAM,EAAK,OAAO,WAAS,CAAG;IACjD,YAAmB,GAAW,MAAO;UAAsB,EAAM,IAAI,aAAW,EAAA;UAAwB,IAAe,EAAA,EAAO,CAAC;AAAwB,QAAM,IAAI,YAAW,CAAE,EAAY,EAAG,EAAO;;;;IASpM,cAAqB,MAAI;KAAsB,EAAM,IAAI,aAAW,IAAkB,EAAM,IAAI,kBAAiB,CAAE,EAAK,OAAM,EAAA,CAAI,EAAK,OAAO,WAAS,CAAA;;IAOvJ,eAAa,MAAI,CAAM,EAAK,OAAO,WAAS;IAC5C,gBAAc,MAAS,EAAK,OAAO,EAAA,EAA2B;IAC9D,cAAY,MAAI,CAAA,CAAO,EAAK,OAAO,WAAS,CAAG;IAC/C,qBAAa;IACb,oBAAkB,EAAA,MAAM,SAAM;IAC/B,oBAAA;;IAEW,cAAU,GAQZ,EARgB,cAAI,CAC3B,EAOO,QAAA,MAAA,EAAA,EAAA,GAAA,EANL,EAKC,GAAA,MAAA,EAJwB,EAAA,EAAQ,CAAC,IAAI,EAAK,MAAK,GAAtC,GAAS,YADnB,EAKC,QAAA;KAHE,KAAK;KACL,OAAK,EAAA,GAAKA,EAAAA,OAAO,QAAQ,EAAQ,OAAK,CAAA;SACnC,EAAQ,MAAK,EAAA,EAAA"}
|