@platforma-sdk/ui-vue 1.54.9 → 1.54.11
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 +4 -4
- 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 +14 -0
- package/dist/components/PlAgDataTable/PlAgDataTableV2.vue.d.ts.map +1 -1
- package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js +136 -129
- package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js.map +1 -1
- package/dist/components/PlAnnotations/components/PlAnnotations.vue2.js.map +1 -1
- package/package.json +6 -6
- package/src/components/PlAgDataTable/PlAgDataTableV2.vue +20 -2
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
WARN Issue while reading "/home/runner/_work/platforma/platforma/.npmrc". Failed to replace env in config: ${NPMJS_TOKEN}
|
|
2
2
|
|
|
3
|
-
> @platforma-sdk/ui-vue@1.54.
|
|
3
|
+
> @platforma-sdk/ui-vue@1.54.11 build /home/runner/_work/platforma/platforma/sdk/ui-vue
|
|
4
4
|
> ts-builder build --target browser-lib
|
|
5
5
|
|
|
6
6
|
Building browser-lib project...
|
|
@@ -150,9 +150,9 @@ computing gzip size...
|
|
|
150
150
|
[2mdist/[22m[36mAgGridVue/useAgGridOptions.js [39m[1m[2m 7.48 kB[22m[1m[22m[2m │ gzip: 2.13 kB[22m[2m │ map: 16.27 kB[22m
|
|
151
151
|
[2mdist/[22m[36mcomponents/PlAdvancedFilter/PlAdvancedFilter.vue2.js [39m[1m[2m 8.35 kB[22m[1m[22m[2m │ gzip: 2.42 kB[22m[2m │ map: 16.93 kB[22m
|
|
152
152
|
[2mdist/[22m[36mcomponents/PlAdvancedFilter/FilterEditor.vue2.js [39m[1m[2m12.83 kB[22m[1m[22m[2m │ gzip: 3.28 kB[22m[2m │ map: 25.49 kB[22m
|
|
153
|
-
[2mdist/[22m[36mcomponents/PlAgDataTable/PlAgDataTableV2.vue2.js [39m[1m[
|
|
153
|
+
[2mdist/[22m[36mcomponents/PlAgDataTable/PlAgDataTableV2.vue2.js [39m[1m[2m15.37 kB[22m[1m[22m[2m │ gzip: 4.44 kB[22m[2m │ map: 35.29 kB[22m
|
|
154
154
|
[2mdist/[22m[36mindex.js [39m[1m[2m99.79 kB[22m[1m[22m[2m │ gzip: 64.33 kB[22m[2m │ map: 0.13 kB[22m
|
|
155
|
-
[vite:dts] Declaration files built in
|
|
155
|
+
[vite:dts] Declaration files built in 4126ms.
|
|
156
156
|
|
|
157
|
-
[32m✓ built in
|
|
157
|
+
[32m✓ built in 5.36s[39m
|
|
158
158
|
Build completed successfully
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
WARN Issue while reading "/home/runner/_work/platforma/platforma/.npmrc". Failed to replace env in config: ${NPMJS_TOKEN}
|
|
2
2
|
|
|
3
|
-
> @platforma-sdk/ui-vue@1.54.
|
|
3
|
+
> @platforma-sdk/ui-vue@1.54.11 formatter:check /home/runner/_work/platforma/platforma/sdk/ui-vue
|
|
4
4
|
> ts-builder formatter --check
|
|
5
5
|
|
|
6
6
|
Checking formatting...
|
|
@@ -8,5 +8,5 @@ Checking formatting...
|
|
|
8
8
|
Checking formatting...
|
|
9
9
|
|
|
10
10
|
All matched files use the correct format.
|
|
11
|
-
Finished in
|
|
11
|
+
Finished in 1111ms on 120 files using 8 threads.
|
|
12
12
|
Format check completed successfully
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
WARN Issue while reading "/home/runner/_work/platforma/platforma/.npmrc". Failed to replace env in config: ${NPMJS_TOKEN}
|
|
2
2
|
|
|
3
|
-
> @platforma-sdk/ui-vue@1.54.
|
|
3
|
+
> @platforma-sdk/ui-vue@1.54.11 linter:check /home/runner/_work/platforma/platforma/sdk/ui-vue
|
|
4
4
|
> ts-builder linter --check
|
|
5
5
|
|
|
6
6
|
Linting project...
|
|
7
7
|
↳ oxlint --config /home/runner/_work/platforma/platforma/sdk/ui-vue/.oxlintrc.json --deny-warnings
|
|
8
8
|
Found 0 warnings and 0 errors.
|
|
9
|
-
Finished in
|
|
9
|
+
Finished in 29ms on 103 files with 98 rules using 8 threads.
|
|
10
10
|
Linting completed successfully
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
WARN Issue while reading "/home/runner/_work/platforma/platforma/.npmrc". Failed to replace env in config: ${NPMJS_TOKEN}
|
|
2
2
|
|
|
3
|
-
> @platforma-sdk/ui-vue@1.54.
|
|
3
|
+
> @platforma-sdk/ui-vue@1.54.11 types:check /home/runner/_work/platforma/platforma/sdk/ui-vue
|
|
4
4
|
> ts-builder type-check --target browser-lib
|
|
5
5
|
|
|
6
6
|
↳ vue-tsc.js --noEmit --project ./tsconfig.json --customConditions ,
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @platforma-sdk/ui-vue
|
|
2
2
|
|
|
3
|
+
## 1.54.11
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 9c33ff6: table hidden columns fix
|
|
8
|
+
|
|
9
|
+
## 1.54.10
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- Updated dependencies [866a323]
|
|
14
|
+
- @platforma-sdk/model@1.54.10
|
|
15
|
+
- @milaboratories/uikit@2.10.23
|
|
16
|
+
|
|
3
17
|
## 1.54.9
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlAgDataTableV2.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlAgDataTable/PlAgDataTableV2.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PlAgDataTableV2.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlAgDataTable/PlAgDataTableV2.vue"],"names":[],"mappings":"AAmoBA,OAAO,KAAK,EACV,MAAM,EAEN,kBAAkB,EAClB,gBAAgB,EAGhB,SAAS,EAEV,MAAM,sBAAsB,CAAC;AAU9B,OAAO,KAAK,EACV,wBAAwB,EAQzB,MAAM,oBAAoB,CAAC;AAgB5B,OAAO,KAAK,EAEV,kBAAkB,EAGlB,qBAAqB,EAItB,MAAM,SAAS,CAAC;AASjB,KAAK,WAAW,GAAG;IACjB,kCAAkC;IAClC,QAAQ,EAAE,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IAE1C;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC;;;;;;OAMG;IACH,iCAAiC,CAAC,EAAE,OAAO,CAAC;IAE5C,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,yDAAyD;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,wBAAwB,CAAC,kBAAkB,CAAC,CAAC;CACrE,CAAC;AAoeF,KAAK,iBAAiB,GAAG;IACzB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,WAAW,CAAC,EAAE,gBAAgB,CAAC;CAC9B,GAAG,WAAW,CAAC;AAMhB,iBAAS,cAAc;WA2GT,OAAO,IAA6B;;iCAXZ,GAAG;gCACJ,GAAG;;;;EAevC;AAsBD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;;;;6FASnB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import { defineComponent as
|
|
1
|
+
import { defineComponent as ie, mergeModels as J, useModel as U, toRefs as ue, ref as K, computed as q, shallowRef as H, watch as b, effectScope as de, watchEffect as ce, createElementBlock as me, openBlock as D, normalizeClass as Q, createBlock as T, createCommentVNode as z, createVNode as fe, unref as O, isRef as W, createSlots as ve, withCtx as j, renderSlot as X } from "vue";
|
|
2
2
|
import { isJsonEqual as d } from "../../lib/util/helpers/dist/objects.js";
|
|
3
|
-
import { promiseTimeout as
|
|
4
|
-
import { parseJson as
|
|
5
|
-
import { AgGridVue as
|
|
6
|
-
import { AgGridTheme as
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import
|
|
3
|
+
import { promiseTimeout as pe } from "../../lib/util/helpers/dist/functions.js";
|
|
4
|
+
import { parseJson as Y, getAxisId as Z, matchAxisId as _, canonicalizeJson as ee, createPlSelectionModel as F, getRawPlatformaInstance as Se, isAbortError as ye } from "@platforma-sdk/model";
|
|
5
|
+
import { AgGridVue as ge } from "ag-grid-vue3";
|
|
6
|
+
import { AgGridTheme as Ce } from "../../aggrid.js";
|
|
7
|
+
import he from "../PlAgCsvExporter/PlAgCsvExporter.vue.js";
|
|
8
|
+
import we from "../PlAgGridColumnManager/PlAgGridColumnManager.vue.js";
|
|
9
|
+
import Re from "../PlTableFilters/PlTableFiltersV2.vue.js";
|
|
10
10
|
import xe from "./PlAgDataTableSheets.vue.js";
|
|
11
|
-
import
|
|
11
|
+
import be from "./PlAgOverlayLoading.vue.js";
|
|
12
12
|
import De from "./PlAgOverlayNoRows.vue.js";
|
|
13
13
|
/* empty css */
|
|
14
14
|
import Oe from "./PlAgRowCount.vue.js";
|
|
15
|
-
import { DeferredCircular as
|
|
16
|
-
import { PlAgDataTableRowNumberColId as
|
|
17
|
-
import { calculateGridOptions as
|
|
18
|
-
import { useTableState as
|
|
15
|
+
import { DeferredCircular as Ie, ensureNodeVisible as Pe } from "./sources/focus-row.js";
|
|
16
|
+
import { PlAgDataTableRowNumberColId as te, autoSizeRowNumberColumn as Te } from "./sources/row-number.js";
|
|
17
|
+
import { calculateGridOptions as ke } from "./sources/table-source-v2.js";
|
|
18
|
+
import { useTableState as Ve } from "./sources/table-state-v2.js";
|
|
19
19
|
import { watchCached as Be } from "@milaboratories/uikit";
|
|
20
|
-
const
|
|
20
|
+
const Ze = /* @__PURE__ */ ie({
|
|
21
21
|
__name: "PlAgDataTableV2",
|
|
22
|
-
props: /* @__PURE__ */
|
|
22
|
+
props: /* @__PURE__ */ J({
|
|
23
23
|
settings: {},
|
|
24
24
|
disableColumnsPanel: { type: Boolean },
|
|
25
25
|
disableFiltersPanel: { type: Boolean },
|
|
@@ -39,9 +39,9 @@ const Ye = /* @__PURE__ */ re({
|
|
|
39
39
|
selection: {},
|
|
40
40
|
selectionModifiers: {}
|
|
41
41
|
}),
|
|
42
|
-
emits: /* @__PURE__ */
|
|
43
|
-
setup(g, { expose:
|
|
44
|
-
const
|
|
42
|
+
emits: /* @__PURE__ */ J(["rowDoubleClicked", "cellButtonClicked", "newDataRendered"], ["update:modelValue", "update:selection"]),
|
|
43
|
+
setup(g, { expose: le, emit: oe }) {
|
|
44
|
+
const ae = U(g, "modelValue"), o = U(g, "selection"), i = g, { settings: I } = ue(i), k = oe, V = K([]), { gridState: C, sheetsState: P, filtersState: B } = Ve(ae, I), ne = q(() => {
|
|
45
45
|
const e = { ...I.value };
|
|
46
46
|
return e.sourceId !== null ? {
|
|
47
47
|
sheets: e.sheets ?? [],
|
|
@@ -50,11 +50,11 @@ const Ye = /* @__PURE__ */ re({
|
|
|
50
50
|
sheets: [],
|
|
51
51
|
cachedState: []
|
|
52
52
|
};
|
|
53
|
-
}), u =
|
|
53
|
+
}), u = H(null), x = new Ie(), r = H({
|
|
54
54
|
animateRows: !1,
|
|
55
55
|
suppressColumnMoveAnimation: !0,
|
|
56
56
|
cellSelection: !o.value,
|
|
57
|
-
initialState:
|
|
57
|
+
initialState: C.value,
|
|
58
58
|
autoSizeStrategy: { type: "fitCellContents" },
|
|
59
59
|
rowSelection: o.value ? {
|
|
60
60
|
mode: "multiRow",
|
|
@@ -67,8 +67,8 @@ const Ye = /* @__PURE__ */ re({
|
|
|
67
67
|
onSelectionChanged: (e) => {
|
|
68
68
|
var t;
|
|
69
69
|
if (o.value) {
|
|
70
|
-
const l = e.api.getServerSideSelectionState(),
|
|
71
|
-
d(o.value.selectedKeys,
|
|
70
|
+
const l = e.api.getServerSideSelectionState(), a = ((t = l == null ? void 0 : l.toggledNodes) == null ? void 0 : t.map((n) => Y(n))) ?? [];
|
|
71
|
+
d(o.value.selectedKeys, a) || (o.value = { ...o.value, selectedKeys: a });
|
|
72
72
|
}
|
|
73
73
|
},
|
|
74
74
|
onRowDoubleClicked: (e) => {
|
|
@@ -99,7 +99,7 @@ const Ye = /* @__PURE__ */ re({
|
|
|
99
99
|
runningText: i.runningText,
|
|
100
100
|
notReadyText: i.notReadyText
|
|
101
101
|
},
|
|
102
|
-
loadingOverlayComponent:
|
|
102
|
+
loadingOverlayComponent: be,
|
|
103
103
|
noRowsOverlayComponent: De,
|
|
104
104
|
noRowsOverlayComponentParams: {
|
|
105
105
|
text: i.noRowsText
|
|
@@ -112,94 +112,101 @@ const Ye = /* @__PURE__ */ re({
|
|
|
112
112
|
},
|
|
113
113
|
onGridReady: (e) => {
|
|
114
114
|
const t = e.api;
|
|
115
|
-
|
|
116
|
-
const l = (
|
|
115
|
+
Te(t);
|
|
116
|
+
const l = (n, c) => {
|
|
117
117
|
const s = { ...r.value };
|
|
118
|
-
s[
|
|
119
|
-
},
|
|
118
|
+
s[n] = c, r.value = s, t.setGridOption(n, c);
|
|
119
|
+
}, a = (n) => {
|
|
120
120
|
r.value = {
|
|
121
121
|
...r.value,
|
|
122
|
-
...
|
|
123
|
-
}, t.updateGridOptions(
|
|
122
|
+
...n
|
|
123
|
+
}, t.updateGridOptions(n);
|
|
124
124
|
};
|
|
125
125
|
u.value = new Proxy(t, {
|
|
126
|
-
get(
|
|
126
|
+
get(n, c, s) {
|
|
127
127
|
switch (c) {
|
|
128
128
|
case "setGridOption":
|
|
129
129
|
return l;
|
|
130
130
|
case "updateGridOptions":
|
|
131
|
-
return
|
|
131
|
+
return a;
|
|
132
132
|
default:
|
|
133
|
-
return Reflect.get(
|
|
133
|
+
return Reflect.get(n, c, s);
|
|
134
134
|
}
|
|
135
135
|
}
|
|
136
136
|
});
|
|
137
137
|
},
|
|
138
138
|
onStateUpdated: (e) => {
|
|
139
|
-
|
|
140
|
-
|
|
139
|
+
var a;
|
|
140
|
+
let t = G(e.state);
|
|
141
|
+
const l = ((a = C.value.columnVisibility) == null ? void 0 : a.hiddenColIds) !== void 0;
|
|
142
|
+
t.columnVisibility === void 0 && l && (t = { ...t, columnVisibility: { hiddenColIds: [] } }), r.value.initialState = C.value = t, d(e.sources, ["columnSizing"]) || e.api.autoSizeColumns(
|
|
143
|
+
e.api.getAllDisplayedColumns().filter((n) => n.getColId() !== te)
|
|
141
144
|
);
|
|
142
145
|
},
|
|
143
146
|
onGridPreDestroyed: (e) => {
|
|
144
|
-
r.value.initialState =
|
|
147
|
+
r.value.initialState = C.value = G(e.api.getState()), u.value = null;
|
|
145
148
|
}
|
|
146
149
|
});
|
|
147
|
-
function
|
|
150
|
+
function G(e) {
|
|
148
151
|
return {
|
|
149
152
|
columnOrder: e.columnOrder,
|
|
150
153
|
sort: e.sort,
|
|
151
154
|
columnVisibility: e.columnVisibility
|
|
152
155
|
};
|
|
153
156
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
+
function M(e) {
|
|
158
|
+
const t = e.columnVisibility, l = !t || t.hiddenColIds.length === 0 ? void 0 : e.columnVisibility;
|
|
159
|
+
return { ...e, columnVisibility: l };
|
|
160
|
+
}
|
|
161
|
+
const $ = K(0);
|
|
162
|
+
b(
|
|
163
|
+
() => [u.value, C.value],
|
|
157
164
|
([e, t]) => {
|
|
158
165
|
if (!e || e.isDestroyed()) return;
|
|
159
|
-
const l =
|
|
160
|
-
!d(t, {}) && !d(t, l) && (r.value.initialState = t,
|
|
166
|
+
const l = G(e.getState());
|
|
167
|
+
!d(t, {}) && !d(M(t), M(l)) && (r.value.initialState = t, ++$.value);
|
|
161
168
|
}
|
|
162
169
|
);
|
|
163
|
-
const
|
|
164
|
-
|
|
165
|
-
() => [u.value,
|
|
170
|
+
const se = q(() => i.cellRendererSelector ?? null);
|
|
171
|
+
b(
|
|
172
|
+
() => [u.value, se.value],
|
|
166
173
|
([e, t]) => {
|
|
167
174
|
!e || e.isDestroyed() || e.setGridOption("defaultColDef", {
|
|
168
175
|
...r.value.defaultColDef,
|
|
169
176
|
cellRendererSelector: t ?? void 0
|
|
170
177
|
});
|
|
171
178
|
}
|
|
172
|
-
),
|
|
179
|
+
), le({
|
|
173
180
|
focusRow: async (e) => {
|
|
174
|
-
const t = await
|
|
175
|
-
return t.isDestroyed() ? !1 :
|
|
176
|
-
var
|
|
177
|
-
return d((
|
|
181
|
+
const t = await x.promise;
|
|
182
|
+
return t.isDestroyed() ? !1 : Pe(t, (l) => {
|
|
183
|
+
var a;
|
|
184
|
+
return d((a = l.data) == null ? void 0 : a.axesKey, e);
|
|
178
185
|
});
|
|
179
186
|
},
|
|
180
187
|
updateSelection: async ({ axesSpec: e, selectedKeys: t }) => {
|
|
181
|
-
var
|
|
182
|
-
const l = await
|
|
188
|
+
var w, y;
|
|
189
|
+
const l = await x.promise;
|
|
183
190
|
if (l.isDestroyed()) return !1;
|
|
184
|
-
const
|
|
185
|
-
if (!
|
|
186
|
-
const
|
|
187
|
-
const S =
|
|
188
|
-
return
|
|
189
|
-
}), c = new Set(
|
|
191
|
+
const a = (w = o.value) == null ? void 0 : w.axesSpec;
|
|
192
|
+
if (!a || a.length !== e.length) return !1;
|
|
193
|
+
const n = e.map((p) => {
|
|
194
|
+
const S = Z(p);
|
|
195
|
+
return a.findIndex((R) => _(R, S));
|
|
196
|
+
}), c = new Set(n);
|
|
190
197
|
if (c.has(-1) || c.size !== e.length) return !1;
|
|
191
198
|
const s = t.map(
|
|
192
|
-
(p) =>
|
|
199
|
+
(p) => ee(n.map((S) => p[S]))
|
|
193
200
|
), m = ((y = l.getServerSideSelectionState()) == null ? void 0 : y.toggledNodes) ?? [];
|
|
194
201
|
if (!d(m, s)) {
|
|
195
202
|
l.setServerSideSelectionState({
|
|
196
203
|
selectAll: !1,
|
|
197
204
|
toggledNodes: s
|
|
198
205
|
});
|
|
199
|
-
const p =
|
|
200
|
-
p.run(() =>
|
|
206
|
+
const p = de(), { resolve: S, promise: R } = Promise.withResolvers();
|
|
207
|
+
p.run(() => b(o, S, { once: !0 }));
|
|
201
208
|
try {
|
|
202
|
-
await
|
|
209
|
+
await pe(R, 500);
|
|
203
210
|
} catch {
|
|
204
211
|
return !1;
|
|
205
212
|
} finally {
|
|
@@ -209,35 +216,35 @@ const Ye = /* @__PURE__ */ re({
|
|
|
209
216
|
return !0;
|
|
210
217
|
}
|
|
211
218
|
});
|
|
212
|
-
function
|
|
219
|
+
function re(e) {
|
|
213
220
|
const t = (l) => !("children" in l);
|
|
214
|
-
return e ? e.filter(t).filter((l) => l.colId && l.colId !==
|
|
221
|
+
return e ? e.filter(t).filter((l) => l.colId && l.colId !== te) : [];
|
|
215
222
|
}
|
|
216
223
|
Be(
|
|
217
224
|
() => r.value.columnDefs,
|
|
218
225
|
(e) => {
|
|
219
226
|
if (I.value.sourceId === null)
|
|
220
|
-
|
|
227
|
+
V.value = [];
|
|
221
228
|
else {
|
|
222
|
-
const l =
|
|
223
|
-
|
|
224
|
-
(
|
|
229
|
+
const l = re(e);
|
|
230
|
+
V.value = l.map(
|
|
231
|
+
(a) => Y(a.colId).labeled
|
|
225
232
|
);
|
|
226
233
|
}
|
|
227
234
|
},
|
|
228
235
|
{ immediate: !0 }
|
|
229
236
|
);
|
|
230
|
-
const
|
|
237
|
+
const E = F();
|
|
231
238
|
let v = null;
|
|
232
|
-
const
|
|
233
|
-
return
|
|
239
|
+
const h = K(0);
|
|
240
|
+
return b(
|
|
234
241
|
() => [u.value, I.value],
|
|
235
242
|
([e, t]) => {
|
|
236
|
-
var l,
|
|
243
|
+
var l, a;
|
|
237
244
|
if (!(!e || e.isDestroyed()) && !d(t, v)) {
|
|
238
|
-
++
|
|
245
|
+
++h.value;
|
|
239
246
|
try {
|
|
240
|
-
if (e.hideOverlay(),
|
|
247
|
+
if (e.hideOverlay(), x.reset(), t.sourceId === null) {
|
|
241
248
|
e.updateGridOptions({
|
|
242
249
|
loading: !0,
|
|
243
250
|
loadingOverlayComponentParams: {
|
|
@@ -246,7 +253,7 @@ const Ye = /* @__PURE__ */ re({
|
|
|
246
253
|
},
|
|
247
254
|
columnDefs: void 0,
|
|
248
255
|
serverSideDatasource: void 0
|
|
249
|
-
}), o.value && (o.value && !d(o.value,
|
|
256
|
+
}), o.value && (o.value && !d(o.value, E) && (o.value = F()), e.setServerSideSelectionState({
|
|
250
257
|
selectAll: !1,
|
|
251
258
|
toggledNodes: []
|
|
252
259
|
}));
|
|
@@ -258,39 +265,39 @@ const Ye = /* @__PURE__ */ re({
|
|
|
258
265
|
...r.value.loadingOverlayComponentParams,
|
|
259
266
|
variant: "loading"
|
|
260
267
|
}
|
|
261
|
-
}), o.value && (v != null && v.sourceId) && (o.value && !d(o.value,
|
|
268
|
+
}), o.value && (v != null && v.sourceId) && (o.value && !d(o.value, E) && (o.value = F()), e.setServerSideSelectionState({
|
|
262
269
|
selectAll: !1,
|
|
263
270
|
toggledNodes: []
|
|
264
271
|
})));
|
|
265
|
-
const
|
|
266
|
-
if (!t.model ||
|
|
267
|
-
const s = e.getServerSideGroupLevelState(), m = !
|
|
272
|
+
const n = ((l = t.model) == null ? void 0 : l.sourceId) && t.model.sourceId !== t.sourceId;
|
|
273
|
+
if (!t.model || n) {
|
|
274
|
+
const s = e.getServerSideGroupLevelState(), m = !n && s.length > 0 ? s[0].rowCount : 1;
|
|
268
275
|
return e.updateGridOptions({
|
|
269
276
|
serverSideDatasource: {
|
|
270
|
-
getRows: (
|
|
271
|
-
|
|
277
|
+
getRows: (w) => {
|
|
278
|
+
w.success({ rowData: [], rowCount: m });
|
|
272
279
|
}
|
|
273
280
|
}
|
|
274
281
|
});
|
|
275
282
|
}
|
|
276
|
-
const c =
|
|
277
|
-
|
|
278
|
-
generation:
|
|
279
|
-
pfDriver:
|
|
283
|
+
const c = h.value;
|
|
284
|
+
ke({
|
|
285
|
+
generation: h,
|
|
286
|
+
pfDriver: Se().pFrameDriver,
|
|
280
287
|
model: t.model,
|
|
281
288
|
sheets: t.sheets ?? [],
|
|
282
|
-
dataRenderedTracker:
|
|
283
|
-
hiddenColIds: (
|
|
289
|
+
dataRenderedTracker: x,
|
|
290
|
+
hiddenColIds: (a = C.value.columnVisibility) == null ? void 0 : a.hiddenColIds,
|
|
284
291
|
cellButtonAxisParams: {
|
|
285
292
|
showCellButtonForAxisId: i.showCellButtonForAxisId,
|
|
286
293
|
cellButtonInvokeRowsOnDoubleClick: i.cellButtonInvokeRowsOnDoubleClick,
|
|
287
294
|
trigger: (s) => k("cellButtonClicked", s)
|
|
288
295
|
}
|
|
289
296
|
}).then((s) => {
|
|
290
|
-
if (e.isDestroyed() || c !==
|
|
291
|
-
const { axesSpec: m, ...
|
|
297
|
+
if (e.isDestroyed() || c !== h.value) return;
|
|
298
|
+
const { axesSpec: m, ...w } = s;
|
|
292
299
|
if (e.updateGridOptions({
|
|
293
|
-
...
|
|
300
|
+
...w
|
|
294
301
|
}), o.value) {
|
|
295
302
|
const { axesSpec: y, selectedKeys: p } = o.value;
|
|
296
303
|
if (!d(y, m)) {
|
|
@@ -301,38 +308,38 @@ const Ye = /* @__PURE__ */ re({
|
|
|
301
308
|
toggledNodes: []
|
|
302
309
|
});
|
|
303
310
|
}
|
|
304
|
-
const S = y.map(
|
|
305
|
-
if (
|
|
311
|
+
const S = y.map(Z).map((f) => m.findIndex((N) => _(N, f))), R = new Set(S);
|
|
312
|
+
if (R.has(-1) || R.size !== m.length) {
|
|
306
313
|
const f = { axesSpec: m, selectedKeys: [] };
|
|
307
314
|
return d(o.value, f) || (o.value = f), e.setServerSideSelectionState({
|
|
308
315
|
selectAll: !1,
|
|
309
316
|
toggledNodes: []
|
|
310
317
|
});
|
|
311
318
|
}
|
|
312
|
-
const
|
|
319
|
+
const A = p.map(
|
|
313
320
|
(f) => S.map((N) => f[N])
|
|
314
|
-
),
|
|
315
|
-
return d(o.value,
|
|
321
|
+
), L = { axesSpec: m, selectedKeys: A };
|
|
322
|
+
return d(o.value, L) || (o.value = L), e.setServerSideSelectionState({
|
|
316
323
|
selectAll: !1,
|
|
317
|
-
toggledNodes:
|
|
324
|
+
toggledNodes: A.map((f) => ee(f))
|
|
318
325
|
});
|
|
319
326
|
}
|
|
320
327
|
}
|
|
321
328
|
}).catch((s) => {
|
|
322
|
-
e.isDestroyed() || c !==
|
|
329
|
+
e.isDestroyed() || c !== h.value || ye(s) || console.trace(s);
|
|
323
330
|
}).finally(() => {
|
|
324
|
-
e.isDestroyed() || c !==
|
|
331
|
+
e.isDestroyed() || c !== h.value || e.updateGridOptions({
|
|
325
332
|
loading: !1
|
|
326
333
|
});
|
|
327
|
-
}),
|
|
328
|
-
} catch (
|
|
329
|
-
console.trace(
|
|
334
|
+
}), x.promise.then(() => k("newDataRendered"));
|
|
335
|
+
} catch (n) {
|
|
336
|
+
console.trace(n);
|
|
330
337
|
} finally {
|
|
331
338
|
v = t;
|
|
332
339
|
}
|
|
333
340
|
}
|
|
334
341
|
}
|
|
335
|
-
),
|
|
342
|
+
), b(
|
|
336
343
|
() => ({
|
|
337
344
|
gridApi: u.value,
|
|
338
345
|
loadingText: i.loadingText,
|
|
@@ -340,74 +347,74 @@ const Ye = /* @__PURE__ */ re({
|
|
|
340
347
|
notReadyText: i.notReadyText,
|
|
341
348
|
noRowsText: i.noRowsText
|
|
342
349
|
}),
|
|
343
|
-
({ gridApi: e, loadingText: t, runningText: l, notReadyText:
|
|
350
|
+
({ gridApi: e, loadingText: t, runningText: l, notReadyText: a, noRowsText: n }) => {
|
|
344
351
|
!e || e.isDestroyed() || e.updateGridOptions({
|
|
345
352
|
loadingOverlayComponentParams: {
|
|
346
353
|
...r.value.loadingOverlayComponentParams,
|
|
347
354
|
loadingText: t,
|
|
348
355
|
runningText: l,
|
|
349
|
-
notReadyText:
|
|
356
|
+
notReadyText: a
|
|
350
357
|
},
|
|
351
358
|
noRowsOverlayComponentParams: {
|
|
352
359
|
...r.value.noRowsOverlayComponentParams,
|
|
353
|
-
text:
|
|
360
|
+
text: n
|
|
354
361
|
}
|
|
355
362
|
});
|
|
356
363
|
}
|
|
357
|
-
),
|
|
364
|
+
), ce(() => {
|
|
358
365
|
var e;
|
|
359
366
|
!u.value || (e = u.value) != null && e.isDestroyed() || u.value.updateGridOptions({
|
|
360
367
|
statusBar: r.value.loading ? void 0 : {
|
|
361
368
|
statusPanels: [{ statusPanel: Oe, align: "left" }]
|
|
362
369
|
}
|
|
363
370
|
});
|
|
364
|
-
}), (e, t) => (
|
|
365
|
-
class:
|
|
371
|
+
}), (e, t) => (D(), me("div", {
|
|
372
|
+
class: Q(e.$style.container)
|
|
366
373
|
}, [
|
|
367
|
-
u.value && !g.disableColumnsPanel ? (
|
|
374
|
+
u.value && !g.disableColumnsPanel ? (D(), T(O(we), {
|
|
368
375
|
key: 0,
|
|
369
376
|
api: u.value
|
|
370
|
-
}, null, 8, ["api"])) :
|
|
371
|
-
g.disableFiltersPanel ?
|
|
377
|
+
}, null, 8, ["api"])) : z("", !0),
|
|
378
|
+
g.disableFiltersPanel ? z("", !0) : (D(), T(Re, {
|
|
372
379
|
key: 1,
|
|
373
|
-
modelValue:
|
|
374
|
-
"onUpdate:modelValue": t[0] || (t[0] = (l) =>
|
|
375
|
-
columns:
|
|
380
|
+
modelValue: O(B),
|
|
381
|
+
"onUpdate:modelValue": t[0] || (t[0] = (l) => W(B) ? B.value = l : null),
|
|
382
|
+
columns: V.value
|
|
376
383
|
}, null, 8, ["modelValue", "columns"])),
|
|
377
|
-
u.value && g.showExportButton ? (
|
|
384
|
+
u.value && g.showExportButton ? (D(), T(he, {
|
|
378
385
|
key: 2,
|
|
379
386
|
api: u.value
|
|
380
|
-
}, null, 8, ["api"])) :
|
|
381
|
-
|
|
382
|
-
modelValue:
|
|
383
|
-
"onUpdate:modelValue": t[1] || (t[1] = (l) =>
|
|
384
|
-
settings:
|
|
385
|
-
},
|
|
387
|
+
}, null, 8, ["api"])) : z("", !0),
|
|
388
|
+
fe(xe, {
|
|
389
|
+
modelValue: O(P),
|
|
390
|
+
"onUpdate:modelValue": t[1] || (t[1] = (l) => W(P) ? P.value = l : null),
|
|
391
|
+
settings: ne.value
|
|
392
|
+
}, ve({ _: 2 }, [
|
|
386
393
|
e.$slots["before-sheets"] ? {
|
|
387
394
|
name: "before",
|
|
388
|
-
fn:
|
|
389
|
-
|
|
395
|
+
fn: j(() => [
|
|
396
|
+
X(e.$slots, "before-sheets")
|
|
390
397
|
]),
|
|
391
398
|
key: "0"
|
|
392
399
|
} : void 0,
|
|
393
400
|
e.$slots["after-sheets"] ? {
|
|
394
401
|
name: "after",
|
|
395
|
-
fn:
|
|
396
|
-
|
|
402
|
+
fn: j(() => [
|
|
403
|
+
X(e.$slots, "after-sheets")
|
|
397
404
|
]),
|
|
398
405
|
key: "1"
|
|
399
406
|
} : void 0
|
|
400
407
|
]), 1032, ["modelValue", "settings"]),
|
|
401
|
-
(
|
|
402
|
-
key:
|
|
403
|
-
theme:
|
|
404
|
-
class:
|
|
408
|
+
(D(), T(O(ge), {
|
|
409
|
+
key: $.value,
|
|
410
|
+
theme: O(Ce),
|
|
411
|
+
class: Q(e.$style.grid),
|
|
405
412
|
"grid-options": r.value
|
|
406
413
|
}, null, 8, ["theme", "class", "grid-options"]))
|
|
407
414
|
], 2));
|
|
408
415
|
}
|
|
409
416
|
});
|
|
410
417
|
export {
|
|
411
|
-
|
|
418
|
+
Ze as default
|
|
412
419
|
};
|
|
413
420
|
//# sourceMappingURL=PlAgDataTableV2.vue2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlAgDataTableV2.vue2.js","sources":["../../../src/components/PlAgDataTable/PlAgDataTableV2.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { promiseTimeout, isJsonEqual } from \"@milaboratories/helpers\";\nimport type {\n AxisId,\n PlDataTableGridStateCore,\n PlDataTableStateV2,\n PlSelectionModel,\n PlTableColumnIdJson,\n PTableColumnSpec,\n PTableKey,\n PTableValue,\n} from \"@platforma-sdk/model\";\nimport {\n getRawPlatformaInstance,\n parseJson,\n createPlSelectionModel,\n matchAxisId,\n getAxisId,\n canonicalizeJson,\n isAbortError,\n} from \"@platforma-sdk/model\";\nimport type {\n CellRendererSelectorFunc,\n ColDef,\n ColGroupDef,\n GridApi,\n GridOptions,\n GridState,\n ManagedGridOptionKey,\n ManagedGridOptions,\n} from \"ag-grid-enterprise\";\nimport { AgGridVue } from \"ag-grid-vue3\";\nimport { computed, effectScope, ref, shallowRef, toRefs, watch, watchEffect } from \"vue\";\nimport { AgGridTheme } from \"../../aggrid\";\nimport PlAgCsvExporter from \"../PlAgCsvExporter/PlAgCsvExporter.vue\";\nimport { PlAgGridColumnManager } from \"../PlAgGridColumnManager\";\nimport PlTableFiltersV2 from \"../PlTableFilters/PlTableFiltersV2.vue\";\nimport PlAgDataTableSheets from \"./PlAgDataTableSheets.vue\";\nimport PlOverlayLoading from \"./PlAgOverlayLoading.vue\";\nimport PlOverlayNoRows from \"./PlAgOverlayNoRows.vue\";\nimport PlAgRowCount from \"./PlAgRowCount.vue\";\nimport { DeferredCircular, ensureNodeVisible } from \"./sources/focus-row\";\nimport { autoSizeRowNumberColumn, PlAgDataTableRowNumberColId } from \"./sources/row-number\";\nimport type { PlAgCellButtonAxisParams } from \"./sources/table-source-v2\";\nimport { calculateGridOptions } from \"./sources/table-source-v2\";\nimport { useTableState } from \"./sources/table-state-v2\";\nimport type {\n PlAgDataTableV2Controller,\n PlAgDataTableV2Row,\n PlAgOverlayLoadingParams,\n PlAgOverlayNoRowsParams,\n PlDataTableSettingsV2,\n PlDataTableSheetsSettings,\n PlTableRowId,\n PlTableRowIdJson,\n} from \"./types\";\nimport { watchCached } from \"@milaboratories/uikit\";\nimport { type PTableHidden } from \"./sources/common\";\n\nconst tableState = defineModel<PlDataTableStateV2>({\n required: true,\n});\n/** Warning: selection model value updates are ignored, use updateSelection instead */\nconst selection = defineModel<PlSelectionModel>(\"selection\");\nconst props = defineProps<{\n /** Required component settings */\n settings: Readonly<PlDataTableSettingsV2>;\n\n /**\n * The disableColumnsPanel prop controls the display of a button that activates\n * the columns management panel in the table. To make the button functional\n * and visible, you must also include the PlAgDataTableToolsPanel component in your layout.\n * This component serves as the target for teleporting the button.\n */\n disableColumnsPanel?: boolean;\n\n /**\n * The disableFiltersPanel prop controls the display of a button that activates\n * the filters management panel in the table. To make the button functional\n * and visible, you must also include the PlAgDataTableToolsPanel component in your layout.\n * This component serves as the target for teleporting the button.\n */\n disableFiltersPanel?: boolean;\n\n /**\n * The showExportButton prop controls the display of a button that allows\n * to export table data in CSV format. To make the button functional\n * and visible, you must also include the PlAgDataTableToolsPanel component in your layout.\n * This component serves as the target for teleporting the button.\n */\n showExportButton?: boolean;\n\n /**\n * The AxisId property is used to configure and display the PlAgTextAndButtonCell component\n */\n showCellButtonForAxisId?: AxisId;\n\n /**\n * If cellButtonInvokeRowsOnDoubleClick = true, clicking a button inside the row\n * triggers the doubleClick event for the entire row.\n *\n * If cellButtonInvokeRowsOnDoubleClick = false, the doubleClick event for the row\n * is not triggered, but will triggered cellButtonClicked event with (key: PTableRowKey) argument.\n */\n cellButtonInvokeRowsOnDoubleClick?: boolean;\n\n /** @see {@link PlAgOverlayLoadingParams.loadingText} */\n loadingText?: string;\n\n /** @see {@link PlAgOverlayLoadingParams.runningText} */\n runningText?: string;\n\n /** @see {@link PlAgOverlayLoadingParams.notReadyText} */\n notReadyText?: string;\n\n /** @see {@link PlAgOverlayNoRowsParams.text} */\n noRowsText?: string;\n\n /**\n * Callback to override the default renderer for a given cell.\n * @see https://www.ag-grid.com/vue-data-grid/component-cell-renderer/#dynamic-component-selection\n */\n cellRendererSelector?: CellRendererSelectorFunc<PlAgDataTableV2Row>;\n}>();\nconst { settings } = toRefs(props);\nconst emit = defineEmits<{\n rowDoubleClicked: [key?: PTableKey];\n cellButtonClicked: [key?: PTableKey];\n newDataRendered: [];\n}>();\n\nconst filterableColumns = ref<PTableColumnSpec[]>([]);\n\nconst { gridState, sheetsState, filtersState } = useTableState(tableState, settings);\n\nconst sheetsSettings = computed<PlDataTableSheetsSettings>(() => {\n const settingsCopy = { ...settings.value };\n return settingsCopy.sourceId !== null\n ? {\n sheets: settingsCopy.sheets ?? [],\n cachedState: [...sheetsState.value],\n }\n : {\n sheets: [],\n cachedState: [],\n };\n});\n\nconst gridApi = shallowRef<GridApi<PlAgDataTableV2Row> | null>(null);\nconst dataRenderedTracker = new DeferredCircular<GridApi<PlAgDataTableV2Row>>();\nconst gridOptions = shallowRef<GridOptions<PlAgDataTableV2Row>>({\n animateRows: false,\n suppressColumnMoveAnimation: true,\n cellSelection: !selection.value,\n initialState: gridState.value,\n autoSizeStrategy: { type: \"fitCellContents\" },\n rowSelection: selection.value\n ? {\n mode: \"multiRow\",\n selectAll: \"all\",\n groupSelects: \"self\",\n checkboxes: false,\n headerCheckbox: false,\n enableClickSelection: false,\n }\n : undefined,\n onSelectionChanged: (event) => {\n if (selection.value) {\n const state = event.api.getServerSideSelectionState();\n const selectedKeys =\n state?.toggledNodes?.map((nodeId) => parseJson(nodeId as PlTableRowIdJson)) ?? [];\n if (!isJsonEqual(selection.value.selectedKeys, selectedKeys)) {\n selection.value = { ...selection.value, selectedKeys };\n }\n }\n },\n onRowDoubleClicked: (event) => {\n if (event.data && event.data.axesKey) emit(\"rowDoubleClicked\", event.data.axesKey);\n },\n defaultColDef: {\n suppressHeaderMenuButton: true,\n sortingOrder: [\"desc\", \"asc\", null],\n cellRendererSelector: props.cellRendererSelector,\n },\n maintainColumnOrder: true,\n localeText: {\n loadingError: \"...\",\n },\n rowModelType: \"serverSide\",\n // cacheBlockSize should be the same as PlMultiSequenceAlignment limit\n // so that selectAll will add all rows to selection\n cacheBlockSize: 1000,\n maxBlocksInCache: 100,\n blockLoadDebounceMillis: 500,\n serverSideSortAllLevels: true,\n suppressServerSideFullWidthLoadingRow: true,\n getRowId: (params) => params.data.id,\n loading: true,\n loadingOverlayComponentParams: {\n variant: \"not-ready\",\n loadingText: props.loadingText,\n runningText: props.runningText,\n notReadyText: props.notReadyText,\n } satisfies PlAgOverlayLoadingParams,\n loadingOverlayComponent: PlOverlayLoading,\n noRowsOverlayComponent: PlOverlayNoRows,\n noRowsOverlayComponentParams: {\n text: props.noRowsText,\n } satisfies PlAgOverlayNoRowsParams,\n defaultCsvExportParams: {\n allColumns: true,\n suppressQuotes: true,\n columnSeparator: \"\\t\",\n fileName: \"table.tsv\",\n },\n onGridReady: (event) => {\n const api = event.api;\n autoSizeRowNumberColumn(api);\n const setGridOption = (key: ManagedGridOptionKey, value: GridOptions[ManagedGridOptionKey]) => {\n const options = { ...gridOptions.value };\n options[key] = value;\n gridOptions.value = options;\n api.setGridOption(key, value);\n };\n const updateGridOptions = (options: ManagedGridOptions) => {\n gridOptions.value = {\n ...gridOptions.value,\n ...options,\n };\n api.updateGridOptions(options);\n };\n gridApi.value = new Proxy(api, {\n get(target, prop, receiver) {\n switch (prop) {\n case \"setGridOption\":\n return setGridOption;\n case \"updateGridOptions\":\n return updateGridOptions;\n default:\n return Reflect.get(target, prop, receiver);\n }\n },\n });\n },\n onStateUpdated: (event) => {\n gridOptions.value.initialState = gridState.value = makePartialState(event.state);\n if (!isJsonEqual(event.sources, [\"columnSizing\"])) {\n event.api.autoSizeColumns(\n event.api\n .getAllDisplayedColumns()\n .filter((column) => column.getColId() !== PlAgDataTableRowNumberColId),\n );\n }\n },\n onGridPreDestroyed: (event) => {\n gridOptions.value.initialState = gridState.value = makePartialState(event.api.getState());\n gridApi.value = null;\n },\n});\n\n// Restore proper types erased by AgGrid\nfunction makePartialState(state: GridState): PlDataTableGridStateCore {\n return {\n columnOrder: state.columnOrder as\n | {\n orderedColIds: PlTableColumnIdJson[];\n }\n | undefined,\n sort: state.sort as\n | {\n sortModel: {\n colId: PlTableColumnIdJson;\n sort: \"asc\" | \"desc\";\n }[];\n }\n | undefined,\n columnVisibility: state.columnVisibility as\n | {\n hiddenColIds: PlTableColumnIdJson[];\n }\n | undefined,\n };\n}\n\n// Reload AgGrid when new state arrives from server\nconst reloadKey = ref(0);\nwatch(\n () => [gridApi.value, gridState.value] as const,\n ([gridApi, gridState]) => {\n if (!gridApi || gridApi.isDestroyed()) return;\n const selfState = makePartialState(gridApi.getState());\n if (!isJsonEqual(gridState, {}) && !isJsonEqual(gridState, selfState)) {\n gridOptions.value.initialState = gridState;\n ++reloadKey.value;\n }\n },\n);\n\n// Make cellRendererSelector reactive\nconst cellRendererSelector = computed(() => props.cellRendererSelector ?? null);\nwatch(\n () => [gridApi.value, cellRendererSelector.value] as const,\n ([gridApi, cellRendererSelector]) => {\n if (!gridApi || gridApi.isDestroyed()) return;\n gridApi.setGridOption(\"defaultColDef\", {\n ...gridOptions.value.defaultColDef,\n cellRendererSelector: cellRendererSelector ?? undefined,\n });\n },\n);\n\ndefineExpose<PlAgDataTableV2Controller>({\n focusRow: async (rowKey) => {\n const gridApi = await dataRenderedTracker.promise;\n if (gridApi.isDestroyed()) return false;\n\n return ensureNodeVisible(gridApi, (row) => isJsonEqual(row.data?.axesKey, rowKey));\n },\n updateSelection: async ({ axesSpec, selectedKeys }) => {\n const gridApi = await dataRenderedTracker.promise;\n if (gridApi.isDestroyed()) return false;\n\n const axes = selection.value?.axesSpec;\n if (!axes || axes.length !== axesSpec.length) return false;\n\n const mapping = axesSpec.map((spec) => {\n const id = getAxisId(spec);\n return axes.findIndex((axis) => matchAxisId(axis, id));\n });\n const mappingSet = new Set(mapping);\n if (mappingSet.has(-1) || mappingSet.size !== axesSpec.length) return false;\n\n const selectedNodes = selectedKeys.map((key) =>\n canonicalizeJson<PlTableRowId>(mapping.map((index) => key[index])),\n );\n const oldSelectedKeys = gridApi.getServerSideSelectionState()?.toggledNodes ?? [];\n if (!isJsonEqual(oldSelectedKeys, selectedNodes)) {\n gridApi.setServerSideSelectionState({\n selectAll: false,\n toggledNodes: selectedNodes,\n });\n\n // wait for `onSelectionChanged` to update `selection` model\n const scope = effectScope();\n const { resolve, promise } = Promise.withResolvers();\n scope.run(() => watch(selection, resolve, { once: true }));\n try {\n await promiseTimeout(promise, 500);\n } catch {\n return false;\n } finally {\n scope.stop();\n }\n }\n return true;\n },\n});\n\nfunction getDataColDefs(\n columnDefs: ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden>[] | null | undefined,\n): ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden>[] {\n const isColDef = <TData, TValue>(\n def: ColDef<TData, TValue> | ColGroupDef<TData>,\n ): def is ColDef<TData, TValue> => !(\"children\" in def);\n if (!columnDefs) return [];\n return columnDefs\n .filter(isColDef)\n .filter((def) => def.colId && def.colId !== PlAgDataTableRowNumberColId);\n}\n\n// Propagate columns for filter component\nwatchCached(\n () => gridOptions.value.columnDefs,\n (columnDefs) => {\n const sourceId = settings.value.sourceId;\n if (sourceId === null) {\n filterableColumns.value = [];\n } else {\n const dataColumns = getDataColDefs(columnDefs);\n filterableColumns.value = dataColumns.map(\n (def) => parseJson(def.colId! satisfies string as PlTableColumnIdJson).labeled,\n );\n }\n },\n { immediate: true },\n);\n\n// Update AgGrid when settings change\nconst defaultSelection = createPlSelectionModel();\nlet oldSettings: PlDataTableSettingsV2 | null = null;\nconst generation = ref(0);\nwatch(\n () => [gridApi.value, settings.value] as const,\n ([gridApi, settings]) => {\n // Wait for AgGrid reinitialization, gridApi will eventually become initialized\n if (!gridApi || gridApi.isDestroyed()) return;\n // Verify that this is not a false watch trigger\n if (isJsonEqual(settings, oldSettings)) return;\n ++generation.value;\n try {\n // Hide no rows overlay if it is shown, or else loading overlay will not be shown\n gridApi.hideOverlay();\n dataRenderedTracker.reset();\n\n // No data source selected -> reset state to default\n if (settings.sourceId === null) {\n gridApi.updateGridOptions({\n loading: true,\n loadingOverlayComponentParams: {\n ...gridOptions.value.loadingOverlayComponentParams,\n variant: settings.pending ? \"running\" : \"not-ready\",\n } satisfies PlAgOverlayLoadingParams,\n columnDefs: undefined,\n serverSideDatasource: undefined,\n });\n if (selection.value) {\n if (selection.value && !isJsonEqual(selection.value, defaultSelection)) {\n selection.value = createPlSelectionModel();\n }\n gridApi.setServerSideSelectionState({\n selectAll: false,\n toggledNodes: [],\n });\n }\n return;\n }\n\n // Data source changed -> show full page loader, clear selection\n if (settings.sourceId !== oldSettings?.sourceId) {\n gridApi.updateGridOptions({\n loading: true,\n loadingOverlayComponentParams: {\n ...gridOptions.value.loadingOverlayComponentParams,\n variant: \"loading\",\n } satisfies PlAgOverlayLoadingParams,\n });\n if (selection.value && oldSettings?.sourceId) {\n if (selection.value && !isJsonEqual(selection.value, defaultSelection)) {\n selection.value = createPlSelectionModel();\n }\n gridApi.setServerSideSelectionState({\n selectAll: false,\n toggledNodes: [],\n });\n }\n }\n\n // Model updated -> show skeletons instead of data\n const sourceChanged =\n settings.model?.sourceId && settings.model.sourceId !== settings.sourceId;\n if (!settings.model || sourceChanged) {\n const state = gridApi.getServerSideGroupLevelState();\n const rowCount = !sourceChanged && state.length > 0 ? state[0].rowCount : 1;\n return gridApi.updateGridOptions({\n serverSideDatasource: {\n getRows: (params) => {\n params.success({ rowData: [], rowCount });\n },\n },\n });\n }\n\n // Model ready -> calculate new state\n const stateGeneration = generation.value;\n calculateGridOptions({\n generation,\n pfDriver: getRawPlatformaInstance().pFrameDriver,\n model: settings.model,\n sheets: settings.sheets ?? [],\n dataRenderedTracker,\n hiddenColIds: gridState.value.columnVisibility?.hiddenColIds,\n cellButtonAxisParams: {\n showCellButtonForAxisId: props.showCellButtonForAxisId,\n cellButtonInvokeRowsOnDoubleClick: props.cellButtonInvokeRowsOnDoubleClick,\n trigger: (key?: PTableKey) => emit(\"cellButtonClicked\", key),\n } satisfies PlAgCellButtonAxisParams,\n })\n .then((result) => {\n if (gridApi.isDestroyed() || stateGeneration !== generation.value) return;\n const { axesSpec, ...options } = result;\n gridApi.updateGridOptions({\n ...options,\n });\n if (selection.value) {\n // Update selection if axesSpec changed, as order of axes may have changed and so we need to remap selected keys\n const { axesSpec: oldAxesSpec, selectedKeys: oldSelectedKeys } = selection.value;\n if (!isJsonEqual(oldAxesSpec, axesSpec)) {\n if (!oldAxesSpec || axesSpec.length !== oldAxesSpec.length) {\n const newSelection: PlSelectionModel = { axesSpec, selectedKeys: [] };\n if (!isJsonEqual(selection.value, newSelection)) {\n selection.value = newSelection;\n }\n return gridApi.setServerSideSelectionState({\n selectAll: false,\n toggledNodes: [],\n });\n }\n\n const mapping = oldAxesSpec\n .map(getAxisId)\n .map((id) => axesSpec.findIndex((axis) => matchAxisId(axis, id)));\n const mappingSet = new Set(mapping);\n if (mappingSet.has(-1) || mappingSet.size !== axesSpec.length) {\n const newSelection: PlSelectionModel = { axesSpec, selectedKeys: [] };\n if (!isJsonEqual(selection.value, newSelection)) {\n selection.value = newSelection;\n }\n return gridApi.setServerSideSelectionState({\n selectAll: false,\n toggledNodes: [],\n });\n }\n\n const selectedNodes = oldSelectedKeys.map((key) =>\n mapping.map((index) => key[index]),\n );\n const newSelection: PlSelectionModel = { axesSpec, selectedKeys: selectedNodes };\n if (!isJsonEqual(selection.value, newSelection)) {\n selection.value = newSelection;\n }\n return gridApi.setServerSideSelectionState({\n selectAll: false,\n toggledNodes: selectedNodes.map((key) => canonicalizeJson<PlTableRowId>(key)),\n });\n }\n }\n })\n .catch((error: unknown) => {\n if (gridApi.isDestroyed() || stateGeneration !== generation.value) return;\n if (isAbortError(error)) return;\n console.trace(error);\n })\n .finally(() => {\n if (gridApi.isDestroyed() || stateGeneration !== generation.value) return;\n gridApi.updateGridOptions({\n loading: false,\n });\n });\n dataRenderedTracker.promise.then(() => emit(\"newDataRendered\"));\n } catch (error: unknown) {\n console.trace(error);\n } finally {\n oldSettings = settings;\n }\n },\n);\n\nwatch(\n () => ({\n gridApi: gridApi.value,\n loadingText: props.loadingText,\n runningText: props.runningText,\n notReadyText: props.notReadyText,\n noRowsText: props.noRowsText,\n }),\n ({ gridApi, loadingText, runningText, notReadyText, noRowsText }) => {\n if (!gridApi || gridApi.isDestroyed()) return;\n gridApi.updateGridOptions({\n loadingOverlayComponentParams: {\n ...gridOptions.value.loadingOverlayComponentParams,\n loadingText,\n runningText,\n notReadyText,\n },\n noRowsOverlayComponentParams: {\n ...gridOptions.value.noRowsOverlayComponentParams,\n text: noRowsText,\n },\n });\n },\n);\n\nwatchEffect(() => {\n if (!gridApi.value || gridApi.value?.isDestroyed()) return;\n gridApi.value.updateGridOptions({\n statusBar: gridOptions.value.loading\n ? undefined\n : {\n statusPanels: [{ statusPanel: PlAgRowCount, align: \"left\" }],\n },\n });\n});\n</script>\n\n<template>\n <div :class=\"$style.container\">\n <PlAgGridColumnManager v-if=\"gridApi && !disableColumnsPanel\" :api=\"gridApi\" />\n <PlTableFiltersV2\n v-if=\"!disableFiltersPanel\"\n v-model=\"filtersState\"\n :columns=\"filterableColumns\"\n />\n <PlAgCsvExporter v-if=\"gridApi && showExportButton\" :api=\"gridApi\" />\n <PlAgDataTableSheets v-model=\"sheetsState\" :settings=\"sheetsSettings\">\n <template v-if=\"$slots['before-sheets']\" #before>\n <slot name=\"before-sheets\" />\n </template>\n <template v-if=\"$slots['after-sheets']\" #after>\n <slot name=\"after-sheets\" />\n </template>\n </PlAgDataTableSheets>\n <AgGridVue\n :key=\"reloadKey\"\n :theme=\"AgGridTheme\"\n :class=\"$style.grid\"\n :grid-options=\"gridOptions\"\n />\n </div>\n</template>\n\n<style lang=\"css\" module>\n.container {\n display: flex;\n flex-direction: column;\n height: 100%;\n gap: 12px;\n}\n\n.grid {\n flex: 1;\n}\n</style>\n"],"names":["tableState","_useModel","selection","__props","props","settings","toRefs","emit","__emit","filterableColumns","ref","gridState","sheetsState","filtersState","useTableState","sheetsSettings","computed","settingsCopy","gridApi","shallowRef","dataRenderedTracker","DeferredCircular","gridOptions","event","state","selectedKeys","_a","nodeId","parseJson","isJsonEqual","params","PlOverlayLoading","PlOverlayNoRows","api","autoSizeRowNumberColumn","setGridOption","key","value","options","updateGridOptions","target","prop","receiver","makePartialState","column","PlAgDataTableRowNumberColId","reloadKey","watch","selfState","cellRendererSelector","__expose","rowKey","ensureNodeVisible","row","axesSpec","axes","mapping","spec","id","getAxisId","axis","matchAxisId","mappingSet","selectedNodes","canonicalizeJson","index","oldSelectedKeys","scope","effectScope","resolve","promise","promiseTimeout","getDataColDefs","columnDefs","isColDef","def","watchCached","dataColumns","defaultSelection","createPlSelectionModel","oldSettings","generation","sourceChanged","rowCount","stateGeneration","calculateGridOptions","getRawPlatformaInstance","_b","result","oldAxesSpec","newSelection","error","isAbortError","loadingText","runningText","notReadyText","noRowsText","watchEffect","PlAgRowCount","_createElementBlock","_normalizeClass","$style","_createBlock","_unref","PlAgGridColumnManager","PlTableFiltersV2","$event","PlAgCsvExporter","_createVNode","PlAgDataTableSheets","$slots","_renderSlot","_ctx","AgGridVue","AgGridTheme"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PlAgDataTableV2.vue2.js","sources":["../../../src/components/PlAgDataTable/PlAgDataTableV2.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { promiseTimeout, isJsonEqual } from \"@milaboratories/helpers\";\nimport type {\n AxisId,\n PlDataTableGridStateCore,\n PlDataTableStateV2,\n PlSelectionModel,\n PlTableColumnIdJson,\n PTableColumnSpec,\n PTableKey,\n PTableValue,\n} from \"@platforma-sdk/model\";\nimport {\n getRawPlatformaInstance,\n parseJson,\n createPlSelectionModel,\n matchAxisId,\n getAxisId,\n canonicalizeJson,\n isAbortError,\n} from \"@platforma-sdk/model\";\nimport type {\n CellRendererSelectorFunc,\n ColDef,\n ColGroupDef,\n GridApi,\n GridOptions,\n GridState,\n ManagedGridOptionKey,\n ManagedGridOptions,\n} from \"ag-grid-enterprise\";\nimport { AgGridVue } from \"ag-grid-vue3\";\nimport { computed, effectScope, ref, shallowRef, toRefs, watch, watchEffect } from \"vue\";\nimport { AgGridTheme } from \"../../aggrid\";\nimport PlAgCsvExporter from \"../PlAgCsvExporter/PlAgCsvExporter.vue\";\nimport { PlAgGridColumnManager } from \"../PlAgGridColumnManager\";\nimport PlTableFiltersV2 from \"../PlTableFilters/PlTableFiltersV2.vue\";\nimport PlAgDataTableSheets from \"./PlAgDataTableSheets.vue\";\nimport PlOverlayLoading from \"./PlAgOverlayLoading.vue\";\nimport PlOverlayNoRows from \"./PlAgOverlayNoRows.vue\";\nimport PlAgRowCount from \"./PlAgRowCount.vue\";\nimport { DeferredCircular, ensureNodeVisible } from \"./sources/focus-row\";\nimport { autoSizeRowNumberColumn, PlAgDataTableRowNumberColId } from \"./sources/row-number\";\nimport type { PlAgCellButtonAxisParams } from \"./sources/table-source-v2\";\nimport { calculateGridOptions } from \"./sources/table-source-v2\";\nimport { useTableState } from \"./sources/table-state-v2\";\nimport type {\n PlAgDataTableV2Controller,\n PlAgDataTableV2Row,\n PlAgOverlayLoadingParams,\n PlAgOverlayNoRowsParams,\n PlDataTableSettingsV2,\n PlDataTableSheetsSettings,\n PlTableRowId,\n PlTableRowIdJson,\n} from \"./types\";\nimport { watchCached } from \"@milaboratories/uikit\";\nimport { type PTableHidden } from \"./sources/common\";\n\nconst tableState = defineModel<PlDataTableStateV2>({\n required: true,\n});\n/** Warning: selection model value updates are ignored, use updateSelection instead */\nconst selection = defineModel<PlSelectionModel>(\"selection\");\nconst props = defineProps<{\n /** Required component settings */\n settings: Readonly<PlDataTableSettingsV2>;\n\n /**\n * The disableColumnsPanel prop controls the display of a button that activates\n * the columns management panel in the table. To make the button functional\n * and visible, you must also include the PlAgDataTableToolsPanel component in your layout.\n * This component serves as the target for teleporting the button.\n */\n disableColumnsPanel?: boolean;\n\n /**\n * The disableFiltersPanel prop controls the display of a button that activates\n * the filters management panel in the table. To make the button functional\n * and visible, you must also include the PlAgDataTableToolsPanel component in your layout.\n * This component serves as the target for teleporting the button.\n */\n disableFiltersPanel?: boolean;\n\n /**\n * The showExportButton prop controls the display of a button that allows\n * to export table data in CSV format. To make the button functional\n * and visible, you must also include the PlAgDataTableToolsPanel component in your layout.\n * This component serves as the target for teleporting the button.\n */\n showExportButton?: boolean;\n\n /**\n * The AxisId property is used to configure and display the PlAgTextAndButtonCell component\n */\n showCellButtonForAxisId?: AxisId;\n\n /**\n * If cellButtonInvokeRowsOnDoubleClick = true, clicking a button inside the row\n * triggers the doubleClick event for the entire row.\n *\n * If cellButtonInvokeRowsOnDoubleClick = false, the doubleClick event for the row\n * is not triggered, but will triggered cellButtonClicked event with (key: PTableRowKey) argument.\n */\n cellButtonInvokeRowsOnDoubleClick?: boolean;\n\n /** @see {@link PlAgOverlayLoadingParams.loadingText} */\n loadingText?: string;\n\n /** @see {@link PlAgOverlayLoadingParams.runningText} */\n runningText?: string;\n\n /** @see {@link PlAgOverlayLoadingParams.notReadyText} */\n notReadyText?: string;\n\n /** @see {@link PlAgOverlayNoRowsParams.text} */\n noRowsText?: string;\n\n /**\n * Callback to override the default renderer for a given cell.\n * @see https://www.ag-grid.com/vue-data-grid/component-cell-renderer/#dynamic-component-selection\n */\n cellRendererSelector?: CellRendererSelectorFunc<PlAgDataTableV2Row>;\n}>();\nconst { settings } = toRefs(props);\nconst emit = defineEmits<{\n rowDoubleClicked: [key?: PTableKey];\n cellButtonClicked: [key?: PTableKey];\n newDataRendered: [];\n}>();\n\nconst filterableColumns = ref<PTableColumnSpec[]>([]);\n\nconst { gridState, sheetsState, filtersState } = useTableState(tableState, settings);\n\nconst sheetsSettings = computed<PlDataTableSheetsSettings>(() => {\n const settingsCopy = { ...settings.value };\n return settingsCopy.sourceId !== null\n ? {\n sheets: settingsCopy.sheets ?? [],\n cachedState: [...sheetsState.value],\n }\n : {\n sheets: [],\n cachedState: [],\n };\n});\n\nconst gridApi = shallowRef<GridApi<PlAgDataTableV2Row> | null>(null);\nconst dataRenderedTracker = new DeferredCircular<GridApi<PlAgDataTableV2Row>>();\nconst gridOptions = shallowRef<GridOptions<PlAgDataTableV2Row>>({\n animateRows: false,\n suppressColumnMoveAnimation: true,\n cellSelection: !selection.value,\n initialState: gridState.value,\n autoSizeStrategy: { type: \"fitCellContents\" },\n rowSelection: selection.value\n ? {\n mode: \"multiRow\",\n selectAll: \"all\",\n groupSelects: \"self\",\n checkboxes: false,\n headerCheckbox: false,\n enableClickSelection: false,\n }\n : undefined,\n onSelectionChanged: (event) => {\n if (selection.value) {\n const state = event.api.getServerSideSelectionState();\n const selectedKeys =\n state?.toggledNodes?.map((nodeId) => parseJson(nodeId as PlTableRowIdJson)) ?? [];\n if (!isJsonEqual(selection.value.selectedKeys, selectedKeys)) {\n selection.value = { ...selection.value, selectedKeys };\n }\n }\n },\n onRowDoubleClicked: (event) => {\n if (event.data && event.data.axesKey) emit(\"rowDoubleClicked\", event.data.axesKey);\n },\n defaultColDef: {\n suppressHeaderMenuButton: true,\n sortingOrder: [\"desc\", \"asc\", null],\n cellRendererSelector: props.cellRendererSelector,\n },\n maintainColumnOrder: true,\n localeText: {\n loadingError: \"...\",\n },\n rowModelType: \"serverSide\",\n // cacheBlockSize should be the same as PlMultiSequenceAlignment limit\n // so that selectAll will add all rows to selection\n cacheBlockSize: 1000,\n maxBlocksInCache: 100,\n blockLoadDebounceMillis: 500,\n serverSideSortAllLevels: true,\n suppressServerSideFullWidthLoadingRow: true,\n getRowId: (params) => params.data.id,\n loading: true,\n loadingOverlayComponentParams: {\n variant: \"not-ready\",\n loadingText: props.loadingText,\n runningText: props.runningText,\n notReadyText: props.notReadyText,\n } satisfies PlAgOverlayLoadingParams,\n loadingOverlayComponent: PlOverlayLoading,\n noRowsOverlayComponent: PlOverlayNoRows,\n noRowsOverlayComponentParams: {\n text: props.noRowsText,\n } satisfies PlAgOverlayNoRowsParams,\n defaultCsvExportParams: {\n allColumns: true,\n suppressQuotes: true,\n columnSeparator: \"\\t\",\n fileName: \"table.tsv\",\n },\n onGridReady: (event) => {\n const api = event.api;\n autoSizeRowNumberColumn(api);\n const setGridOption = (key: ManagedGridOptionKey, value: GridOptions[ManagedGridOptionKey]) => {\n const options = { ...gridOptions.value };\n options[key] = value;\n gridOptions.value = options;\n api.setGridOption(key, value);\n };\n const updateGridOptions = (options: ManagedGridOptions) => {\n gridOptions.value = {\n ...gridOptions.value,\n ...options,\n };\n api.updateGridOptions(options);\n };\n gridApi.value = new Proxy(api, {\n get(target, prop, receiver) {\n switch (prop) {\n case \"setGridOption\":\n return setGridOption;\n case \"updateGridOptions\":\n return updateGridOptions;\n default:\n return Reflect.get(target, prop, receiver);\n }\n },\n });\n },\n onStateUpdated: (event) => {\n let partialState = makePartialState(event.state);\n // AG Grid omits columnVisibility when no columns are hidden. If we previously had\n // hidden columns and now get undefined, treat as \"all visible\" so we don't revert to default.\n const hadHiddenCols = gridState.value.columnVisibility?.hiddenColIds !== undefined;\n if (partialState.columnVisibility === undefined && hadHiddenCols) {\n partialState = { ...partialState, columnVisibility: { hiddenColIds: [] } };\n }\n // We have to keep initialState synchronized with gridState for gridState recovery after key updating.\n gridOptions.value.initialState = gridState.value = partialState;\n if (!isJsonEqual(event.sources, [\"columnSizing\"])) {\n event.api.autoSizeColumns(\n event.api\n .getAllDisplayedColumns()\n .filter((column) => column.getColId() !== PlAgDataTableRowNumberColId),\n );\n }\n },\n onGridPreDestroyed: (event) => {\n gridOptions.value.initialState = gridState.value = makePartialState(event.api.getState());\n gridApi.value = null;\n },\n});\n\n// Restore proper types erased by AgGrid\nfunction makePartialState(state: GridState): PlDataTableGridStateCore {\n return {\n columnOrder: state.columnOrder as\n | {\n orderedColIds: PlTableColumnIdJson[];\n }\n | undefined,\n sort: state.sort as\n | {\n sortModel: {\n colId: PlTableColumnIdJson;\n sort: \"asc\" | \"desc\";\n }[];\n }\n | undefined,\n columnVisibility: state.columnVisibility as\n | {\n hiddenColIds: PlTableColumnIdJson[];\n }\n | undefined,\n };\n}\n\n// Normalize columnVisibility for comparison: undefined and { hiddenColIds: [] } are equivalent.\nfunction stateForReloadCompare(state: PlDataTableGridStateCore): PlDataTableGridStateCore {\n const cv = state.columnVisibility;\n const normalizedCv = !cv || cv.hiddenColIds.length === 0 ? undefined : state.columnVisibility;\n return { ...state, columnVisibility: normalizedCv };\n}\n\n// Reload AgGrid when new state arrives from server\nconst reloadKey = ref(0);\nwatch(\n () => [gridApi.value, gridState.value] as const,\n ([gridApi, gridState]) => {\n if (!gridApi || gridApi.isDestroyed()) return;\n const selfState = makePartialState(gridApi.getState());\n if (\n !isJsonEqual(gridState, {}) &&\n !isJsonEqual(stateForReloadCompare(gridState), stateForReloadCompare(selfState))\n ) {\n gridOptions.value.initialState = gridState;\n ++reloadKey.value;\n }\n },\n);\n\n// Make cellRendererSelector reactive\nconst cellRendererSelector = computed(() => props.cellRendererSelector ?? null);\nwatch(\n () => [gridApi.value, cellRendererSelector.value] as const,\n ([gridApi, cellRendererSelector]) => {\n if (!gridApi || gridApi.isDestroyed()) return;\n gridApi.setGridOption(\"defaultColDef\", {\n ...gridOptions.value.defaultColDef,\n cellRendererSelector: cellRendererSelector ?? undefined,\n });\n },\n);\n\ndefineExpose<PlAgDataTableV2Controller>({\n focusRow: async (rowKey) => {\n const gridApi = await dataRenderedTracker.promise;\n if (gridApi.isDestroyed()) return false;\n\n return ensureNodeVisible(gridApi, (row) => isJsonEqual(row.data?.axesKey, rowKey));\n },\n updateSelection: async ({ axesSpec, selectedKeys }) => {\n const gridApi = await dataRenderedTracker.promise;\n if (gridApi.isDestroyed()) return false;\n\n const axes = selection.value?.axesSpec;\n if (!axes || axes.length !== axesSpec.length) return false;\n\n const mapping = axesSpec.map((spec) => {\n const id = getAxisId(spec);\n return axes.findIndex((axis) => matchAxisId(axis, id));\n });\n const mappingSet = new Set(mapping);\n if (mappingSet.has(-1) || mappingSet.size !== axesSpec.length) return false;\n\n const selectedNodes = selectedKeys.map((key) =>\n canonicalizeJson<PlTableRowId>(mapping.map((index) => key[index])),\n );\n const oldSelectedKeys = gridApi.getServerSideSelectionState()?.toggledNodes ?? [];\n if (!isJsonEqual(oldSelectedKeys, selectedNodes)) {\n gridApi.setServerSideSelectionState({\n selectAll: false,\n toggledNodes: selectedNodes,\n });\n\n // wait for `onSelectionChanged` to update `selection` model\n const scope = effectScope();\n const { resolve, promise } = Promise.withResolvers();\n scope.run(() => watch(selection, resolve, { once: true }));\n try {\n await promiseTimeout(promise, 500);\n } catch {\n return false;\n } finally {\n scope.stop();\n }\n }\n return true;\n },\n});\n\nfunction getDataColDefs(\n columnDefs: ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden>[] | null | undefined,\n): ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden>[] {\n const isColDef = <TData, TValue>(\n def: ColDef<TData, TValue> | ColGroupDef<TData>,\n ): def is ColDef<TData, TValue> => !(\"children\" in def);\n if (!columnDefs) return [];\n return columnDefs\n .filter(isColDef)\n .filter((def) => def.colId && def.colId !== PlAgDataTableRowNumberColId);\n}\n\n// Propagate columns for filter component\nwatchCached(\n () => gridOptions.value.columnDefs,\n (columnDefs) => {\n const sourceId = settings.value.sourceId;\n if (sourceId === null) {\n filterableColumns.value = [];\n } else {\n const dataColumns = getDataColDefs(columnDefs);\n filterableColumns.value = dataColumns.map(\n (def) => parseJson(def.colId! satisfies string as PlTableColumnIdJson).labeled,\n );\n }\n },\n { immediate: true },\n);\n\n// Update AgGrid when settings change\nconst defaultSelection = createPlSelectionModel();\nlet oldSettings: PlDataTableSettingsV2 | null = null;\nconst generation = ref(0);\nwatch(\n () => [gridApi.value, settings.value] as const,\n ([gridApi, settings]) => {\n // Wait for AgGrid reinitialization, gridApi will eventually become initialized\n if (!gridApi || gridApi.isDestroyed()) return;\n // Verify that this is not a false watch trigger\n if (isJsonEqual(settings, oldSettings)) return;\n ++generation.value;\n try {\n // Hide no rows overlay if it is shown, or else loading overlay will not be shown\n gridApi.hideOverlay();\n dataRenderedTracker.reset();\n\n // No data source selected -> reset state to default\n if (settings.sourceId === null) {\n gridApi.updateGridOptions({\n loading: true,\n loadingOverlayComponentParams: {\n ...gridOptions.value.loadingOverlayComponentParams,\n variant: settings.pending ? \"running\" : \"not-ready\",\n } satisfies PlAgOverlayLoadingParams,\n columnDefs: undefined,\n serverSideDatasource: undefined,\n });\n if (selection.value) {\n if (selection.value && !isJsonEqual(selection.value, defaultSelection)) {\n selection.value = createPlSelectionModel();\n }\n gridApi.setServerSideSelectionState({\n selectAll: false,\n toggledNodes: [],\n });\n }\n return;\n }\n\n // Data source changed -> show full page loader, clear selection\n if (settings.sourceId !== oldSettings?.sourceId) {\n gridApi.updateGridOptions({\n loading: true,\n loadingOverlayComponentParams: {\n ...gridOptions.value.loadingOverlayComponentParams,\n variant: \"loading\",\n } satisfies PlAgOverlayLoadingParams,\n });\n if (selection.value && oldSettings?.sourceId) {\n if (selection.value && !isJsonEqual(selection.value, defaultSelection)) {\n selection.value = createPlSelectionModel();\n }\n gridApi.setServerSideSelectionState({\n selectAll: false,\n toggledNodes: [],\n });\n }\n }\n\n // Model updated -> show skeletons instead of data\n const sourceChanged =\n settings.model?.sourceId && settings.model.sourceId !== settings.sourceId;\n if (!settings.model || sourceChanged) {\n const state = gridApi.getServerSideGroupLevelState();\n const rowCount = !sourceChanged && state.length > 0 ? state[0].rowCount : 1;\n return gridApi.updateGridOptions({\n serverSideDatasource: {\n getRows: (params) => {\n params.success({ rowData: [], rowCount });\n },\n },\n });\n }\n\n // Model ready -> calculate new state\n const stateGeneration = generation.value;\n calculateGridOptions({\n generation,\n pfDriver: getRawPlatformaInstance().pFrameDriver,\n model: settings.model,\n sheets: settings.sheets ?? [],\n dataRenderedTracker,\n hiddenColIds: gridState.value.columnVisibility?.hiddenColIds,\n cellButtonAxisParams: {\n showCellButtonForAxisId: props.showCellButtonForAxisId,\n cellButtonInvokeRowsOnDoubleClick: props.cellButtonInvokeRowsOnDoubleClick,\n trigger: (key?: PTableKey) => emit(\"cellButtonClicked\", key),\n } satisfies PlAgCellButtonAxisParams,\n })\n .then((result) => {\n if (gridApi.isDestroyed() || stateGeneration !== generation.value) return;\n const { axesSpec, ...options } = result;\n gridApi.updateGridOptions({\n ...options,\n });\n if (selection.value) {\n // Update selection if axesSpec changed, as order of axes may have changed and so we need to remap selected keys\n const { axesSpec: oldAxesSpec, selectedKeys: oldSelectedKeys } = selection.value;\n if (!isJsonEqual(oldAxesSpec, axesSpec)) {\n if (!oldAxesSpec || axesSpec.length !== oldAxesSpec.length) {\n const newSelection: PlSelectionModel = { axesSpec, selectedKeys: [] };\n if (!isJsonEqual(selection.value, newSelection)) {\n selection.value = newSelection;\n }\n return gridApi.setServerSideSelectionState({\n selectAll: false,\n toggledNodes: [],\n });\n }\n\n const mapping = oldAxesSpec\n .map(getAxisId)\n .map((id) => axesSpec.findIndex((axis) => matchAxisId(axis, id)));\n const mappingSet = new Set(mapping);\n if (mappingSet.has(-1) || mappingSet.size !== axesSpec.length) {\n const newSelection: PlSelectionModel = { axesSpec, selectedKeys: [] };\n if (!isJsonEqual(selection.value, newSelection)) {\n selection.value = newSelection;\n }\n return gridApi.setServerSideSelectionState({\n selectAll: false,\n toggledNodes: [],\n });\n }\n\n const selectedNodes = oldSelectedKeys.map((key) =>\n mapping.map((index) => key[index]),\n );\n const newSelection: PlSelectionModel = { axesSpec, selectedKeys: selectedNodes };\n if (!isJsonEqual(selection.value, newSelection)) {\n selection.value = newSelection;\n }\n return gridApi.setServerSideSelectionState({\n selectAll: false,\n toggledNodes: selectedNodes.map((key) => canonicalizeJson<PlTableRowId>(key)),\n });\n }\n }\n })\n .catch((error: unknown) => {\n if (gridApi.isDestroyed() || stateGeneration !== generation.value) return;\n if (isAbortError(error)) return;\n console.trace(error);\n })\n .finally(() => {\n if (gridApi.isDestroyed() || stateGeneration !== generation.value) return;\n gridApi.updateGridOptions({\n loading: false,\n });\n });\n dataRenderedTracker.promise.then(() => emit(\"newDataRendered\"));\n } catch (error: unknown) {\n console.trace(error);\n } finally {\n oldSettings = settings;\n }\n },\n);\n\nwatch(\n () => ({\n gridApi: gridApi.value,\n loadingText: props.loadingText,\n runningText: props.runningText,\n notReadyText: props.notReadyText,\n noRowsText: props.noRowsText,\n }),\n ({ gridApi, loadingText, runningText, notReadyText, noRowsText }) => {\n if (!gridApi || gridApi.isDestroyed()) return;\n gridApi.updateGridOptions({\n loadingOverlayComponentParams: {\n ...gridOptions.value.loadingOverlayComponentParams,\n loadingText,\n runningText,\n notReadyText,\n },\n noRowsOverlayComponentParams: {\n ...gridOptions.value.noRowsOverlayComponentParams,\n text: noRowsText,\n },\n });\n },\n);\n\nwatchEffect(() => {\n if (!gridApi.value || gridApi.value?.isDestroyed()) return;\n gridApi.value.updateGridOptions({\n statusBar: gridOptions.value.loading\n ? undefined\n : {\n statusPanels: [{ statusPanel: PlAgRowCount, align: \"left\" }],\n },\n });\n});\n</script>\n\n<template>\n <div :class=\"$style.container\">\n <PlAgGridColumnManager v-if=\"gridApi && !disableColumnsPanel\" :api=\"gridApi\" />\n <PlTableFiltersV2\n v-if=\"!disableFiltersPanel\"\n v-model=\"filtersState\"\n :columns=\"filterableColumns\"\n />\n <PlAgCsvExporter v-if=\"gridApi && showExportButton\" :api=\"gridApi\" />\n <PlAgDataTableSheets v-model=\"sheetsState\" :settings=\"sheetsSettings\">\n <template v-if=\"$slots['before-sheets']\" #before>\n <slot name=\"before-sheets\" />\n </template>\n <template v-if=\"$slots['after-sheets']\" #after>\n <slot name=\"after-sheets\" />\n </template>\n </PlAgDataTableSheets>\n <AgGridVue\n :key=\"reloadKey\"\n :theme=\"AgGridTheme\"\n :class=\"$style.grid\"\n :grid-options=\"gridOptions\"\n />\n </div>\n</template>\n\n<style lang=\"css\" module>\n.container {\n display: flex;\n flex-direction: column;\n height: 100%;\n gap: 12px;\n}\n\n.grid {\n flex: 1;\n}\n</style>\n"],"names":["tableState","_useModel","selection","__props","props","settings","toRefs","emit","__emit","filterableColumns","ref","gridState","sheetsState","filtersState","useTableState","sheetsSettings","computed","settingsCopy","gridApi","shallowRef","dataRenderedTracker","DeferredCircular","gridOptions","event","state","selectedKeys","_a","nodeId","parseJson","isJsonEqual","params","PlOverlayLoading","PlOverlayNoRows","api","autoSizeRowNumberColumn","setGridOption","key","value","options","updateGridOptions","target","prop","receiver","partialState","makePartialState","hadHiddenCols","column","PlAgDataTableRowNumberColId","stateForReloadCompare","cv","normalizedCv","reloadKey","watch","selfState","cellRendererSelector","__expose","rowKey","ensureNodeVisible","row","axesSpec","axes","mapping","spec","id","getAxisId","axis","matchAxisId","mappingSet","selectedNodes","canonicalizeJson","index","oldSelectedKeys","scope","effectScope","resolve","promise","promiseTimeout","getDataColDefs","columnDefs","isColDef","def","watchCached","dataColumns","defaultSelection","createPlSelectionModel","oldSettings","generation","sourceChanged","rowCount","stateGeneration","calculateGridOptions","getRawPlatformaInstance","_b","result","oldAxesSpec","newSelection","error","isAbortError","loadingText","runningText","notReadyText","noRowsText","watchEffect","PlAgRowCount","_createElementBlock","_normalizeClass","$style","_createBlock","_unref","PlAgGridColumnManager","PlTableFiltersV2","$event","PlAgCsvExporter","_createVNode","PlAgDataTableSheets","$slots","_renderSlot","_ctx","AgGridVue","AgGridTheme"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlAnnotations.vue2.js","sources":["../../../../src/components/PlAnnotations/components/PlAnnotations.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Props as BaseProps } from \"./FilterSidebar.vue\";\nexport type Props = BaseProps & {\n onDeleteSchema?: () => void;\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, effect, shallowRef } from \"vue\";\n\nimport { isNil } from \"@milaboratories/helpers\";\nimport { PlSidebarGroup, useConfirm } from \"@milaboratories/uikit\";\n\nimport type { Annotation } from \"../types\";\nimport AnnotationsSidebar from \"./AnnotationsSidebar.vue\";\nimport FilterSidebar from \"./FilterSidebar.vue\";\n\n// Models\nconst annotation = defineModel<Annotation>(\"annotation\", { required: true });\n// Props\nconst props = defineProps<Props>();\n// State\nconst selectedStepId = shallowRef<number | undefined>(undefined);\nconst selectedStep = computed(() => {\n return isNil(selectedStepId.value) || isNil(annotation.value)\n ? undefined\n : annotation.value.steps.find((step) => step.id === selectedStepId.value);\n});\n\n// Watchers\neffect(function setDefaultStepId() {\n if (selectedStepId.value === undefined && annotation.value.steps.length > 0) {\n selectedStepId.value = annotation.value.steps[0].id;\n }\n});\n// Hooks\nconst confirmResetSchema = useConfirm({\n title: \"Reset Schema\",\n message: \"Are you sure you want to reset the schema? This action cannot be undone.\",\n confirmLabel: \"Yes, reset\",\n cancelLabel: \"No, cancel\",\n});\n// Actions\nasync function handleDeleteSchema() {\n if (await confirmResetSchema()) {\n selectedStepId.value = undefined;\n props.onDeleteSchema?.();\n }\n}\n</script>\n\n<template>\n <PlSidebarGroup>\n <template #item-0>\n <AnnotationsSidebar\n v-model:annotation=\"annotation\"\n v-model:selectedStepId=\"selectedStepId\"\n :class=\"$style.sidebarItem\"\n :columns=\"props.columns\"\n @delete-schema=\"handleDeleteSchema\"\n />\n </template>\n <template #item-1>\n <FilterSidebar\n v-if=\"selectedStep\"\n v-model:step=\"selectedStep\"\n :class=\"$style.sidebarItem\"\n :columns=\"props.columns\"\n :get-suggest-options=\"props.getSuggestOptions\"\n :selectedStepId=\"selectedStepId\"\n :hasSelectedColumns=\"props.hasSelectedColumns\"\n :getValuesForSelectedColumns=\"props.getValuesForSelectedColumns\"\n />\n </template>\n </PlSidebarGroup>\n</template>\n\n<style module>\n.sidebarItem {\n width: 100%;\n height: 100%;\n}\n</style>\n"],"names":["annotation","_useModel","props","__props","selectedStepId","shallowRef","selectedStep","computed","isNil","step","effect","confirmResetSchema","useConfirm","handleDeleteSchema","_a","_createBlock","_unref","PlSidebarGroup","_createVNode","AnnotationsSidebar","$event","_normalizeClass","$style","FilterSidebar"],"mappings":";;;;;;;;;;;;;;;;;;;AAkBA,UAAMA,IAAaC,KAAwB,YAAgC,GAErEC,IAAQC,GAERC,IAAiBC,EAA+B,MAAS,GACzDC,IAAeC,EAAS,MACrBC,EAAMJ,EAAe,KAAK,KAAKI,EAAMR,EAAW,KAAK,IACxD,SACAA,EAAW,MAAM,MAAM,KAAK,CAACS,MAASA,EAAK,OAAOL,EAAe,KAAK,CAC3E;AAGD,IAAAM,EAAO,WAA4B;AACjC,MAAIN,EAAe,UAAU,UAAaJ,EAAW,MAAM,MAAM,SAAS,MACxEI,EAAe,QAAQJ,EAAW,MAAM,MAAM,CAAC,EAAE;AAAA,IAErD,CAAC;AAED,UAAMW,IAAqBC,EAAW;AAAA,MACpC,OAAO;AAAA,MACP,SAAS;AAAA,MACT,cAAc;AAAA,MACd,aAAa;AAAA,IAAA,CACd;AAED,mBAAeC,IAAqB;;AAClC,MAAI,MAAMF,QACRP,EAAe,QAAQ,SACvBU,IAAAZ,EAAM,mBAAN,QAAAY,EAAA,KAAAZ;AAAA,IAEJ;2BAIEa,EAsBiBC,EAAAC,CAAA,GAAA,MAAA;AAAA,MArBJ,YACT,MAME;AAAA,QANFC,EAMEC,GAAA;AAAA,UALQ,YAAYnB,EAAA;AAAA,wDAAAA,EAAU,QAAAoB;AAAA,UACtB,gBAAgBhB,EAAA;AAAA,4DAAAA,EAAc,QAAAgB;AAAA,UACrC,OAAKC,EAAEC,EAAAA,OAAO,WAAW;AAAA,UACzB,SAASpB,EAAM;AAAA,UACf,gBAAeW;AAAA,QAAA;;MAGT,
|
|
1
|
+
{"version":3,"file":"PlAnnotations.vue2.js","sources":["../../../../src/components/PlAnnotations/components/PlAnnotations.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Props as BaseProps } from \"./FilterSidebar.vue\";\nexport type Props = BaseProps & {\n onDeleteSchema?: () => void;\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, effect, shallowRef } from \"vue\";\n\nimport { isNil } from \"@milaboratories/helpers\";\nimport { PlSidebarGroup, useConfirm } from \"@milaboratories/uikit\";\n\nimport type { Annotation } from \"../types\";\nimport AnnotationsSidebar from \"./AnnotationsSidebar.vue\";\nimport FilterSidebar from \"./FilterSidebar.vue\";\n\n// Models\nconst annotation = defineModel<Annotation>(\"annotation\", { required: true });\n// Props\nconst props = defineProps<Props>();\n// State\nconst selectedStepId = shallowRef<number | undefined>(undefined);\nconst selectedStep = computed(() => {\n return isNil(selectedStepId.value) || isNil(annotation.value)\n ? undefined\n : annotation.value.steps.find((step) => step.id === selectedStepId.value);\n});\n\n// Watchers\neffect(function setDefaultStepId() {\n if (selectedStepId.value === undefined && annotation.value.steps.length > 0) {\n selectedStepId.value = annotation.value.steps[0].id;\n }\n});\n// Hooks\nconst confirmResetSchema = useConfirm({\n title: \"Reset Schema\",\n message: \"Are you sure you want to reset the schema? This action cannot be undone.\",\n confirmLabel: \"Yes, reset\",\n cancelLabel: \"No, cancel\",\n});\n// Actions\nasync function handleDeleteSchema() {\n if (await confirmResetSchema()) {\n selectedStepId.value = undefined;\n props.onDeleteSchema?.();\n }\n}\n</script>\n\n<template>\n <PlSidebarGroup>\n <template #item-0>\n <AnnotationsSidebar\n v-model:annotation=\"annotation\"\n v-model:selectedStepId=\"selectedStepId\"\n :class=\"$style.sidebarItem\"\n :columns=\"props.columns\"\n @delete-schema=\"handleDeleteSchema\"\n />\n </template>\n <template #item-1>\n <FilterSidebar\n v-if=\"selectedStep\"\n v-model:step=\"selectedStep\"\n :class=\"$style.sidebarItem\"\n :columns=\"props.columns\"\n :get-suggest-options=\"props.getSuggestOptions\"\n :selectedStepId=\"selectedStepId\"\n :hasSelectedColumns=\"props.hasSelectedColumns\"\n :getValuesForSelectedColumns=\"props.getValuesForSelectedColumns\"\n />\n </template>\n </PlSidebarGroup>\n</template>\n\n<style module>\n.sidebarItem {\n width: 100%;\n height: 100%;\n}\n</style>\n"],"names":["annotation","_useModel","props","__props","selectedStepId","shallowRef","selectedStep","computed","isNil","step","effect","confirmResetSchema","useConfirm","handleDeleteSchema","_a","_createBlock","_unref","PlSidebarGroup","_createVNode","AnnotationsSidebar","$event","_normalizeClass","$style","FilterSidebar"],"mappings":";;;;;;;;;;;;;;;;;;;AAkBA,UAAMA,IAAaC,KAAwB,YAAgC,GAErEC,IAAQC,GAERC,IAAiBC,EAA+B,MAAS,GACzDC,IAAeC,EAAS,MACrBC,EAAMJ,EAAe,KAAK,KAAKI,EAAMR,EAAW,KAAK,IACxD,SACAA,EAAW,MAAM,MAAM,KAAK,CAACS,MAASA,EAAK,OAAOL,EAAe,KAAK,CAC3E;AAGD,IAAAM,EAAO,WAA4B;AACjC,MAAIN,EAAe,UAAU,UAAaJ,EAAW,MAAM,MAAM,SAAS,MACxEI,EAAe,QAAQJ,EAAW,MAAM,MAAM,CAAC,EAAE;AAAA,IAErD,CAAC;AAED,UAAMW,IAAqBC,EAAW;AAAA,MACpC,OAAO;AAAA,MACP,SAAS;AAAA,MACT,cAAc;AAAA,MACd,aAAa;AAAA,IAAA,CACd;AAED,mBAAeC,IAAqB;;AAClC,MAAI,MAAMF,QACRP,EAAe,QAAQ,SACvBU,IAAAZ,EAAM,mBAAN,QAAAY,EAAA,KAAAZ;AAAA,IAEJ;2BAIEa,EAsBiBC,EAAAC,CAAA,GAAA,MAAA;AAAA,MArBJ,YACT,MAME;AAAA,QANFC,EAMEC,GAAA;AAAA,UALQ,YAAYnB,EAAA;AAAA,wDAAAA,EAAU,QAAAoB;AAAA,UACtB,gBAAgBhB,EAAA;AAAA,4DAAAA,EAAc,QAAAgB;AAAA,UACrC,OAAKC,EAAEC,EAAAA,OAAO,WAAW;AAAA,UACzB,SAASpB,EAAM;AAAA,UACf,gBAAeW;AAAA,QAAA;;MAGT,YANf,MAW4C;AAAA,QAH9BP,EAAA,cADRS,EASEQ,GAAA;AAAA;UAPQ,MAAMjB,EAAA;AAAA,kDAAAA,EAAY,QAAAc;AAAA,UACzB,OAAKC,EAAEC,EAAAA,OAAO,WAAW;AAAA,UACzB,SAASpB,EAAM;AAAA,UACf,uBAAqBA,EAAM;AAAA,UAC3B,gBAAgBE,EAAA;AAAA,UAChB,oBAAoBF,EAAM;AAAA,UAC1B,6BAA6BA,EAAM;AAAA,QAAA;;;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@platforma-sdk/ui-vue",
|
|
3
|
-
"version": "1.54.
|
|
3
|
+
"version": "1.54.11",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"exports": {
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
"lru-cache": "^11.2.2",
|
|
27
27
|
"vue": "^3.5.24",
|
|
28
28
|
"zod": "~3.23.8",
|
|
29
|
-
"@milaboratories/uikit": "2.10.
|
|
30
|
-
"@platforma-sdk/model": "1.54.
|
|
29
|
+
"@milaboratories/uikit": "2.10.23",
|
|
30
|
+
"@platforma-sdk/model": "1.54.10"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@faker-js/faker": "^9.2.0",
|
|
@@ -42,10 +42,10 @@
|
|
|
42
42
|
"typescript": "~5.6.3",
|
|
43
43
|
"vite": "^6.4.1",
|
|
44
44
|
"vitest": "^4.0.16",
|
|
45
|
-
"@milaboratories/ts-configs": "1.2.1",
|
|
46
|
-
"@milaboratories/ts-builder": "1.2.10",
|
|
47
45
|
"@milaboratories/build-configs": "1.4.4",
|
|
48
|
-
"@milaboratories/helpers": "1.13.4"
|
|
46
|
+
"@milaboratories/helpers": "1.13.4",
|
|
47
|
+
"@milaboratories/ts-builder": "1.2.10",
|
|
48
|
+
"@milaboratories/ts-configs": "1.2.1"
|
|
49
49
|
},
|
|
50
50
|
"styles": "dist/index.js",
|
|
51
51
|
"scripts": {
|
|
@@ -243,7 +243,15 @@ const gridOptions = shallowRef<GridOptions<PlAgDataTableV2Row>>({
|
|
|
243
243
|
});
|
|
244
244
|
},
|
|
245
245
|
onStateUpdated: (event) => {
|
|
246
|
-
|
|
246
|
+
let partialState = makePartialState(event.state);
|
|
247
|
+
// AG Grid omits columnVisibility when no columns are hidden. If we previously had
|
|
248
|
+
// hidden columns and now get undefined, treat as "all visible" so we don't revert to default.
|
|
249
|
+
const hadHiddenCols = gridState.value.columnVisibility?.hiddenColIds !== undefined;
|
|
250
|
+
if (partialState.columnVisibility === undefined && hadHiddenCols) {
|
|
251
|
+
partialState = { ...partialState, columnVisibility: { hiddenColIds: [] } };
|
|
252
|
+
}
|
|
253
|
+
// We have to keep initialState synchronized with gridState for gridState recovery after key updating.
|
|
254
|
+
gridOptions.value.initialState = gridState.value = partialState;
|
|
247
255
|
if (!isJsonEqual(event.sources, ["columnSizing"])) {
|
|
248
256
|
event.api.autoSizeColumns(
|
|
249
257
|
event.api
|
|
@@ -282,6 +290,13 @@ function makePartialState(state: GridState): PlDataTableGridStateCore {
|
|
|
282
290
|
};
|
|
283
291
|
}
|
|
284
292
|
|
|
293
|
+
// Normalize columnVisibility for comparison: undefined and { hiddenColIds: [] } are equivalent.
|
|
294
|
+
function stateForReloadCompare(state: PlDataTableGridStateCore): PlDataTableGridStateCore {
|
|
295
|
+
const cv = state.columnVisibility;
|
|
296
|
+
const normalizedCv = !cv || cv.hiddenColIds.length === 0 ? undefined : state.columnVisibility;
|
|
297
|
+
return { ...state, columnVisibility: normalizedCv };
|
|
298
|
+
}
|
|
299
|
+
|
|
285
300
|
// Reload AgGrid when new state arrives from server
|
|
286
301
|
const reloadKey = ref(0);
|
|
287
302
|
watch(
|
|
@@ -289,7 +304,10 @@ watch(
|
|
|
289
304
|
([gridApi, gridState]) => {
|
|
290
305
|
if (!gridApi || gridApi.isDestroyed()) return;
|
|
291
306
|
const selfState = makePartialState(gridApi.getState());
|
|
292
|
-
if (
|
|
307
|
+
if (
|
|
308
|
+
!isJsonEqual(gridState, {}) &&
|
|
309
|
+
!isJsonEqual(stateForReloadCompare(gridState), stateForReloadCompare(selfState))
|
|
310
|
+
) {
|
|
293
311
|
gridOptions.value.initialState = gridState;
|
|
294
312
|
++reloadKey.value;
|
|
295
313
|
}
|