@platforma-sdk/ui-vue 1.41.2 → 1.41.4
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 +20 -30
- package/.turbo/turbo-type-check.log +1 -1
- package/CHANGELOG.md +17 -0
- package/dist/aggrid.js +4 -4
- package/dist/components/PlAgDataTable/PlAgDataTableV2.vue.d.ts +14 -3
- package/dist/components/PlAgDataTable/PlAgDataTableV2.vue.d.ts.map +1 -1
- package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js +252 -179
- package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js.map +1 -1
- package/dist/components/PlAgDataTable/PlAgRowCount.vue.js +1 -1
- package/dist/components/PlAgDataTable/sources/focus-row.d.ts +8 -7
- package/dist/components/PlAgDataTable/sources/focus-row.d.ts.map +1 -1
- package/dist/components/PlAgDataTable/sources/focus-row.js +46 -31
- package/dist/components/PlAgDataTable/sources/focus-row.js.map +1 -1
- package/dist/components/PlAgDataTable/sources/table-source-v2.d.ts +10 -5
- package/dist/components/PlAgDataTable/sources/table-source-v2.d.ts.map +1 -1
- package/dist/components/PlAgDataTable/sources/table-source-v2.js +144 -141
- package/dist/components/PlAgDataTable/sources/table-source-v2.js.map +1 -1
- package/dist/components/PlAgDataTable/types.d.ts +27 -1
- package/dist/components/PlAgDataTable/types.d.ts.map +1 -1
- package/dist/components/PlAgDataTable/types.js.map +1 -1
- package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue.js +1 -1
- package/dist/components/PlAgRowNumHeader.vue.js +1 -1
- package/dist/components/PlAnnotations/components/DynamicForm.vue2.js +29 -29
- package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js +2 -2
- package/dist/components/PlMultiSequenceAlignment/data.js +14 -14
- package/dist/defineApp.js +12 -12
- package/dist/internal/test-helpers/BlockMock.d.ts +1 -0
- package/dist/internal/test-helpers/BlockMock.d.ts.map +1 -1
- package/dist/lib/ui/uikit/dist/components/PlAccordion/{ExpandTransition.vue.js → ExpandTransition.vue2.js} +1 -1
- package/dist/lib/ui/uikit/dist/components/PlAccordion/ExpandTransition.vue2.js.map +1 -0
- package/dist/lib/ui/uikit/dist/components/PlAccordion/PlAccordionSection.vue2.js +1 -1
- package/dist/lib/ui/uikit/dist/components/PlAutocomplete/PlAutocomplete.vue.js +1 -1
- package/dist/lib/ui/uikit/dist/components/PlDropdown/PlDropdown.vue.js +1 -1
- package/dist/lib/ui/uikit/dist/components/PlDropdownLegacy/PlDropdownLegacy.vue.js +1 -1
- package/dist/lib/ui/uikit/dist/components/PlDropdownMulti/PlDropdownMulti.vue.js +1 -1
- package/dist/lib/ui/uikit/dist/components/PlFileDialog/Local.vue.js +4 -4
- package/dist/lib/ui/uikit/dist/components/PlFileInput/PlFileInput.vue.js +1 -1
- package/dist/lib/ui/uikit/dist/components/PlTextArea/PlTextArea.vue.js +1 -1
- package/dist/lib/ui/uikit/dist/components/PlTextField/PlTextField.vue.js +1 -1
- package/dist/lib/ui/uikit/dist/generated/components/svg/images/{SvgRequired.vue2.js → SvgRequired.vue.js} +1 -1
- package/dist/lib/ui/uikit/dist/generated/components/svg/images/SvgRequired.vue.js.map +1 -0
- package/dist/lib/ui/uikit/dist/sdk/model/dist/index.js +25 -25
- package/dist/lib/ui/uikit/dist/sdk/model/dist/index.js.map +1 -1
- package/dist/lib/util/helpers/dist/index.js +88 -73
- package/dist/lib/util/helpers/dist/index.js.map +1 -1
- package/dist/lib.js +73 -73
- package/dist/sdk/model/dist/index.js +110 -103
- package/dist/sdk/model/dist/index.js.map +1 -1
- package/package.json +8 -8
- package/src/components/PlAgDataTable/PlAgDataTableV2.vue +172 -45
- package/src/components/PlAgDataTable/sources/focus-row.ts +38 -37
- package/src/components/PlAgDataTable/sources/table-source-v2.ts +113 -110
- package/src/components/PlAgDataTable/types.ts +30 -1
- package/src/internal/test-helpers/BlockMock.ts +5 -0
- package/dist/lib/ui/uikit/dist/components/PlAccordion/ExpandTransition.vue.js.map +0 -1
- package/dist/lib/ui/uikit/dist/generated/components/svg/images/SvgRequired.vue2.js.map +0 -1
|
@@ -1,180 +1,183 @@
|
|
|
1
|
-
import { isLabelColumn as
|
|
2
|
-
import _ from "../../../_virtual/canonicalize.js";
|
|
1
|
+
import { isLabelColumn as H, isColumnHidden as J, isColumnOptional as _, mapPTableValueToAxisKey as K } from "../../../sdk/model/dist/index.js";
|
|
3
2
|
import z from "../../PlAgColumnHeader/PlAgColumnHeader.vue.js";
|
|
4
|
-
import
|
|
5
|
-
import { PTableHidden as
|
|
6
|
-
import { defaultMainMenuItems as
|
|
7
|
-
import { makeRowNumberColDef as
|
|
8
|
-
import { getColumnRenderingSpec as
|
|
9
|
-
import { isJsonEqual as
|
|
10
|
-
import { getAxisId as
|
|
11
|
-
function
|
|
12
|
-
|
|
3
|
+
import Q from "../../PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue.js";
|
|
4
|
+
import { PTableHidden as V } from "./common.js";
|
|
5
|
+
import { defaultMainMenuItems as j } from "./menu-items.js";
|
|
6
|
+
import { makeRowNumberColDef as U, PlAgDataTableRowNumberColId as W } from "./row-number.js";
|
|
7
|
+
import { getColumnRenderingSpec as Z } from "./value-rendering.js";
|
|
8
|
+
import { isJsonEqual as $ } from "../../../lib/util/helpers/dist/index.js";
|
|
9
|
+
import { canonicalizeJson as M, getAxisId as F, matchAxisId as T, pTableValue as E } from "../../../lib/model/common/dist/index.js";
|
|
10
|
+
function X(a) {
|
|
11
|
+
switch (a.type) {
|
|
12
|
+
case "axis":
|
|
13
|
+
return {
|
|
14
|
+
type: "axis",
|
|
15
|
+
id: F(a.spec)
|
|
16
|
+
};
|
|
17
|
+
case "column":
|
|
18
|
+
return {
|
|
19
|
+
type: "column",
|
|
20
|
+
id: a.id
|
|
21
|
+
};
|
|
22
|
+
}
|
|
13
23
|
}
|
|
14
|
-
function
|
|
15
|
-
const
|
|
16
|
-
for (let u = 0; u <
|
|
17
|
-
const
|
|
18
|
-
E(
|
|
19
|
-
)),
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}),
|
|
24
|
+
function Y(a, o, w, c) {
|
|
25
|
+
const r = [];
|
|
26
|
+
for (let u = 0; u < o[0].data.length; ++u) {
|
|
27
|
+
const d = w.map((n) => K(
|
|
28
|
+
E(o[c[n]], u)
|
|
29
|
+
)), l = { id: M(d), axesKey: d };
|
|
30
|
+
a.forEach((n, p) => {
|
|
31
|
+
l[n.toString()] = c[p] === -1 ? V : E(o[c[p]], u);
|
|
32
|
+
}), r.push(l);
|
|
23
33
|
}
|
|
24
|
-
return
|
|
34
|
+
return r;
|
|
25
35
|
}
|
|
26
|
-
async function
|
|
27
|
-
generation:
|
|
28
|
-
pfDriver:
|
|
29
|
-
model:
|
|
36
|
+
async function ue({
|
|
37
|
+
generation: a,
|
|
38
|
+
pfDriver: o,
|
|
39
|
+
model: w,
|
|
30
40
|
sheets: c,
|
|
31
|
-
|
|
41
|
+
dataRenderedTracker: r,
|
|
32
42
|
hiddenColIds: u,
|
|
33
|
-
cellButtonAxisParams:
|
|
43
|
+
cellButtonAxisParams: d
|
|
34
44
|
}) {
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
(
|
|
50
|
-
|
|
45
|
+
const i = a.value, l = new Error("table state generation changed"), n = await o.getSpec(w.fullTableHandle);
|
|
46
|
+
if (i !== a.value) throw l;
|
|
47
|
+
const p = w.visibleTableHandle, S = await o.getSpec(p);
|
|
48
|
+
if (i !== a.value) throw l;
|
|
49
|
+
const x = (e) => M(X(e)), b = new Map(
|
|
50
|
+
S.entries().map(([e, t]) => [x(t), e])
|
|
51
|
+
), g = new Map(
|
|
52
|
+
n.entries().map(([e, t]) => {
|
|
53
|
+
const s = b.get(x(t)) ?? -1;
|
|
54
|
+
if (s === -1 && t.type === "axis")
|
|
55
|
+
throw new Error(`axis ${JSON.stringify(t.spec)} not present in join result`);
|
|
56
|
+
return [e, s];
|
|
57
|
+
})
|
|
58
|
+
), v = c.map((e) => F(e.axis)), h = (e) => v.some((t) => T(t, e)), I = [], A = (e, t) => {
|
|
59
|
+
I.some((s) => T(s.axisId, e)) ? console.warn(`multiple label columns match axisId: ${JSON.stringify(e)}`) : I.push({ axisId: e, labelColumnIdx: t });
|
|
60
|
+
}, G = (e) => {
|
|
61
|
+
var t;
|
|
62
|
+
return ((t = I.find((s) => T(s.axisId, e))) == null ? void 0 : t.labelColumnIdx) ?? -1;
|
|
63
|
+
};
|
|
64
|
+
let f = n.entries().filter(
|
|
65
|
+
([e, t]) => {
|
|
51
66
|
switch (t.type) {
|
|
52
67
|
case "axis":
|
|
53
|
-
return !
|
|
54
|
-
(i) => I(b(i.axis), t.id)
|
|
55
|
-
);
|
|
68
|
+
return !h(t.id);
|
|
56
69
|
case "column":
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
70
|
+
if (H(t.spec)) {
|
|
71
|
+
const s = F(t.spec.axesSpec[0]);
|
|
72
|
+
return h(s) || A(s, e), !1;
|
|
73
|
+
}
|
|
74
|
+
return !J(t.spec);
|
|
60
75
|
}
|
|
61
76
|
}
|
|
62
|
-
).
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
for (let e = 0; e < x; ++e) S.set(e, -1);
|
|
79
|
-
g.forEach((e, t) => {
|
|
80
|
-
S.has(e) && S.set(e, t);
|
|
77
|
+
).map(([e]) => e).toArray();
|
|
78
|
+
f.sort((e, t) => {
|
|
79
|
+
var q, N;
|
|
80
|
+
if (n[e].type !== n[t].type) return n[e].type === "axis" ? -1 : 1;
|
|
81
|
+
const s = (q = n[e].spec.annotations) == null ? void 0 : q["pl7.app/table/orderPriority"], y = (N = n[t].spec.annotations) == null ? void 0 : N["pl7.app/table/orderPriority"];
|
|
82
|
+
return s === void 0 ? y === void 0 ? 0 : 1 : y === void 0 ? -1 : Number(y) - Number(s);
|
|
83
|
+
});
|
|
84
|
+
const O = [...f];
|
|
85
|
+
f = f.map((e) => {
|
|
86
|
+
const t = n[e];
|
|
87
|
+
if (t.type === "axis") {
|
|
88
|
+
const s = G(t.id);
|
|
89
|
+
if (s !== -1)
|
|
90
|
+
return s;
|
|
91
|
+
}
|
|
92
|
+
return e;
|
|
81
93
|
});
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
`Assertion failed: Original axis spec index ${e} (from fields) for key construction not found in allIndices.`
|
|
93
|
-
);
|
|
94
|
-
return t;
|
|
95
|
-
}), T = [], F = [];
|
|
96
|
-
g.forEach((e) => {
|
|
97
|
-
const t = D.get(e);
|
|
98
|
-
t !== -1 ? (F.push(T.length), T.push(t)) : F.push(-1);
|
|
94
|
+
const L = [
|
|
95
|
+
U(),
|
|
96
|
+
...O.map((e, t) => B(e, n[e], n[f[t]], u, d))
|
|
97
|
+
], k = n.values().filter((e) => e.type === "axis").map((e) => e.spec).toArray(), P = k.keys().map((e) => {
|
|
98
|
+
let t = f.indexOf(e);
|
|
99
|
+
return t === -1 && (t = f.length, f.push(e)), t;
|
|
100
|
+
}).toArray(), C = [], D = [];
|
|
101
|
+
f.forEach((e) => {
|
|
102
|
+
const t = g.get(e);
|
|
103
|
+
t !== -1 ? (D.push(C.length), C.push(t)) : D.push(-1);
|
|
99
104
|
});
|
|
100
|
-
|
|
101
|
-
let y = -1, M;
|
|
105
|
+
let m = -1, R;
|
|
102
106
|
return {
|
|
103
|
-
|
|
107
|
+
axesSpec: k,
|
|
108
|
+
columnDefs: L,
|
|
104
109
|
serverSideDatasource: {
|
|
105
110
|
getRows: async (e) => {
|
|
106
|
-
if (
|
|
111
|
+
if (i !== a.value) return e.fail();
|
|
107
112
|
try {
|
|
108
|
-
if (
|
|
109
|
-
const
|
|
110
|
-
if (
|
|
111
|
-
|
|
113
|
+
if (m === -1) {
|
|
114
|
+
const y = await o.getShape(p);
|
|
115
|
+
if (i !== a.value || e.api.isDestroyed()) return e.fail();
|
|
116
|
+
m = y.rows;
|
|
112
117
|
}
|
|
113
|
-
if (
|
|
114
|
-
e.success({ rowData: [], rowCount:
|
|
118
|
+
if (m == 0) {
|
|
119
|
+
e.success({ rowData: [], rowCount: m }), e.api.setGridOption("loading", !1), e.api.showNoRowsOverlay();
|
|
115
120
|
return;
|
|
116
121
|
}
|
|
117
|
-
if (
|
|
118
|
-
return e.success({ rowData: [], rowCount:
|
|
119
|
-
|
|
120
|
-
let t = 0,
|
|
121
|
-
if (
|
|
122
|
-
const
|
|
122
|
+
if (R && !$(R.request.sortModel, e.request.sortModel))
|
|
123
|
+
return e.success({ rowData: [], rowCount: m });
|
|
124
|
+
R = e;
|
|
125
|
+
let t = 0, s = [];
|
|
126
|
+
if (m > 0 && e.request.startRow !== void 0 && e.request.endRow !== void 0 && (t = Math.min(m, e.request.endRow) - e.request.startRow, t > 0)) {
|
|
127
|
+
const y = await o.getData(p, C, {
|
|
123
128
|
offset: e.request.startRow,
|
|
124
129
|
length: t
|
|
125
130
|
});
|
|
126
|
-
if (
|
|
127
|
-
|
|
131
|
+
if (i !== a.value || e.api.isDestroyed()) return e.fail();
|
|
132
|
+
s = Y(O, y, P, D);
|
|
128
133
|
}
|
|
129
|
-
e.success({ rowData:
|
|
130
|
-
e.api.getAllDisplayedColumns().filter((
|
|
131
|
-
), e.api.setGridOption("loading", !1);
|
|
134
|
+
e.success({ rowData: s, rowCount: m }), e.api.autoSizeColumns(
|
|
135
|
+
e.api.getAllDisplayedColumns().filter((y) => y.getColId() !== W)
|
|
136
|
+
), e.api.setGridOption("loading", !1), r.resolve(e.api);
|
|
132
137
|
} catch (t) {
|
|
133
|
-
if (
|
|
138
|
+
if (i !== a.value || e.api.isDestroyed()) return e.fail();
|
|
134
139
|
e.api.setGridOption("loading", !0), e.fail(), console.trace(t);
|
|
135
|
-
} finally {
|
|
136
|
-
e.api.isDestroyed() || l(e.api);
|
|
137
140
|
}
|
|
138
141
|
}
|
|
139
142
|
}
|
|
140
143
|
};
|
|
141
144
|
}
|
|
142
|
-
function
|
|
143
|
-
var
|
|
144
|
-
const u =
|
|
145
|
-
source:
|
|
146
|
-
labeled:
|
|
147
|
-
}),
|
|
148
|
-
return
|
|
145
|
+
function B(a, o, w, c, r) {
|
|
146
|
+
var n, p;
|
|
147
|
+
const u = M({
|
|
148
|
+
source: o,
|
|
149
|
+
labeled: w
|
|
150
|
+
}), d = o.type === "axis" ? o.spec.type : o.spec.valueType, i = Z(o), l = {};
|
|
151
|
+
return i.fontFamily && (i.fontFamily === "monospace" ? (l.fontFamily = "Spline Sans Mono", l.fontWeight = 300) : l.fontFamily = i.fontFamily), {
|
|
149
152
|
colId: u,
|
|
150
|
-
mainMenuItems:
|
|
151
|
-
context:
|
|
152
|
-
field:
|
|
153
|
-
headerName: ((
|
|
154
|
-
lockPosition:
|
|
155
|
-
hide: (c == null ? void 0 : c.includes(u)) ??
|
|
156
|
-
valueFormatter:
|
|
153
|
+
mainMenuItems: j,
|
|
154
|
+
context: o,
|
|
155
|
+
field: `${a}`,
|
|
156
|
+
headerName: ((p = (n = w.spec.annotations) == null ? void 0 : n["pl7.app/label"]) == null ? void 0 : p.trim()) ?? `Unlabeled ${o.type} ${a}`,
|
|
157
|
+
lockPosition: o.type === "axis",
|
|
158
|
+
hide: (c == null ? void 0 : c.includes(u)) ?? _(o.spec),
|
|
159
|
+
valueFormatter: i.valueFormatter,
|
|
157
160
|
headerComponent: z,
|
|
158
|
-
cellRendererSelector:
|
|
159
|
-
var
|
|
160
|
-
if (
|
|
161
|
-
const
|
|
162
|
-
if (
|
|
161
|
+
cellRendererSelector: r != null && r.showCellButtonForAxisId ? (S) => {
|
|
162
|
+
var b, g;
|
|
163
|
+
if (o.type !== "axis") return;
|
|
164
|
+
const x = (g = (b = S.colDef) == null ? void 0 : b.context) == null ? void 0 : g.id;
|
|
165
|
+
if ($(x, r.showCellButtonForAxisId))
|
|
163
166
|
return {
|
|
164
|
-
component:
|
|
167
|
+
component: Q,
|
|
165
168
|
params: {
|
|
166
|
-
invokeRowsOnDoubleClick:
|
|
167
|
-
onClick: (
|
|
168
|
-
var
|
|
169
|
-
|
|
169
|
+
invokeRowsOnDoubleClick: r.cellButtonInvokeRowsOnDoubleClick,
|
|
170
|
+
onClick: (v) => {
|
|
171
|
+
var h;
|
|
172
|
+
r.trigger((h = v.data) == null ? void 0 : h.axesKey);
|
|
170
173
|
}
|
|
171
174
|
}
|
|
172
175
|
};
|
|
173
176
|
} : void 0,
|
|
174
|
-
cellStyle:
|
|
177
|
+
cellStyle: l,
|
|
175
178
|
headerComponentParams: {
|
|
176
179
|
type: (() => {
|
|
177
|
-
switch (
|
|
180
|
+
switch (d) {
|
|
178
181
|
case "Int":
|
|
179
182
|
case "Long":
|
|
180
183
|
case "Float":
|
|
@@ -184,12 +187,12 @@ function X(s, n, m, c, l) {
|
|
|
184
187
|
case "Bytes":
|
|
185
188
|
return "Text";
|
|
186
189
|
default:
|
|
187
|
-
throw Error(`unsupported data type: ${
|
|
190
|
+
throw Error(`unsupported data type: ${d}`);
|
|
188
191
|
}
|
|
189
192
|
})()
|
|
190
193
|
},
|
|
191
194
|
cellDataType: (() => {
|
|
192
|
-
switch (
|
|
195
|
+
switch (d) {
|
|
193
196
|
case "Int":
|
|
194
197
|
case "Long":
|
|
195
198
|
case "Float":
|
|
@@ -199,14 +202,14 @@ function X(s, n, m, c, l) {
|
|
|
199
202
|
case "Bytes":
|
|
200
203
|
return "text";
|
|
201
204
|
default:
|
|
202
|
-
throw Error(`unsupported data type: ${
|
|
205
|
+
throw Error(`unsupported data type: ${d}`);
|
|
203
206
|
}
|
|
204
207
|
})()
|
|
205
208
|
};
|
|
206
209
|
}
|
|
207
210
|
export {
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
+
ue as calculateGridOptions,
|
|
212
|
+
X as getPTableColumnId,
|
|
213
|
+
B as makeColDef
|
|
211
214
|
};
|
|
212
215
|
//# sourceMappingURL=table-source-v2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-source-v2.js","sources":["../../../../src/components/PlAgDataTable/sources/table-source-v2.ts"],"sourcesContent":["import type {\n PTableColumnSpecColumn } from '@platforma-sdk/model';\nimport {\n canonicalizeJson,\n getAxisId,\n isColumnOptional,\n mapPTableValueToAxisKey,\n pTableValue,\n type PColumnSpec,\n type PFrameDriver,\n type PlDataTableSheet,\n type PTableVector,\n type AxisId,\n type PlDataTableModel,\n type PTableColumnSpec,\n type PTableKey,\n type PlTableColumnId,\n type PlTableColumnIdJson,\n isLabelColumn as isLabelColumnSpec,\n isColumnHidden,\n} from '@platforma-sdk/model';\nimport type {\n CellStyle,\n ColDef,\n GridApi,\n ICellRendererParams,\n IServerSideDatasource,\n IServerSideGetRowsParams,\n ManagedGridOptions,\n} from 'ag-grid-enterprise';\nimport canonicalize from 'canonicalize';\nimport type { PlAgHeaderComponentParams, PlAgHeaderComponentType } from '../../PlAgColumnHeader';\nimport { PlAgColumnHeader } from '../../PlAgColumnHeader';\nimport { PlAgTextAndButtonCell } from '../../PlAgTextAndButtonCell';\nimport type { PlAgDataTableV2Row, PlTableRowId } from '../types';\nimport {\n PTableHidden,\n} from './common';\nimport { defaultMainMenuItems } from './menu-items';\nimport { makeRowNumberColDef, PlAgDataTableRowNumberColId } from './row-number';\nimport { getColumnRenderingSpec } from './value-rendering';\nimport type { Ref } from 'vue';\nimport { isJsonEqual } from '@milaboratories/helpers';\n\nexport function isLabelColumn(column: PTableColumnSpec): column is PTableColumnSpecColumn {\n return column.type === 'column' && isLabelColumnSpec(column.spec);\n}\n\n/** Convert columnar data from the driver to rows, used by ag-grid */\nfunction columns2rows(\n fields: number[],\n columns: PTableVector[],\n axes: number[],\n resultMapping: number[],\n): PlAgDataTableV2Row[] {\n const rowData: PlAgDataTableV2Row[] = [];\n for (let iRow = 0; iRow < columns[0].data.length; ++iRow) {\n const axesKey = axes.map((iAxis) => {\n return mapPTableValueToAxisKey(\n pTableValue(columns[resultMapping[iAxis]], iRow),\n );\n });\n const id = canonicalizeJson<PlTableRowId>(axesKey);\n const row: PlAgDataTableV2Row = { id, axesKey };\n fields.forEach((field, iCol) => {\n row[field.toString() as `${number}`] = resultMapping[iCol] === -1\n ? PTableHidden\n : pTableValue(columns[resultMapping[iCol]], iRow);\n });\n rowData.push(row);\n }\n return rowData;\n}\n\n/** Calculate GridOptions for selected p-table data source */\nexport async function calculateGridOptions({\n generation,\n pfDriver,\n model,\n sheets,\n track,\n hiddenColIds,\n cellButtonAxisParams,\n}: {\n generation: Ref<number>;\n pfDriver: PFrameDriver;\n model: PlDataTableModel;\n sheets: PlDataTableSheet[];\n track: (ctx: GridApi<PlAgDataTableV2Row>) => void;\n hiddenColIds?: PlTableColumnIdJson[];\n cellButtonAxisParams?: PlAgCellButtonAxisParams;\n}): Promise<Pick<ManagedGridOptions<PlAgDataTableV2Row>, 'columnDefs' | 'serverSideDatasource'>> {\n const pt = model.visibleTableHandle;\n const specs = await pfDriver.getSpec(model.fullTableHandle);\n type SpecId = string;\n const specId = (spec: PTableColumnSpec): SpecId =>\n spec.type === 'axis' ? canonicalize(getAxisId(spec.spec))! : spec.id;\n const dataSpecs = await pfDriver.getSpec(pt);\n const dataSpecsMap = new Map<SpecId, number>();\n dataSpecs.forEach((spec, i) => {\n dataSpecsMap.set(specId(spec), i);\n });\n const specsToDataSpecsMapping = new Map<number, number>();\n specs.forEach((spec, i) => {\n const dataSpecIdx = dataSpecsMap.get(specId(spec));\n if (dataSpecIdx === undefined && spec.type === 'axis')\n throw new Error(`axis ${JSON.stringify(spec.spec)} not present in join result`);\n specsToDataSpecsMapping.set(i, dataSpecIdx ?? -1);\n });\n\n let numberOfAxes = specs.findIndex((s) => s.type === 'column');\n if (numberOfAxes === -1) numberOfAxes = specs.length;\n\n // column indices in the specs array that we are going to process\n const indices = specs.keys()\n .filter(\n (i) => {\n const spec = specs[i];\n switch (spec.type) {\n case 'axis':\n {\n return !sheets.some(\n (sheet) => isJsonEqual(getAxisId(sheet.axis), spec.id),\n );\n }\n case 'column':\n {\n if (isLabelColumnSpec(spec.spec)) {\n return !sheets.some(\n (sheet) => isJsonEqual(getAxisId(sheet.axis), getAxisId(spec.spec.axesSpec[0])),\n );\n } else {\n return !isColumnHidden(spec.spec);\n }\n }\n }\n },\n )\n .toArray()\n .sort((a, b) => {\n if (specs[a].type !== specs[b].type) return specs[a].type === 'axis' ? -1 : 1;\n\n const aPriority = specs[a].spec.annotations?.['pl7.app/table/orderPriority'];\n const bPriority = specs[b].spec.annotations?.['pl7.app/table/orderPriority'];\n\n if (aPriority === undefined) return bPriority === undefined ? 0 : 1;\n if (bPriority === undefined) return -1;\n return Number(bPriority) - Number(aPriority);\n });\n\n const fields = [...indices];\n\n // process label columns\n const firstColumnIdx = indices.findIndex((i) => specs[i].type === 'column');\n for (let i = indices.length - 1; i >= firstColumnIdx; --i) {\n const idx = indices[i];\n if (!isLabelColumn(specs[idx])) continue;\n\n // axis of labels\n const axisId = getAxisId((specs[idx].spec as PColumnSpec).axesSpec[0]);\n const axisIdx = indices.findIndex((idx) => isJsonEqual(specs[idx].id, axisId));\n if (axisIdx !== -1) {\n indices[axisIdx] = idx;\n } else {\n console.warn(`multiple label columns match axisId: ${JSON.stringify(axisId)}`);\n }\n\n // remove original axis\n indices.splice(i, 1);\n fields.splice(i, 1);\n }\n\n const columnDefs: ColDef<PlAgDataTableV2Row>[] = [\n makeRowNumberColDef(),\n ...fields.map((field, index) => makeColDef(field, specs[field], specs[indices[index]], hiddenColIds, cellButtonAxisParams)),\n ];\n\n // mixing in axis indices\n\n const allIndices = [...indices];\n\n // axisIdx (0..<axesCount) -> idx in allIndices array\n const axisToFieldIdx = new Map<number, number>();\n for (let i = 0; i < numberOfAxes; ++i) axisToFieldIdx.set(i, -1);\n\n allIndices.forEach((idx, i) => {\n if (axisToFieldIdx.has(idx)) axisToFieldIdx.set(idx, i);\n });\n // at this point we have axis indices that are not listed in indices set to -1 in axisToFieldIdx\n\n // adding those indices at the end of allIndices array, to make sure we have all the axes in our response\n for (const [key, value] of axisToFieldIdx) {\n if (value === -1) {\n axisToFieldIdx.set(key, allIndices.length /* at this index value will be inserted in the next line */);\n allIndices.push(key);\n }\n }\n\n // Construct the `axes` array for key generation in `columns2rows`.\n // The key components should be ordered according to the display order of axis columns from the `fields` array.\n const axes: number[] = fields\n .filter((field) => specs[field].type === 'axis')\n .map((field) => {\n const r = allIndices.indexOf(field);\n if (r === -1) {\n throw new Error(\n `Assertion failed: Original axis spec index ${field} (from fields) for key construction not found in allIndices.`,\n );\n }\n return r;\n });\n\n const requestIndices: number[] = [];\n const resultMapping: number[] = [];\n allIndices.forEach((idx) => {\n const dataSpecIdx = specsToDataSpecsMapping.get(idx)!;\n if (dataSpecIdx !== -1) {\n resultMapping.push(requestIndices.length);\n requestIndices.push(dataSpecIdx);\n } else {\n resultMapping.push(-1);\n }\n });\n\n const stateGeneration = generation.value;\n let rowCount = -1;\n let lastParams: IServerSideGetRowsParams | undefined = undefined;\n const serverSideDatasource: IServerSideDatasource<PlAgDataTableV2Row> = {\n getRows: async (params: IServerSideGetRowsParams) => {\n if (stateGeneration !== generation.value) return params.fail();\n try {\n if (rowCount === -1) {\n const ptShape = await pfDriver.getShape(pt);\n if (stateGeneration !== generation.value || params.api.isDestroyed()) return params.fail();\n rowCount = ptShape.rows;\n }\n\n if (rowCount == 0) {\n params.success({ rowData: [], rowCount });\n // Warning: AgGrid cannot show two overlays at once,\n // so first hide loading overlay, then show no rows overlay\n params.api.setGridOption('loading', false);\n params.api.showNoRowsOverlay();\n return;\n }\n\n // If sort has changed - show skeletons instead of data\n if (lastParams && !isJsonEqual(lastParams.request.sortModel, params.request.sortModel)) {\n return params.success({ rowData: [], rowCount });\n }\n lastParams = params;\n\n let length = 0;\n let rowData: PlAgDataTableV2Row[] = [];\n if (rowCount > 0 && params.request.startRow !== undefined && params.request.endRow !== undefined) {\n length = Math.min(rowCount, params.request.endRow) - params.request.startRow;\n if (length > 0) {\n const data = await pfDriver.getData(pt, requestIndices, {\n offset: params.request.startRow,\n length,\n });\n if (stateGeneration !== generation.value || params.api.isDestroyed()) return params.fail();\n rowData = columns2rows(fields, data, axes, resultMapping);\n }\n }\n\n params.success({ rowData, rowCount });\n params.api.autoSizeColumns(\n params.api.getAllDisplayedColumns()\n .filter((column) => column.getColId() !== PlAgDataTableRowNumberColId),\n );\n params.api.setGridOption('loading', false);\n } catch (error: unknown) {\n if (stateGeneration !== generation.value || params.api.isDestroyed()) return params.fail();\n params.api.setGridOption('loading', true);\n params.fail();\n console.trace(error);\n } finally {\n if (!params.api.isDestroyed()) {\n track(params.api);\n }\n }\n },\n };\n\n return {\n columnDefs,\n serverSideDatasource,\n };\n}\n\nexport type PlAgCellButtonAxisParams = {\n showCellButtonForAxisId?: AxisId;\n cellButtonInvokeRowsOnDoubleClick?: boolean;\n trigger: (key?: PTableKey) => void;\n};\n\n/**\n * Calculates column definition for a given p-table column\n */\nexport function makeColDef(\n iCol: number,\n spec: PTableColumnSpec,\n labeledSpec: PTableColumnSpec,\n hiddenColIds: PlTableColumnIdJson[] | undefined,\n cellButtonAxisParams?: PlAgCellButtonAxisParams,\n): ColDef {\n const colId = canonicalizeJson<PlTableColumnId>({\n source: spec,\n labeled: labeledSpec,\n });\n const valueType = spec.type === 'axis' ? spec.spec.type : spec.spec.valueType;\n const columnRenderingSpec = getColumnRenderingSpec(spec);\n const cellStyle: CellStyle = {};\n if (columnRenderingSpec.fontFamily) {\n if (columnRenderingSpec.fontFamily === 'monospace') {\n cellStyle.fontFamily = 'Spline Sans Mono';\n cellStyle.fontWeight = 300;\n } else {\n cellStyle.fontFamily = columnRenderingSpec.fontFamily;\n }\n }\n return {\n colId,\n mainMenuItems: defaultMainMenuItems,\n context: spec,\n field: iCol.toString(),\n headerName: labeledSpec.spec.annotations?.['pl7.app/label']?.trim() ?? 'Unlabeled ' + spec.type + ' ' + iCol.toString(),\n lockPosition: spec.type === 'axis',\n hide: hiddenColIds?.includes(colId) ?? isColumnOptional(spec.spec),\n valueFormatter: columnRenderingSpec.valueFormatter,\n headerComponent: PlAgColumnHeader,\n cellRendererSelector: cellButtonAxisParams?.showCellButtonForAxisId\n ? (params: ICellRendererParams) => {\n if (spec.type !== 'axis') return;\n\n const axisId = (params.colDef?.context as PTableColumnSpec)?.id as AxisId;\n if (isJsonEqual(axisId, cellButtonAxisParams.showCellButtonForAxisId)) {\n return {\n component: PlAgTextAndButtonCell,\n params: {\n invokeRowsOnDoubleClick: cellButtonAxisParams.cellButtonInvokeRowsOnDoubleClick,\n onClick: (params: ICellRendererParams<PlAgDataTableV2Row>) => {\n cellButtonAxisParams.trigger(params.data?.axesKey);\n },\n },\n };\n }\n }\n : undefined,\n cellStyle,\n headerComponentParams: {\n type: ((): PlAgHeaderComponentType => {\n switch (valueType) {\n case 'Int':\n case 'Long':\n case 'Float':\n case 'Double':\n return 'Number';\n case 'String':\n case 'Bytes':\n return 'Text';\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n } satisfies PlAgHeaderComponentParams,\n cellDataType: (() => {\n switch (valueType) {\n case 'Int':\n case 'Long':\n case 'Float':\n case 'Double':\n return 'number';\n case 'String':\n case 'Bytes':\n return 'text';\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n };\n}\n"],"names":["isLabelColumn","column","isLabelColumnSpec","columns2rows","fields","columns","axes","resultMapping","rowData","iRow","axesKey","iAxis","mapPTableValueToAxisKey","pTableValue","row","canonicalizeJson","field","iCol","PTableHidden","calculateGridOptions","generation","pfDriver","model","sheets","track","hiddenColIds","cellButtonAxisParams","pt","specs","specId","spec","canonicalize","getAxisId","dataSpecs","dataSpecsMap","i","specsToDataSpecsMapping","dataSpecIdx","numberOfAxes","s","indices","sheet","isJsonEqual","isColumnHidden","a","b","aPriority","_a","bPriority","_b","firstColumnIdx","idx","axisId","axisIdx","columnDefs","makeRowNumberColDef","index","makeColDef","allIndices","axisToFieldIdx","key","value","r","requestIndices","stateGeneration","rowCount","lastParams","params","ptShape","length","data","PlAgDataTableRowNumberColId","error","labeledSpec","colId","valueType","columnRenderingSpec","getColumnRenderingSpec","cellStyle","defaultMainMenuItems","isColumnOptional","PlAgColumnHeader","PlAgTextAndButtonCell"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"table-source-v2.js","sources":["../../../../src/components/PlAgDataTable/sources/table-source-v2.ts"],"sourcesContent":["import type {\n AxesSpec,\n PTableColumnId,\n PTableColumnSpecColumn,\n PTableValue,\n} from '@platforma-sdk/model';\nimport {\n canonicalizeJson,\n getAxisId,\n isColumnOptional,\n mapPTableValueToAxisKey,\n pTableValue,\n type PFrameDriver,\n type PlDataTableSheet,\n type PTableVector,\n type AxisId,\n type PlDataTableModel,\n type PTableColumnSpec,\n type PTableKey,\n type PlTableColumnId,\n type PlTableColumnIdJson,\n isLabelColumn as isLabelColumnSpec,\n isColumnHidden,\n matchAxisId,\n} from '@platforma-sdk/model';\nimport type {\n CellStyle,\n ColDef,\n GridApi,\n ICellRendererParams,\n IServerSideDatasource,\n IServerSideGetRowsParams,\n ManagedGridOptions,\n} from 'ag-grid-enterprise';\nimport type { PlAgHeaderComponentParams, PlAgHeaderComponentType } from '../../PlAgColumnHeader';\nimport { PlAgColumnHeader } from '../../PlAgColumnHeader';\nimport { PlAgTextAndButtonCell } from '../../PlAgTextAndButtonCell';\nimport type { PlAgDataTableV2Row, PlTableRowId } from '../types';\nimport {\n PTableHidden,\n} from './common';\nimport { defaultMainMenuItems } from './menu-items';\nimport { makeRowNumberColDef, PlAgDataTableRowNumberColId } from './row-number';\nimport { getColumnRenderingSpec } from './value-rendering';\nimport type { Ref } from 'vue';\nimport { isJsonEqual } from '@milaboratories/helpers';\nimport type { DeferredCircular } from './focus-row';\n\nexport function isLabelColumn(column: PTableColumnSpec): column is PTableColumnSpecColumn {\n return column.type === 'column' && isLabelColumnSpec(column.spec);\n}\n\nexport function getPTableColumnId(spec: PTableColumnSpec): PTableColumnId {\n switch (spec.type) {\n case 'axis':\n return {\n type: 'axis',\n id: getAxisId(spec.spec),\n };\n case 'column':\n return {\n type: 'column',\n id: spec.id,\n };\n }\n}\n\n/** Convert columnar data from the driver to rows, used by ag-grid */\nfunction columns2rows(\n fields: number[],\n columns: PTableVector[],\n axes: number[],\n resultMapping: number[],\n): PlAgDataTableV2Row[] {\n const rowData: PlAgDataTableV2Row[] = [];\n for (let iRow = 0; iRow < columns[0].data.length; ++iRow) {\n const axesKey = axes.map((iAxis) => {\n return mapPTableValueToAxisKey(\n pTableValue(columns[resultMapping[iAxis]], iRow),\n );\n });\n const id = canonicalizeJson<PlTableRowId>(axesKey);\n const row: PlAgDataTableV2Row = { id, axesKey };\n fields.forEach((field, iCol) => {\n row[field.toString() as `${number}`] = resultMapping[iCol] === -1\n ? PTableHidden\n : pTableValue(columns[resultMapping[iCol]], iRow);\n });\n rowData.push(row);\n }\n return rowData;\n}\n\n/** Calculate GridOptions for selected p-table data source */\nexport async function calculateGridOptions({\n generation,\n pfDriver,\n model,\n sheets,\n dataRenderedTracker,\n hiddenColIds,\n cellButtonAxisParams,\n}: {\n generation: Ref<number>;\n pfDriver: PFrameDriver;\n model: PlDataTableModel;\n sheets: PlDataTableSheet[];\n dataRenderedTracker: DeferredCircular<GridApi<PlAgDataTableV2Row>>;\n hiddenColIds?: PlTableColumnIdJson[];\n cellButtonAxisParams?: PlAgCellButtonAxisParams;\n}): Promise<Pick<ManagedGridOptions<PlAgDataTableV2Row>, 'columnDefs' | 'serverSideDatasource'> & { axesSpec: AxesSpec }> {\n const stateGeneration = generation.value;\n const stateChangedError = new Error('table state generation changed');\n\n // get specs of the full table\n const specs = await pfDriver.getSpec(model.fullTableHandle);\n if (stateGeneration !== generation.value) throw stateChangedError;\n\n // get specs of the visible table (with hidden columns omitted)\n const pt = model.visibleTableHandle;\n const dataSpecs = await pfDriver.getSpec(pt);\n if (stateGeneration !== generation.value) throw stateChangedError;\n\n // create index mapping from full specs to visible subset (hidden columns would have -1)\n const specId = (spec: PTableColumnSpec) => canonicalizeJson<PTableColumnId>(getPTableColumnId(spec));\n const dataSpecsMap = new Map(\n dataSpecs.entries().map(([i, spec]) => [specId(spec), i]),\n );\n const specsToDataSpecsMapping = new Map(\n specs.entries().map(([i, spec]) => {\n const dataSpecIdx = dataSpecsMap.get(specId(spec)) ?? -1;\n if (dataSpecIdx === -1 && spec.type === 'axis')\n throw new Error(`axis ${JSON.stringify(spec.spec)} not present in join result`);\n return [i, dataSpecIdx];\n }),\n );\n\n // gether indices of columns that would be displayed in the table\n\n const sheetAxesIds = sheets.map((sheet) => getAxisId(sheet.axis));\n const isPartitionedAxis = (axisId: AxisId) => sheetAxesIds.some((id) => matchAxisId(id, axisId));\n\n const labelColumns: { axisId: AxisId; labelColumnIdx: number }[] = [];\n const setLabelColumnIndex = (axisId: AxisId, labelColumnIdx: number) => {\n if (!labelColumns.some((info) => matchAxisId(info.axisId, axisId))) {\n labelColumns.push({ axisId, labelColumnIdx });\n } else {\n console.warn(`multiple label columns match axisId: ${JSON.stringify(axisId)}`);\n }\n };\n const getLabelColumnIndex = (axisId: AxisId) => {\n return labelColumns.find((info) => matchAxisId(info.axisId, axisId))?.labelColumnIdx ?? -1;\n };\n\n // filter out partitioned axes, label columns and hidden columns\n let indices = specs.entries()\n .filter(\n ([i, spec]) => {\n switch (spec.type) {\n case 'axis': return !isPartitionedAxis(spec.id);\n case 'column':\n if (isLabelColumnSpec(spec.spec)) {\n const labeledAxisId = getAxisId(spec.spec.axesSpec[0]);\n if (!isPartitionedAxis(labeledAxisId)) {\n setLabelColumnIndex(labeledAxisId, i);\n }\n return false;\n }\n return !isColumnHidden(spec.spec);\n }\n },\n )\n .map(([i]) => i)\n .toArray();\n\n // order columns by priority\n indices.sort((a, b) => {\n if (specs[a].type !== specs[b].type) return specs[a].type === 'axis' ? -1 : 1;\n\n const aPriority = specs[a].spec.annotations?.['pl7.app/table/orderPriority'];\n const bPriority = specs[b].spec.annotations?.['pl7.app/table/orderPriority'];\n\n if (aPriority === undefined) return bPriority === undefined ? 0 : 1;\n if (bPriority === undefined) return -1;\n return Number(bPriority) - Number(aPriority);\n });\n\n // fields are indices of columns that would go to columnDefs\n const fields = [...indices];\n // replace axes with label columns\n indices = indices.map((i) => {\n const spec = specs[i];\n if (spec.type === 'axis') {\n const labelColumnIdx = getLabelColumnIndex(spec.id);\n if (labelColumnIdx !== -1) {\n return labelColumnIdx;\n }\n }\n return i;\n });\n const columnDefs: ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden>[] = [\n makeRowNumberColDef(),\n ...fields.map((field, index) => makeColDef(field, specs[field], specs[indices[index]], hiddenColIds, cellButtonAxisParams)),\n ];\n\n // mix in indices of skipped axes (axes that were partitioned or replaced with label columns)\n const axesSpec = specs.values().filter((spec) => spec.type === 'axis').map((spec) => spec.spec).toArray();\n const axes = axesSpec.keys()\n .map((i) => {\n let r = indices.indexOf(i);\n if (r === -1) {\n r = indices.length;\n indices.push(i);\n }\n return r;\n })\n .toArray();\n\n const requestIndices: number[] = [];\n const resultMapping: number[] = [];\n indices.forEach((idx) => {\n const dataSpecIdx = specsToDataSpecsMapping.get(idx)!;\n if (dataSpecIdx !== -1) {\n resultMapping.push(requestIndices.length);\n requestIndices.push(dataSpecIdx);\n } else {\n resultMapping.push(-1);\n }\n });\n\n let rowCount = -1;\n let lastParams: IServerSideGetRowsParams | undefined = undefined;\n const serverSideDatasource: IServerSideDatasource<PlAgDataTableV2Row> = {\n getRows: async (params: IServerSideGetRowsParams) => {\n if (stateGeneration !== generation.value) return params.fail();\n try {\n if (rowCount === -1) {\n const ptShape = await pfDriver.getShape(pt);\n if (stateGeneration !== generation.value || params.api.isDestroyed()) return params.fail();\n rowCount = ptShape.rows;\n }\n\n if (rowCount == 0) {\n params.success({ rowData: [], rowCount });\n // Warning: AgGrid cannot show two overlays at once,\n // so first hide loading overlay, then show no rows overlay\n params.api.setGridOption('loading', false);\n params.api.showNoRowsOverlay();\n return;\n }\n\n // If sort has changed - show skeletons instead of data\n if (lastParams && !isJsonEqual(lastParams.request.sortModel, params.request.sortModel)) {\n return params.success({ rowData: [], rowCount });\n }\n lastParams = params;\n\n let length = 0;\n let rowData: PlAgDataTableV2Row[] = [];\n if (rowCount > 0 && params.request.startRow !== undefined && params.request.endRow !== undefined) {\n length = Math.min(rowCount, params.request.endRow) - params.request.startRow;\n if (length > 0) {\n const data = await pfDriver.getData(pt, requestIndices, {\n offset: params.request.startRow,\n length,\n });\n if (stateGeneration !== generation.value || params.api.isDestroyed()) return params.fail();\n rowData = columns2rows(fields, data, axes, resultMapping);\n }\n }\n\n params.success({ rowData, rowCount });\n params.api.autoSizeColumns(\n params.api.getAllDisplayedColumns()\n .filter((column) => column.getColId() !== PlAgDataTableRowNumberColId),\n );\n params.api.setGridOption('loading', false);\n dataRenderedTracker.resolve(params.api);\n } catch (error: unknown) {\n if (stateGeneration !== generation.value || params.api.isDestroyed()) return params.fail();\n params.api.setGridOption('loading', true);\n params.fail();\n console.trace(error);\n }\n },\n };\n\n return {\n axesSpec,\n columnDefs,\n serverSideDatasource,\n };\n}\n\nexport type PlAgCellButtonAxisParams = {\n showCellButtonForAxisId?: AxisId;\n cellButtonInvokeRowsOnDoubleClick?: boolean;\n trigger: (key?: PTableKey) => void;\n};\n\n/**\n * Calculates column definition for a given p-table column\n */\nexport function makeColDef(\n iCol: number,\n spec: PTableColumnSpec,\n labeledSpec: PTableColumnSpec,\n hiddenColIds: PlTableColumnIdJson[] | undefined,\n cellButtonAxisParams?: PlAgCellButtonAxisParams,\n): ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden> {\n const colId = canonicalizeJson<PlTableColumnId>({\n source: spec,\n labeled: labeledSpec,\n });\n const valueType = spec.type === 'axis' ? spec.spec.type : spec.spec.valueType;\n const columnRenderingSpec = getColumnRenderingSpec(spec);\n const cellStyle: CellStyle = {};\n if (columnRenderingSpec.fontFamily) {\n if (columnRenderingSpec.fontFamily === 'monospace') {\n cellStyle.fontFamily = 'Spline Sans Mono';\n cellStyle.fontWeight = 300;\n } else {\n cellStyle.fontFamily = columnRenderingSpec.fontFamily;\n }\n }\n return {\n colId,\n mainMenuItems: defaultMainMenuItems,\n context: spec,\n field: `${iCol}`,\n headerName: labeledSpec.spec.annotations?.['pl7.app/label']?.trim() ?? `Unlabeled ${spec.type} ${iCol}`,\n lockPosition: spec.type === 'axis',\n hide: hiddenColIds?.includes(colId) ?? isColumnOptional(spec.spec),\n valueFormatter: columnRenderingSpec.valueFormatter,\n headerComponent: PlAgColumnHeader,\n cellRendererSelector: cellButtonAxisParams?.showCellButtonForAxisId\n ? (params: ICellRendererParams) => {\n if (spec.type !== 'axis') return;\n\n const axisId = (params.colDef?.context as PTableColumnSpec)?.id as AxisId;\n if (isJsonEqual(axisId, cellButtonAxisParams.showCellButtonForAxisId)) {\n return {\n component: PlAgTextAndButtonCell,\n params: {\n invokeRowsOnDoubleClick: cellButtonAxisParams.cellButtonInvokeRowsOnDoubleClick,\n onClick: (params: ICellRendererParams<PlAgDataTableV2Row>) => {\n cellButtonAxisParams.trigger(params.data?.axesKey);\n },\n },\n };\n }\n }\n : undefined,\n cellStyle,\n headerComponentParams: {\n type: ((): PlAgHeaderComponentType => {\n switch (valueType) {\n case 'Int':\n case 'Long':\n case 'Float':\n case 'Double':\n return 'Number';\n case 'String':\n case 'Bytes':\n return 'Text';\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n } satisfies PlAgHeaderComponentParams,\n cellDataType: (() => {\n switch (valueType) {\n case 'Int':\n case 'Long':\n case 'Float':\n case 'Double':\n return 'number';\n case 'String':\n case 'Bytes':\n return 'text';\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n };\n}\n"],"names":["getPTableColumnId","spec","getAxisId","columns2rows","fields","columns","axes","resultMapping","rowData","iRow","axesKey","iAxis","mapPTableValueToAxisKey","pTableValue","row","canonicalizeJson","field","iCol","PTableHidden","calculateGridOptions","generation","pfDriver","model","sheets","dataRenderedTracker","hiddenColIds","cellButtonAxisParams","stateGeneration","stateChangedError","specs","pt","dataSpecs","specId","dataSpecsMap","i","specsToDataSpecsMapping","dataSpecIdx","sheetAxesIds","sheet","isPartitionedAxis","axisId","id","matchAxisId","labelColumns","setLabelColumnIndex","labelColumnIdx","info","getLabelColumnIndex","_a","indices","isLabelColumnSpec","labeledAxisId","isColumnHidden","a","b","aPriority","bPriority","_b","columnDefs","makeRowNumberColDef","index","makeColDef","axesSpec","r","requestIndices","idx","rowCount","lastParams","params","ptShape","isJsonEqual","length","data","column","PlAgDataTableRowNumberColId","error","labeledSpec","colId","valueType","columnRenderingSpec","getColumnRenderingSpec","cellStyle","defaultMainMenuItems","isColumnOptional","PlAgColumnHeader","PlAgTextAndButtonCell"],"mappings":"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"}
|
|
@@ -80,8 +80,34 @@ export type PlAgDataTableV2Controller = {
|
|
|
80
80
|
/**
|
|
81
81
|
* Scroll table to make row with provided key visible
|
|
82
82
|
* Warning: works reliably only in client side mode.
|
|
83
|
+
* @returns `true` if row was found and focused, `false` otherwise
|
|
83
84
|
*/
|
|
84
|
-
focusRow: (rowKey: PTableKey) => Promise<
|
|
85
|
+
focusRow: (rowKey: PTableKey) => Promise<boolean>;
|
|
86
|
+
/**
|
|
87
|
+
* Update selection in the table.
|
|
88
|
+
* @param axesIds - axes ids identifying axes key values in `selectedKeys`
|
|
89
|
+
* @param selectedKeys - axes keys of the rows to select
|
|
90
|
+
* Warning: update will be ignored if axes ids cannot be correctly resolved
|
|
91
|
+
* @returns `true` if selection was updated, `false` otherwise
|
|
92
|
+
*/
|
|
93
|
+
updateSelection: ({ axesSpec, selectedKeys, }: {
|
|
94
|
+
axesSpec: AxisId[];
|
|
95
|
+
selectedKeys: PTableKey[];
|
|
96
|
+
}) => Promise<boolean>;
|
|
97
|
+
/**
|
|
98
|
+
* Get number of rows in the table.
|
|
99
|
+
* @returns number of rows
|
|
100
|
+
*/
|
|
101
|
+
getRowCount: () => Promise<undefined | number>;
|
|
102
|
+
/**
|
|
103
|
+
* Get row by index or axes key.
|
|
104
|
+
* @param index - row index or axes key
|
|
105
|
+
* @returns row spec and data, `undefined` if row was not loaded
|
|
106
|
+
*/
|
|
107
|
+
getRow: (index: number | PlTableRowId) => Promise<undefined | {
|
|
108
|
+
spec: PTableColumnSpec[];
|
|
109
|
+
data: PTableValue[];
|
|
110
|
+
}>;
|
|
85
111
|
};
|
|
86
112
|
export type PlTableRowId = PTableKey;
|
|
87
113
|
export type PlTableRowIdJson = CanonicalizedJson<PTableKey>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/PlAgDataTable/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,MAAM,EACX,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,KAAK,CAAC;AAKzD,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GACjC;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAE,GAClB;IACA,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,sCAAsC;IACtC,KAAK,EAAE,gBAAgB,GAAG,SAAS,CAAC;CACrC,CAAC;AAEJ,6BAA6B;AAC7B,MAAM,MAAM,qBAAqB,GAAG,yBAAyB,GAAG;IAC9D,iDAAiD;IACjD,aAAa,EAAE,CAAC,IAAI,EAAE;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,gBAAgB,CAAC;KAC1B,KAAK,uBAAuB,CAAC;CAC/B,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,oDAAoD;IACpD,KAAK,EAAE,gBAAgB,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;IACtD;;;QAGI;IACJ,MAAM,CAAC,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,GAAG,SAAS,CAAC,CAAC;CAC3D,CAAC;AAEF,KAAK,aAAa,GAAG,YAAY,GAAG;IAClC;;;QAGI;IACJ,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE;QACrB,MAAM,EAAE,gBAAgB,CAAC;KAC1B,KAAK,uBAAuB,CAAC;CAC/B,CAAC;AAEF,KAAK,eAAe,CAAC,CAAC,IAAI,YAAY,GAAG;IACvC;;;;;QAKI;IACJ,QAAQ,EAAE,gBAAgB,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC1C;;;;QAII;IACJ,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE;QACrB,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,EAAE,gBAAgB,CAAC;KAC1B,KAAK,uBAAuB,CAAC;CAC/B,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,qBAAqB,CAAC,CAAC;AAC7G,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,aAAa,GAAG,WAAW,CAAC,qBAAqB,CAAC,CAAC;AAqErG,uCAAuC;AACvC,MAAM,MAAM,yBAAyB,GAAG;IACtC,qEAAqE;IACrE,MAAM,EAAE,cAAc,CAAC;IACvB,oDAAoD;IACpD,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;CACzC,CAAC;AAEF,4CAA4C;AAC5C,MAAM,MAAM,qBAAqB,GAAG;IAClC,uDAAuD;IACvD,MAAM,EAAE,cAAc,CAAC;IACvB,mBAAmB;IACnB,OAAO,EAAE,aAAa,CAAC;CACxB,CAAC;AAEF,6DAA6D;AAC7D,MAAM,MAAM,yBAAyB,GAAG;IACtC
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/PlAgDataTable/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sources":["../../../src/components/PlAgDataTable/types.ts"],"sourcesContent":["import {\n type JsonCompatible,\n type AxisId,\n type CanonicalizedJson,\n type ListOptionBase,\n type PlDataTableModel,\n type PlDataTableSheet,\n type PlDataTableSheetState,\n type PlTableFilter,\n type PlTableFilterType,\n type PTableColumnId,\n type PTableColumnSpec,\n type PTableKey,\n type PTableValue,\n} from '@platforma-sdk/model';\nimport type { PTableHidden } from './sources/common';\nimport type { ComputedRef, MaybeRefOrGetter } from 'vue';\nimport { computed, toValue } from 'vue';\nimport canonicalize from 'canonicalize';\nimport { deepClone } from '@milaboratories/helpers';\n\nexport type PlDataTableFilterConfig = {\n options?: PlTableFilterType[];\n default?: PlTableFilter;\n};\n\nexport type PlDataTableSettingsV2Base =\n | { sourceId: null }\n | {\n /** Unique source id for state caching */\n sourceId: string;\n /** Sheets that we want to show in our table */\n sheets: PlDataTableSheet[];\n /** Result of `createPlDataTableV2` */\n model: PlDataTableModel | undefined;\n };\n\n/** Data table V2 settings */\nexport type PlDataTableSettingsV2 = PlDataTableSettingsV2Base & {\n /** Callback configuring filters for the table */\n filtersConfig: (info: {\n sourceId: string;\n column: PTableColumnSpec;\n }) => PlDataTableFilterConfig;\n};\n\ntype OptionsBasic = {\n /** Block output created by `createPlDataTableV2` */\n model: MaybeRefOrGetter<PlDataTableModel | undefined>;\n /**\n * Sheets for partitioned data sources.\n * Do not set if data source is never partitioned.\n */\n sheets?: MaybeRefOrGetter<PlDataTableSheet[] | undefined>;\n};\n\ntype OptionsSimple = OptionsBasic & {\n /**\n * Callback configuring filters for the table.\n * If not provided, filtering will be disabled.\n */\n filtersConfig?: (info: {\n column: PTableColumnSpec;\n }) => PlDataTableFilterConfig;\n};\n\ntype OptionsAdvanced<T> = OptionsBasic & {\n /**\n * Block property (such as inputAnchor) used to produce the data source.\n * Mandatory for cases when the table can change without block run.\n * Skip when the table is changed only after block run.\n * Ask developers for help if you don't know what to set here.\n */\n sourceId: MaybeRefOrGetter<T | undefined>;\n /**\n * Callback configuring filters for the table.\n * If not provided, filtering will be disabled.\n * Parameter `sourceId` should be compared using `isJsonEqual` from `@milaboratories/helpers`.\n */\n filtersConfig?: (info: {\n sourceId: JsonCompatible<T>;\n column: PTableColumnSpec;\n }) => PlDataTableFilterConfig;\n};\n\nexport function usePlDataTableSettingsV2<T>(options: OptionsAdvanced<T>): ComputedRef<PlDataTableSettingsV2>;\nexport function usePlDataTableSettingsV2(options: OptionsSimple): ComputedRef<PlDataTableSettingsV2>;\nexport function usePlDataTableSettingsV2<T>(options: OptionsAdvanced<T> | OptionsSimple): ComputedRef<PlDataTableSettingsV2> {\n const fc = options.filtersConfig;\n const filtersConfigValue = typeof fc === 'function'\n ? (ops: {\n sourceId: string;\n column: PTableColumnSpec;\n }) => {\n try {\n return fc({\n sourceId: JSON.parse(ops.sourceId) as JsonCompatible<T>,\n column: ops.column,\n });\n } catch (e) {\n console.error(`filtersConfig failed for sourceId: ${ops.sourceId}, column: ${JSON.stringify(ops.column)} - using default config`, e);\n return {};\n }\n }\n : () => ({});\n return computed(() => {\n const modelValue = toValue(options.model);\n let settingsBase: PlDataTableSettingsV2Base;\n if ('sourceId' in options) {\n const sourceIdValue = deepClone(toValue(options.sourceId));\n if (options.sheets) {\n const sheetsValue = deepClone(toValue(options.sheets));\n settingsBase = sourceIdValue && sheetsValue\n ? {\n sourceId: canonicalize(sourceIdValue)!,\n sheets: sheetsValue,\n model: modelValue,\n }\n : { sourceId: null };\n } else {\n settingsBase = sourceIdValue\n ? {\n sourceId: canonicalize(sourceIdValue)!,\n sheets: [],\n model: modelValue,\n }\n : { sourceId: null };\n }\n } else {\n if (options.sheets) {\n const sheetsValue = toValue(options.sheets);\n settingsBase = sheetsValue\n ? {\n sourceId: canonicalize('static')!,\n sheets: sheetsValue,\n model: modelValue,\n }\n : { sourceId: null };\n } else {\n settingsBase = modelValue\n ? {\n sourceId: canonicalize('static')!,\n sheets: [],\n model: modelValue,\n }\n : { sourceId: null };\n }\n }\n return {\n ...settingsBase,\n filtersConfig: filtersConfigValue,\n };\n });\n};\n\n/** PlTableFilters restriction entry */\nexport type PlTableFiltersRestriction = {\n /** Spec of the column for which filter types should be restricted */\n column: PTableColumnId;\n /** List of filter types applicable to the column */\n allowedFilterTypes: PlTableFilterType[];\n};\n\n/** PlTableFilters default settings entry */\nexport type PlTableFiltersDefault = {\n /** Spec of the column the default should be applied */\n column: PTableColumnId;\n /** Filter entry */\n default: PlTableFilter;\n};\n\n/** PlAgDataTable controller contains all exported methods */\nexport type PlAgDataTableV2Controller = {\n /**\n * Scroll table to make row with provided key visible\n * Warning: works reliably only in client side mode.\n */\n focusRow: (rowKey: PTableKey) => Promise<
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../../../src/components/PlAgDataTable/types.ts"],"sourcesContent":["import {\n type JsonCompatible,\n type AxisId,\n type CanonicalizedJson,\n type ListOptionBase,\n type PlDataTableModel,\n type PlDataTableSheet,\n type PlDataTableSheetState,\n type PlTableFilter,\n type PlTableFilterType,\n type PTableColumnId,\n type PTableColumnSpec,\n type PTableKey,\n type PTableValue,\n} from '@platforma-sdk/model';\nimport type { PTableHidden } from './sources/common';\nimport type { ComputedRef, MaybeRefOrGetter } from 'vue';\nimport { computed, toValue } from 'vue';\nimport canonicalize from 'canonicalize';\nimport { deepClone } from '@milaboratories/helpers';\n\nexport type PlDataTableFilterConfig = {\n options?: PlTableFilterType[];\n default?: PlTableFilter;\n};\n\nexport type PlDataTableSettingsV2Base =\n | { sourceId: null }\n | {\n /** Unique source id for state caching */\n sourceId: string;\n /** Sheets that we want to show in our table */\n sheets: PlDataTableSheet[];\n /** Result of `createPlDataTableV2` */\n model: PlDataTableModel | undefined;\n };\n\n/** Data table V2 settings */\nexport type PlDataTableSettingsV2 = PlDataTableSettingsV2Base & {\n /** Callback configuring filters for the table */\n filtersConfig: (info: {\n sourceId: string;\n column: PTableColumnSpec;\n }) => PlDataTableFilterConfig;\n};\n\ntype OptionsBasic = {\n /** Block output created by `createPlDataTableV2` */\n model: MaybeRefOrGetter<PlDataTableModel | undefined>;\n /**\n * Sheets for partitioned data sources.\n * Do not set if data source is never partitioned.\n */\n sheets?: MaybeRefOrGetter<PlDataTableSheet[] | undefined>;\n};\n\ntype OptionsSimple = OptionsBasic & {\n /**\n * Callback configuring filters for the table.\n * If not provided, filtering will be disabled.\n */\n filtersConfig?: (info: {\n column: PTableColumnSpec;\n }) => PlDataTableFilterConfig;\n};\n\ntype OptionsAdvanced<T> = OptionsBasic & {\n /**\n * Block property (such as inputAnchor) used to produce the data source.\n * Mandatory for cases when the table can change without block run.\n * Skip when the table is changed only after block run.\n * Ask developers for help if you don't know what to set here.\n */\n sourceId: MaybeRefOrGetter<T | undefined>;\n /**\n * Callback configuring filters for the table.\n * If not provided, filtering will be disabled.\n * Parameter `sourceId` should be compared using `isJsonEqual` from `@milaboratories/helpers`.\n */\n filtersConfig?: (info: {\n sourceId: JsonCompatible<T>;\n column: PTableColumnSpec;\n }) => PlDataTableFilterConfig;\n};\n\nexport function usePlDataTableSettingsV2<T>(options: OptionsAdvanced<T>): ComputedRef<PlDataTableSettingsV2>;\nexport function usePlDataTableSettingsV2(options: OptionsSimple): ComputedRef<PlDataTableSettingsV2>;\nexport function usePlDataTableSettingsV2<T>(options: OptionsAdvanced<T> | OptionsSimple): ComputedRef<PlDataTableSettingsV2> {\n const fc = options.filtersConfig;\n const filtersConfigValue = typeof fc === 'function'\n ? (ops: {\n sourceId: string;\n column: PTableColumnSpec;\n }) => {\n try {\n return fc({\n sourceId: JSON.parse(ops.sourceId) as JsonCompatible<T>,\n column: ops.column,\n });\n } catch (e) {\n console.error(`filtersConfig failed for sourceId: ${ops.sourceId}, column: ${JSON.stringify(ops.column)} - using default config`, e);\n return {};\n }\n }\n : () => ({});\n return computed(() => {\n const modelValue = toValue(options.model);\n let settingsBase: PlDataTableSettingsV2Base;\n if ('sourceId' in options) {\n const sourceIdValue = deepClone(toValue(options.sourceId));\n if (options.sheets) {\n const sheetsValue = deepClone(toValue(options.sheets));\n settingsBase = sourceIdValue && sheetsValue\n ? {\n sourceId: canonicalize(sourceIdValue)!,\n sheets: sheetsValue,\n model: modelValue,\n }\n : { sourceId: null };\n } else {\n settingsBase = sourceIdValue\n ? {\n sourceId: canonicalize(sourceIdValue)!,\n sheets: [],\n model: modelValue,\n }\n : { sourceId: null };\n }\n } else {\n if (options.sheets) {\n const sheetsValue = toValue(options.sheets);\n settingsBase = sheetsValue\n ? {\n sourceId: canonicalize('static')!,\n sheets: sheetsValue,\n model: modelValue,\n }\n : { sourceId: null };\n } else {\n settingsBase = modelValue\n ? {\n sourceId: canonicalize('static')!,\n sheets: [],\n model: modelValue,\n }\n : { sourceId: null };\n }\n }\n return {\n ...settingsBase,\n filtersConfig: filtersConfigValue,\n };\n });\n};\n\n/** PlTableFilters restriction entry */\nexport type PlTableFiltersRestriction = {\n /** Spec of the column for which filter types should be restricted */\n column: PTableColumnId;\n /** List of filter types applicable to the column */\n allowedFilterTypes: PlTableFilterType[];\n};\n\n/** PlTableFilters default settings entry */\nexport type PlTableFiltersDefault = {\n /** Spec of the column the default should be applied */\n column: PTableColumnId;\n /** Filter entry */\n default: PlTableFilter;\n};\n\n/** PlAgDataTable controller contains all exported methods */\nexport type PlAgDataTableV2Controller = {\n /**\n * Scroll table to make row with provided key visible\n * Warning: works reliably only in client side mode.\n * @returns `true` if row was found and focused, `false` otherwise\n */\n focusRow: (rowKey: PTableKey) => Promise<boolean>;\n /**\n * Update selection in the table.\n * @param axesIds - axes ids identifying axes key values in `selectedKeys`\n * @param selectedKeys - axes keys of the rows to select\n * Warning: update will be ignored if axes ids cannot be correctly resolved\n * @returns `true` if selection was updated, `false` otherwise\n */\n updateSelection: ({\n axesSpec,\n selectedKeys,\n }: {\n axesSpec: AxisId[];\n selectedKeys: PTableKey[];\n }) => Promise<boolean>;\n /**\n * Get number of rows in the table.\n * @returns number of rows\n */\n getRowCount: () => Promise<undefined | number>;\n /**\n * Get row by index or axes key.\n * @param index - row index or axes key\n * @returns row spec and data, `undefined` if row was not loaded\n */\n getRow: (index: number | PlTableRowId) => Promise<undefined | {\n spec: PTableColumnSpec[];\n data: PTableValue[];\n }>;\n};\n\nexport type PlTableRowId = PTableKey;\n\nexport type PlTableRowIdJson = CanonicalizedJson<PTableKey>;\n\n/** PlAgDataTableV2 row */\nexport type PlAgDataTableV2Row = {\n /** Axes key */\n axesKey: PTableKey;\n /** Unique row identifier */\n id: PlTableRowIdJson;\n /** Row values by column; sheet axes and labeled axes are excluded */\n [field: `${number}`]: PTableValue | PTableHidden;\n};\n\nexport type PlAgOverlayLoadingParams = {\n /**\n * Required flag, that shows catInBag icon with message if `true`, shows PlSplash component if `false`.\n */\n notReady?: boolean;\n /**\n * Prop to override default \"Loading\" text\n */\n loadingText?: string;\n /**\n * Prop to override default \"No datasource\" text (So why props name is notReady? Good question)\n */\n notReadyText?: string;\n /**\n * Use \"transparent\" to make table headers visible below the loading layer\n */\n overlayType?: 'transparent';\n};\n\nexport type PlAgOverlayNoRowsParams = {\n /**\n * Prop to override default \"Empty\" text\n */\n text?: string;\n};\n\nexport type PlDataTableSheetsSettings = {\n /** User-provided sheets for the sourceId */\n sheets: PlDataTableSheet[];\n /** Persisted selection for the sourceId */\n cachedState: PlDataTableSheetState[];\n};\n\nexport type PlDataTableSheetNormalized = {\n /** id of the axis */\n axisId: AxisId;\n /** sheet prefix */\n prefix: string;\n /** options to show in the filter dropdown */\n options: ListOptionBase<string | number>[];\n /** default (selected) value */\n defaultValue: string | number;\n};\n"],"names":["usePlDataTableSettingsV2","options","fc","filtersConfigValue","ops","e","computed","modelValue","toValue","settingsBase","sourceIdValue","deepClone","sheetsValue","canonicalize"],"mappings":";;;AAuFO,SAASA,EAA4BC,GAAiF;AAC3H,QAAMC,IAAKD,EAAQ,eACbE,IAAqB,OAAOD,KAAO,aACrC,CAACE,MAGK;AACA,QAAA;AACF,aAAOF,EAAG;AAAA,QACR,UAAU,KAAK,MAAME,EAAI,QAAQ;AAAA,QACjC,QAAQA,EAAI;AAAA,MAAA,CACb;AAAA,aACMC,GAAG;AACF,qBAAA,MAAM,sCAAsCD,EAAI,QAAQ,aAAa,KAAK,UAAUA,EAAI,MAAM,CAAC,2BAA2BC,CAAC,GAC5H,CAAC;AAAA,IAAA;AAAA,EAEZ,IACA,OAAO,CAAA;AACX,SAAOC,EAAS,MAAM;AACd,UAAAC,IAAaC,EAAQP,EAAQ,KAAK;AACpC,QAAAQ;AACJ,QAAI,cAAcR,GAAS;AACzB,YAAMS,IAAgBC,EAAUH,EAAQP,EAAQ,QAAQ,CAAC;AACzD,UAAIA,EAAQ,QAAQ;AAClB,cAAMW,IAAcD,EAAUH,EAAQP,EAAQ,MAAM,CAAC;AACrD,QAAAQ,IAAeC,KAAiBE,IAC5B;AAAA,UACE,UAAUC,EAAaH,CAAa;AAAA,UACpC,QAAQE;AAAA,UACR,OAAOL;AAAA,QAAA,IAET,EAAE,UAAU,KAAK;AAAA,MAAA;AAErB,QAAAE,IAAeC,IACX;AAAA,UACE,UAAUG,EAAaH,CAAa;AAAA,UACpC,QAAQ,CAAC;AAAA,UACT,OAAOH;AAAA,QAAA,IAET,EAAE,UAAU,KAAK;AAAA,IACvB,WAEIN,EAAQ,QAAQ;AACZ,YAAAW,IAAcJ,EAAQP,EAAQ,MAAM;AAC1C,MAAAQ,IAAeG,IACX;AAAA,QACE,UAAUC,EAAa,QAAQ;AAAA,QAC/B,QAAQD;AAAA,QACR,OAAOL;AAAA,MAAA,IAET,EAAE,UAAU,KAAK;AAAA,IAAA;AAErB,MAAAE,IAAeF,IACX;AAAA,QACE,UAAUM,EAAa,QAAQ;AAAA,QAC/B,QAAQ,CAAC;AAAA,QACT,OAAON;AAAA,MAAA,IAET,EAAE,UAAU,KAAK;AAGlB,WAAA;AAAA,MACL,GAAGE;AAAA,MACH,eAAeN;AAAA,IACjB;AAAA,EAAA,CACD;AACH;"}
|