@platforma-sdk/ui-vue 1.42.35 → 1.42.42
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 +6 -6
- package/.turbo/turbo-type-check.log +1 -1
- package/CHANGELOG.md +14 -0
- package/dist/components/PlAgColumnHeader/PlAgColumnHeader.vue.js +49 -38
- package/dist/components/PlAgColumnHeader/PlAgColumnHeader.vue.js.map +1 -1
- package/dist/components/PlAgColumnHeader/types.d.ts +1 -0
- package/dist/components/PlAgDataTable/sources/table-source-v2.js +73 -72
- package/dist/components/PlAgDataTable/sources/table-source-v2.js.map +1 -1
- package/package.json +7 -7
- package/src/components/PlAgColumnHeader/PlAgColumnHeader.vue +17 -15
- package/src/components/PlAgColumnHeader/types.ts +4 -1
- package/src/components/PlAgDataTable/sources/table-source-v2.ts +1 -0
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.42.
|
|
3
|
+
> @platforma-sdk/ui-vue@1.42.42 build /home/runner/_work/platforma/platforma/sdk/ui-vue
|
|
4
4
|
> ts-builder build --target browser-lib
|
|
5
5
|
|
|
6
6
|
Building browser-lib project...
|
|
@@ -79,8 +79,8 @@ computing gzip size...
|
|
|
79
79
|
[2mdist/[22m[36mcomponents/PlTableFilters/PlTableFiltersV2.vue.js [39m[1m[2m 0.30 kB[22m[1m[22m[2m │ gzip: 0.22 kB[22m[2m │ map: 0.11 kB[22m
|
|
80
80
|
[2mdist/[22m[36mnode_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/to-comparators.js [39m[1m[2m 0.30 kB[22m[1m[22m[2m │ gzip: 0.23 kB[22m[2m │ map: 0.78 kB[22m
|
|
81
81
|
[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
|
|
82
|
-
[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
|
|
83
82
|
[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
|
|
83
|
+
[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
|
|
84
84
|
[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
|
|
85
85
|
[2mdist/[22m[36mcomponents/PlAgGridColumnManager/PlAgGridColumnManager.vue.js [39m[1m[2m 0.32 kB[22m[1m[22m[2m │ gzip: 0.23 kB[22m[2m │ map: 0.12 kB[22m
|
|
86
86
|
[2mdist/[22m[36mnode_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/satisfies.js [39m[1m[2m 0.32 kB[22m[1m[22m[2m │ gzip: 0.23 kB[22m[2m │ map: 0.74 kB[22m
|
|
@@ -177,10 +177,10 @@ computing gzip size...
|
|
|
177
177
|
[2mdist/[22m[36mcomponents/PlTableFilters/PlTableAddFilterV2.vue.js [39m[1m[2m 3.16 kB[22m[1m[22m[2m │ gzip: 1.27 kB[22m[2m │ map: 3.95 kB[22m
|
|
178
178
|
[2mdist/[22m[36mcomponents/PlAgDataTable/sources/table-state-v2.js [39m[1m[2m 3.18 kB[22m[1m[22m[2m │ gzip: 1.16 kB[22m[2m │ map: 9.94 kB[22m
|
|
179
179
|
[2mdist/[22m[36mcomponents/PlAnnotations/components/AnnotationsSidebar.vue2.js [39m[1m[2m 3.24 kB[22m[1m[22m[2m │ gzip: 1.30 kB[22m[2m │ map: 3.26 kB[22m
|
|
180
|
-
[2mdist/[22m[36mcomponents/PlAgColumnHeader/PlAgColumnHeader.vue.js [39m[1m[2m 3.26 kB[22m[1m[22m[2m │ gzip: 1.32 kB[22m[2m │ map: 4.05 kB[22m
|
|
181
180
|
[2mdist/[22m[36mnode_modules/.pnpm/fast-json-patch@3.1.1/node_modules/fast-json-patch/module/duplex.js [39m[1m[2m 3.33 kB[22m[1m[22m[2m │ gzip: 1.22 kB[22m[2m │ map: 10.70 kB[22m
|
|
182
181
|
[2mdist/[22m[36mcomponents/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue.js [39m[1m[2m 3.35 kB[22m[1m[22m[2m │ gzip: 1.42 kB[22m[2m │ map: 2.84 kB[22m
|
|
183
182
|
[2mdist/[22m[36mnode_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/subset.js [39m[1m[2m 3.51 kB[22m[1m[22m[2m │ gzip: 1.04 kB[22m[2m │ map: 11.66 kB[22m
|
|
183
|
+
[2mdist/[22m[36mcomponents/PlAgColumnHeader/PlAgColumnHeader.vue.js [39m[1m[2m 3.51 kB[22m[1m[22m[2m │ gzip: 1.38 kB[22m[2m │ map: 3.94 kB[22m
|
|
184
184
|
[2mdist/[22m[36mcomponents/PlMultiSequenceAlignment/Consensus.vue2.js [39m[1m[2m 3.53 kB[22m[1m[22m[2m │ gzip: 1.40 kB[22m[2m │ map: 6.62 kB[22m
|
|
185
185
|
[2mdist/[22m[36mcomponents/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue2.js [39m[1m[2m 3.56 kB[22m[1m[22m[2m │ gzip: 1.19 kB[22m[2m │ map: 5.67 kB[22m
|
|
186
186
|
[2mdist/[22m[36mnode_modules/.pnpm/semver@7.7.2/node_modules/semver/index.js [39m[1m[2m 3.67 kB[22m[1m[22m[2m │ gzip: 1.01 kB[22m[2m │ map: 5.45 kB[22m
|
|
@@ -199,7 +199,7 @@ computing gzip size...
|
|
|
199
199
|
[2mdist/[22m[36mcomponents/PlTableFilters/PlTableFiltersV2.vue2.js [39m[1m[2m 6.10 kB[22m[1m[22m[2m │ gzip: 2.02 kB[22m[2m │ map: 9.27 kB[22m
|
|
200
200
|
[2mdist/[22m[36mnode_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/semver.js [39m[1m[2m 6.70 kB[22m[1m[22m[2m │ gzip: 1.86 kB[22m[2m │ map: 15.20 kB[22m
|
|
201
201
|
[2mdist/[22m[36minternal/createAppV2.js [39m[1m[2m 6.79 kB[22m[1m[22m[2m │ gzip: 2.37 kB[22m[2m │ map: 18.94 kB[22m
|
|
202
|
-
[2mdist/[22m[36mcomponents/PlAgDataTable/sources/table-source-v2.js [39m[1m[2m 7.
|
|
202
|
+
[2mdist/[22m[36mcomponents/PlAgDataTable/sources/table-source-v2.js [39m[1m[2m 7.32 kB[22m[1m[22m[2m │ gzip: 2.67 kB[22m[2m │ map: 22.27 kB[22m
|
|
203
203
|
[2mdist/[22m[36mcomponents/PlTableFilters/PlTableFilterEntryV2.vue.js [39m[1m[2m 7.35 kB[22m[1m[22m[2m │ gzip: 1.61 kB[22m[2m │ map: 6.15 kB[22m
|
|
204
204
|
[2mdist/[22m[36mnode_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/range.js [39m[1m[2m 7.70 kB[22m[1m[22m[2m │ gzip: 2.49 kB[22m[2m │ map: 25.65 kB[22m
|
|
205
205
|
[2mdist/[22m[36mcomponents/PlMultiSequenceAlignment/data.js [39m[1m[2m 7.73 kB[22m[1m[22m[2m │ gzip: 2.70 kB[22m[2m │ map: 22.72 kB[22m
|
|
@@ -215,7 +215,7 @@ computing gzip size...
|
|
|
215
215
|
[2mdist/[22m[36mcomponents/PlAgRowNumHeader.vue.js [39m[1m[2m44.65 kB[22m[1m[22m[2m │ gzip: 29.29 kB[22m[2m │ map: 3.70 kB[22m
|
|
216
216
|
[2mdist/[22m[36mAgGridVue/useAgGridOptions.js [39m[1m[2m49.29 kB[22m[1m[22m[2m │ gzip: 30.15 kB[22m[2m │ map: 16.35 kB[22m
|
|
217
217
|
[2mdist/[22m[36mcomponents/PlAgDataTable/PlAgDataTableV2.vue2.js [39m[1m[2m50.33 kB[22m[1m[22m[2m │ gzip: 31.04 kB[22m[2m │ map: 33.70 kB[22m
|
|
218
|
-
[vite:dts] Declaration files built in
|
|
218
|
+
[vite:dts] Declaration files built in 9815ms.
|
|
219
219
|
|
|
220
|
-
[32m✓ built in 11.
|
|
220
|
+
[32m✓ built in 11.78s[39m
|
|
221
221
|
Build completed successfully
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
WARN Issue while reading "/home/runner/_work/platforma/platforma/.npmrc". Failed to replace env in config: ${NPMJS_TOKEN}
|
|
2
2
|
|
|
3
|
-
> @platforma-sdk/ui-vue@1.42.
|
|
3
|
+
> @platforma-sdk/ui-vue@1.42.42 type-check /home/runner/_work/platforma/platforma/sdk/ui-vue
|
|
4
4
|
> ts-builder types --target browser-lib
|
|
5
5
|
|
|
6
6
|
↳ vue-tsc.js --noEmit --project ./tsconfig.json
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @platforma-sdk/ui-vue
|
|
2
2
|
|
|
3
|
+
## 1.42.42
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- b80a619: AgGrid version update
|
|
8
|
+
|
|
9
|
+
## 1.42.36
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- 2a21be5: PlAgDataTableV2: added tooltips to column headers
|
|
14
|
+
- @platforma-sdk/model@1.42.36
|
|
15
|
+
- @milaboratories/uikit@2.4.8
|
|
16
|
+
|
|
3
17
|
## 1.42.35
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
(function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode(".pl-ag-column-header{cursor:pointer;width:100%;overflow:hidden}.pl-ag-column-header .mask-16{min-width:16px}.pl-ag-column-header span{word-break:break-word;overflow:hidden;text-overflow:ellipsis}.pl-ag-column-header__title{overflow:hidden}.pl-ag-column-header__type-icon{--icon-color: var(--txt-03)}.pl-ag-column-header__menu-icon{transform:rotate(90deg);position:relative;line-height:0}")),document.head.appendChild(e)}}catch(o){console.error("vite-plugin-css-injected-by-js",o)}})();
|
|
2
|
-
import { defineComponent as
|
|
3
|
-
import { PlMaskIcon16 as
|
|
2
|
+
import { defineComponent as C, computed as m, ref as i, onMounted as k, createElementBlock as p, openBlock as r, createVNode as n, createCommentVNode as d, unref as a, createSlots as S, withCtx as f, createElementVNode as g, createBlock as B, toDisplayString as h, createTextVNode as M, withModifiers as N } from "vue";
|
|
3
|
+
import { PlTooltip as x, PlMaskIcon16 as o } from "@milaboratories/uikit";
|
|
4
4
|
|
|
5
|
-
const
|
|
5
|
+
const A = { class: "pl-ag-column-header__title d-flex align-center gap-6 flex-grow-1" }, I = /* @__PURE__ */ C({
|
|
6
6
|
__name: "PlAgColumnHeader",
|
|
7
7
|
props: {
|
|
8
8
|
params: {}
|
|
9
9
|
},
|
|
10
|
-
setup(
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
const e = (m = (n = r.params.column.getUserProvidedColDef()) == null ? void 0 : n.headerComponentParams) == null ? void 0 : m.type;
|
|
14
|
-
switch (e) {
|
|
10
|
+
setup(t) {
|
|
11
|
+
const v = m(() => {
|
|
12
|
+
switch (t.params.type) {
|
|
15
13
|
case void 0:
|
|
16
14
|
case "Text":
|
|
17
15
|
return "cell-type-txt";
|
|
@@ -26,14 +24,14 @@ const P = { class: "pl-ag-column-header__title d-flex align-center gap-6 flex-gr
|
|
|
26
24
|
case "Progress":
|
|
27
25
|
return "progress";
|
|
28
26
|
default:
|
|
29
|
-
throw Error(`unsupported data type: ${
|
|
27
|
+
throw Error(`unsupported data type: ${t.params.type} for PlAgColumnHeader component. Column ${t.params.column.getColId()}`);
|
|
30
28
|
}
|
|
31
|
-
}), l = i(null),
|
|
32
|
-
k(() =>
|
|
33
|
-
function
|
|
34
|
-
|
|
29
|
+
}), l = i(null), c = () => l.value = t.params.column.getSort() ?? null;
|
|
30
|
+
k(() => c());
|
|
31
|
+
function w() {
|
|
32
|
+
t.params.column.isSortable() && (t.params.progressSort(), c());
|
|
35
33
|
}
|
|
36
|
-
const
|
|
34
|
+
const u = m(() => {
|
|
37
35
|
const e = l.value;
|
|
38
36
|
switch (e) {
|
|
39
37
|
case "asc":
|
|
@@ -43,41 +41,54 @@ const P = { class: "pl-ag-column-header__title d-flex align-center gap-6 flex-gr
|
|
|
43
41
|
case null:
|
|
44
42
|
return null;
|
|
45
43
|
default:
|
|
46
|
-
throw Error(`unsupported sort direction: ${e}. Column ${
|
|
44
|
+
throw Error(`unsupported sort direction: ${e}. Column ${t.params.column.getColId()}`);
|
|
47
45
|
}
|
|
48
|
-
}),
|
|
49
|
-
function
|
|
50
|
-
const e =
|
|
51
|
-
e &&
|
|
46
|
+
}), s = i();
|
|
47
|
+
function y() {
|
|
48
|
+
const e = s.value;
|
|
49
|
+
e && t.params.showColumnMenu(e);
|
|
52
50
|
}
|
|
53
|
-
return (e,
|
|
51
|
+
return (e, D) => (r(), p("div", {
|
|
54
52
|
class: "pl-ag-column-header d-flex align-center gap-6",
|
|
55
|
-
onClick:
|
|
53
|
+
onClick: w
|
|
56
54
|
}, [
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
55
|
+
n(a(x), null, S({
|
|
56
|
+
default: f(() => [
|
|
57
|
+
g("div", A, [
|
|
58
|
+
n(a(o), {
|
|
59
|
+
name: v.value,
|
|
60
|
+
class: "pl-ag-column-header__type-icon"
|
|
61
|
+
}, null, 8, ["name"]),
|
|
62
|
+
g("span", null, h(e.params.displayName), 1),
|
|
63
|
+
u.value ? (r(), B(a(o), {
|
|
64
|
+
key: 0,
|
|
65
|
+
name: u.value
|
|
66
|
+
}, null, 8, ["name"])) : d("", !0)
|
|
67
|
+
])
|
|
68
|
+
]),
|
|
69
|
+
_: 2
|
|
70
|
+
}, [
|
|
71
|
+
e.params.tooltip ? {
|
|
72
|
+
name: "tooltip",
|
|
73
|
+
fn: f(() => [
|
|
74
|
+
M(h(e.params.tooltip), 1)
|
|
75
|
+
]),
|
|
76
|
+
key: "0"
|
|
77
|
+
} : void 0
|
|
78
|
+
]), 1024),
|
|
79
|
+
e.params.enableMenu ? (r(), p("div", {
|
|
69
80
|
key: 0,
|
|
70
81
|
ref_key: "menuActivatorBtn",
|
|
71
|
-
ref:
|
|
82
|
+
ref: s,
|
|
72
83
|
class: "pl-ag-column-header__menu-icon",
|
|
73
|
-
onClick:
|
|
84
|
+
onClick: N(y, ["stop"])
|
|
74
85
|
}, [
|
|
75
|
-
|
|
76
|
-
], 512)) :
|
|
86
|
+
n(a(o), { name: "more" })
|
|
87
|
+
], 512)) : d("", !0)
|
|
77
88
|
]));
|
|
78
89
|
}
|
|
79
90
|
});
|
|
80
91
|
export {
|
|
81
|
-
|
|
92
|
+
I as default
|
|
82
93
|
};
|
|
83
94
|
//# sourceMappingURL=PlAgColumnHeader.vue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlAgColumnHeader.vue.js","sources":["../../../src/components/PlAgColumnHeader/PlAgColumnHeader.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { IHeaderParams, SortDirection } from 'ag-grid-enterprise';\nimport type { MaskIconName16 } from '@milaboratories/uikit';\nimport { PlMaskIcon16 } from '@milaboratories/uikit';\nimport { computed, onMounted, ref } from 'vue';\nimport './pl-ag-column-header.scss';\nimport type { PlAgHeaderComponentParams } from './types';\n\nconst
|
|
1
|
+
{"version":3,"file":"PlAgColumnHeader.vue.js","sources":["../../../src/components/PlAgColumnHeader/PlAgColumnHeader.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { IHeaderParams, SortDirection } from 'ag-grid-enterprise';\nimport type { MaskIconName16 } from '@milaboratories/uikit';\nimport { PlMaskIcon16, PlTooltip } from '@milaboratories/uikit';\nimport { computed, onMounted, ref } from 'vue';\nimport './pl-ag-column-header.scss';\nimport type { PlAgHeaderComponentParams } from './types';\n\nconst { params } = defineProps<{ params: IHeaderParams & PlAgHeaderComponentParams }>();\n\nconst icon = computed<MaskIconName16>(() => {\n switch (params.type) {\n case undefined:\n case 'Text':\n return 'cell-type-txt';\n case 'Number':\n return 'cell-type-num';\n case 'File':\n return 'paper-clip';\n case 'Date':\n return 'calendar';\n case 'Duration':\n return 'time';\n case 'Progress':\n return 'progress';\n default:\n throw Error(`unsupported data type: ${params.type satisfies never} for PlAgColumnHeader component. Column ${params.column.getColId()}`);\n }\n});\n\nconst sortDirection = ref<SortDirection>(null);\nconst refreshSortDirection = () => (sortDirection.value = params.column.getSort() ?? null);\nonMounted(() => refreshSortDirection());\nfunction onSortRequested() {\n if (params.column.isSortable()) {\n params.progressSort();\n refreshSortDirection();\n }\n}\nconst sortIcon = computed<MaskIconName16 | null>(() => {\n const direction = sortDirection.value;\n switch (direction) {\n case 'asc':\n return 'arrow-up';\n case 'desc':\n return 'arrow-down';\n case null:\n return null;\n default:\n throw Error(`unsupported sort direction: ${direction satisfies never}. Column ${params.column.getColId()}`);\n }\n});\n\nconst menuActivatorBtn = ref<HTMLElement>();\nfunction showMenu() {\n const menuActivatorBtnValue = menuActivatorBtn.value;\n if (menuActivatorBtnValue) params.showColumnMenu(menuActivatorBtnValue);\n}\n</script>\n\n<template>\n <div class=\"pl-ag-column-header d-flex align-center gap-6\" @click=\"onSortRequested\">\n <PlTooltip>\n <template v-if=\"params.tooltip\" #tooltip>{{ params.tooltip }}</template>\n <div class=\"pl-ag-column-header__title d-flex align-center gap-6 flex-grow-1\">\n <PlMaskIcon16 :name=\"icon\" class=\"pl-ag-column-header__type-icon\" />\n <span>{{ params.displayName }}</span>\n <PlMaskIcon16 v-if=\"sortIcon\" :name=\"sortIcon\" />\n </div>\n </PlTooltip>\n <div v-if=\"params.enableMenu\" ref=\"menuActivatorBtn\" class=\"pl-ag-column-header__menu-icon\" @click.stop=\"showMenu\">\n <PlMaskIcon16 name=\"more\" />\n </div>\n </div>\n</template>\n"],"names":["icon","computed","__props","sortDirection","ref","refreshSortDirection","onMounted","onSortRequested","sortIcon","direction","menuActivatorBtn","showMenu","menuActivatorBtnValue"],"mappings":";;;;;;;;;AAUA,UAAMA,IAAOC,EAAyB,MAAM;AAC1C,cAAQC,EAAA,OAAO,MAAA;AAAA,QACb,KAAK;AAAA,QACL,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT;AACE,gBAAM,MAAM,0BAA0BA,EAAA,OAAO,IAAoB,2CAA2CA,EAAA,OAAO,OAAO,SAAA,CAAU,EAAE;AAAA,MAAA;AAAA,IAE5I,CAAC,GAEKC,IAAgBC,EAAmB,IAAI,GACvCC,IAAuB,MAAOF,EAAc,QAAQD,SAAO,OAAO,aAAa;AACrF,IAAAI,EAAU,MAAMD,GAAsB;AACtC,aAASE,IAAkB;AACzB,MAAIL,EAAA,OAAO,OAAO,WAAA,MAChBA,SAAO,aAAA,GACPG,EAAA;AAAA,IAEJ;AACA,UAAMG,IAAWP,EAAgC,MAAM;AACrD,YAAMQ,IAAYN,EAAc;AAChC,cAAQM,GAAA;AAAA,QACN,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT;AACE,gBAAM,MAAM,+BAA+BA,CAAyB,YAAYP,EAAA,OAAO,OAAO,SAAA,CAAU,EAAE;AAAA,MAAA;AAAA,IAEhH,CAAC,GAEKQ,IAAmBN,EAAA;AACzB,aAASO,IAAW;AAClB,YAAMC,IAAwBF,EAAiB;AAC/C,MAAIE,KAAuBV,EAAA,OAAO,eAAeU,CAAqB;AAAA,IACxE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { canonicalizeJson as
|
|
1
|
+
import { canonicalizeJson as M, getAxisId as A, isLabelColumn as V, isColumnHidden as _, readAnnotationJson as E, Annotation as S, matchAxisId as F, readAnnotation as $, isColumnOptional as z, ValueType as l, pTableValue as N, isPTableValueAxis as K } from "@platforma-sdk/model";
|
|
2
2
|
import j from "../../PlAgColumnHeader/PlAgColumnHeader.vue.js";
|
|
3
3
|
import U from "../../PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue.js";
|
|
4
4
|
import { PTableHidden as W } from "./common.js";
|
|
5
5
|
import { defaultMainMenuItems as Q } from "./menu-items.js";
|
|
6
6
|
import { makeRowNumberColDef as X, PlAgDataTableRowNumberColId as Y } from "./row-number.js";
|
|
7
7
|
import { getColumnRenderingSpec as Z } from "./value-rendering.js";
|
|
8
|
-
import { isJsonEqual as
|
|
8
|
+
import { isJsonEqual as J } from "../../../lib/util/helpers/dist/objects.js";
|
|
9
9
|
function B(r) {
|
|
10
10
|
switch (r.type) {
|
|
11
11
|
case "axis":
|
|
12
12
|
return {
|
|
13
13
|
type: "axis",
|
|
14
|
-
id:
|
|
14
|
+
id: A(r.spec)
|
|
15
15
|
};
|
|
16
16
|
case "column":
|
|
17
17
|
return {
|
|
@@ -20,17 +20,17 @@ function B(r) {
|
|
|
20
20
|
};
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
|
-
function ee(r, o,
|
|
23
|
+
function ee(r, o, w, d) {
|
|
24
24
|
const c = [];
|
|
25
25
|
for (let f = 0; f < o[0].data.length; ++f) {
|
|
26
|
-
const p =
|
|
27
|
-
const
|
|
28
|
-
if (!K(
|
|
29
|
-
throw new Error(`axis value is not a PTableValueAxis: ${JSON.stringify(
|
|
30
|
-
return
|
|
31
|
-
}), u = { id:
|
|
32
|
-
r.forEach((n,
|
|
33
|
-
u[n.toString()] = d[
|
|
26
|
+
const p = w.map((n) => {
|
|
27
|
+
const s = N(o[d[n]], f);
|
|
28
|
+
if (!K(s))
|
|
29
|
+
throw new Error(`axis value is not a PTableValueAxis: ${JSON.stringify(s)}`);
|
|
30
|
+
return s;
|
|
31
|
+
}), u = { id: M(p), axesKey: p };
|
|
32
|
+
r.forEach((n, s) => {
|
|
33
|
+
u[n.toString()] = d[s] === -1 ? W : N(o[d[s]], f);
|
|
34
34
|
}), c.push(u);
|
|
35
35
|
}
|
|
36
36
|
return c;
|
|
@@ -38,139 +38,139 @@ function ee(r, o, h, d) {
|
|
|
38
38
|
async function de({
|
|
39
39
|
generation: r,
|
|
40
40
|
pfDriver: o,
|
|
41
|
-
model:
|
|
41
|
+
model: w,
|
|
42
42
|
sheets: d,
|
|
43
43
|
dataRenderedTracker: c,
|
|
44
44
|
hiddenColIds: f,
|
|
45
45
|
cellButtonAxisParams: p
|
|
46
46
|
}) {
|
|
47
|
-
const
|
|
48
|
-
if (
|
|
49
|
-
const
|
|
50
|
-
if (
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
),
|
|
47
|
+
const a = r.value, u = new Error("table state generation changed"), n = await o.getSpec(w.fullTableHandle);
|
|
48
|
+
if (a !== r.value) throw u;
|
|
49
|
+
const s = w.visibleTableHandle, I = await o.getSpec(s);
|
|
50
|
+
if (a !== r.value) throw u;
|
|
51
|
+
const g = (e) => M(B(e)), b = new Map(
|
|
52
|
+
I.entries().map(([e, t]) => [g(t), e])
|
|
53
|
+
), v = new Map(
|
|
54
54
|
n.entries().map(([e, t]) => {
|
|
55
|
-
const i =
|
|
55
|
+
const i = b.get(g(t)) ?? -1;
|
|
56
56
|
if (i === -1 && t.type === "axis")
|
|
57
57
|
throw new Error(`axis ${JSON.stringify(t.spec)} not present in join result`);
|
|
58
58
|
return [e, i];
|
|
59
59
|
})
|
|
60
|
-
),
|
|
61
|
-
|
|
62
|
-
},
|
|
60
|
+
), D = d.map((e) => A(e.axis)), x = (e) => D.some((t) => F(t, e)), C = [], L = (e, t) => {
|
|
61
|
+
C.some((i) => F(i.axisId, e)) ? console.warn(`multiple label columns match axisId: ${JSON.stringify(e)}`) : C.push({ axisId: e, labelColumnIdx: t });
|
|
62
|
+
}, P = (e) => {
|
|
63
63
|
var t;
|
|
64
|
-
return ((t =
|
|
64
|
+
return ((t = C.find((i) => F(i.axisId, e))) == null ? void 0 : t.labelColumnIdx) ?? -1;
|
|
65
65
|
};
|
|
66
66
|
let y = n.entries().filter(
|
|
67
67
|
([e, t]) => {
|
|
68
68
|
switch (t.type) {
|
|
69
69
|
case "axis":
|
|
70
|
-
return !
|
|
70
|
+
return !x(t.id);
|
|
71
71
|
case "column":
|
|
72
|
-
if (
|
|
73
|
-
const i =
|
|
74
|
-
return
|
|
72
|
+
if (V(t.spec)) {
|
|
73
|
+
const i = A(t.spec.axesSpec[0]);
|
|
74
|
+
return x(i) || L(i, e), !1;
|
|
75
75
|
}
|
|
76
|
-
return !
|
|
76
|
+
return !_(t.spec);
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
79
|
).map(([e]) => e).toArray();
|
|
80
80
|
y.sort((e, t) => {
|
|
81
81
|
if (n[e].type !== n[t].type) return n[e].type === "axis" ? -1 : 1;
|
|
82
|
-
const i = E(n[e].spec,
|
|
82
|
+
const i = E(n[e].spec, S.Table.OrderPriority), m = E(n[t].spec, S.Table.OrderPriority);
|
|
83
83
|
return i === void 0 ? m === void 0 ? 0 : 1 : m === void 0 ? -1 : m - i;
|
|
84
84
|
});
|
|
85
85
|
const k = [...y];
|
|
86
86
|
y = y.map((e) => {
|
|
87
87
|
const t = n[e];
|
|
88
88
|
if (t.type === "axis") {
|
|
89
|
-
const i =
|
|
89
|
+
const i = P(t.id);
|
|
90
90
|
if (i !== -1)
|
|
91
91
|
return i;
|
|
92
92
|
}
|
|
93
93
|
return e;
|
|
94
94
|
});
|
|
95
|
-
const
|
|
95
|
+
const G = [
|
|
96
96
|
X(),
|
|
97
97
|
...k.map((e, t) => te(e, n[e], n[y[t]], f, p))
|
|
98
|
-
], q = n.values().filter((e) => e.type === "axis").map((e) => e.spec).toArray(),
|
|
98
|
+
], q = n.values().filter((e) => e.type === "axis").map((e) => e.spec).toArray(), H = q.keys().map((e) => {
|
|
99
99
|
let t = y.indexOf(e);
|
|
100
100
|
return t === -1 && (t = y.length, y.push(e)), t;
|
|
101
|
-
}).toArray(),
|
|
101
|
+
}).toArray(), T = [], R = [];
|
|
102
102
|
y.forEach((e) => {
|
|
103
|
-
const t =
|
|
104
|
-
t !== -1 ? (
|
|
103
|
+
const t = v.get(e);
|
|
104
|
+
t !== -1 ? (R.push(T.length), T.push(t)) : R.push(-1);
|
|
105
105
|
});
|
|
106
|
-
let
|
|
106
|
+
let h = -1, O;
|
|
107
107
|
return {
|
|
108
108
|
axesSpec: q,
|
|
109
|
-
columnDefs:
|
|
109
|
+
columnDefs: G,
|
|
110
110
|
serverSideDatasource: {
|
|
111
111
|
getRows: async (e) => {
|
|
112
|
-
if (
|
|
112
|
+
if (a !== r.value) return e.fail();
|
|
113
113
|
try {
|
|
114
|
-
if (
|
|
115
|
-
const m = await o.getShape(
|
|
116
|
-
if (
|
|
117
|
-
|
|
114
|
+
if (h === -1) {
|
|
115
|
+
const m = await o.getShape(s);
|
|
116
|
+
if (a !== r.value || e.api.isDestroyed()) return e.fail();
|
|
117
|
+
h = m.rows;
|
|
118
118
|
}
|
|
119
|
-
if (
|
|
120
|
-
e.success({ rowData: [], rowCount:
|
|
119
|
+
if (h == 0) {
|
|
120
|
+
e.success({ rowData: [], rowCount: h }), e.api.setGridOption("loading", !1), e.api.showNoRowsOverlay();
|
|
121
121
|
return;
|
|
122
122
|
}
|
|
123
|
-
if (
|
|
124
|
-
return e.success({ rowData: [], rowCount:
|
|
125
|
-
|
|
123
|
+
if (O && !J(O.request.sortModel, e.request.sortModel))
|
|
124
|
+
return e.success({ rowData: [], rowCount: h });
|
|
125
|
+
O = e;
|
|
126
126
|
let t = 0, i = [];
|
|
127
|
-
if (
|
|
128
|
-
const m = await o.getData(
|
|
127
|
+
if (h > 0 && e.request.startRow !== void 0 && e.request.endRow !== void 0 && (t = Math.min(h, e.request.endRow) - e.request.startRow, t > 0)) {
|
|
128
|
+
const m = await o.getData(s, T, {
|
|
129
129
|
offset: e.request.startRow,
|
|
130
130
|
length: t
|
|
131
131
|
});
|
|
132
|
-
if (
|
|
133
|
-
i = ee(k, m,
|
|
132
|
+
if (a !== r.value || e.api.isDestroyed()) return e.fail();
|
|
133
|
+
i = ee(k, m, H, R);
|
|
134
134
|
}
|
|
135
|
-
e.success({ rowData: i, rowCount:
|
|
135
|
+
e.success({ rowData: i, rowCount: h }), e.api.autoSizeColumns(
|
|
136
136
|
e.api.getAllDisplayedColumns().filter((m) => m.getColId() !== Y)
|
|
137
137
|
), e.api.setGridOption("loading", !1), c.resolve(e.api);
|
|
138
138
|
} catch (t) {
|
|
139
|
-
if (
|
|
139
|
+
if (a !== r.value || e.api.isDestroyed()) return e.fail();
|
|
140
140
|
e.api.setGridOption("loading", !0), e.fail(), console.trace(t);
|
|
141
141
|
}
|
|
142
142
|
}
|
|
143
143
|
}
|
|
144
144
|
};
|
|
145
145
|
}
|
|
146
|
-
function te(r, o,
|
|
147
|
-
var n;
|
|
148
|
-
const f =
|
|
146
|
+
function te(r, o, w, d, c) {
|
|
147
|
+
var n, s;
|
|
148
|
+
const f = M({
|
|
149
149
|
source: o,
|
|
150
|
-
labeled:
|
|
151
|
-
}), p = o.type === "axis" ? o.spec.type : o.spec.valueType,
|
|
152
|
-
return
|
|
150
|
+
labeled: w
|
|
151
|
+
}), p = o.type === "axis" ? o.spec.type : o.spec.valueType, a = Z(o), u = {};
|
|
152
|
+
return a.fontFamily && (a.fontFamily === "monospace" ? (u.fontFamily = "Spline Sans Mono", u.fontWeight = 300) : u.fontFamily = a.fontFamily), {
|
|
153
153
|
colId: f,
|
|
154
154
|
mainMenuItems: Q,
|
|
155
155
|
context: o,
|
|
156
156
|
field: `${r}`,
|
|
157
|
-
headerName: ((n =
|
|
157
|
+
headerName: ((n = $(w.spec, S.Label)) == null ? void 0 : n.trim()) ?? `Unlabeled ${o.type} ${r}`,
|
|
158
158
|
lockPosition: o.type === "axis",
|
|
159
|
-
hide: (d == null ? void 0 : d.includes(f)) ??
|
|
160
|
-
valueFormatter:
|
|
159
|
+
hide: (d == null ? void 0 : d.includes(f)) ?? z(o.spec),
|
|
160
|
+
valueFormatter: a.valueFormatter,
|
|
161
161
|
headerComponent: j,
|
|
162
|
-
cellRendererSelector: c != null && c.showCellButtonForAxisId ? (
|
|
163
|
-
var
|
|
162
|
+
cellRendererSelector: c != null && c.showCellButtonForAxisId ? (I) => {
|
|
163
|
+
var b, v;
|
|
164
164
|
if (o.type !== "axis") return;
|
|
165
|
-
const
|
|
166
|
-
if (
|
|
165
|
+
const g = (v = (b = I.colDef) == null ? void 0 : b.context) == null ? void 0 : v.id;
|
|
166
|
+
if (J(g, c.showCellButtonForAxisId))
|
|
167
167
|
return {
|
|
168
168
|
component: U,
|
|
169
169
|
params: {
|
|
170
170
|
invokeRowsOnDoubleClick: c.cellButtonInvokeRowsOnDoubleClick,
|
|
171
|
-
onClick: (
|
|
172
|
-
var
|
|
173
|
-
c.trigger((
|
|
171
|
+
onClick: (D) => {
|
|
172
|
+
var x;
|
|
173
|
+
c.trigger((x = D.data) == null ? void 0 : x.axesKey);
|
|
174
174
|
}
|
|
175
175
|
}
|
|
176
176
|
};
|
|
@@ -190,7 +190,8 @@ function te(r, o, h, d, c) {
|
|
|
190
190
|
default:
|
|
191
191
|
throw Error(`unsupported data type: ${p}`);
|
|
192
192
|
}
|
|
193
|
-
})()
|
|
193
|
+
})(),
|
|
194
|
+
tooltip: (s = $(w.spec, S.Description)) == null ? void 0 : s.trim()
|
|
194
195
|
},
|
|
195
196
|
cellDataType: (() => {
|
|
196
197
|
switch (p) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-source-v2.js","sources":["../../../../src/components/PlAgDataTable/sources/table-source-v2.ts"],"sourcesContent":["import type {\n AxesSpec,\n PTableColumnId,\n PTableColumnSpecColumn,\n PTableValue,\n PTableValueAxis,\n} from '@platforma-sdk/model';\nimport {\n canonicalizeJson,\n getAxisId,\n isColumnOptional,\n pTableValue,\n type PFrameDriver,\n type PlDataTableSheet,\n type PTableVector,\n type AxisId,\n type PlDataTableModel,\n type PTableColumnSpec,\n type PTableKey,\n type PlTableColumnId,\n type PlTableColumnIdJson,\n isLabelColumn as isLabelColumnSpec,\n isColumnHidden,\n matchAxisId,\n isPTableValueAxis,\n readAnnotation,\n Annotation,\n ValueType,\n readAnnotationJson,\n} from '@platforma-sdk/model';\nimport type {\n CellStyle,\n ColDef,\n GridApi,\n ICellRendererParams,\n IServerSideDatasource,\n IServerSideGetRowsParams,\n ManagedGridOptions,\n} from 'ag-grid-enterprise';\nimport type { PlAgHeaderComponentParams, PlAgHeaderComponentType } from '../../PlAgColumnHeader';\nimport { PlAgColumnHeader } from '../../PlAgColumnHeader';\nimport { PlAgTextAndButtonCell } from '../../PlAgTextAndButtonCell';\nimport type { PlAgDataTableV2Row, PlTableRowId } from '../types';\nimport {\n PTableHidden,\n} from './common';\nimport { defaultMainMenuItems } from './menu-items';\nimport { makeRowNumberColDef, PlAgDataTableRowNumberColId } from './row-number';\nimport { getColumnRenderingSpec } from './value-rendering';\nimport type { Ref } from 'vue';\nimport { isJsonEqual } from '@milaboratories/helpers';\nimport type { DeferredCircular } from './focus-row';\n\nexport function isLabelColumn(column: PTableColumnSpec): column is PTableColumnSpecColumn {\n return column.type === 'column' && isLabelColumnSpec(column.spec);\n}\n\nexport function getPTableColumnId(spec: PTableColumnSpec): PTableColumnId {\n switch (spec.type) {\n case 'axis':\n return {\n type: 'axis',\n id: getAxisId(spec.spec),\n };\n case 'column':\n return {\n type: 'column',\n id: spec.id,\n };\n }\n}\n\n/** Convert columnar data from the driver to rows, used by ag-grid */\nfunction columns2rows(\n fields: number[],\n columns: PTableVector[],\n axes: number[],\n resultMapping: number[],\n): PlAgDataTableV2Row[] {\n const rowData: PlAgDataTableV2Row[] = [];\n for (let iRow = 0; iRow < columns[0].data.length; ++iRow) {\n const axesKey: PTableValueAxis[] = axes\n .map((iAxis) => {\n const value = pTableValue(columns[resultMapping[iAxis]], iRow);\n if (!isPTableValueAxis(value))\n throw new Error(`axis value is not a PTableValueAxis: ${JSON.stringify(value)}`);\n return value;\n });\n const id = canonicalizeJson<PlTableRowId>(axesKey);\n const row: PlAgDataTableV2Row = { id, axesKey };\n fields.forEach((field, iCol) => {\n row[field.toString() as `${number}`] = resultMapping[iCol] === -1\n ? PTableHidden\n : pTableValue(columns[resultMapping[iCol]], iRow);\n });\n rowData.push(row);\n }\n return rowData;\n}\n\n/** Calculate GridOptions for selected p-table data source */\nexport async function calculateGridOptions({\n generation,\n pfDriver,\n model,\n sheets,\n dataRenderedTracker,\n hiddenColIds,\n cellButtonAxisParams,\n}: {\n generation: Ref<number>;\n pfDriver: PFrameDriver;\n model: PlDataTableModel;\n sheets: PlDataTableSheet[];\n dataRenderedTracker: DeferredCircular<GridApi<PlAgDataTableV2Row>>;\n hiddenColIds?: PlTableColumnIdJson[];\n cellButtonAxisParams?: PlAgCellButtonAxisParams;\n}): Promise<Pick<ManagedGridOptions<PlAgDataTableV2Row>, 'columnDefs' | 'serverSideDatasource'> & { axesSpec: AxesSpec }> {\n const stateGeneration = generation.value;\n const stateChangedError = new Error('table state generation changed');\n\n // get specs of the full table\n const specs = await pfDriver.getSpec(model.fullTableHandle);\n if (stateGeneration !== generation.value) throw stateChangedError;\n\n // get specs of the visible table (with hidden columns omitted)\n const pt = model.visibleTableHandle;\n const dataSpecs = await pfDriver.getSpec(pt);\n if (stateGeneration !== generation.value) throw stateChangedError;\n\n // create index mapping from full specs to visible subset (hidden columns would have -1)\n const specId = (spec: PTableColumnSpec) => canonicalizeJson<PTableColumnId>(getPTableColumnId(spec));\n const dataSpecsMap = new Map(\n dataSpecs.entries().map(([i, spec]) => [specId(spec), i]),\n );\n const specsToDataSpecsMapping = new Map(\n specs.entries().map(([i, spec]) => {\n const dataSpecIdx = dataSpecsMap.get(specId(spec)) ?? -1;\n if (dataSpecIdx === -1 && spec.type === 'axis')\n throw new Error(`axis ${JSON.stringify(spec.spec)} not present in join result`);\n return [i, dataSpecIdx];\n }),\n );\n\n // gether indices of columns that would be displayed in the table\n\n const sheetAxesIds = sheets.map((sheet) => getAxisId(sheet.axis));\n const isPartitionedAxis = (axisId: AxisId) => sheetAxesIds.some((id) => matchAxisId(id, axisId));\n\n const labelColumns: { axisId: AxisId; labelColumnIdx: number }[] = [];\n const setLabelColumnIndex = (axisId: AxisId, labelColumnIdx: number) => {\n if (!labelColumns.some((info) => matchAxisId(info.axisId, axisId))) {\n labelColumns.push({ axisId, labelColumnIdx });\n } else {\n console.warn(`multiple label columns match axisId: ${JSON.stringify(axisId)}`);\n }\n };\n const getLabelColumnIndex = (axisId: AxisId) => {\n return labelColumns.find((info) => matchAxisId(info.axisId, axisId))?.labelColumnIdx ?? -1;\n };\n\n // filter out partitioned axes, label columns and hidden columns\n let indices = specs.entries()\n .filter(\n ([i, spec]) => {\n switch (spec.type) {\n case 'axis': return !isPartitionedAxis(spec.id);\n case 'column':\n if (isLabelColumnSpec(spec.spec)) {\n const labeledAxisId = getAxisId(spec.spec.axesSpec[0]);\n if (!isPartitionedAxis(labeledAxisId)) {\n setLabelColumnIndex(labeledAxisId, i);\n }\n return false;\n }\n return !isColumnHidden(spec.spec);\n }\n },\n )\n .map(([i]) => i)\n .toArray();\n\n // order columns by priority\n indices.sort((a, b) => {\n if (specs[a].type !== specs[b].type) return specs[a].type === 'axis' ? -1 : 1;\n\n const aPriority = readAnnotationJson(specs[a].spec, Annotation.Table.OrderPriority);\n const bPriority = readAnnotationJson(specs[b].spec, Annotation.Table.OrderPriority);\n\n if (aPriority === undefined) return bPriority === undefined ? 0 : 1;\n if (bPriority === undefined) return -1;\n return bPriority - aPriority;\n });\n\n // fields are indices of columns that would go to columnDefs\n const fields = [...indices];\n // replace axes with label columns\n indices = indices.map((i) => {\n const spec = specs[i];\n if (spec.type === 'axis') {\n const labelColumnIdx = getLabelColumnIndex(spec.id);\n if (labelColumnIdx !== -1) {\n return labelColumnIdx;\n }\n }\n return i;\n });\n const columnDefs: ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden>[] = [\n makeRowNumberColDef(),\n ...fields.map((field, index) => makeColDef(field, specs[field], specs[indices[index]], hiddenColIds, cellButtonAxisParams)),\n ];\n\n // mix in indices of skipped axes (axes that were partitioned or replaced with label columns)\n const axesSpec = specs.values().filter((spec) => spec.type === 'axis').map((spec) => spec.spec).toArray();\n const axes = axesSpec.keys()\n .map((i) => {\n let r = indices.indexOf(i);\n if (r === -1) {\n r = indices.length;\n indices.push(i);\n }\n return r;\n })\n .toArray();\n\n const requestIndices: number[] = [];\n const resultMapping: number[] = [];\n indices.forEach((idx) => {\n const dataSpecIdx = specsToDataSpecsMapping.get(idx)!;\n if (dataSpecIdx !== -1) {\n resultMapping.push(requestIndices.length);\n requestIndices.push(dataSpecIdx);\n } else {\n resultMapping.push(-1);\n }\n });\n\n let rowCount = -1;\n let lastParams: IServerSideGetRowsParams | undefined = undefined;\n const serverSideDatasource: IServerSideDatasource<PlAgDataTableV2Row> = {\n getRows: async (params: IServerSideGetRowsParams) => {\n if (stateGeneration !== generation.value) return params.fail();\n try {\n if (rowCount === -1) {\n const ptShape = await pfDriver.getShape(pt);\n if (stateGeneration !== generation.value || params.api.isDestroyed()) return params.fail();\n rowCount = ptShape.rows;\n }\n\n if (rowCount == 0) {\n params.success({ rowData: [], rowCount });\n // Warning: AgGrid cannot show two overlays at once,\n // so first hide loading overlay, then show no rows overlay\n params.api.setGridOption('loading', false);\n params.api.showNoRowsOverlay();\n return;\n }\n\n // If sort has changed - show skeletons instead of data\n if (lastParams && !isJsonEqual(lastParams.request.sortModel, params.request.sortModel)) {\n return params.success({ rowData: [], rowCount });\n }\n lastParams = params;\n\n let length = 0;\n let rowData: PlAgDataTableV2Row[] = [];\n if (rowCount > 0 && params.request.startRow !== undefined && params.request.endRow !== undefined) {\n length = Math.min(rowCount, params.request.endRow) - params.request.startRow;\n if (length > 0) {\n const data = await pfDriver.getData(pt, requestIndices, {\n offset: params.request.startRow,\n length,\n });\n if (stateGeneration !== generation.value || params.api.isDestroyed()) return params.fail();\n rowData = columns2rows(fields, data, axes, resultMapping);\n }\n }\n\n params.success({ rowData, rowCount });\n params.api.autoSizeColumns(\n params.api.getAllDisplayedColumns()\n .filter((column) => column.getColId() !== PlAgDataTableRowNumberColId),\n );\n params.api.setGridOption('loading', false);\n dataRenderedTracker.resolve(params.api);\n } catch (error: unknown) {\n if (stateGeneration !== generation.value || params.api.isDestroyed()) return params.fail();\n params.api.setGridOption('loading', true);\n params.fail();\n console.trace(error);\n }\n },\n };\n\n return {\n axesSpec,\n columnDefs,\n serverSideDatasource,\n };\n}\n\nexport type PlAgCellButtonAxisParams = {\n showCellButtonForAxisId?: AxisId;\n cellButtonInvokeRowsOnDoubleClick?: boolean;\n trigger: (key?: PTableKey) => void;\n};\n\n/**\n * Calculates column definition for a given p-table column\n */\nexport function makeColDef(\n iCol: number,\n spec: PTableColumnSpec,\n labeledSpec: PTableColumnSpec,\n hiddenColIds: PlTableColumnIdJson[] | undefined,\n cellButtonAxisParams?: PlAgCellButtonAxisParams,\n): ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden> {\n const colId = canonicalizeJson<PlTableColumnId>({\n source: spec,\n labeled: labeledSpec,\n });\n const valueType = spec.type === 'axis' ? spec.spec.type : spec.spec.valueType;\n const columnRenderingSpec = getColumnRenderingSpec(spec);\n const cellStyle: CellStyle = {};\n if (columnRenderingSpec.fontFamily) {\n if (columnRenderingSpec.fontFamily === 'monospace') {\n cellStyle.fontFamily = 'Spline Sans Mono';\n cellStyle.fontWeight = 300;\n } else {\n cellStyle.fontFamily = columnRenderingSpec.fontFamily;\n }\n }\n return {\n colId,\n mainMenuItems: defaultMainMenuItems,\n context: spec,\n field: `${iCol}`,\n headerName: readAnnotation(labeledSpec.spec, Annotation.Label)?.trim() ?? `Unlabeled ${spec.type} ${iCol}`,\n lockPosition: spec.type === 'axis',\n hide: hiddenColIds?.includes(colId) ?? isColumnOptional(spec.spec),\n valueFormatter: columnRenderingSpec.valueFormatter,\n headerComponent: PlAgColumnHeader,\n cellRendererSelector: cellButtonAxisParams?.showCellButtonForAxisId\n ? (params: ICellRendererParams) => {\n if (spec.type !== 'axis') return;\n\n const axisId = (params.colDef?.context as PTableColumnSpec)?.id as AxisId;\n if (isJsonEqual(axisId, cellButtonAxisParams.showCellButtonForAxisId)) {\n return {\n component: PlAgTextAndButtonCell,\n params: {\n invokeRowsOnDoubleClick: cellButtonAxisParams.cellButtonInvokeRowsOnDoubleClick,\n onClick: (params: ICellRendererParams<PlAgDataTableV2Row>) => {\n cellButtonAxisParams.trigger(params.data?.axesKey);\n },\n },\n };\n }\n }\n : undefined,\n cellStyle,\n headerComponentParams: {\n type: ((): PlAgHeaderComponentType => {\n switch (valueType) {\n case ValueType.Int:\n case ValueType.Long:\n case ValueType.Float:\n case ValueType.Double:\n return 'Number';\n case ValueType.String:\n case ValueType.Bytes:\n return 'Text';\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n } satisfies PlAgHeaderComponentParams,\n cellDataType: (() => {\n switch (valueType) {\n case ValueType.Int:\n case ValueType.Long:\n case ValueType.Float:\n case ValueType.Double:\n return 'number';\n case ValueType.String:\n case ValueType.Bytes:\n return 'text';\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n };\n}\n"],"names":["getPTableColumnId","spec","getAxisId","columns2rows","fields","columns","axes","resultMapping","rowData","iRow","axesKey","iAxis","value","pTableValue","isPTableValueAxis","row","canonicalizeJson","field","iCol","PTableHidden","calculateGridOptions","generation","pfDriver","model","sheets","dataRenderedTracker","hiddenColIds","cellButtonAxisParams","stateGeneration","stateChangedError","specs","pt","dataSpecs","specId","dataSpecsMap","i","specsToDataSpecsMapping","dataSpecIdx","sheetAxesIds","sheet","isPartitionedAxis","axisId","id","matchAxisId","labelColumns","setLabelColumnIndex","labelColumnIdx","info","getLabelColumnIndex","_a","indices","isLabelColumnSpec","labeledAxisId","isColumnHidden","a","b","aPriority","readAnnotationJson","Annotation","bPriority","columnDefs","makeRowNumberColDef","index","makeColDef","axesSpec","r","requestIndices","idx","rowCount","lastParams","params","ptShape","isJsonEqual","length","data","column","PlAgDataTableRowNumberColId","error","labeledSpec","colId","valueType","columnRenderingSpec","getColumnRenderingSpec","cellStyle","defaultMainMenuItems","readAnnotation","isColumnOptional","PlAgColumnHeader","_b","PlAgTextAndButtonCell","ValueType"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"table-source-v2.js","sources":["../../../../src/components/PlAgDataTable/sources/table-source-v2.ts"],"sourcesContent":["import type {\n AxesSpec,\n PTableColumnId,\n PTableColumnSpecColumn,\n PTableValue,\n PTableValueAxis,\n} from '@platforma-sdk/model';\nimport {\n canonicalizeJson,\n getAxisId,\n isColumnOptional,\n pTableValue,\n type PFrameDriver,\n type PlDataTableSheet,\n type PTableVector,\n type AxisId,\n type PlDataTableModel,\n type PTableColumnSpec,\n type PTableKey,\n type PlTableColumnId,\n type PlTableColumnIdJson,\n isLabelColumn as isLabelColumnSpec,\n isColumnHidden,\n matchAxisId,\n isPTableValueAxis,\n readAnnotation,\n Annotation,\n ValueType,\n readAnnotationJson,\n} from '@platforma-sdk/model';\nimport type {\n CellStyle,\n ColDef,\n GridApi,\n ICellRendererParams,\n IServerSideDatasource,\n IServerSideGetRowsParams,\n ManagedGridOptions,\n} from 'ag-grid-enterprise';\nimport type { PlAgHeaderComponentParams, PlAgHeaderComponentType } from '../../PlAgColumnHeader';\nimport { PlAgColumnHeader } from '../../PlAgColumnHeader';\nimport { PlAgTextAndButtonCell } from '../../PlAgTextAndButtonCell';\nimport type { PlAgDataTableV2Row, PlTableRowId } from '../types';\nimport {\n PTableHidden,\n} from './common';\nimport { defaultMainMenuItems } from './menu-items';\nimport { makeRowNumberColDef, PlAgDataTableRowNumberColId } from './row-number';\nimport { getColumnRenderingSpec } from './value-rendering';\nimport type { Ref } from 'vue';\nimport { isJsonEqual } from '@milaboratories/helpers';\nimport type { DeferredCircular } from './focus-row';\n\nexport function isLabelColumn(column: PTableColumnSpec): column is PTableColumnSpecColumn {\n return column.type === 'column' && isLabelColumnSpec(column.spec);\n}\n\nexport function getPTableColumnId(spec: PTableColumnSpec): PTableColumnId {\n switch (spec.type) {\n case 'axis':\n return {\n type: 'axis',\n id: getAxisId(spec.spec),\n };\n case 'column':\n return {\n type: 'column',\n id: spec.id,\n };\n }\n}\n\n/** Convert columnar data from the driver to rows, used by ag-grid */\nfunction columns2rows(\n fields: number[],\n columns: PTableVector[],\n axes: number[],\n resultMapping: number[],\n): PlAgDataTableV2Row[] {\n const rowData: PlAgDataTableV2Row[] = [];\n for (let iRow = 0; iRow < columns[0].data.length; ++iRow) {\n const axesKey: PTableValueAxis[] = axes\n .map((iAxis) => {\n const value = pTableValue(columns[resultMapping[iAxis]], iRow);\n if (!isPTableValueAxis(value))\n throw new Error(`axis value is not a PTableValueAxis: ${JSON.stringify(value)}`);\n return value;\n });\n const id = canonicalizeJson<PlTableRowId>(axesKey);\n const row: PlAgDataTableV2Row = { id, axesKey };\n fields.forEach((field, iCol) => {\n row[field.toString() as `${number}`] = resultMapping[iCol] === -1\n ? PTableHidden\n : pTableValue(columns[resultMapping[iCol]], iRow);\n });\n rowData.push(row);\n }\n return rowData;\n}\n\n/** Calculate GridOptions for selected p-table data source */\nexport async function calculateGridOptions({\n generation,\n pfDriver,\n model,\n sheets,\n dataRenderedTracker,\n hiddenColIds,\n cellButtonAxisParams,\n}: {\n generation: Ref<number>;\n pfDriver: PFrameDriver;\n model: PlDataTableModel;\n sheets: PlDataTableSheet[];\n dataRenderedTracker: DeferredCircular<GridApi<PlAgDataTableV2Row>>;\n hiddenColIds?: PlTableColumnIdJson[];\n cellButtonAxisParams?: PlAgCellButtonAxisParams;\n}): Promise<Pick<ManagedGridOptions<PlAgDataTableV2Row>, 'columnDefs' | 'serverSideDatasource'> & { axesSpec: AxesSpec }> {\n const stateGeneration = generation.value;\n const stateChangedError = new Error('table state generation changed');\n\n // get specs of the full table\n const specs = await pfDriver.getSpec(model.fullTableHandle);\n if (stateGeneration !== generation.value) throw stateChangedError;\n\n // get specs of the visible table (with hidden columns omitted)\n const pt = model.visibleTableHandle;\n const dataSpecs = await pfDriver.getSpec(pt);\n if (stateGeneration !== generation.value) throw stateChangedError;\n\n // create index mapping from full specs to visible subset (hidden columns would have -1)\n const specId = (spec: PTableColumnSpec) => canonicalizeJson<PTableColumnId>(getPTableColumnId(spec));\n const dataSpecsMap = new Map(\n dataSpecs.entries().map(([i, spec]) => [specId(spec), i]),\n );\n const specsToDataSpecsMapping = new Map(\n specs.entries().map(([i, spec]) => {\n const dataSpecIdx = dataSpecsMap.get(specId(spec)) ?? -1;\n if (dataSpecIdx === -1 && spec.type === 'axis')\n throw new Error(`axis ${JSON.stringify(spec.spec)} not present in join result`);\n return [i, dataSpecIdx];\n }),\n );\n\n // gether indices of columns that would be displayed in the table\n\n const sheetAxesIds = sheets.map((sheet) => getAxisId(sheet.axis));\n const isPartitionedAxis = (axisId: AxisId) => sheetAxesIds.some((id) => matchAxisId(id, axisId));\n\n const labelColumns: { axisId: AxisId; labelColumnIdx: number }[] = [];\n const setLabelColumnIndex = (axisId: AxisId, labelColumnIdx: number) => {\n if (!labelColumns.some((info) => matchAxisId(info.axisId, axisId))) {\n labelColumns.push({ axisId, labelColumnIdx });\n } else {\n console.warn(`multiple label columns match axisId: ${JSON.stringify(axisId)}`);\n }\n };\n const getLabelColumnIndex = (axisId: AxisId) => {\n return labelColumns.find((info) => matchAxisId(info.axisId, axisId))?.labelColumnIdx ?? -1;\n };\n\n // filter out partitioned axes, label columns and hidden columns\n let indices = specs.entries()\n .filter(\n ([i, spec]) => {\n switch (spec.type) {\n case 'axis': return !isPartitionedAxis(spec.id);\n case 'column':\n if (isLabelColumnSpec(spec.spec)) {\n const labeledAxisId = getAxisId(spec.spec.axesSpec[0]);\n if (!isPartitionedAxis(labeledAxisId)) {\n setLabelColumnIndex(labeledAxisId, i);\n }\n return false;\n }\n return !isColumnHidden(spec.spec);\n }\n },\n )\n .map(([i]) => i)\n .toArray();\n\n // order columns by priority\n indices.sort((a, b) => {\n if (specs[a].type !== specs[b].type) return specs[a].type === 'axis' ? -1 : 1;\n\n const aPriority = readAnnotationJson(specs[a].spec, Annotation.Table.OrderPriority);\n const bPriority = readAnnotationJson(specs[b].spec, Annotation.Table.OrderPriority);\n\n if (aPriority === undefined) return bPriority === undefined ? 0 : 1;\n if (bPriority === undefined) return -1;\n return bPriority - aPriority;\n });\n\n // fields are indices of columns that would go to columnDefs\n const fields = [...indices];\n // replace axes with label columns\n indices = indices.map((i) => {\n const spec = specs[i];\n if (spec.type === 'axis') {\n const labelColumnIdx = getLabelColumnIndex(spec.id);\n if (labelColumnIdx !== -1) {\n return labelColumnIdx;\n }\n }\n return i;\n });\n const columnDefs: ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden>[] = [\n makeRowNumberColDef(),\n ...fields.map((field, index) => makeColDef(field, specs[field], specs[indices[index]], hiddenColIds, cellButtonAxisParams)),\n ];\n\n // mix in indices of skipped axes (axes that were partitioned or replaced with label columns)\n const axesSpec = specs.values().filter((spec) => spec.type === 'axis').map((spec) => spec.spec).toArray();\n const axes = axesSpec.keys()\n .map((i) => {\n let r = indices.indexOf(i);\n if (r === -1) {\n r = indices.length;\n indices.push(i);\n }\n return r;\n })\n .toArray();\n\n const requestIndices: number[] = [];\n const resultMapping: number[] = [];\n indices.forEach((idx) => {\n const dataSpecIdx = specsToDataSpecsMapping.get(idx)!;\n if (dataSpecIdx !== -1) {\n resultMapping.push(requestIndices.length);\n requestIndices.push(dataSpecIdx);\n } else {\n resultMapping.push(-1);\n }\n });\n\n let rowCount = -1;\n let lastParams: IServerSideGetRowsParams | undefined = undefined;\n const serverSideDatasource: IServerSideDatasource<PlAgDataTableV2Row> = {\n getRows: async (params: IServerSideGetRowsParams) => {\n if (stateGeneration !== generation.value) return params.fail();\n try {\n if (rowCount === -1) {\n const ptShape = await pfDriver.getShape(pt);\n if (stateGeneration !== generation.value || params.api.isDestroyed()) return params.fail();\n rowCount = ptShape.rows;\n }\n\n if (rowCount == 0) {\n params.success({ rowData: [], rowCount });\n // Warning: AgGrid cannot show two overlays at once,\n // so first hide loading overlay, then show no rows overlay\n params.api.setGridOption('loading', false);\n params.api.showNoRowsOverlay();\n return;\n }\n\n // If sort has changed - show skeletons instead of data\n if (lastParams && !isJsonEqual(lastParams.request.sortModel, params.request.sortModel)) {\n return params.success({ rowData: [], rowCount });\n }\n lastParams = params;\n\n let length = 0;\n let rowData: PlAgDataTableV2Row[] = [];\n if (rowCount > 0 && params.request.startRow !== undefined && params.request.endRow !== undefined) {\n length = Math.min(rowCount, params.request.endRow) - params.request.startRow;\n if (length > 0) {\n const data = await pfDriver.getData(pt, requestIndices, {\n offset: params.request.startRow,\n length,\n });\n if (stateGeneration !== generation.value || params.api.isDestroyed()) return params.fail();\n rowData = columns2rows(fields, data, axes, resultMapping);\n }\n }\n\n params.success({ rowData, rowCount });\n params.api.autoSizeColumns(\n params.api.getAllDisplayedColumns()\n .filter((column) => column.getColId() !== PlAgDataTableRowNumberColId),\n );\n params.api.setGridOption('loading', false);\n dataRenderedTracker.resolve(params.api);\n } catch (error: unknown) {\n if (stateGeneration !== generation.value || params.api.isDestroyed()) return params.fail();\n params.api.setGridOption('loading', true);\n params.fail();\n console.trace(error);\n }\n },\n };\n\n return {\n axesSpec,\n columnDefs,\n serverSideDatasource,\n };\n}\n\nexport type PlAgCellButtonAxisParams = {\n showCellButtonForAxisId?: AxisId;\n cellButtonInvokeRowsOnDoubleClick?: boolean;\n trigger: (key?: PTableKey) => void;\n};\n\n/**\n * Calculates column definition for a given p-table column\n */\nexport function makeColDef(\n iCol: number,\n spec: PTableColumnSpec,\n labeledSpec: PTableColumnSpec,\n hiddenColIds: PlTableColumnIdJson[] | undefined,\n cellButtonAxisParams?: PlAgCellButtonAxisParams,\n): ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden> {\n const colId = canonicalizeJson<PlTableColumnId>({\n source: spec,\n labeled: labeledSpec,\n });\n const valueType = spec.type === 'axis' ? spec.spec.type : spec.spec.valueType;\n const columnRenderingSpec = getColumnRenderingSpec(spec);\n const cellStyle: CellStyle = {};\n if (columnRenderingSpec.fontFamily) {\n if (columnRenderingSpec.fontFamily === 'monospace') {\n cellStyle.fontFamily = 'Spline Sans Mono';\n cellStyle.fontWeight = 300;\n } else {\n cellStyle.fontFamily = columnRenderingSpec.fontFamily;\n }\n }\n return {\n colId,\n mainMenuItems: defaultMainMenuItems,\n context: spec,\n field: `${iCol}`,\n headerName: readAnnotation(labeledSpec.spec, Annotation.Label)?.trim() ?? `Unlabeled ${spec.type} ${iCol}`,\n lockPosition: spec.type === 'axis',\n hide: hiddenColIds?.includes(colId) ?? isColumnOptional(spec.spec),\n valueFormatter: columnRenderingSpec.valueFormatter,\n headerComponent: PlAgColumnHeader,\n cellRendererSelector: cellButtonAxisParams?.showCellButtonForAxisId\n ? (params: ICellRendererParams) => {\n if (spec.type !== 'axis') return;\n\n const axisId = (params.colDef?.context as PTableColumnSpec)?.id as AxisId;\n if (isJsonEqual(axisId, cellButtonAxisParams.showCellButtonForAxisId)) {\n return {\n component: PlAgTextAndButtonCell,\n params: {\n invokeRowsOnDoubleClick: cellButtonAxisParams.cellButtonInvokeRowsOnDoubleClick,\n onClick: (params: ICellRendererParams<PlAgDataTableV2Row>) => {\n cellButtonAxisParams.trigger(params.data?.axesKey);\n },\n },\n };\n }\n }\n : undefined,\n cellStyle,\n headerComponentParams: {\n type: ((): PlAgHeaderComponentType => {\n switch (valueType) {\n case ValueType.Int:\n case ValueType.Long:\n case ValueType.Float:\n case ValueType.Double:\n return 'Number';\n case ValueType.String:\n case ValueType.Bytes:\n return 'Text';\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n tooltip: readAnnotation(labeledSpec.spec, Annotation.Description)?.trim(),\n } satisfies PlAgHeaderComponentParams,\n cellDataType: (() => {\n switch (valueType) {\n case ValueType.Int:\n case ValueType.Long:\n case ValueType.Float:\n case ValueType.Double:\n return 'number';\n case ValueType.String:\n case ValueType.Bytes:\n return 'text';\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n };\n}\n"],"names":["getPTableColumnId","spec","getAxisId","columns2rows","fields","columns","axes","resultMapping","rowData","iRow","axesKey","iAxis","value","pTableValue","isPTableValueAxis","row","canonicalizeJson","field","iCol","PTableHidden","calculateGridOptions","generation","pfDriver","model","sheets","dataRenderedTracker","hiddenColIds","cellButtonAxisParams","stateGeneration","stateChangedError","specs","pt","dataSpecs","specId","dataSpecsMap","i","specsToDataSpecsMapping","dataSpecIdx","sheetAxesIds","sheet","isPartitionedAxis","axisId","id","matchAxisId","labelColumns","setLabelColumnIndex","labelColumnIdx","info","getLabelColumnIndex","_a","indices","isLabelColumnSpec","labeledAxisId","isColumnHidden","a","b","aPriority","readAnnotationJson","Annotation","bPriority","columnDefs","makeRowNumberColDef","index","makeColDef","axesSpec","r","requestIndices","idx","rowCount","lastParams","params","ptShape","isJsonEqual","length","data","column","PlAgDataTableRowNumberColId","error","labeledSpec","colId","valueType","columnRenderingSpec","getColumnRenderingSpec","cellStyle","defaultMainMenuItems","readAnnotation","isColumnOptional","PlAgColumnHeader","_b","PlAgTextAndButtonCell","ValueType"],"mappings":";;;;;;;;AAyDO,SAASA,EAAkBC,GAAwC;AACxE,UAAQA,EAAK,MAAA;AAAA,IACX,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,IAAIC,EAAUD,EAAK,IAAI;AAAA,MAAA;AAAA,IAE3B,KAAK;AACH,aAAO;AAAA,QACL,MAAM;AAAA,QACN,IAAIA,EAAK;AAAA,MAAA;AAAA,EACX;AAEN;AAGA,SAASE,GACPC,GACAC,GACAC,GACAC,GACsB;AACtB,QAAMC,IAAgC,CAAA;AACtC,WAASC,IAAO,GAAGA,IAAOJ,EAAQ,CAAC,EAAE,KAAK,QAAQ,EAAEI,GAAM;AACxD,UAAMC,IAA6BJ,EAChC,IAAI,CAACK,MAAU;AACd,YAAMC,IAAQC,EAAYR,EAAQE,EAAcI,CAAK,CAAC,GAAGF,CAAI;AAC7D,UAAI,CAACK,EAAkBF,CAAK;AAC1B,cAAM,IAAI,MAAM,wCAAwC,KAAK,UAAUA,CAAK,CAAC,EAAE;AACjF,aAAOA;AAAA,IACT,CAAC,GAEGG,IAA0B,EAAE,IADvBC,EAA+BN,CAAO,GACX,SAAAA,EAAA;AACtC,IAAAN,EAAO,QAAQ,CAACa,GAAOC,MAAS;AAC9B,MAAAH,EAAIE,EAAM,SAAA,CAAyB,IAAIV,EAAcW,CAAI,MAAM,KAC3DC,IACAN,EAAYR,EAAQE,EAAcW,CAAI,CAAC,GAAGT,CAAI;AAAA,IACpD,CAAC,GACDD,EAAQ,KAAKO,CAAG;AAAA,EAClB;AACA,SAAOP;AACT;AAGA,eAAsBY,GAAqB;AAAA,EACzC,YAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,sBAAAC;AACF,GAQ0H;AACxH,QAAMC,IAAkBP,EAAW,OAC7BQ,IAAoB,IAAI,MAAM,gCAAgC,GAG9DC,IAAQ,MAAMR,EAAS,QAAQC,EAAM,eAAe;AAC1D,MAAIK,MAAoBP,EAAW,MAAO,OAAMQ;AAGhD,QAAME,IAAKR,EAAM,oBACXS,IAAY,MAAMV,EAAS,QAAQS,CAAE;AAC3C,MAAIH,MAAoBP,EAAW,MAAO,OAAMQ;AAGhD,QAAMI,IAAS,CAAChC,MAA2Be,EAAiChB,EAAkBC,CAAI,CAAC,GAC7FiC,IAAe,IAAI;AAAA,IACvBF,EAAU,QAAA,EAAU,IAAI,CAAC,CAACG,GAAGlC,CAAI,MAAM,CAACgC,EAAOhC,CAAI,GAAGkC,CAAC,CAAC;AAAA,EAAA,GAEpDC,IAA0B,IAAI;AAAA,IAClCN,EAAM,UAAU,IAAI,CAAC,CAACK,GAAGlC,CAAI,MAAM;AACjC,YAAMoC,IAAcH,EAAa,IAAID,EAAOhC,CAAI,CAAC,KAAK;AACtD,UAAIoC,MAAgB,MAAMpC,EAAK,SAAS;AACtC,cAAM,IAAI,MAAM,QAAQ,KAAK,UAAUA,EAAK,IAAI,CAAC,6BAA6B;AAChF,aAAO,CAACkC,GAAGE,CAAW;AAAA,IACxB,CAAC;AAAA,EAAA,GAKGC,IAAed,EAAO,IAAI,CAACe,MAAUrC,EAAUqC,EAAM,IAAI,CAAC,GAC1DC,IAAoB,CAACC,MAAmBH,EAAa,KAAK,CAACI,MAAOC,EAAYD,GAAID,CAAM,CAAC,GAEzFG,IAA6D,CAAA,GAC7DC,IAAsB,CAACJ,GAAgBK,MAA2B;AACtE,IAAKF,EAAa,KAAK,CAACG,MAASJ,EAAYI,EAAK,QAAQN,CAAM,CAAC,IAG/D,QAAQ,KAAK,wCAAwC,KAAK,UAAUA,CAAM,CAAC,EAAE,IAF7EG,EAAa,KAAK,EAAE,QAAAH,GAAQ,gBAAAK,EAAA,CAAgB;AAAA,EAIhD,GACME,IAAsB,CAACP,MAAmB;;AAC9C,aAAOQ,IAAAL,EAAa,KAAK,CAACG,MAASJ,EAAYI,EAAK,QAAQN,CAAM,CAAC,MAA5D,gBAAAQ,EAA+D,mBAAkB;AAAA,EAC1F;AAGA,MAAIC,IAAUpB,EAAM,QAAA,EACjB;AAAA,IACC,CAAC,CAACK,GAAGlC,CAAI,MAAM;AACb,cAAQA,EAAK,MAAA;AAAA,QACX,KAAK;AAAQ,iBAAO,CAACuC,EAAkBvC,EAAK,EAAE;AAAA,QAC9C,KAAK;AACH,cAAIkD,EAAkBlD,EAAK,IAAI,GAAG;AAChC,kBAAMmD,IAAgBlD,EAAUD,EAAK,KAAK,SAAS,CAAC,CAAC;AACrD,mBAAKuC,EAAkBY,CAAa,KAClCP,EAAoBO,GAAejB,CAAC,GAE/B;AAAA,UACT;AACA,iBAAO,CAACkB,EAAepD,EAAK,IAAI;AAAA,MAAA;AAAA,IAEtC;AAAA,EAAA,EAED,IAAI,CAAC,CAACkC,CAAC,MAAMA,CAAC,EACd,QAAA;AAGH,EAAAe,EAAQ,KAAK,CAACI,GAAGC,MAAM;AACrB,QAAIzB,EAAMwB,CAAC,EAAE,SAASxB,EAAMyB,CAAC,EAAE,KAAM,QAAOzB,EAAMwB,CAAC,EAAE,SAAS,SAAS,KAAK;AAE5E,UAAME,IAAYC,EAAmB3B,EAAMwB,CAAC,EAAE,MAAMI,EAAW,MAAM,aAAa,GAC5EC,IAAYF,EAAmB3B,EAAMyB,CAAC,EAAE,MAAMG,EAAW,MAAM,aAAa;AAElF,WAAIF,MAAc,SAAkBG,MAAc,SAAY,IAAI,IAC9DA,MAAc,SAAkB,KAC7BA,IAAYH;AAAA,EACrB,CAAC;AAGD,QAAMpD,IAAS,CAAC,GAAG8C,CAAO;AAE1B,EAAAA,IAAUA,EAAQ,IAAI,CAACf,MAAM;AAC3B,UAAMlC,IAAO6B,EAAMK,CAAC;AACpB,QAAIlC,EAAK,SAAS,QAAQ;AACxB,YAAM6C,IAAiBE,EAAoB/C,EAAK,EAAE;AAClD,UAAI6C,MAAmB;AACrB,eAAOA;AAAA,IAEX;AACA,WAAOX;AAAA,EACT,CAAC;AACD,QAAMyB,IAAuE;AAAA,IAC3EC,EAAA;AAAA,IACA,GAAGzD,EAAO,IAAI,CAACa,GAAO6C,MAAUC,GAAW9C,GAAOa,EAAMb,CAAK,GAAGa,EAAMoB,EAAQY,CAAK,CAAC,GAAGpC,GAAcC,CAAoB,CAAC;AAAA,EAAA,GAItHqC,IAAWlC,EAAM,OAAA,EAAS,OAAO,CAAC7B,MAASA,EAAK,SAAS,MAAM,EAAE,IAAI,CAACA,MAASA,EAAK,IAAI,EAAE,QAAA,GAC1FK,IAAO0D,EAAS,KAAA,EACnB,IAAI,CAAC7B,MAAM;AACV,QAAI8B,IAAIf,EAAQ,QAAQf,CAAC;AACzB,WAAI8B,MAAM,OACRA,IAAIf,EAAQ,QACZA,EAAQ,KAAKf,CAAC,IAET8B;AAAA,EACT,CAAC,EACA,QAAA,GAEGC,IAA2B,CAAA,GAC3B3D,IAA0B,CAAA;AAChC,EAAA2C,EAAQ,QAAQ,CAACiB,MAAQ;AACvB,UAAM9B,IAAcD,EAAwB,IAAI+B,CAAG;AACnD,IAAI9B,MAAgB,MAClB9B,EAAc,KAAK2D,EAAe,MAAM,GACxCA,EAAe,KAAK7B,CAAW,KAE/B9B,EAAc,KAAK,EAAE;AAAA,EAEzB,CAAC;AAED,MAAI6D,IAAW,IACXC;AAwDJ,SAAO;AAAA,IACL,UAAAL;AAAA,IACA,YAAAJ;AAAA,IACA,sBA1DsE;AAAA,MACtE,SAAS,OAAOU,MAAqC;AACnD,YAAI1C,MAAoBP,EAAW,MAAO,QAAOiD,EAAO,KAAA;AACxD,YAAI;AACF,cAAIF,MAAa,IAAI;AACnB,kBAAMG,IAAU,MAAMjD,EAAS,SAASS,CAAE;AAC1C,gBAAIH,MAAoBP,EAAW,SAASiD,EAAO,IAAI,YAAA,EAAe,QAAOA,EAAO,KAAA;AACpF,YAAAF,IAAWG,EAAQ;AAAA,UACrB;AAEA,cAAIH,KAAY,GAAG;AACjB,YAAAE,EAAO,QAAQ,EAAE,SAAS,CAAA,GAAI,UAAAF,GAAU,GAGxCE,EAAO,IAAI,cAAc,WAAW,EAAK,GACzCA,EAAO,IAAI,kBAAA;AACX;AAAA,UACF;AAGA,cAAID,KAAc,CAACG,EAAYH,EAAW,QAAQ,WAAWC,EAAO,QAAQ,SAAS;AACnF,mBAAOA,EAAO,QAAQ,EAAE,SAAS,CAAA,GAAI,UAAAF,GAAU;AAEjD,UAAAC,IAAaC;AAEb,cAAIG,IAAS,GACTjE,IAAgC,CAAA;AACpC,cAAI4D,IAAW,KAAKE,EAAO,QAAQ,aAAa,UAAaA,EAAO,QAAQ,WAAW,WACrFG,IAAS,KAAK,IAAIL,GAAUE,EAAO,QAAQ,MAAM,IAAIA,EAAO,QAAQ,UAChEG,IAAS,IAAG;AACd,kBAAMC,IAAO,MAAMpD,EAAS,QAAQS,GAAImC,GAAgB;AAAA,cACtD,QAAQI,EAAO,QAAQ;AAAA,cACvB,QAAAG;AAAA,YAAA,CACD;AACD,gBAAI7C,MAAoBP,EAAW,SAASiD,EAAO,IAAI,YAAA,EAAe,QAAOA,EAAO,KAAA;AACpF,YAAA9D,IAAUL,GAAaC,GAAQsE,GAAMpE,GAAMC,CAAa;AAAA,UAC1D;AAGF,UAAA+D,EAAO,QAAQ,EAAE,SAAA9D,GAAS,UAAA4D,EAAA,CAAU,GACpCE,EAAO,IAAI;AAAA,YACTA,EAAO,IAAI,yBACR,OAAO,CAACK,MAAWA,EAAO,SAAA,MAAeC,CAA2B;AAAA,UAAA,GAEzEN,EAAO,IAAI,cAAc,WAAW,EAAK,GACzC7C,EAAoB,QAAQ6C,EAAO,GAAG;AAAA,QACxC,SAASO,GAAgB;AACvB,cAAIjD,MAAoBP,EAAW,SAASiD,EAAO,IAAI,YAAA,EAAe,QAAOA,EAAO,KAAA;AACpF,UAAAA,EAAO,IAAI,cAAc,WAAW,EAAI,GACxCA,EAAO,KAAA,GACP,QAAQ,MAAMO,CAAK;AAAA,QACrB;AAAA,MACF;AAAA,IAAA;AAAA,EAMA;AAEJ;AAWO,SAASd,GACd7C,GACAjB,GACA6E,GACApD,GACAC,GACwD;;AACxD,QAAMoD,IAAQ/D,EAAkC;AAAA,IAC9C,QAAQf;AAAA,IACR,SAAS6E;AAAA,EAAA,CACV,GACKE,IAAY/E,EAAK,SAAS,SAASA,EAAK,KAAK,OAAOA,EAAK,KAAK,WAC9DgF,IAAsBC,EAAuBjF,CAAI,GACjDkF,IAAuB,CAAA;AAC7B,SAAIF,EAAoB,eAClBA,EAAoB,eAAe,eACrCE,EAAU,aAAa,oBACvBA,EAAU,aAAa,OAEvBA,EAAU,aAAaF,EAAoB,aAGxC;AAAA,IACL,OAAAF;AAAA,IACA,eAAeK;AAAA,IACf,SAASnF;AAAA,IACT,OAAO,GAAGiB,CAAI;AAAA,IACd,cAAY+B,IAAAoC,EAAeP,EAAY,MAAMpB,EAAW,KAAK,MAAjD,gBAAAT,EAAoD,WAAU,aAAahD,EAAK,IAAI,IAAIiB,CAAI;AAAA,IACxG,cAAcjB,EAAK,SAAS;AAAA,IAC5B,OAAMyB,KAAA,gBAAAA,EAAc,SAASqD,OAAUO,EAAiBrF,EAAK,IAAI;AAAA,IACjE,gBAAgBgF,EAAoB;AAAA,IACpC,iBAAiBM;AAAAA,IACjB,sBAAsB5D,KAAA,QAAAA,EAAsB,0BACxC,CAAC2C,MAAgC;;AAC/B,UAAIrE,EAAK,SAAS,OAAQ;AAE1B,YAAMwC,KAAU+C,KAAAvC,IAAAqB,EAAO,WAAP,gBAAArB,EAAe,YAAf,gBAAAuC,EAA6C;AAC7D,UAAIhB,EAAY/B,GAAQd,EAAqB,uBAAuB;AAClE,eAAO;AAAA,UACL,WAAW8D;AAAAA,UACX,QAAQ;AAAA,YACN,yBAAyB9D,EAAqB;AAAA,YAC9C,SAAS,CAAC2C,MAAoD;;AAC5D,cAAA3C,EAAqB,SAAQ2C,IAAAA,EAAO,SAAPA,gBAAAA,EAAa,OAAO;AAAA,YACnD;AAAA,UAAA;AAAA,QACF;AAAA,IAGN,IACA;AAAA,IACJ,WAAAa;AAAA,IACA,uBAAuB;AAAA,MACrB,OAAO,MAA+B;AACpC,gBAAQH,GAAA;AAAA,UACN,KAAKU,EAAU;AAAA,UACf,KAAKA,EAAU;AAAA,UACf,KAAKA,EAAU;AAAA,UACf,KAAKA,EAAU;AACb,mBAAO;AAAA,UACT,KAAKA,EAAU;AAAA,UACf,KAAKA,EAAU;AACb,mBAAO;AAAA,UACT;AACE,kBAAM,MAAM,0BAA0BV,CAAS,EAAE;AAAA,QAAA;AAAA,MAEvD,GAAA;AAAA,MACA,UAASQ,IAAAH,EAAeP,EAAY,MAAMpB,EAAW,WAAW,MAAvD,gBAAA8B,EAA0D;AAAA,IAAK;AAAA,IAE1E,eAAe,MAAM;AACnB,cAAQR,GAAA;AAAA,QACN,KAAKU,EAAU;AAAA,QACf,KAAKA,EAAU;AAAA,QACf,KAAKA,EAAU;AAAA,QACf,KAAKA,EAAU;AACb,iBAAO;AAAA,QACT,KAAKA,EAAU;AAAA,QACf,KAAKA,EAAU;AACb,iBAAO;AAAA,QACT;AACE,gBAAM,MAAM,0BAA0BV,CAAS,EAAE;AAAA,MAAA;AAAA,IAEvD,GAAA;AAAA,EAAG;AAEP;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@platforma-sdk/ui-vue",
|
|
3
|
-
"version": "1.42.
|
|
3
|
+
"version": "1.42.42",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"styles": "dist/index.js",
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
"@types/semver": "^7.7.0",
|
|
17
17
|
"@types/d3-format": "^3.0.4",
|
|
18
18
|
"@milaboratories/miplots4": "^1.0.123",
|
|
19
|
-
"ag-grid-enterprise": "^34.
|
|
20
|
-
"ag-grid-vue3": "^34.
|
|
19
|
+
"ag-grid-enterprise": "^34.1.2",
|
|
20
|
+
"ag-grid-vue3": "^34.1.2",
|
|
21
21
|
"canonicalize": "~2.1.0",
|
|
22
22
|
"lru-cache": "^11.1.0",
|
|
23
23
|
"vue": "^3.5.13",
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
"d3-format": "^3.1.0",
|
|
27
27
|
"zod": "~3.23.8",
|
|
28
28
|
"@milaboratories/biowasm-tools": "1.1.2",
|
|
29
|
-
"@
|
|
30
|
-
"@
|
|
29
|
+
"@milaboratories/uikit": "2.4.8",
|
|
30
|
+
"@platforma-sdk/model": "1.42.36"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"happy-dom": "^15.11.7",
|
|
@@ -45,8 +45,8 @@
|
|
|
45
45
|
"@milaboratories/ts-configs": "1.0.6",
|
|
46
46
|
"@milaboratories/build-configs": "1.0.8",
|
|
47
47
|
"@milaboratories/eslint-config": "1.0.4",
|
|
48
|
-
"@milaboratories/
|
|
49
|
-
"@milaboratories/
|
|
48
|
+
"@milaboratories/ts-builder": "1.0.5",
|
|
49
|
+
"@milaboratories/helpers": "1.6.22"
|
|
50
50
|
},
|
|
51
51
|
"scripts": {
|
|
52
52
|
"test": "vitest run --passWithNoTests",
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import type { IHeaderParams, SortDirection } from 'ag-grid-enterprise';
|
|
3
3
|
import type { MaskIconName16 } from '@milaboratories/uikit';
|
|
4
|
-
import { PlMaskIcon16 } from '@milaboratories/uikit';
|
|
4
|
+
import { PlMaskIcon16, PlTooltip } from '@milaboratories/uikit';
|
|
5
5
|
import { computed, onMounted, ref } from 'vue';
|
|
6
6
|
import './pl-ag-column-header.scss';
|
|
7
7
|
import type { PlAgHeaderComponentParams } from './types';
|
|
8
8
|
|
|
9
|
-
const
|
|
9
|
+
const { params } = defineProps<{ params: IHeaderParams & PlAgHeaderComponentParams }>();
|
|
10
10
|
|
|
11
11
|
const icon = computed<MaskIconName16>(() => {
|
|
12
|
-
|
|
13
|
-
switch (type) {
|
|
12
|
+
switch (params.type) {
|
|
14
13
|
case undefined:
|
|
15
14
|
case 'Text':
|
|
16
15
|
return 'cell-type-txt';
|
|
@@ -25,16 +24,16 @@ const icon = computed<MaskIconName16>(() => {
|
|
|
25
24
|
case 'Progress':
|
|
26
25
|
return 'progress';
|
|
27
26
|
default:
|
|
28
|
-
throw Error(`unsupported data type: ${type satisfies never} for PlAgColumnHeader component. Column ${
|
|
27
|
+
throw Error(`unsupported data type: ${params.type satisfies never} for PlAgColumnHeader component. Column ${params.column.getColId()}`);
|
|
29
28
|
}
|
|
30
29
|
});
|
|
31
30
|
|
|
32
31
|
const sortDirection = ref<SortDirection>(null);
|
|
33
|
-
const refreshSortDirection = () => (sortDirection.value =
|
|
32
|
+
const refreshSortDirection = () => (sortDirection.value = params.column.getSort() ?? null);
|
|
34
33
|
onMounted(() => refreshSortDirection());
|
|
35
34
|
function onSortRequested() {
|
|
36
|
-
if (
|
|
37
|
-
|
|
35
|
+
if (params.column.isSortable()) {
|
|
36
|
+
params.progressSort();
|
|
38
37
|
refreshSortDirection();
|
|
39
38
|
}
|
|
40
39
|
}
|
|
@@ -48,24 +47,27 @@ const sortIcon = computed<MaskIconName16 | null>(() => {
|
|
|
48
47
|
case null:
|
|
49
48
|
return null;
|
|
50
49
|
default:
|
|
51
|
-
throw Error(`unsupported sort direction: ${direction satisfies never}. Column ${
|
|
50
|
+
throw Error(`unsupported sort direction: ${direction satisfies never}. Column ${params.column.getColId()}`);
|
|
52
51
|
}
|
|
53
52
|
});
|
|
54
53
|
|
|
55
54
|
const menuActivatorBtn = ref<HTMLElement>();
|
|
56
55
|
function showMenu() {
|
|
57
56
|
const menuActivatorBtnValue = menuActivatorBtn.value;
|
|
58
|
-
if (menuActivatorBtnValue)
|
|
57
|
+
if (menuActivatorBtnValue) params.showColumnMenu(menuActivatorBtnValue);
|
|
59
58
|
}
|
|
60
59
|
</script>
|
|
61
60
|
|
|
62
61
|
<template>
|
|
63
62
|
<div class="pl-ag-column-header d-flex align-center gap-6" @click="onSortRequested">
|
|
64
|
-
<
|
|
65
|
-
<
|
|
66
|
-
<
|
|
67
|
-
|
|
68
|
-
|
|
63
|
+
<PlTooltip>
|
|
64
|
+
<template v-if="params.tooltip" #tooltip>{{ params.tooltip }}</template>
|
|
65
|
+
<div class="pl-ag-column-header__title d-flex align-center gap-6 flex-grow-1">
|
|
66
|
+
<PlMaskIcon16 :name="icon" class="pl-ag-column-header__type-icon" />
|
|
67
|
+
<span>{{ params.displayName }}</span>
|
|
68
|
+
<PlMaskIcon16 v-if="sortIcon" :name="sortIcon" />
|
|
69
|
+
</div>
|
|
70
|
+
</PlTooltip>
|
|
69
71
|
<div v-if="params.enableMenu" ref="menuActivatorBtn" class="pl-ag-column-header__menu-icon" @click.stop="showMenu">
|
|
70
72
|
<PlMaskIcon16 name="more" />
|
|
71
73
|
</div>
|
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
export type PlAgHeaderComponentType = 'Text' | 'Number' | 'File' | 'Date' | 'Duration' | 'Progress';
|
|
2
2
|
|
|
3
|
-
export type PlAgHeaderComponentParams = {
|
|
3
|
+
export type PlAgHeaderComponentParams = {
|
|
4
|
+
type?: PlAgHeaderComponentType;
|
|
5
|
+
tooltip?: string;
|
|
6
|
+
};
|
|
@@ -374,6 +374,7 @@ export function makeColDef(
|
|
|
374
374
|
throw Error(`unsupported data type: ${valueType}`);
|
|
375
375
|
}
|
|
376
376
|
})(),
|
|
377
|
+
tooltip: readAnnotation(labeledSpec.spec, Annotation.Description)?.trim(),
|
|
377
378
|
} satisfies PlAgHeaderComponentParams,
|
|
378
379
|
cellDataType: (() => {
|
|
379
380
|
switch (valueType) {
|