@platforma-sdk/ui-vue 1.54.10 → 1.54.12

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.
@@ -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.10 build /home/runner/_work/platforma/platforma/sdk/ui-vue
3
+ > @platforma-sdk/ui-vue@1.54.12 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...
@@ -19,8 +19,8 @@ computing gzip size...
19
19
  dist/components/PlAgCellFile/PlAgCellFile.vue2.js  0.11 kB │ gzip: 0.12 kB │ map: 0.10 kB
20
20
  dist/components/PlAgDataTable/PlAgRowCount.vue2.js  0.11 kB │ gzip: 0.12 kB │ map: 0.10 kB
21
21
  dist/components/PlAgCsvExporter/PlAgCsvExporter.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.11 kB
22
- dist/components/PlAgCellProgress/PlAgCellProgress.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.11 kB
23
22
  dist/components/PlAgColumnHeader/PlAgColumnHeader.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.11 kB
23
+ dist/components/PlAgCellProgress/PlAgCellProgress.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.11 kB
24
24
  dist/components/PlAgRowNumHeader.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.11 kB
25
25
  dist/components/PlAgDataTable/PlAgOverlayLoading.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.11 kB
26
26
  dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue2.js  0.12 kB │ gzip: 0.12 kB │ map: 0.11 kB
@@ -150,9 +150,9 @@ computing gzip size...
150
150
  dist/AgGridVue/useAgGridOptions.js  7.48 kB │ gzip: 2.13 kB │ map: 16.27 kB
151
151
  dist/components/PlAdvancedFilter/PlAdvancedFilter.vue2.js  8.35 kB │ gzip: 2.42 kB │ map: 16.93 kB
152
152
  dist/components/PlAdvancedFilter/FilterEditor.vue2.js 12.83 kB │ gzip: 3.28 kB │ map: 25.49 kB
153
- dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js 14.97 kB │ gzip: 4.35 kB │ map: 33.82 kB
153
+ dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js 15.37 kB │ gzip: 4.44 kB │ map: 35.29 kB
154
154
  dist/index.js 99.79 kB │ gzip: 64.33 kB │ map: 0.13 kB
155
- [vite:dts] Declaration files built in 7728ms.
155
+ [vite:dts] Declaration files built in 5551ms.
156
156
 
157
- ✓ built in 9.21s
157
+ ✓ built in 6.96s
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.10 formatter:check /home/runner/_work/platforma/platforma/sdk/ui-vue
3
+ > @platforma-sdk/ui-vue@1.54.12 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 2277ms on 120 files using 8 threads.
11
+ Finished in 1327ms 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.10 linter:check /home/runner/_work/platforma/platforma/sdk/ui-vue
3
+ > @platforma-sdk/ui-vue@1.54.12 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 25ms on 103 files with 98 rules using 8 threads.
9
+ Finished in 27ms 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.10 types:check /home/runner/_work/platforma/platforma/sdk/ui-vue
3
+ > @platforma-sdk/ui-vue@1.54.12 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,18 @@
1
1
  # @platforma-sdk/ui-vue
2
2
 
3
+ ## 1.54.12
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [d2e1b6b]
8
+ - @milaboratories/uikit@2.10.24
9
+
10
+ ## 1.54.11
11
+
12
+ ### Patch Changes
13
+
14
+ - 9c33ff6: table hidden columns fix
15
+
3
16
  ## 1.54.10
4
17
 
5
18
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"PlAgDataTableV2.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlAgDataTable/PlAgDataTableV2.vue"],"names":[],"mappings":"AAinBA,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;AAkdF,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
+ {"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 re, mergeModels as L, useModel as J, toRefs as ie, ref as K, computed as U, shallowRef as q, watch as D, effectScope as ue, watchEffect as de, createElementBlock as ce, openBlock as O, normalizeClass as H, createBlock as T, createCommentVNode as M, createVNode as me, unref as b, isRef as Q, createSlots as fe, withCtx as W, renderSlot as j } from "vue";
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 ve } from "../../lib/util/helpers/dist/functions.js";
4
- import { parseJson as X, getAxisId as Y, matchAxisId as Z, canonicalizeJson as _, createPlSelectionModel as $, getRawPlatformaInstance as pe, isAbortError as Se } from "@platforma-sdk/model";
5
- import { AgGridVue as ye } from "ag-grid-vue3";
6
- import { AgGridTheme as ge } from "../../aggrid.js";
7
- import Ce from "../PlAgCsvExporter/PlAgCsvExporter.vue.js";
8
- import he from "../PlAgGridColumnManager/PlAgGridColumnManager.vue.js";
9
- import we from "../PlTableFilters/PlTableFiltersV2.vue.js";
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 Re from "./PlAgOverlayLoading.vue.js";
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 be, ensureNodeVisible as Ie } from "./sources/focus-row.js";
16
- import { PlAgDataTableRowNumberColId as ee, autoSizeRowNumberColumn as Pe } from "./sources/row-number.js";
17
- import { calculateGridOptions as Te } from "./sources/table-source-v2.js";
18
- import { useTableState as ke } from "./sources/table-state-v2.js";
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 Ye = /* @__PURE__ */ re({
20
+ const Ze = /* @__PURE__ */ ie({
21
21
  __name: "PlAgDataTableV2",
22
- props: /* @__PURE__ */ L({
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__ */ L(["rowDoubleClicked", "cellButtonClicked", "newDataRendered"], ["update:modelValue", "update:selection"]),
43
- setup(g, { expose: te, emit: le }) {
44
- const oe = J(g, "modelValue"), o = J(g, "selection"), i = g, { settings: I } = ie(i), k = le, B = K([]), { gridState: x, sheetsState: P, filtersState: G } = ke(oe, I), ae = U(() => {
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 = q(null), R = new be(), r = q({
53
+ }), u = H(null), x = new Ie(), r = H({
54
54
  animateRows: !1,
55
55
  suppressColumnMoveAnimation: !0,
56
56
  cellSelection: !o.value,
57
- initialState: x.value,
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(), n = ((t = l == null ? void 0 : l.toggledNodes) == null ? void 0 : t.map((a) => X(a))) ?? [];
71
- d(o.value.selectedKeys, n) || (o.value = { ...o.value, selectedKeys: n });
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: Re,
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
- Pe(t);
116
- const l = (a, c) => {
115
+ Te(t);
116
+ const l = (n, c) => {
117
117
  const s = { ...r.value };
118
- s[a] = c, r.value = s, t.setGridOption(a, c);
119
- }, n = (a) => {
118
+ s[n] = c, r.value = s, t.setGridOption(n, c);
119
+ }, a = (n) => {
120
120
  r.value = {
121
121
  ...r.value,
122
- ...a
123
- }, t.updateGridOptions(a);
122
+ ...n
123
+ }, t.updateGridOptions(n);
124
124
  };
125
125
  u.value = new Proxy(t, {
126
- get(a, c, s) {
126
+ get(n, c, s) {
127
127
  switch (c) {
128
128
  case "setGridOption":
129
129
  return l;
130
130
  case "updateGridOptions":
131
- return n;
131
+ return a;
132
132
  default:
133
- return Reflect.get(a, c, s);
133
+ return Reflect.get(n, c, s);
134
134
  }
135
135
  }
136
136
  });
137
137
  },
138
138
  onStateUpdated: (e) => {
139
- r.value.initialState = x.value = V(e.state), d(e.sources, ["columnSizing"]) || e.api.autoSizeColumns(
140
- e.api.getAllDisplayedColumns().filter((t) => t.getColId() !== ee)
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 = x.value = V(e.api.getState()), u.value = null;
147
+ r.value.initialState = C.value = G(e.api.getState()), u.value = null;
145
148
  }
146
149
  });
147
- function V(e) {
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
- const z = K(0);
155
- D(
156
- () => [u.value, x.value],
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 = V(e.getState());
160
- !d(t, {}) && !d(t, l) && (r.value.initialState = t, ++z.value);
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 ne = U(() => i.cellRendererSelector ?? null);
164
- D(
165
- () => [u.value, ne.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
- ), te({
179
+ ), le({
173
180
  focusRow: async (e) => {
174
- const t = await R.promise;
175
- return t.isDestroyed() ? !1 : Ie(t, (l) => {
176
- var n;
177
- return d((n = l.data) == null ? void 0 : n.axesKey, e);
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 h, y;
182
- const l = await R.promise;
188
+ var w, y;
189
+ const l = await x.promise;
183
190
  if (l.isDestroyed()) return !1;
184
- const n = (h = o.value) == null ? void 0 : h.axesSpec;
185
- if (!n || n.length !== e.length) return !1;
186
- const a = e.map((p) => {
187
- const S = Y(p);
188
- return n.findIndex((w) => Z(w, S));
189
- }), c = new Set(a);
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) => _(a.map((S) => p[S]))
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 = ue(), { resolve: S, promise: w } = Promise.withResolvers();
200
- p.run(() => D(o, S, { once: !0 }));
206
+ const p = de(), { resolve: S, promise: R } = Promise.withResolvers();
207
+ p.run(() => b(o, S, { once: !0 }));
201
208
  try {
202
- await ve(w, 500);
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 se(e) {
219
+ function re(e) {
213
220
  const t = (l) => !("children" in l);
214
- return e ? e.filter(t).filter((l) => l.colId && l.colId !== ee) : [];
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
- B.value = [];
227
+ V.value = [];
221
228
  else {
222
- const l = se(e);
223
- B.value = l.map(
224
- (n) => X(n.colId).labeled
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 F = $();
237
+ const E = F();
231
238
  let v = null;
232
- const C = K(0);
233
- return D(
239
+ const h = K(0);
240
+ return b(
234
241
  () => [u.value, I.value],
235
242
  ([e, t]) => {
236
- var l, n;
243
+ var l, a;
237
244
  if (!(!e || e.isDestroyed()) && !d(t, v)) {
238
- ++C.value;
245
+ ++h.value;
239
246
  try {
240
- if (e.hideOverlay(), R.reset(), t.sourceId === null) {
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, F) && (o.value = $()), e.setServerSideSelectionState({
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, F) && (o.value = $()), e.setServerSideSelectionState({
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 a = ((l = t.model) == null ? void 0 : l.sourceId) && t.model.sourceId !== t.sourceId;
266
- if (!t.model || a) {
267
- const s = e.getServerSideGroupLevelState(), m = !a && s.length > 0 ? s[0].rowCount : 1;
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: (h) => {
271
- h.success({ rowData: [], rowCount: m });
277
+ getRows: (w) => {
278
+ w.success({ rowData: [], rowCount: m });
272
279
  }
273
280
  }
274
281
  });
275
282
  }
276
- const c = C.value;
277
- Te({
278
- generation: C,
279
- pfDriver: pe().pFrameDriver,
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: R,
283
- hiddenColIds: (n = x.value.columnVisibility) == null ? void 0 : n.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 !== C.value) return;
291
- const { axesSpec: m, ...h } = s;
297
+ if (e.isDestroyed() || c !== h.value) return;
298
+ const { axesSpec: m, ...w } = s;
292
299
  if (e.updateGridOptions({
293
- ...h
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(Y).map((f) => m.findIndex((N) => Z(N, f))), w = new Set(S);
305
- if (w.has(-1) || w.size !== m.length) {
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 E = p.map(
319
+ const A = p.map(
313
320
  (f) => S.map((N) => f[N])
314
- ), A = { axesSpec: m, selectedKeys: E };
315
- return d(o.value, A) || (o.value = A), e.setServerSideSelectionState({
321
+ ), L = { axesSpec: m, selectedKeys: A };
322
+ return d(o.value, L) || (o.value = L), e.setServerSideSelectionState({
316
323
  selectAll: !1,
317
- toggledNodes: E.map((f) => _(f))
324
+ toggledNodes: A.map((f) => ee(f))
318
325
  });
319
326
  }
320
327
  }
321
328
  }).catch((s) => {
322
- e.isDestroyed() || c !== C.value || Se(s) || console.trace(s);
329
+ e.isDestroyed() || c !== h.value || ye(s) || console.trace(s);
323
330
  }).finally(() => {
324
- e.isDestroyed() || c !== C.value || e.updateGridOptions({
331
+ e.isDestroyed() || c !== h.value || e.updateGridOptions({
325
332
  loading: !1
326
333
  });
327
- }), R.promise.then(() => k("newDataRendered"));
328
- } catch (a) {
329
- console.trace(a);
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
- ), D(
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: n, noRowsText: a }) => {
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: n
356
+ notReadyText: a
350
357
  },
351
358
  noRowsOverlayComponentParams: {
352
359
  ...r.value.noRowsOverlayComponentParams,
353
- text: a
360
+ text: n
354
361
  }
355
362
  });
356
363
  }
357
- ), de(() => {
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) => (O(), ce("div", {
365
- class: H(e.$style.container)
371
+ }), (e, t) => (D(), me("div", {
372
+ class: Q(e.$style.container)
366
373
  }, [
367
- u.value && !g.disableColumnsPanel ? (O(), T(b(he), {
374
+ u.value && !g.disableColumnsPanel ? (D(), T(O(we), {
368
375
  key: 0,
369
376
  api: u.value
370
- }, null, 8, ["api"])) : M("", !0),
371
- g.disableFiltersPanel ? M("", !0) : (O(), T(we, {
377
+ }, null, 8, ["api"])) : z("", !0),
378
+ g.disableFiltersPanel ? z("", !0) : (D(), T(Re, {
372
379
  key: 1,
373
- modelValue: b(G),
374
- "onUpdate:modelValue": t[0] || (t[0] = (l) => Q(G) ? G.value = l : null),
375
- columns: B.value
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 ? (O(), T(Ce, {
384
+ u.value && g.showExportButton ? (D(), T(he, {
378
385
  key: 2,
379
386
  api: u.value
380
- }, null, 8, ["api"])) : M("", !0),
381
- me(xe, {
382
- modelValue: b(P),
383
- "onUpdate:modelValue": t[1] || (t[1] = (l) => Q(P) ? P.value = l : null),
384
- settings: ae.value
385
- }, fe({ _: 2 }, [
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: W(() => [
389
- j(e.$slots, "before-sheets")
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: W(() => [
396
- j(e.$slots, "after-sheets")
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
- (O(), T(b(ye), {
402
- key: z.value,
403
- theme: b(ge),
404
- class: H(e.$style.grid),
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
- Ye as default
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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@platforma-sdk/ui-vue",
3
- "version": "1.54.10",
3
+ "version": "1.54.12",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "exports": {
@@ -27,7 +27,7 @@
27
27
  "vue": "^3.5.24",
28
28
  "zod": "~3.23.8",
29
29
  "@platforma-sdk/model": "1.54.10",
30
- "@milaboratories/uikit": "2.10.23"
30
+ "@milaboratories/uikit": "2.10.24"
31
31
  },
32
32
  "devDependencies": {
33
33
  "@faker-js/faker": "^9.2.0",
@@ -43,9 +43,9 @@
43
43
  "vite": "^6.4.1",
44
44
  "vitest": "^4.0.16",
45
45
  "@milaboratories/helpers": "1.13.4",
46
- "@milaboratories/ts-builder": "1.2.10",
46
+ "@milaboratories/ts-configs": "1.2.1",
47
47
  "@milaboratories/build-configs": "1.4.4",
48
- "@milaboratories/ts-configs": "1.2.1"
48
+ "@milaboratories/ts-builder": "1.2.10"
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
- gridOptions.value.initialState = gridState.value = makePartialState(event.state);
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 (!isJsonEqual(gridState, {}) && !isJsonEqual(gridState, selfState)) {
307
+ if (
308
+ !isJsonEqual(gridState, {}) &&
309
+ !isJsonEqual(stateForReloadCompare(gridState), stateForReloadCompare(selfState))
310
+ ) {
293
311
  gridOptions.value.initialState = gridState;
294
312
  ++reloadKey.value;
295
313
  }