@platforma-sdk/ui-vue 1.41.9 → 1.41.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 +7 -7
- package/.turbo/turbo-type-check.log +1 -1
- package/CHANGELOG.md +6 -0
- package/dist/components/PlAgDataTable/PlAgDataTableV2.vue.d.ts +2 -7
- package/dist/components/PlAgDataTable/PlAgDataTableV2.vue.d.ts.map +1 -1
- package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js +159 -181
- package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js.map +1 -1
- package/dist/components/PlAgDataTable/types.d.ts +0 -14
- package/dist/components/PlAgDataTable/types.d.ts.map +1 -1
- package/dist/components/PlAgDataTable/types.js +9 -9
- package/dist/components/PlAgDataTable/types.js.map +1 -1
- package/package.json +4 -4
- package/src/components/PlAgDataTable/PlAgDataTableV2.vue +1 -38
- package/src/components/PlAgDataTable/types.ts +2 -16
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.41.
|
|
3
|
+
> @platforma-sdk/ui-vue@1.41.11 build /home/runner/_work/platforma/platforma/sdk/ui-vue
|
|
4
4
|
> vite build
|
|
5
5
|
|
|
6
6
|
[36mvite v6.3.5 [32mbuilding for production...[36m[39m
|
|
@@ -10,7 +10,7 @@ rendering chunks...
|
|
|
10
10
|
|
|
11
11
|
[vite:dts] Start generate declaration files...
|
|
12
12
|
computing gzip size...
|
|
13
|
-
[vite:dts] Declaration files built in
|
|
13
|
+
[vite:dts] Declaration files built in 5047ms.
|
|
14
14
|
|
|
15
15
|
[2mdist/[22m[36m_virtual/re.js [39m[1m[2m 0.08 kB[22m[1m[22m[2m │ gzip: 0.10 kB[22m[2m │ map: 0.09 kB[22m
|
|
16
16
|
[2mdist/[22m[36mlib/ui/uikit/dist/node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/constant.js [39m[1m[2m 0.09 kB[22m[1m[22m[2m │ gzip: 0.10 kB[22m[2m │ map: 0.32 kB[22m
|
|
@@ -48,8 +48,8 @@ computing gzip size...
|
|
|
48
48
|
[2mdist/[22m[36mcomponents/PlTableFilters/PlTableAddFilterV2.vue2.js [39m[1m[2m 0.12 kB[22m[1m[22m[2m │ gzip: 0.12 kB[22m[2m │ map: 0.11 kB[22m
|
|
49
49
|
[2mdist/[22m[36mplugins/Monetization/MonetizationSidebar.vue2.js [39m[1m[2m 0.13 kB[22m[1m[22m[2m │ gzip: 0.12 kB[22m[2m │ map: 0.11 kB[22m
|
|
50
50
|
[2mdist/[22m[36mcomponents/PlTableFilters/PlTableFilterEntryV2.vue2.js [39m[1m[2m 0.13 kB[22m[1m[22m[2m │ gzip: 0.12 kB[22m[2m │ map: 0.11 kB[22m
|
|
51
|
-
[2mdist/[22m[36mcomponents/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue2.js [39m[1m[2m 0.13 kB[22m[1m[22m[2m │ gzip: 0.12 kB[22m[2m │ map: 0.11 kB[22m
|
|
52
51
|
[2mdist/[22m[36mcomponents/PlAgGridColumnManager/PlAgGridColumnManager.vue2.js [39m[1m[2m 0.13 kB[22m[1m[22m[2m │ gzip: 0.12 kB[22m[2m │ map: 0.11 kB[22m
|
|
52
|
+
[2mdist/[22m[36mcomponents/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue2.js [39m[1m[2m 0.13 kB[22m[1m[22m[2m │ gzip: 0.12 kB[22m[2m │ map: 0.11 kB[22m
|
|
53
53
|
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlRadio/keys.js [39m[1m[2m 0.13 kB[22m[1m[22m[2m │ gzip: 0.13 kB[22m[2m │ map: 0.46 kB[22m
|
|
54
54
|
[2mdist/[22m[36mlib/ui/uikit/dist/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/size.js [39m[1m[2m 0.13 kB[22m[1m[22m[2m │ gzip: 0.13 kB[22m[2m │ map: 0.49 kB[22m
|
|
55
55
|
[2mdist/[22m[36mcomponents/ValueOrErrorsComponent.vue2.js [39m[1m[2m 0.13 kB[22m[1m[22m[2m │ gzip: 0.12 kB[22m[2m │ map: 0.11 kB[22m
|
|
@@ -244,8 +244,8 @@ computing gzip size...
|
|
|
244
244
|
[2mdist/[22m[36mlib/ui/uikit/dist/assets/icons/icon-assets-min/16_arrow-right.svg.js [39m[1m[2m 0.31 kB[22m[1m[22m[2m │ gzip: 0.25 kB[22m[2m │ map: 0.52 kB[22m
|
|
245
245
|
[2mdist/[22m[36m_virtual/stringify.js [39m[1m[2m 0.31 kB[22m[1m[22m[2m │ gzip: 0.22 kB[22m[2m │ map: 0.10 kB[22m
|
|
246
246
|
[2mdist/[22m[36mcomponents/PlAnnotations/components/PlAnnotationsModal.vue.js [39m[1m[2m 0.31 kB[22m[1m[22m[2m │ gzip: 0.22 kB[22m[2m │ map: 0.11 kB[22m
|
|
247
|
-
[2mdist/[22m[36mcomponents/PlAnnotations/components/AnnotationsSidebar.vue.js [39m[1m[2m 0.31 kB[22m[1m[22m[2m │ gzip: 0.22 kB[22m[2m │ map: 0.11 kB[22m
|
|
248
247
|
[2mdist/[22m[36mcomponents/PlAgDataTable/PlAgDataTableSheets.vue.js [39m[1m[2m 0.31 kB[22m[1m[22m[2m │ gzip: 0.22 kB[22m[2m │ map: 0.11 kB[22m
|
|
248
|
+
[2mdist/[22m[36mcomponents/PlAnnotations/components/AnnotationsSidebar.vue.js [39m[1m[2m 0.31 kB[22m[1m[22m[2m │ gzip: 0.22 kB[22m[2m │ map: 0.11 kB[22m
|
|
249
249
|
[2mdist/[22m[36mnode_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/valid.js [39m[1m[2m 0.31 kB[22m[1m[22m[2m │ gzip: 0.22 kB[22m[2m │ map: 0.76 kB[22m
|
|
250
250
|
[2mdist/[22m[36mlib/ui/uikit/dist/assets/icons/icon-assets-min/24_chevron-first.svg.js [39m[1m[2m 0.31 kB[22m[1m[22m[2m │ gzip: 0.25 kB[22m[2m │ map: 0.53 kB[22m
|
|
251
251
|
[2mdist/[22m[36mlib/ui/uikit/dist/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/namespaces.js [39m[1m[2m 0.31 kB[22m[1m[22m[2m │ gzip: 0.19 kB[22m[2m │ map: 0.65 kB[22m
|
|
@@ -708,7 +708,7 @@ computing gzip size...
|
|
|
708
708
|
[2mdist/[22m[36mcomponents/PlAgDataTable/PlAgOverlayLoading.vue.js [39m[1m[2m 1.36 kB[22m[1m[22m[2m │ gzip: 0.68 kB[22m[2m │ map: 1.40 kB[22m
|
|
709
709
|
[2mdist/[22m[36mcreateModel.js [39m[1m[2m 1.38 kB[22m[1m[22m[2m │ gzip: 0.65 kB[22m[2m │ map: 3.91 kB[22m
|
|
710
710
|
[2mdist/[22m[36mlib/ui/uikit/dist/composition/useScroll.js [39m[1m[2m 1.40 kB[22m[1m[22m[2m │ gzip: 0.57 kB[22m[2m │ map: 3.78 kB[22m
|
|
711
|
-
[2mdist/[22m[36mcomponents/PlAgDataTable/types.js [39m[1m[2m 1.41 kB[22m[1m[22m[2m │ gzip: 0.57 kB[22m[2m │ map: 9.
|
|
711
|
+
[2mdist/[22m[36mcomponents/PlAgDataTable/types.js [39m[1m[2m 1.41 kB[22m[1m[22m[2m │ gzip: 0.57 kB[22m[2m │ map: 9.45 kB[22m
|
|
712
712
|
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlRadio/PlRadioGroup.vue2.js [39m[1m[2m 1.41 kB[22m[1m[22m[2m │ gzip: 0.72 kB[22m[2m │ map: 2.55 kB[22m
|
|
713
713
|
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlErrorAlert/PlErrorAlert.vue3.js [39m[1m[2m 1.42 kB[22m[1m[22m[2m │ gzip: 0.73 kB[22m[2m │ map: 0.12 kB[22m
|
|
714
714
|
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlChartStackedBar/StackedRow.vue3.js [39m[1m[2m 1.43 kB[22m[1m[22m[2m │ gzip: 0.69 kB[22m[2m │ map: 0.12 kB[22m
|
|
@@ -905,7 +905,7 @@ computing gzip size...
|
|
|
905
905
|
[2mdist/[22m[36mlib/ui/uikit/dist/sdk/model/dist/index.js [39m[1m[2m 49.27 kB[22m[1m[22m[2m │ gzip: 12.68 kB[22m[2m │ map: 172.74 kB[22m
|
|
906
906
|
[2mdist/[22m[36mAgGridVue/useAgGridOptions.js [39m[1m[2m 49.40 kB[22m[1m[22m[2m │ gzip: 30.18 kB[22m[2m │ map: 16.35 kB[22m
|
|
907
907
|
[2mdist/[22m[36mlib/ui/uikit/dist/node_modules/.pnpm/sortablejs@1.15.6/node_modules/sortablejs/modular/sortable.esm.js [39m[1m[2m 50.21 kB[22m[1m[22m[2m │ gzip: 14.79 kB[22m[2m │ map: 181.68 kB[22m
|
|
908
|
-
[2mdist/[22m[36mcomponents/PlAgDataTable/PlAgDataTableV2.vue2.js [39m[1m[2m
|
|
908
|
+
[2mdist/[22m[36mcomponents/PlAgDataTable/PlAgDataTableV2.vue2.js [39m[1m[2m 50.41 kB[22m[1m[22m[2m │ gzip: 31.04 kB[22m[2m │ map: 33.71 kB[22m
|
|
909
909
|
[2mdist/[22m[36mlib.js [39m[1m[2m 55.40 kB[22m[1m[22m[2m │ gzip: 31.38 kB[22m[2m │ map: 0.23 kB[22m
|
|
910
910
|
[2mdist/[22m[36msdk/model/dist/index.js [39m[1m[2m 60.36 kB[22m[1m[22m[2m │ gzip: 14.37 kB[22m[2m │ map: 241.42 kB[22m
|
|
911
911
|
[2mdist/[22m[36mlib/ui/uikit/dist/node_modules/.pnpm/zod@3.23.8/node_modules/zod/lib/index.js [39m[1m[2m 83.80 kB[22m[1m[22m[2m │ gzip: 17.23 kB[22m[2m │ map: 240.83 kB[22m
|
|
@@ -913,4 +913,4 @@ computing gzip size...
|
|
|
913
913
|
[2mdist/[22m[36mlib/ui/uikit/dist/index.js [39m[1m[2m497.97 kB[22m[1m[22m[2m │ gzip: 191.79 kB[22m[2m │ map: 0.19 kB[22m
|
|
914
914
|
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlSlideModal/PlPureSlideModal.vue.js [39m[1m[33m601.20 kB[39m[22m[2m │ gzip: 204.75 kB[22m[2m │ map: 0.22 kB[22m
|
|
915
915
|
[2mdist/[22m[36mlib/ui/uikit/dist/components/DataTable/TableComponent.vue.js [39m[1m[33m603.09 kB[39m[22m[2m │ gzip: 205.61 kB[22m[2m │ map: 0.28 kB[22m
|
|
916
|
-
[32m✓ built in
|
|
916
|
+
[32m✓ built in 9.10s[39m
|
|
@@ -1,5 +1,5 @@
|
|
|
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.41.
|
|
3
|
+
> @platforma-sdk/ui-vue@1.41.11 type-check /home/runner/_work/platforma/platforma/sdk/ui-vue
|
|
4
4
|
> vue-tsc --noEmit --project ./tsconfig.json
|
|
5
5
|
|
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { AxisId, PlDataTableStateV2, PlSelectionModel,
|
|
1
|
+
import { AxisId, PlDataTableStateV2, PlSelectionModel, PTableKey } from '@platforma-sdk/model';
|
|
2
2
|
import { CellRendererSelectorFunc } from 'ag-grid-enterprise';
|
|
3
|
-
import { PlAgDataTableV2Row, PlDataTableSettingsV2
|
|
3
|
+
import { PlAgDataTableV2Row, PlDataTableSettingsV2 } from './types';
|
|
4
4
|
type __VLS_Props = {
|
|
5
5
|
/** Required component settings */
|
|
6
6
|
settings: Readonly<PlDataTableSettingsV2>;
|
|
@@ -69,11 +69,6 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_PublicProps,
|
|
|
69
69
|
axesSpec: AxisId[];
|
|
70
70
|
selectedKeys: PTableKey[];
|
|
71
71
|
}) => Promise<boolean>;
|
|
72
|
-
getRowCount: () => Promise<undefined | number>;
|
|
73
|
-
getRow: (index: number | PlTableRowId) => Promise<undefined | {
|
|
74
|
-
spec: PTableColumnSpec[];
|
|
75
|
-
data: PTableValue[];
|
|
76
|
-
}>;
|
|
77
72
|
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
78
73
|
"update:modelValue": (value: PlDataTableStateV2) => any;
|
|
79
74
|
rowDoubleClicked: (key?: PTableKey | undefined) => any;
|
|
@@ -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":"AA2oBA,OAAO,KAAK,EACV,MAAM,EAEN,kBAAkB,EAClB,gBAAgB,EAGhB,SAAS,EAEV,MAAM,sBAAsB,CAAC;AAS9B,OAAO,KAAK,EACV,wBAAwB,EAQzB,MAAM,oBAAoB,CAAC;AAiB5B,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,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;AAseF,KAAK,iBAAiB,GAAG;IACzB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,WAAW,CAAC,EAAE,gBAAgB,CAAC;CAC9B,GAAG,WAAW,CAAC;AAMhB,iBAAS,cAAc;WAuGT,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,28 +1,27 @@
|
|
|
1
1
|
(function(){"use strict";try{if(typeof document<"u"){var E=document.createElement("style");E.appendChild(document.createTextNode(".grid-overlay-container{height:calc(100% - 1px);margin-top:1px;width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;background-color:var(--bg-base-light)}.grid-icon-sad-cat{background-image:url(data:image/png;base64,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);background-repeat:no-repeat}.grid-overlay-container>div{height:300px;width:300px;background-size:contain;background-position:center}.grid-overlay-container>span{color:var(--txt-mask)}")),document.head.appendChild(E)}}catch(h){console.error("vite-plugin-css-injected-by-js",h)}})();
|
|
2
|
-
import { defineComponent as ue, mergeModels as
|
|
3
|
-
import { isJsonEqual as
|
|
4
|
-
import { createPlSelectionModel as z, getRawPlatformaInstance as
|
|
2
|
+
import { defineComponent as ue, mergeModels as q, useModel as A, toRefs as de, computed as F, ref as M, shallowRef as _, watch as R, effectScope as ce, createElementBlock as me, openBlock as I, normalizeClass as H, createBlock as T, createCommentVNode as $, createVNode as fe, unref as b, isRef as Q, withCtx as W, renderSlot as Y } from "vue";
|
|
3
|
+
import { isJsonEqual as i, promiseTimeout as ve } from "../../lib/util/helpers/dist/index.js";
|
|
4
|
+
import { createPlSelectionModel as z, getRawPlatformaInstance as pe } from "../../sdk/model/dist/index.js";
|
|
5
5
|
import { AgGridVue as Se } from "ag-grid-vue3";
|
|
6
6
|
import { AgGridTheme as ye } from "../../aggrid.js";
|
|
7
7
|
import ge from "../PlAgCsvExporter/PlAgCsvExporter.vue.js";
|
|
8
8
|
import Ce from "../PlAgGridColumnManager/PlAgGridColumnManager.vue.js";
|
|
9
|
-
import
|
|
10
|
-
import
|
|
9
|
+
import he from "../PlTableFilters/PlTableFiltersV2.vue.js";
|
|
10
|
+
import we from "./PlAgDataTableSheets.vue.js";
|
|
11
11
|
import Re from "./PlAgOverlayLoading.vue.js";
|
|
12
12
|
import De from "./PlAgOverlayNoRows.vue.js";
|
|
13
13
|
|
|
14
|
-
import
|
|
15
|
-
import { DeferredCircular as
|
|
16
|
-
import { PlAgDataTableRowNumberColId as
|
|
14
|
+
import Oe from "./PlAgRowCount.vue.js";
|
|
15
|
+
import { DeferredCircular as xe, ensureNodeVisible as Ie } from "./sources/focus-row.js";
|
|
16
|
+
import { PlAgDataTableRowNumberColId as j, autoSizeRowNumberColumn as be } from "./sources/row-number.js";
|
|
17
17
|
import { calculateGridOptions as Pe } from "./sources/table-source-v2.js";
|
|
18
|
-
import { useTableState as
|
|
18
|
+
import { useTableState as ke } from "./sources/table-state-v2.js";
|
|
19
19
|
import "../../lib/ui/uikit/dist/index.js";
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
|
|
23
|
-
const Ze = /* @__PURE__ */ ue({
|
|
20
|
+
import { watchCached as Te } from "../../lib/ui/uikit/dist/composition/watchCached.js";
|
|
21
|
+
import { parseJson as X, getAxisId as Z, matchAxisId as ee, canonicalizeJson as te } from "../../lib/model/common/dist/index.js";
|
|
22
|
+
const je = /* @__PURE__ */ ue({
|
|
24
23
|
__name: "PlAgDataTableV2",
|
|
25
|
-
props: /* @__PURE__ */
|
|
24
|
+
props: /* @__PURE__ */ q({
|
|
26
25
|
settings: {},
|
|
27
26
|
disableColumnsPanel: { type: Boolean },
|
|
28
27
|
disableFiltersPanel: { type: Boolean },
|
|
@@ -41,10 +40,10 @@ const Ze = /* @__PURE__ */ ue({
|
|
|
41
40
|
selection: {},
|
|
42
41
|
selectionModifiers: {}
|
|
43
42
|
}),
|
|
44
|
-
emits: /* @__PURE__ */
|
|
45
|
-
setup(B, { expose: le, emit:
|
|
46
|
-
const
|
|
47
|
-
const e = { ...
|
|
43
|
+
emits: /* @__PURE__ */ q(["rowDoubleClicked", "cellButtonClicked", "newDataRendered"], ["update:modelValue", "update:selection"]),
|
|
44
|
+
setup(B, { expose: le, emit: oe }) {
|
|
45
|
+
const ae = A(B, "modelValue"), o = A(B, "selection"), d = B, { settings: D } = de(d), G = oe, { gridState: O, sheetsState: P, filtersState: k } = ke(ae, D), se = F(() => {
|
|
46
|
+
const e = { ...D.value };
|
|
48
47
|
return e.sourceId !== null ? {
|
|
49
48
|
sheets: e.sheets ?? [],
|
|
50
49
|
cachedState: [...P.value]
|
|
@@ -52,24 +51,24 @@ const Ze = /* @__PURE__ */ ue({
|
|
|
52
51
|
sheets: [],
|
|
53
52
|
cachedState: []
|
|
54
53
|
};
|
|
55
|
-
}), V = M([]),
|
|
56
|
-
const e = { ...
|
|
54
|
+
}), V = M([]), ne = F(() => {
|
|
55
|
+
const e = { ...D.value }, t = V.value;
|
|
57
56
|
return e.sourceId !== null && t.length > 0 ? {
|
|
58
57
|
columns: t,
|
|
59
58
|
config: (a) => e.filtersConfig({ sourceId: e.sourceId, column: a }),
|
|
60
|
-
cachedState: [...
|
|
59
|
+
cachedState: [...k.value]
|
|
61
60
|
} : {
|
|
62
61
|
columns: [],
|
|
63
62
|
config: () => ({}),
|
|
64
63
|
cachedState: []
|
|
65
64
|
};
|
|
66
|
-
}),
|
|
65
|
+
}), c = _(null), x = new xe(), r = _({
|
|
67
66
|
animateRows: !1,
|
|
68
67
|
suppressColumnMoveAnimation: !0,
|
|
69
|
-
cellSelection: !
|
|
70
|
-
initialState:
|
|
68
|
+
cellSelection: !o.value,
|
|
69
|
+
initialState: O.value,
|
|
71
70
|
autoSizeStrategy: { type: "fitCellContents" },
|
|
72
|
-
rowSelection:
|
|
71
|
+
rowSelection: o.value ? {
|
|
73
72
|
mode: "multiRow",
|
|
74
73
|
selectAll: "all",
|
|
75
74
|
groupSelects: "self",
|
|
@@ -79,9 +78,9 @@ const Ze = /* @__PURE__ */ ue({
|
|
|
79
78
|
} : void 0,
|
|
80
79
|
onSelectionChanged: (e) => {
|
|
81
80
|
var t;
|
|
82
|
-
if (
|
|
83
|
-
const
|
|
84
|
-
|
|
81
|
+
if (o.value) {
|
|
82
|
+
const l = e.api.getServerSideSelectionState(), a = ((t = l == null ? void 0 : l.toggledNodes) == null ? void 0 : t.map((s) => X(s))) ?? [];
|
|
83
|
+
i(o.value.selectedKeys, a) || (o.value = { ...o.value, selectedKeys: a });
|
|
85
84
|
}
|
|
86
85
|
},
|
|
87
86
|
onRowDoubleClicked: (e) => {
|
|
@@ -90,7 +89,7 @@ const Ze = /* @__PURE__ */ ue({
|
|
|
90
89
|
defaultColDef: {
|
|
91
90
|
suppressHeaderMenuButton: !0,
|
|
92
91
|
sortingOrder: ["desc", "asc", null],
|
|
93
|
-
cellRendererSelector:
|
|
92
|
+
cellRendererSelector: d.cellRendererSelector
|
|
94
93
|
},
|
|
95
94
|
maintainColumnOrder: !0,
|
|
96
95
|
localeText: {
|
|
@@ -108,13 +107,13 @@ const Ze = /* @__PURE__ */ ue({
|
|
|
108
107
|
loading: !0,
|
|
109
108
|
loadingOverlayComponentParams: {
|
|
110
109
|
notReady: !0,
|
|
111
|
-
loadingText:
|
|
112
|
-
notReadyText:
|
|
110
|
+
loadingText: d.loadingText,
|
|
111
|
+
notReadyText: d.notReadyText
|
|
113
112
|
},
|
|
114
113
|
loadingOverlayComponent: Re,
|
|
115
114
|
noRowsOverlayComponent: De,
|
|
116
115
|
noRowsOverlayComponentParams: {
|
|
117
|
-
text:
|
|
116
|
+
text: d.noRowsText
|
|
118
117
|
},
|
|
119
118
|
defaultCsvExportParams: {
|
|
120
119
|
allColumns: !0,
|
|
@@ -123,26 +122,26 @@ const Ze = /* @__PURE__ */ ue({
|
|
|
123
122
|
},
|
|
124
123
|
statusBar: {
|
|
125
124
|
statusPanels: [
|
|
126
|
-
{ statusPanel:
|
|
125
|
+
{ statusPanel: Oe, align: "left" }
|
|
127
126
|
]
|
|
128
127
|
},
|
|
129
128
|
onGridReady: (e) => {
|
|
130
129
|
const t = e.api;
|
|
131
|
-
|
|
132
|
-
const
|
|
133
|
-
const n = { ...
|
|
134
|
-
n[s] = u,
|
|
130
|
+
be(t);
|
|
131
|
+
const l = (s, u) => {
|
|
132
|
+
const n = { ...r.value };
|
|
133
|
+
n[s] = u, r.value = n, t.setGridOption(s, u);
|
|
135
134
|
}, a = (s) => {
|
|
136
|
-
|
|
137
|
-
...
|
|
135
|
+
r.value = {
|
|
136
|
+
...r.value,
|
|
138
137
|
...s
|
|
139
138
|
}, t.updateGridOptions(s);
|
|
140
139
|
};
|
|
141
|
-
|
|
140
|
+
c.value = new Proxy(t, {
|
|
142
141
|
get(s, u, n) {
|
|
143
142
|
switch (u) {
|
|
144
143
|
case "setGridOption":
|
|
145
|
-
return
|
|
144
|
+
return l;
|
|
146
145
|
case "updateGridOptions":
|
|
147
146
|
return a;
|
|
148
147
|
default:
|
|
@@ -152,18 +151,18 @@ const Ze = /* @__PURE__ */ ue({
|
|
|
152
151
|
});
|
|
153
152
|
},
|
|
154
153
|
onStateUpdated: (e) => {
|
|
155
|
-
|
|
154
|
+
r.value.initialState = O.value = N(
|
|
156
155
|
e.state
|
|
157
156
|
), e.api.autoSizeColumns(
|
|
158
157
|
e.api.getAllDisplayedColumns().filter(
|
|
159
|
-
(t) => t.getColId() !==
|
|
158
|
+
(t) => t.getColId() !== j
|
|
160
159
|
)
|
|
161
160
|
);
|
|
162
161
|
},
|
|
163
162
|
onGridPreDestroyed: (e) => {
|
|
164
|
-
|
|
163
|
+
r.value.initialState = O.value = N(
|
|
165
164
|
e.api.getState()
|
|
166
|
-
),
|
|
165
|
+
), c.value = null;
|
|
167
166
|
}
|
|
168
167
|
});
|
|
169
168
|
function N(e) {
|
|
@@ -173,130 +172,109 @@ const Ze = /* @__PURE__ */ ue({
|
|
|
173
172
|
columnVisibility: e.columnVisibility
|
|
174
173
|
};
|
|
175
174
|
}
|
|
176
|
-
const
|
|
177
|
-
|
|
178
|
-
() => [
|
|
175
|
+
const E = M(0);
|
|
176
|
+
R(
|
|
177
|
+
() => [c.value, O.value],
|
|
179
178
|
([e, t]) => {
|
|
180
179
|
if (!e || e.isDestroyed()) return;
|
|
181
|
-
const
|
|
182
|
-
!
|
|
180
|
+
const l = N(e.getState());
|
|
181
|
+
!i(t, {}) && !i(t, l) && (r.value.initialState = t, ++E.value);
|
|
183
182
|
}
|
|
184
183
|
);
|
|
185
|
-
let
|
|
186
|
-
|
|
187
|
-
() => [
|
|
184
|
+
let y = null;
|
|
185
|
+
R(
|
|
186
|
+
() => [c.value, r.value],
|
|
188
187
|
([e, t]) => {
|
|
189
|
-
!e || e.isDestroyed() || (t.loading && (
|
|
188
|
+
!e || e.isDestroyed() || (t.loading && (y != null && y.loading) && !i(
|
|
190
189
|
t.loadingOverlayComponentParams,
|
|
191
|
-
|
|
192
|
-
) && (e.setGridOption("loading", !1), e.setGridOption("loading", !0)),
|
|
190
|
+
y == null ? void 0 : y.loadingOverlayComponentParams
|
|
191
|
+
) && (e.setGridOption("loading", !1), e.setGridOption("loading", !0)), y = t);
|
|
193
192
|
},
|
|
194
193
|
{ immediate: !0 }
|
|
195
194
|
);
|
|
196
|
-
const
|
|
197
|
-
|
|
198
|
-
() => [
|
|
195
|
+
const re = F(() => d.cellRendererSelector ?? null);
|
|
196
|
+
R(
|
|
197
|
+
() => [c.value, re.value],
|
|
199
198
|
([e, t]) => {
|
|
200
199
|
!e || e.isDestroyed() || e.setGridOption("defaultColDef", {
|
|
201
|
-
...
|
|
200
|
+
...r.value.defaultColDef,
|
|
202
201
|
cellRendererSelector: t ?? void 0
|
|
203
202
|
});
|
|
204
203
|
}
|
|
205
204
|
), le({
|
|
206
205
|
focusRow: async (e) => {
|
|
207
|
-
const t = await
|
|
208
|
-
return t.isDestroyed() ? !1 :
|
|
206
|
+
const t = await x.promise;
|
|
207
|
+
return t.isDestroyed() ? !1 : Ie(t, (l) => {
|
|
209
208
|
var a;
|
|
210
|
-
return
|
|
209
|
+
return i((a = l.data) == null ? void 0 : a.axesKey, e);
|
|
211
210
|
});
|
|
212
211
|
},
|
|
213
212
|
updateSelection: async ({ axesSpec: e, selectedKeys: t }) => {
|
|
214
|
-
var
|
|
215
|
-
const
|
|
216
|
-
if (
|
|
217
|
-
const a = (
|
|
213
|
+
var h, g;
|
|
214
|
+
const l = await x.promise;
|
|
215
|
+
if (l.isDestroyed()) return !1;
|
|
216
|
+
const a = (h = o.value) == null ? void 0 : h.axesSpec;
|
|
218
217
|
if (!a || a.length !== e.length) return !1;
|
|
219
|
-
const s = e.map((
|
|
220
|
-
const
|
|
221
|
-
return a.findIndex((
|
|
218
|
+
const s = e.map((p) => {
|
|
219
|
+
const S = Z(p);
|
|
220
|
+
return a.findIndex((w) => ee(w, S));
|
|
222
221
|
}), u = new Set(s);
|
|
223
222
|
if (u.has(-1) || u.size !== e.length) return !1;
|
|
224
|
-
const n = t.map((
|
|
225
|
-
if (!
|
|
226
|
-
|
|
223
|
+
const n = t.map((p) => te(s.map((S) => p[S]))), m = ((g = l.getServerSideSelectionState()) == null ? void 0 : g.toggledNodes) ?? [];
|
|
224
|
+
if (!i(m, n)) {
|
|
225
|
+
l.setServerSideSelectionState({
|
|
227
226
|
selectAll: !1,
|
|
228
227
|
toggledNodes: n
|
|
229
228
|
});
|
|
230
|
-
const
|
|
231
|
-
|
|
229
|
+
const p = ce(), { resolve: S, promise: w } = Promise.withResolvers();
|
|
230
|
+
p.run(() => R(o, S, { once: !0 }));
|
|
232
231
|
try {
|
|
233
|
-
await
|
|
232
|
+
await ve(w, 500);
|
|
234
233
|
} catch {
|
|
235
234
|
return !1;
|
|
236
235
|
} finally {
|
|
237
|
-
|
|
236
|
+
p.stop();
|
|
238
237
|
}
|
|
239
238
|
}
|
|
240
239
|
return !0;
|
|
241
|
-
},
|
|
242
|
-
getRowCount: async () => {
|
|
243
|
-
const e = await g.promise;
|
|
244
|
-
if (!e.isDestroyed())
|
|
245
|
-
return e.getDisplayedRowCount();
|
|
246
|
-
},
|
|
247
|
-
getRow: async (e) => {
|
|
248
|
-
const t = await g.promise;
|
|
249
|
-
if (t.isDestroyed()) return;
|
|
250
|
-
const o = J(t.getColumnDefs()).filter((r) => !r.hide).map((r) => ({
|
|
251
|
-
spec: A(r.colId).labeled,
|
|
252
|
-
field: r.field
|
|
253
|
-
})), a = Array.isArray(e) ? t.getRowNode(E(e)) : t.getDisplayedRowAtIndex(e);
|
|
254
|
-
if (!a) return;
|
|
255
|
-
const s = a.data;
|
|
256
|
-
if (!s) return;
|
|
257
|
-
const u = (r) => {
|
|
258
|
-
if (ke(r)) throw new Error("hidden value was not filtered out");
|
|
259
|
-
return r;
|
|
260
|
-
}, n = o.map((r) => r.spec), d = o.map((r) => u(s[r.field]));
|
|
261
|
-
return { spec: n, data: d };
|
|
262
240
|
}
|
|
263
241
|
});
|
|
264
|
-
function
|
|
265
|
-
const t = (
|
|
266
|
-
return e ? e.filter(t).filter((
|
|
242
|
+
function ie(e) {
|
|
243
|
+
const t = (l) => !("children" in l);
|
|
244
|
+
return e ? e.filter(t).filter((l) => l.colId && l.colId !== j) : [];
|
|
267
245
|
}
|
|
268
|
-
|
|
269
|
-
() =>
|
|
246
|
+
Te(
|
|
247
|
+
() => r.value.columnDefs,
|
|
270
248
|
(e) => {
|
|
271
|
-
if (
|
|
249
|
+
if (D.value.sourceId === null)
|
|
272
250
|
V.value = [];
|
|
273
251
|
else {
|
|
274
|
-
const
|
|
275
|
-
V.value =
|
|
252
|
+
const l = ie(e);
|
|
253
|
+
V.value = l.map((a) => X(a.colId).labeled);
|
|
276
254
|
}
|
|
277
255
|
},
|
|
278
256
|
{ immediate: !0 }
|
|
279
257
|
);
|
|
280
|
-
const
|
|
258
|
+
const L = z();
|
|
281
259
|
let v = null;
|
|
282
|
-
const
|
|
283
|
-
return
|
|
284
|
-
() => [
|
|
260
|
+
const C = M(0);
|
|
261
|
+
return R(
|
|
262
|
+
() => [c.value, D.value],
|
|
285
263
|
([e, t]) => {
|
|
286
|
-
var
|
|
287
|
-
if (!(!e || e.isDestroyed()) && !
|
|
288
|
-
++
|
|
264
|
+
var l, a;
|
|
265
|
+
if (!(!e || e.isDestroyed()) && !i(t, v)) {
|
|
266
|
+
++C.value;
|
|
289
267
|
try {
|
|
290
|
-
if (e.hideOverlay(),
|
|
268
|
+
if (e.hideOverlay(), x.reset(), !t.sourceId) {
|
|
291
269
|
e.updateGridOptions({
|
|
292
270
|
loading: !0,
|
|
293
271
|
loadingOverlayComponentParams: {
|
|
294
|
-
...
|
|
272
|
+
...r.value.loadingOverlayComponentParams,
|
|
295
273
|
notReady: !0
|
|
296
274
|
},
|
|
297
275
|
columnDefs: void 0,
|
|
298
276
|
serverSideDatasource: void 0
|
|
299
|
-
}),
|
|
277
|
+
}), o.value && (o.value && !i(o.value, L) && (o.value = z()), e.setServerSideSelectionState({
|
|
300
278
|
selectAll: !1,
|
|
301
279
|
toggledNodes: []
|
|
302
280
|
}));
|
|
@@ -305,74 +283,74 @@ const Ze = /* @__PURE__ */ ue({
|
|
|
305
283
|
t.sourceId !== (v == null ? void 0 : v.sourceId) && (e.updateGridOptions({
|
|
306
284
|
loading: !0,
|
|
307
285
|
loadingOverlayComponentParams: {
|
|
308
|
-
...
|
|
286
|
+
...r.value.loadingOverlayComponentParams,
|
|
309
287
|
notReady: !1
|
|
310
288
|
}
|
|
311
|
-
}),
|
|
289
|
+
}), o.value && (v != null && v.sourceId) && (o.value && !i(o.value, L) && (o.value = z()), e.setServerSideSelectionState({
|
|
312
290
|
selectAll: !1,
|
|
313
291
|
toggledNodes: []
|
|
314
292
|
})));
|
|
315
|
-
const s = ((
|
|
293
|
+
const s = ((l = t.model) == null ? void 0 : l.sourceId) && t.model.sourceId !== t.sourceId;
|
|
316
294
|
if (!t.model || s) {
|
|
317
|
-
const n = e.getServerSideGroupLevelState(),
|
|
295
|
+
const n = e.getServerSideGroupLevelState(), m = !s && n.length > 0 ? n[0].rowCount : 1;
|
|
318
296
|
return e.updateGridOptions({
|
|
319
297
|
serverSideDatasource: {
|
|
320
|
-
getRows: (
|
|
321
|
-
|
|
298
|
+
getRows: (h) => {
|
|
299
|
+
h.success({ rowData: [], rowCount: m });
|
|
322
300
|
}
|
|
323
301
|
}
|
|
324
302
|
});
|
|
325
303
|
}
|
|
326
|
-
const u =
|
|
304
|
+
const u = C.value;
|
|
327
305
|
Pe({
|
|
328
|
-
generation:
|
|
329
|
-
pfDriver:
|
|
306
|
+
generation: C,
|
|
307
|
+
pfDriver: pe().pFrameDriver,
|
|
330
308
|
model: t.model,
|
|
331
309
|
sheets: t.sheets ?? [],
|
|
332
|
-
dataRenderedTracker:
|
|
333
|
-
hiddenColIds: (a =
|
|
310
|
+
dataRenderedTracker: x,
|
|
311
|
+
hiddenColIds: (a = O.value.columnVisibility) == null ? void 0 : a.hiddenColIds,
|
|
334
312
|
cellButtonAxisParams: {
|
|
335
|
-
showCellButtonForAxisId:
|
|
336
|
-
cellButtonInvokeRowsOnDoubleClick:
|
|
313
|
+
showCellButtonForAxisId: d.showCellButtonForAxisId,
|
|
314
|
+
cellButtonInvokeRowsOnDoubleClick: d.cellButtonInvokeRowsOnDoubleClick,
|
|
337
315
|
trigger: (n) => G("cellButtonClicked", n)
|
|
338
316
|
}
|
|
339
317
|
}).then((n) => {
|
|
340
|
-
if (e.isDestroyed() || u !==
|
|
341
|
-
const { axesSpec:
|
|
318
|
+
if (e.isDestroyed() || u !== C.value) return;
|
|
319
|
+
const { axesSpec: m, ...h } = n;
|
|
342
320
|
if (e.updateGridOptions({
|
|
343
|
-
...
|
|
344
|
-
}),
|
|
345
|
-
const { axesSpec:
|
|
346
|
-
if (!
|
|
347
|
-
if (!
|
|
348
|
-
const
|
|
349
|
-
return
|
|
321
|
+
...h
|
|
322
|
+
}), o.value) {
|
|
323
|
+
const { axesSpec: g, selectedKeys: p } = o.value;
|
|
324
|
+
if (!i(g, m)) {
|
|
325
|
+
if (!g || m.length !== g.length) {
|
|
326
|
+
const f = { axesSpec: m, selectedKeys: [] };
|
|
327
|
+
return i(o.value, f) || (o.value = f), e.setServerSideSelectionState({
|
|
350
328
|
selectAll: !1,
|
|
351
329
|
toggledNodes: []
|
|
352
330
|
});
|
|
353
331
|
}
|
|
354
|
-
const
|
|
355
|
-
if (
|
|
356
|
-
const
|
|
357
|
-
return
|
|
332
|
+
const S = g.map(Z).map((f) => m.findIndex((K) => ee(K, f))), w = new Set(S);
|
|
333
|
+
if (w.has(-1) || w.size !== m.length) {
|
|
334
|
+
const f = { axesSpec: m, selectedKeys: [] };
|
|
335
|
+
return i(o.value, f) || (o.value = f), e.setServerSideSelectionState({
|
|
358
336
|
selectAll: !1,
|
|
359
337
|
toggledNodes: []
|
|
360
338
|
});
|
|
361
339
|
}
|
|
362
|
-
const
|
|
363
|
-
return
|
|
340
|
+
const J = p.map((f) => S.map((K) => f[K])), U = { axesSpec: m, selectedKeys: J };
|
|
341
|
+
return i(o.value, U) || (o.value = U), e.setServerSideSelectionState({
|
|
364
342
|
selectAll: !1,
|
|
365
|
-
toggledNodes:
|
|
343
|
+
toggledNodes: J.map((f) => te(f))
|
|
366
344
|
});
|
|
367
345
|
}
|
|
368
346
|
}
|
|
369
347
|
}).catch((n) => {
|
|
370
|
-
e.isDestroyed() || u !==
|
|
348
|
+
e.isDestroyed() || u !== C.value || console.trace(n);
|
|
371
349
|
}).finally(() => {
|
|
372
|
-
e.isDestroyed() || u !==
|
|
350
|
+
e.isDestroyed() || u !== C.value || e.updateGridOptions({
|
|
373
351
|
loading: !1
|
|
374
352
|
});
|
|
375
|
-
}),
|
|
353
|
+
}), x.promise.then(() => G("newDataRendered"));
|
|
376
354
|
} catch (s) {
|
|
377
355
|
console.trace(s);
|
|
378
356
|
} finally {
|
|
@@ -380,66 +358,66 @@ const Ze = /* @__PURE__ */ ue({
|
|
|
380
358
|
}
|
|
381
359
|
}
|
|
382
360
|
}
|
|
383
|
-
),
|
|
361
|
+
), R(
|
|
384
362
|
() => ({
|
|
385
|
-
gridApi:
|
|
386
|
-
loadingText:
|
|
387
|
-
notReadyText:
|
|
388
|
-
noRowsText:
|
|
363
|
+
gridApi: c.value,
|
|
364
|
+
loadingText: d.loadingText,
|
|
365
|
+
notReadyText: d.notReadyText,
|
|
366
|
+
noRowsText: d.noRowsText
|
|
389
367
|
}),
|
|
390
|
-
({ gridApi: e, loadingText: t, notReadyText:
|
|
368
|
+
({ gridApi: e, loadingText: t, notReadyText: l, noRowsText: a }) => {
|
|
391
369
|
!e || e.isDestroyed() || e.updateGridOptions({
|
|
392
370
|
loadingOverlayComponentParams: {
|
|
393
|
-
...
|
|
371
|
+
...r.value.loadingOverlayComponentParams,
|
|
394
372
|
loadingText: t,
|
|
395
|
-
notReadyText:
|
|
373
|
+
notReadyText: l
|
|
396
374
|
},
|
|
397
375
|
noRowsOverlayComponentParams: {
|
|
398
|
-
...
|
|
376
|
+
...r.value.noRowsOverlayComponentParams,
|
|
399
377
|
text: a
|
|
400
378
|
}
|
|
401
379
|
});
|
|
402
380
|
}
|
|
403
|
-
), (e, t) => (
|
|
404
|
-
class:
|
|
381
|
+
), (e, t) => (I(), me("div", {
|
|
382
|
+
class: H(e.$style.container)
|
|
405
383
|
}, [
|
|
406
|
-
|
|
384
|
+
c.value && !e.disableColumnsPanel ? (I(), T(b(Ce), {
|
|
407
385
|
key: 0,
|
|
408
|
-
api:
|
|
386
|
+
api: c.value
|
|
409
387
|
}, null, 8, ["api"])) : $("", !0),
|
|
410
|
-
e.disableFiltersPanel ? $("", !0) : (
|
|
388
|
+
e.disableFiltersPanel ? $("", !0) : (I(), T(he, {
|
|
411
389
|
key: 1,
|
|
412
|
-
modelValue:
|
|
413
|
-
"onUpdate:modelValue": t[0] || (t[0] = (
|
|
414
|
-
settings:
|
|
390
|
+
modelValue: b(k),
|
|
391
|
+
"onUpdate:modelValue": t[0] || (t[0] = (l) => Q(k) ? k.value = l : null),
|
|
392
|
+
settings: ne.value
|
|
415
393
|
}, null, 8, ["modelValue", "settings"])),
|
|
416
|
-
|
|
394
|
+
c.value && e.showExportButton ? (I(), T(ge, {
|
|
417
395
|
key: 2,
|
|
418
|
-
api:
|
|
396
|
+
api: c.value
|
|
419
397
|
}, null, 8, ["api"])) : $("", !0),
|
|
420
|
-
fe(
|
|
421
|
-
modelValue:
|
|
422
|
-
"onUpdate:modelValue": t[1] || (t[1] = (
|
|
423
|
-
settings:
|
|
398
|
+
fe(we, {
|
|
399
|
+
modelValue: b(P),
|
|
400
|
+
"onUpdate:modelValue": t[1] || (t[1] = (l) => Q(P) ? P.value = l : null),
|
|
401
|
+
settings: se.value
|
|
424
402
|
}, {
|
|
425
|
-
before:
|
|
426
|
-
|
|
403
|
+
before: W(() => [
|
|
404
|
+
Y(e.$slots, "before-sheets")
|
|
427
405
|
]),
|
|
428
|
-
after:
|
|
429
|
-
|
|
406
|
+
after: W(() => [
|
|
407
|
+
Y(e.$slots, "after-sheets")
|
|
430
408
|
]),
|
|
431
409
|
_: 3
|
|
432
410
|
}, 8, ["modelValue", "settings"]),
|
|
433
|
-
(
|
|
434
|
-
key:
|
|
435
|
-
theme:
|
|
436
|
-
class:
|
|
437
|
-
"grid-options":
|
|
411
|
+
(I(), T(b(Se), {
|
|
412
|
+
key: E.value,
|
|
413
|
+
theme: b(ye),
|
|
414
|
+
class: H(e.$style.grid),
|
|
415
|
+
"grid-options": r.value
|
|
438
416
|
}, null, 8, ["theme", "class", "grid-options"]))
|
|
439
417
|
], 2));
|
|
440
418
|
}
|
|
441
419
|
});
|
|
442
420
|
export {
|
|
443
|
-
|
|
421
|
+
je as default
|
|
444
422
|
};
|
|
445
423
|
//# 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} 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 } from 'vue';\nimport { AgGridTheme } from '../../aggrid';\nimport PlAgCsvExporter from '../PlAgCsvExporter/PlAgCsvExporter.vue';\nimport { PlAgGridColumnManager } from '../PlAgGridColumnManager';\nimport type { PlDataTableFiltersSettings } from '../PlTableFilters';\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 { isPTableHidden, 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.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 { 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 filterableColumns = ref<PTableColumnSpec[]>([]);\nconst filtersSettings = computed<PlDataTableFiltersSettings>(() => {\n const settingsCopy = { ...settings.value };\n const columns = filterableColumns.value;\n const result = settingsCopy.sourceId !== null && columns.length > 0\n ? {\n columns,\n config: (column: PTableColumnSpec) => settingsCopy.filtersConfig({ sourceId: settingsCopy.sourceId, column }),\n cachedState: [...filtersState.value],\n }\n : {\n columns: [],\n config: () => ({}),\n cachedState: [],\n };\n return result;\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 = 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 tha 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 notReady: true,\n loadingText: props.loadingText,\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 fileName: 'table.csv',\n },\n statusBar: {\n statusPanels: [\n { statusPanel: PlAgRowCount, align: 'left' },\n ],\n },\n onGridReady: (event) => {\n const api = event.api;\n autoSizeRowNumberColumn(api);\n const setGridOption = (\n key: ManagedGridOptionKey,\n value: GridOptions[ManagedGridOptionKey],\n ) => {\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(\n event.state,\n );\n event.api.autoSizeColumns(\n event.api.getAllDisplayedColumns().filter(\n (column) => column.getColId() !== PlAgDataTableRowNumberColId,\n ),\n );\n },\n onGridPreDestroyed: (event) => {\n gridOptions.value.initialState = gridState.value = makePartialState(\n event.api.getState(),\n );\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 orderedColIds: PlTableColumnIdJson[];\n } | undefined,\n sort: state.sort as {\n sortModel: {\n colId: PlTableColumnIdJson;\n sort: 'asc' | 'desc';\n }[];\n } | undefined,\n columnVisibility: state.columnVisibility as {\n hiddenColIds: PlTableColumnIdJson[];\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 loadingOverlayComponentParams reactive\nlet oldOptions: GridOptions | null = null;\nwatch(\n () => [gridApi.value, gridOptions.value] as const,\n ([gridApi, options]) => {\n // Wait for AgGrid reinitialization, gridApi will eventially become initialized\n if (!gridApi || gridApi.isDestroyed()) return;\n if (options.loading && oldOptions?.loading && !isJsonEqual(\n options.loadingOverlayComponentParams,\n oldOptions?.loadingOverlayComponentParams,\n )) {\n // Hack to reapply loadingOverlayComponentParams\n gridApi.setGridOption('loading', false);\n gridApi.setGridOption('loading', true);\n }\n oldOptions = options;\n },\n { immediate: true },\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\n .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\n .map((key) => canonicalizeJson<PlTableRowId>(mapping.map((index) => key[index])));\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 getRowCount: async () => {\n const gridApi = await dataRenderedTracker.promise;\n if (gridApi.isDestroyed()) return;\n\n return gridApi.getDisplayedRowCount();\n },\n getRow: async (index) => {\n const gridApi = await dataRenderedTracker.promise;\n if (gridApi.isDestroyed()) return;\n\n const visibleColumns: {\n spec: PTableColumnSpec;\n field: `${number}`;\n }[] = getDataColDefs(gridApi.getColumnDefs())\n .filter((def) => !def.hide)\n .map((def) => ({\n spec: parseJson(def.colId! satisfies string as PlTableColumnIdJson).labeled,\n field: def.field! as `${number}`,\n }));\n\n const row = Array.isArray(index)\n ? gridApi.getRowNode(canonicalizeJson<PlTableRowId>(index))\n : gridApi.getDisplayedRowAtIndex(index);\n if (!row) return;\n\n const rowData = row.data;\n if (!rowData) return;\n\n const getTableValue = (value: PTableValue | PTableHidden): PTableValue => {\n if (isPTableHidden(value)) throw new Error('hidden value was not filtered out');\n return value;\n };\n\n const spec: PTableColumnSpec[] = visibleColumns.map((column) => column.spec);\n const data: PTableValue[] = visibleColumns.map((column) => getTableValue(rowData[column.field]));\n return { spec, data };\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\n .map((def) => parseJson(def.colId! satisfies string as PlTableColumnIdJson).labeled);\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 eventially 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) {\n gridApi.updateGridOptions({\n loading: true,\n loadingOverlayComponentParams: {\n ...gridOptions.value.loadingOverlayComponentParams,\n notReady: true,\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 notReady: false,\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 = (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\n ? state[0].rowCount\n : 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:\n props.cellButtonInvokeRowsOnDoubleClick,\n trigger: (key?: PTableKey) => emit('cellButtonClicked', key),\n } satisfies PlAgCellButtonAxisParams,\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\n .map((key) => mapping.map((index) => key[index]));\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 }).catch((error: unknown) => {\n if (gridApi.isDestroyed() || stateGeneration !== generation.value) return;\n console.trace(error);\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 notReadyText: props.notReadyText,\n noRowsText: props.noRowsText,\n }),\n ({ gridApi, loadingText, notReadyText, noRowsText }) => {\n if (!gridApi || gridApi.isDestroyed()) return;\n gridApi.updateGridOptions({\n loadingOverlayComponentParams: {\n ...gridOptions.value.loadingOverlayComponentParams,\n loadingText,\n notReadyText,\n },\n noRowsOverlayComponentParams: {\n ...gridOptions.value.noRowsOverlayComponentParams,\n text: noRowsText,\n },\n });\n },\n);\n</script>\n\n<template>\n <div :class=\"$style.container\">\n <PlAgGridColumnManager\n v-if=\"gridApi && !disableColumnsPanel\"\n :api=\"gridApi\"\n />\n <PlTableFiltersV2\n v-if=\"!disableFiltersPanel\"\n v-model=\"filtersState\"\n :settings=\"filtersSettings\"\n />\n <PlAgCsvExporter\n v-if=\"gridApi && showExportButton\"\n :api=\"gridApi\"\n />\n <PlAgDataTableSheets\n v-model=\"sheetsState\"\n :settings=\"sheetsSettings\"\n >\n <template #before>\n <slot name=\"before-sheets\" />\n </template>\n <template #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","gridState","sheetsState","filtersState","useTableState","sheetsSettings","computed","settingsCopy","filterableColumns","ref","filtersSettings","columns","column","gridApi","shallowRef","dataRenderedTracker","DeferredCircular","gridOptions","event","state","selectedKeys","_a","nodeId","parseJson","isJsonEqual","params","PlOverlayLoading","PlOverlayNoRows","PlAgRowCount","api","autoSizeRowNumberColumn","setGridOption","key","value","options","updateGridOptions","target","prop","receiver","makePartialState","PlAgDataTableRowNumberColId","reloadKey","watch","selfState","oldOptions","cellRendererSelector","__expose","rowKey","ensureNodeVisible","row","axesSpec","axes","mapping","spec","id","getAxisId","axis","matchAxisId","mappingSet","selectedNodes","canonicalizeJson","index","oldSelectedKeys","scope","effectScope","resolve","promise","promiseTimeout","visibleColumns","getDataColDefs","def","rowData","getTableValue","isPTableHidden","data","columnDefs","isColDef","watchCached","dataColumns","defaultSelection","createPlSelectionModel","oldSettings","generation","sourceChanged","rowCount","stateGeneration","calculateGridOptions","getRawPlatformaInstance","_b","result","oldAxesSpec","newSelection","error","loadingText","notReadyText","noRowsText"],"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} 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 } from 'vue';\nimport { AgGridTheme } from '../../aggrid';\nimport PlAgCsvExporter from '../PlAgCsvExporter/PlAgCsvExporter.vue';\nimport { PlAgGridColumnManager } from '../PlAgGridColumnManager';\nimport type { PlDataTableFiltersSettings } from '../PlTableFilters';\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.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 { 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 filterableColumns = ref<PTableColumnSpec[]>([]);\nconst filtersSettings = computed<PlDataTableFiltersSettings>(() => {\n const settingsCopy = { ...settings.value };\n const columns = filterableColumns.value;\n const result = settingsCopy.sourceId !== null && columns.length > 0\n ? {\n columns,\n config: (column: PTableColumnSpec) => settingsCopy.filtersConfig({ sourceId: settingsCopy.sourceId, column }),\n cachedState: [...filtersState.value],\n }\n : {\n columns: [],\n config: () => ({}),\n cachedState: [],\n };\n return result;\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 = 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 tha 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 notReady: true,\n loadingText: props.loadingText,\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 fileName: 'table.csv',\n },\n statusBar: {\n statusPanels: [\n { statusPanel: PlAgRowCount, align: 'left' },\n ],\n },\n onGridReady: (event) => {\n const api = event.api;\n autoSizeRowNumberColumn(api);\n const setGridOption = (\n key: ManagedGridOptionKey,\n value: GridOptions[ManagedGridOptionKey],\n ) => {\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(\n event.state,\n );\n event.api.autoSizeColumns(\n event.api.getAllDisplayedColumns().filter(\n (column) => column.getColId() !== PlAgDataTableRowNumberColId,\n ),\n );\n },\n onGridPreDestroyed: (event) => {\n gridOptions.value.initialState = gridState.value = makePartialState(\n event.api.getState(),\n );\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 orderedColIds: PlTableColumnIdJson[];\n } | undefined,\n sort: state.sort as {\n sortModel: {\n colId: PlTableColumnIdJson;\n sort: 'asc' | 'desc';\n }[];\n } | undefined,\n columnVisibility: state.columnVisibility as {\n hiddenColIds: PlTableColumnIdJson[];\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 loadingOverlayComponentParams reactive\nlet oldOptions: GridOptions | null = null;\nwatch(\n () => [gridApi.value, gridOptions.value] as const,\n ([gridApi, options]) => {\n // Wait for AgGrid reinitialization, gridApi will eventially become initialized\n if (!gridApi || gridApi.isDestroyed()) return;\n if (options.loading && oldOptions?.loading && !isJsonEqual(\n options.loadingOverlayComponentParams,\n oldOptions?.loadingOverlayComponentParams,\n )) {\n // Hack to reapply loadingOverlayComponentParams\n gridApi.setGridOption('loading', false);\n gridApi.setGridOption('loading', true);\n }\n oldOptions = options;\n },\n { immediate: true },\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\n .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\n .map((key) => canonicalizeJson<PlTableRowId>(mapping.map((index) => key[index])));\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\n .map((def) => parseJson(def.colId! satisfies string as PlTableColumnIdJson).labeled);\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 eventially 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) {\n gridApi.updateGridOptions({\n loading: true,\n loadingOverlayComponentParams: {\n ...gridOptions.value.loadingOverlayComponentParams,\n notReady: true,\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 notReady: false,\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 = (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\n ? state[0].rowCount\n : 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:\n props.cellButtonInvokeRowsOnDoubleClick,\n trigger: (key?: PTableKey) => emit('cellButtonClicked', key),\n } satisfies PlAgCellButtonAxisParams,\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\n .map((key) => mapping.map((index) => key[index]));\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 }).catch((error: unknown) => {\n if (gridApi.isDestroyed() || stateGeneration !== generation.value) return;\n console.trace(error);\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 notReadyText: props.notReadyText,\n noRowsText: props.noRowsText,\n }),\n ({ gridApi, loadingText, notReadyText, noRowsText }) => {\n if (!gridApi || gridApi.isDestroyed()) return;\n gridApi.updateGridOptions({\n loadingOverlayComponentParams: {\n ...gridOptions.value.loadingOverlayComponentParams,\n loadingText,\n notReadyText,\n },\n noRowsOverlayComponentParams: {\n ...gridOptions.value.noRowsOverlayComponentParams,\n text: noRowsText,\n },\n });\n },\n);\n</script>\n\n<template>\n <div :class=\"$style.container\">\n <PlAgGridColumnManager\n v-if=\"gridApi && !disableColumnsPanel\"\n :api=\"gridApi\"\n />\n <PlTableFiltersV2\n v-if=\"!disableFiltersPanel\"\n v-model=\"filtersState\"\n :settings=\"filtersSettings\"\n />\n <PlAgCsvExporter\n v-if=\"gridApi && showExportButton\"\n :api=\"gridApi\"\n />\n <PlAgDataTableSheets\n v-model=\"sheetsState\"\n :settings=\"sheetsSettings\"\n >\n <template #before>\n <slot name=\"before-sheets\" />\n </template>\n <template #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","gridState","sheetsState","filtersState","useTableState","sheetsSettings","computed","settingsCopy","filterableColumns","ref","filtersSettings","columns","column","gridApi","shallowRef","dataRenderedTracker","DeferredCircular","gridOptions","event","state","selectedKeys","_a","nodeId","parseJson","isJsonEqual","params","PlOverlayLoading","PlOverlayNoRows","PlAgRowCount","api","autoSizeRowNumberColumn","setGridOption","key","value","options","updateGridOptions","target","prop","receiver","makePartialState","PlAgDataTableRowNumberColId","reloadKey","watch","selfState","oldOptions","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","loadingText","notReadyText","noRowsText"],"mappings":"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"}
|
|
@@ -94,20 +94,6 @@ export type PlAgDataTableV2Controller = {
|
|
|
94
94
|
axesSpec: AxisId[];
|
|
95
95
|
selectedKeys: PTableKey[];
|
|
96
96
|
}) => Promise<boolean>;
|
|
97
|
-
/**
|
|
98
|
-
* Get number of rows in the table.
|
|
99
|
-
* @returns number of rows
|
|
100
|
-
*/
|
|
101
|
-
getRowCount: () => Promise<undefined | number>;
|
|
102
|
-
/**
|
|
103
|
-
* Get row by index or axes key.
|
|
104
|
-
* @param index - row index or axes key
|
|
105
|
-
* @returns row spec and data, `undefined` if row was not loaded
|
|
106
|
-
*/
|
|
107
|
-
getRow: (index: number | PlTableRowId) => Promise<undefined | {
|
|
108
|
-
spec: PTableColumnSpec[];
|
|
109
|
-
data: PTableValue[];
|
|
110
|
-
}>;
|
|
111
97
|
};
|
|
112
98
|
export type PlTableRowId = PTableKey;
|
|
113
99
|
export type PlTableRowIdJson = CanonicalizedJson<PTableKey>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/PlAgDataTable/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/PlAgDataTable/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { computed as f, toValue as l } from "vue";
|
|
2
2
|
import u from "../../_virtual/canonicalize.js";
|
|
3
|
-
import { deepClone as
|
|
3
|
+
import { deepClone as c } from "../../lib/util/helpers/dist/index.js";
|
|
4
4
|
function I(s) {
|
|
5
|
-
const
|
|
5
|
+
const o = s.filtersConfig, d = typeof o == "function" ? (e) => {
|
|
6
6
|
try {
|
|
7
|
-
return
|
|
7
|
+
return o({
|
|
8
8
|
sourceId: JSON.parse(e.sourceId),
|
|
9
9
|
column: e.column
|
|
10
10
|
});
|
|
@@ -13,15 +13,15 @@ function I(s) {
|
|
|
13
13
|
}
|
|
14
14
|
} : () => ({});
|
|
15
15
|
return f(() => {
|
|
16
|
-
const e = l(s.model);
|
|
16
|
+
const e = c(l(s.model));
|
|
17
17
|
let r;
|
|
18
18
|
if ("sourceId" in s) {
|
|
19
|
-
const t =
|
|
19
|
+
const t = c(l(s.sourceId));
|
|
20
20
|
if (s.sheets) {
|
|
21
|
-
const
|
|
22
|
-
r = t &&
|
|
21
|
+
const n = c(l(s.sheets));
|
|
22
|
+
r = t && n ? {
|
|
23
23
|
sourceId: u(t),
|
|
24
|
-
sheets:
|
|
24
|
+
sheets: n,
|
|
25
25
|
model: e
|
|
26
26
|
} : { sourceId: null };
|
|
27
27
|
} else
|
|
@@ -31,7 +31,7 @@ function I(s) {
|
|
|
31
31
|
model: e
|
|
32
32
|
} : { sourceId: null };
|
|
33
33
|
} else if (s.sheets) {
|
|
34
|
-
const t = l(s.sheets);
|
|
34
|
+
const t = c(l(s.sheets));
|
|
35
35
|
r = t ? {
|
|
36
36
|
sourceId: u("static"),
|
|
37
37
|
sheets: t,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sources":["../../../src/components/PlAgDataTable/types.ts"],"sourcesContent":["import {\n type JsonCompatible,\n type AxisId,\n type CanonicalizedJson,\n type ListOptionBase,\n type PlDataTableModel,\n type PlDataTableSheet,\n type PlDataTableSheetState,\n type PlTableFilter,\n type PlTableFilterType,\n type PTableColumnId,\n type PTableColumnSpec,\n type PTableKey,\n type PTableValue,\n} from '@platforma-sdk/model';\nimport type { PTableHidden } from './sources/common';\nimport type { ComputedRef, MaybeRefOrGetter } from 'vue';\nimport { computed, toValue } from 'vue';\nimport canonicalize from 'canonicalize';\nimport { deepClone } from '@milaboratories/helpers';\n\nexport type PlDataTableFilterConfig = {\n options?: PlTableFilterType[];\n default?: PlTableFilter;\n};\n\nexport type PlDataTableSettingsV2Base =\n | { sourceId: null }\n | {\n /** Unique source id for state caching */\n sourceId: string;\n /** Sheets that we want to show in our table */\n sheets: PlDataTableSheet[];\n /** Result of `createPlDataTableV2` */\n model: PlDataTableModel | undefined;\n };\n\n/** Data table V2 settings */\nexport type PlDataTableSettingsV2 = PlDataTableSettingsV2Base & {\n /** Callback configuring filters for the table */\n filtersConfig: (info: {\n sourceId: string;\n column: PTableColumnSpec;\n }) => PlDataTableFilterConfig;\n};\n\ntype OptionsBasic = {\n /** Block output created by `createPlDataTableV2` */\n model: MaybeRefOrGetter<PlDataTableModel | undefined>;\n /**\n * Sheets for partitioned data sources.\n * Do not set if data source is never partitioned.\n */\n sheets?: MaybeRefOrGetter<PlDataTableSheet[] | undefined>;\n};\n\ntype OptionsSimple = OptionsBasic & {\n /**\n * Callback configuring filters for the table.\n * If not provided, filtering will be disabled.\n */\n filtersConfig?: (info: {\n column: PTableColumnSpec;\n }) => PlDataTableFilterConfig;\n};\n\ntype OptionsAdvanced<T> = OptionsBasic & {\n /**\n * Block property (such as inputAnchor) used to produce the data source.\n * Mandatory for cases when the table can change without block run.\n * Skip when the table is changed only after block run.\n * Ask developers for help if you don't know what to set here.\n */\n sourceId: MaybeRefOrGetter<T | undefined>;\n /**\n * Callback configuring filters for the table.\n * If not provided, filtering will be disabled.\n * Parameter `sourceId` should be compared using `isJsonEqual` from `@milaboratories/helpers`.\n */\n filtersConfig?: (info: {\n sourceId: JsonCompatible<T>;\n column: PTableColumnSpec;\n }) => PlDataTableFilterConfig;\n};\n\nexport function usePlDataTableSettingsV2<T>(options: OptionsAdvanced<T>): ComputedRef<PlDataTableSettingsV2>;\nexport function usePlDataTableSettingsV2(options: OptionsSimple): ComputedRef<PlDataTableSettingsV2>;\nexport function usePlDataTableSettingsV2<T>(options: OptionsAdvanced<T> | OptionsSimple): ComputedRef<PlDataTableSettingsV2> {\n const fc = options.filtersConfig;\n const filtersConfigValue = typeof fc === 'function'\n ? (ops: {\n sourceId: string;\n column: PTableColumnSpec;\n }) => {\n try {\n return fc({\n sourceId: JSON.parse(ops.sourceId) as JsonCompatible<T>,\n column: ops.column,\n });\n } catch (e) {\n console.error(`filtersConfig failed for sourceId: ${ops.sourceId}, column: ${JSON.stringify(ops.column)} - using default config`, e);\n return {};\n }\n }\n : () => ({});\n return computed(() => {\n const modelValue = toValue(options.model);\n let settingsBase: PlDataTableSettingsV2Base;\n if ('sourceId' in options) {\n const sourceIdValue = deepClone(toValue(options.sourceId));\n if (options.sheets) {\n const sheetsValue = deepClone(toValue(options.sheets));\n settingsBase = sourceIdValue && sheetsValue\n ? {\n sourceId: canonicalize(sourceIdValue)!,\n sheets: sheetsValue,\n model: modelValue,\n }\n : { sourceId: null };\n } else {\n settingsBase = sourceIdValue\n ? {\n sourceId: canonicalize(sourceIdValue)!,\n sheets: [],\n model: modelValue,\n }\n : { sourceId: null };\n }\n } else {\n if (options.sheets) {\n const sheetsValue = toValue(options.sheets);\n settingsBase = sheetsValue\n ? {\n sourceId: canonicalize('static')!,\n sheets: sheetsValue,\n model: modelValue,\n }\n : { sourceId: null };\n } else {\n settingsBase = modelValue\n ? {\n sourceId: canonicalize('static')!,\n sheets: [],\n model: modelValue,\n }\n : { sourceId: null };\n }\n }\n return {\n ...settingsBase,\n filtersConfig: filtersConfigValue,\n };\n });\n};\n\n/** PlTableFilters restriction entry */\nexport type PlTableFiltersRestriction = {\n /** Spec of the column for which filter types should be restricted */\n column: PTableColumnId;\n /** List of filter types applicable to the column */\n allowedFilterTypes: PlTableFilterType[];\n};\n\n/** PlTableFilters default settings entry */\nexport type PlTableFiltersDefault = {\n /** Spec of the column the default should be applied */\n column: PTableColumnId;\n /** Filter entry */\n default: PlTableFilter;\n};\n\n/** PlAgDataTable controller contains all exported methods */\nexport type PlAgDataTableV2Controller = {\n /**\n * Scroll table to make row with provided key visible\n * Warning: works reliably only in client side mode.\n * @returns `true` if row was found and focused, `false` otherwise\n */\n focusRow: (rowKey: PTableKey) => Promise<boolean>;\n /**\n * Update selection in the table.\n * @param axesIds - axes ids identifying axes key values in `selectedKeys`\n * @param selectedKeys - axes keys of the rows to select\n * Warning: update will be ignored if axes ids cannot be correctly resolved\n * @returns `true` if selection was updated, `false` otherwise\n */\n updateSelection: ({\n axesSpec,\n selectedKeys,\n }: {\n axesSpec: AxisId[];\n selectedKeys: PTableKey[];\n }) => Promise<boolean>;\n
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../../../src/components/PlAgDataTable/types.ts"],"sourcesContent":["import {\n type JsonCompatible,\n type AxisId,\n type CanonicalizedJson,\n type ListOptionBase,\n type PlDataTableModel,\n type PlDataTableSheet,\n type PlDataTableSheetState,\n type PlTableFilter,\n type PlTableFilterType,\n type PTableColumnId,\n type PTableColumnSpec,\n type PTableKey,\n type PTableValue,\n} from '@platforma-sdk/model';\nimport type { PTableHidden } from './sources/common';\nimport type { ComputedRef, MaybeRefOrGetter } from 'vue';\nimport { computed, toValue } from 'vue';\nimport canonicalize from 'canonicalize';\nimport { deepClone } from '@milaboratories/helpers';\n\nexport type PlDataTableFilterConfig = {\n options?: PlTableFilterType[];\n default?: PlTableFilter;\n};\n\nexport type PlDataTableSettingsV2Base =\n | { sourceId: null }\n | {\n /** Unique source id for state caching */\n sourceId: string;\n /** Sheets that we want to show in our table */\n sheets: PlDataTableSheet[];\n /** Result of `createPlDataTableV2` */\n model: PlDataTableModel | undefined;\n };\n\n/** Data table V2 settings */\nexport type PlDataTableSettingsV2 = PlDataTableSettingsV2Base & {\n /** Callback configuring filters for the table */\n filtersConfig: (info: {\n sourceId: string;\n column: PTableColumnSpec;\n }) => PlDataTableFilterConfig;\n};\n\ntype OptionsBasic = {\n /** Block output created by `createPlDataTableV2` */\n model: MaybeRefOrGetter<PlDataTableModel | undefined>;\n /**\n * Sheets for partitioned data sources.\n * Do not set if data source is never partitioned.\n */\n sheets?: MaybeRefOrGetter<PlDataTableSheet[] | undefined>;\n};\n\ntype OptionsSimple = OptionsBasic & {\n /**\n * Callback configuring filters for the table.\n * If not provided, filtering will be disabled.\n */\n filtersConfig?: (info: {\n column: PTableColumnSpec;\n }) => PlDataTableFilterConfig;\n};\n\ntype OptionsAdvanced<T> = OptionsBasic & {\n /**\n * Block property (such as inputAnchor) used to produce the data source.\n * Mandatory for cases when the table can change without block run.\n * Skip when the table is changed only after block run.\n * Ask developers for help if you don't know what to set here.\n */\n sourceId: MaybeRefOrGetter<T | undefined>;\n /**\n * Callback configuring filters for the table.\n * If not provided, filtering will be disabled.\n * Parameter `sourceId` should be compared using `isJsonEqual` from `@milaboratories/helpers`.\n */\n filtersConfig?: (info: {\n sourceId: JsonCompatible<T>;\n column: PTableColumnSpec;\n }) => PlDataTableFilterConfig;\n};\n\nexport function usePlDataTableSettingsV2<T>(options: OptionsAdvanced<T>): ComputedRef<PlDataTableSettingsV2>;\nexport function usePlDataTableSettingsV2(options: OptionsSimple): ComputedRef<PlDataTableSettingsV2>;\nexport function usePlDataTableSettingsV2<T>(options: OptionsAdvanced<T> | OptionsSimple): ComputedRef<PlDataTableSettingsV2> {\n const fc = options.filtersConfig;\n const filtersConfigValue = typeof fc === 'function'\n ? (ops: {\n sourceId: string;\n column: PTableColumnSpec;\n }) => {\n try {\n return fc({\n sourceId: JSON.parse(ops.sourceId) as JsonCompatible<T>,\n column: ops.column,\n });\n } catch (e) {\n console.error(`filtersConfig failed for sourceId: ${ops.sourceId}, column: ${JSON.stringify(ops.column)} - using default config`, e);\n return {};\n }\n }\n : () => ({});\n return computed(() => {\n const modelValue = deepClone(toValue(options.model));\n let settingsBase: PlDataTableSettingsV2Base;\n if ('sourceId' in options) {\n const sourceIdValue = deepClone(toValue(options.sourceId));\n if (options.sheets) {\n const sheetsValue = deepClone(toValue(options.sheets));\n settingsBase = sourceIdValue && sheetsValue\n ? {\n sourceId: canonicalize(sourceIdValue)!,\n sheets: sheetsValue,\n model: modelValue,\n }\n : { sourceId: null };\n } else {\n settingsBase = sourceIdValue\n ? {\n sourceId: canonicalize(sourceIdValue)!,\n sheets: [],\n model: modelValue,\n }\n : { sourceId: null };\n }\n } else {\n if (options.sheets) {\n const sheetsValue = deepClone(toValue(options.sheets));\n settingsBase = sheetsValue\n ? {\n sourceId: canonicalize('static')!,\n sheets: sheetsValue,\n model: modelValue,\n }\n : { sourceId: null };\n } else {\n settingsBase = modelValue\n ? {\n sourceId: canonicalize('static')!,\n sheets: [],\n model: modelValue,\n }\n : { sourceId: null };\n }\n }\n return {\n ...settingsBase,\n filtersConfig: filtersConfigValue,\n };\n });\n};\n\n/** PlTableFilters restriction entry */\nexport type PlTableFiltersRestriction = {\n /** Spec of the column for which filter types should be restricted */\n column: PTableColumnId;\n /** List of filter types applicable to the column */\n allowedFilterTypes: PlTableFilterType[];\n};\n\n/** PlTableFilters default settings entry */\nexport type PlTableFiltersDefault = {\n /** Spec of the column the default should be applied */\n column: PTableColumnId;\n /** Filter entry */\n default: PlTableFilter;\n};\n\n/** PlAgDataTable controller contains all exported methods */\nexport type PlAgDataTableV2Controller = {\n /**\n * Scroll table to make row with provided key visible\n * Warning: works reliably only in client side mode.\n * @returns `true` if row was found and focused, `false` otherwise\n */\n focusRow: (rowKey: PTableKey) => Promise<boolean>;\n /**\n * Update selection in the table.\n * @param axesIds - axes ids identifying axes key values in `selectedKeys`\n * @param selectedKeys - axes keys of the rows to select\n * Warning: update will be ignored if axes ids cannot be correctly resolved\n * @returns `true` if selection was updated, `false` otherwise\n */\n updateSelection: ({\n axesSpec,\n selectedKeys,\n }: {\n axesSpec: AxisId[];\n selectedKeys: PTableKey[];\n }) => Promise<boolean>;\n};\n\nexport type PlTableRowId = PTableKey;\n\nexport type PlTableRowIdJson = CanonicalizedJson<PTableKey>;\n\n/** PlAgDataTableV2 row */\nexport type PlAgDataTableV2Row = {\n /** Axes key */\n axesKey: PTableKey;\n /** Unique row identifier */\n id: PlTableRowIdJson;\n /** Row values by column; sheet axes and labeled axes are excluded */\n [field: `${number}`]: PTableValue | PTableHidden;\n};\n\nexport type PlAgOverlayLoadingParams = {\n /**\n * Required flag, that shows catInBag icon with message if `true`, shows PlSplash component if `false`.\n */\n notReady?: boolean;\n /**\n * Prop to override default \"Loading\" text\n */\n loadingText?: string;\n /**\n * Prop to override default \"No datasource\" text (So why props name is notReady? Good question)\n */\n notReadyText?: string;\n /**\n * Use \"transparent\" to make table headers visible below the loading layer\n */\n overlayType?: 'transparent';\n};\n\nexport type PlAgOverlayNoRowsParams = {\n /**\n * Prop to override default \"Empty\" text\n */\n text?: string;\n};\n\nexport type PlDataTableSheetsSettings = {\n /** User-provided sheets for the sourceId */\n sheets: PlDataTableSheet[];\n /** Persisted selection for the sourceId */\n cachedState: PlDataTableSheetState[];\n};\n\nexport type PlDataTableSheetNormalized = {\n /** id of the axis */\n axisId: AxisId;\n /** sheet prefix */\n prefix: string;\n /** options to show in the filter dropdown */\n options: ListOptionBase<string | number>[];\n /** default (selected) value */\n defaultValue: string | number;\n};\n"],"names":["usePlDataTableSettingsV2","options","fc","filtersConfigValue","ops","e","computed","modelValue","deepClone","toValue","settingsBase","sourceIdValue","sheetsValue","canonicalize"],"mappings":";;;AAuFO,SAASA,EAA4BC,GAAiF;AAC3H,QAAMC,IAAKD,EAAQ,eACbE,IAAqB,OAAOD,KAAO,aACrC,CAACE,MAGK;AACA,QAAA;AACF,aAAOF,EAAG;AAAA,QACR,UAAU,KAAK,MAAME,EAAI,QAAQ;AAAA,QACjC,QAAQA,EAAI;AAAA,MAAA,CACb;AAAA,aACMC,GAAG;AACF,qBAAA,MAAM,sCAAsCD,EAAI,QAAQ,aAAa,KAAK,UAAUA,EAAI,MAAM,CAAC,2BAA2BC,CAAC,GAC5H,CAAC;AAAA,IAAA;AAAA,EAEZ,IACA,OAAO,CAAA;AACX,SAAOC,EAAS,MAAM;AACpB,UAAMC,IAAaC,EAAUC,EAAQR,EAAQ,KAAK,CAAC;AAC/C,QAAAS;AACJ,QAAI,cAAcT,GAAS;AACzB,YAAMU,IAAgBH,EAAUC,EAAQR,EAAQ,QAAQ,CAAC;AACzD,UAAIA,EAAQ,QAAQ;AAClB,cAAMW,IAAcJ,EAAUC,EAAQR,EAAQ,MAAM,CAAC;AACrD,QAAAS,IAAeC,KAAiBC,IAC5B;AAAA,UACE,UAAUC,EAAaF,CAAa;AAAA,UACpC,QAAQC;AAAA,UACR,OAAOL;AAAA,QAAA,IAET,EAAE,UAAU,KAAK;AAAA,MAAA;AAErB,QAAAG,IAAeC,IACX;AAAA,UACE,UAAUE,EAAaF,CAAa;AAAA,UACpC,QAAQ,CAAC;AAAA,UACT,OAAOJ;AAAA,QAAA,IAET,EAAE,UAAU,KAAK;AAAA,IACvB,WAEIN,EAAQ,QAAQ;AAClB,YAAMW,IAAcJ,EAAUC,EAAQR,EAAQ,MAAM,CAAC;AACrD,MAAAS,IAAeE,IACX;AAAA,QACE,UAAUC,EAAa,QAAQ;AAAA,QAC/B,QAAQD;AAAA,QACR,OAAOL;AAAA,MAAA,IAET,EAAE,UAAU,KAAK;AAAA,IAAA;AAErB,MAAAG,IAAeH,IACX;AAAA,QACE,UAAUM,EAAa,QAAQ;AAAA,QAC/B,QAAQ,CAAC;AAAA,QACT,OAAON;AAAA,MAAA,IAET,EAAE,UAAU,KAAK;AAGlB,WAAA;AAAA,MACL,GAAGG;AAAA,MACH,eAAeP;AAAA,IACjB;AAAA,EAAA,CACD;AACH;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@platforma-sdk/ui-vue",
|
|
3
|
-
"version": "1.41.
|
|
3
|
+
"version": "1.41.11",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/lib.js",
|
|
6
6
|
"styles": "dist/lib.js",
|
|
@@ -43,10 +43,10 @@
|
|
|
43
43
|
"yarpm": "^1.2.0",
|
|
44
44
|
"fast-json-patch": "^3.1.1",
|
|
45
45
|
"@faker-js/faker": "^9.2.0",
|
|
46
|
-
"@milaboratories/ts-configs": "1.0.5",
|
|
47
46
|
"@milaboratories/build-configs": "1.0.5",
|
|
48
|
-
"@milaboratories/
|
|
49
|
-
"@milaboratories/
|
|
47
|
+
"@milaboratories/helpers": "^1.6.19",
|
|
48
|
+
"@milaboratories/ts-configs": "1.0.5",
|
|
49
|
+
"@milaboratories/eslint-config": "^1.0.4"
|
|
50
50
|
},
|
|
51
51
|
"scripts": {
|
|
52
52
|
"test": "vitest run --passWithNoTests",
|
|
@@ -55,7 +55,7 @@ import type {
|
|
|
55
55
|
PlTableRowIdJson,
|
|
56
56
|
} from './types';
|
|
57
57
|
import { watchCached } from '@milaboratories/uikit';
|
|
58
|
-
import {
|
|
58
|
+
import { type PTableHidden } from './sources/common';
|
|
59
59
|
|
|
60
60
|
const tableState = defineModel<PlDataTableStateV2>({
|
|
61
61
|
required: true,
|
|
@@ -388,43 +388,6 @@ defineExpose<PlAgDataTableV2Controller>({
|
|
|
388
388
|
}
|
|
389
389
|
return true;
|
|
390
390
|
},
|
|
391
|
-
getRowCount: async () => {
|
|
392
|
-
const gridApi = await dataRenderedTracker.promise;
|
|
393
|
-
if (gridApi.isDestroyed()) return;
|
|
394
|
-
|
|
395
|
-
return gridApi.getDisplayedRowCount();
|
|
396
|
-
},
|
|
397
|
-
getRow: async (index) => {
|
|
398
|
-
const gridApi = await dataRenderedTracker.promise;
|
|
399
|
-
if (gridApi.isDestroyed()) return;
|
|
400
|
-
|
|
401
|
-
const visibleColumns: {
|
|
402
|
-
spec: PTableColumnSpec;
|
|
403
|
-
field: `${number}`;
|
|
404
|
-
}[] = getDataColDefs(gridApi.getColumnDefs())
|
|
405
|
-
.filter((def) => !def.hide)
|
|
406
|
-
.map((def) => ({
|
|
407
|
-
spec: parseJson(def.colId! satisfies string as PlTableColumnIdJson).labeled,
|
|
408
|
-
field: def.field! as `${number}`,
|
|
409
|
-
}));
|
|
410
|
-
|
|
411
|
-
const row = Array.isArray(index)
|
|
412
|
-
? gridApi.getRowNode(canonicalizeJson<PlTableRowId>(index))
|
|
413
|
-
: gridApi.getDisplayedRowAtIndex(index);
|
|
414
|
-
if (!row) return;
|
|
415
|
-
|
|
416
|
-
const rowData = row.data;
|
|
417
|
-
if (!rowData) return;
|
|
418
|
-
|
|
419
|
-
const getTableValue = (value: PTableValue | PTableHidden): PTableValue => {
|
|
420
|
-
if (isPTableHidden(value)) throw new Error('hidden value was not filtered out');
|
|
421
|
-
return value;
|
|
422
|
-
};
|
|
423
|
-
|
|
424
|
-
const spec: PTableColumnSpec[] = visibleColumns.map((column) => column.spec);
|
|
425
|
-
const data: PTableValue[] = visibleColumns.map((column) => getTableValue(rowData[column.field]));
|
|
426
|
-
return { spec, data };
|
|
427
|
-
},
|
|
428
391
|
});
|
|
429
392
|
|
|
430
393
|
function getDataColDefs(
|
|
@@ -104,7 +104,7 @@ export function usePlDataTableSettingsV2<T>(options: OptionsAdvanced<T> | Option
|
|
|
104
104
|
}
|
|
105
105
|
: () => ({});
|
|
106
106
|
return computed(() => {
|
|
107
|
-
const modelValue = toValue(options.model);
|
|
107
|
+
const modelValue = deepClone(toValue(options.model));
|
|
108
108
|
let settingsBase: PlDataTableSettingsV2Base;
|
|
109
109
|
if ('sourceId' in options) {
|
|
110
110
|
const sourceIdValue = deepClone(toValue(options.sourceId));
|
|
@@ -128,7 +128,7 @@ export function usePlDataTableSettingsV2<T>(options: OptionsAdvanced<T> | Option
|
|
|
128
128
|
}
|
|
129
129
|
} else {
|
|
130
130
|
if (options.sheets) {
|
|
131
|
-
const sheetsValue = toValue(options.sheets);
|
|
131
|
+
const sheetsValue = deepClone(toValue(options.sheets));
|
|
132
132
|
settingsBase = sheetsValue
|
|
133
133
|
? {
|
|
134
134
|
sourceId: canonicalize('static')!,
|
|
@@ -191,20 +191,6 @@ export type PlAgDataTableV2Controller = {
|
|
|
191
191
|
axesSpec: AxisId[];
|
|
192
192
|
selectedKeys: PTableKey[];
|
|
193
193
|
}) => Promise<boolean>;
|
|
194
|
-
/**
|
|
195
|
-
* Get number of rows in the table.
|
|
196
|
-
* @returns number of rows
|
|
197
|
-
*/
|
|
198
|
-
getRowCount: () => Promise<undefined | number>;
|
|
199
|
-
/**
|
|
200
|
-
* Get row by index or axes key.
|
|
201
|
-
* @param index - row index or axes key
|
|
202
|
-
* @returns row spec and data, `undefined` if row was not loaded
|
|
203
|
-
*/
|
|
204
|
-
getRow: (index: number | PlTableRowId) => Promise<undefined | {
|
|
205
|
-
spec: PTableColumnSpec[];
|
|
206
|
-
data: PTableValue[];
|
|
207
|
-
}>;
|
|
208
194
|
};
|
|
209
195
|
|
|
210
196
|
export type PlTableRowId = PTableKey;
|