@platforma-sdk/ui-vue 1.62.1 → 1.63.1
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 +14 -12
- package/.turbo/turbo-formatter$colon$check.log +2 -2
- package/.turbo/turbo-linter$colon$check.log +2 -2
- package/.turbo/turbo-types$colon$check.log +1 -1
- package/CHANGELOG.md +24 -0
- package/dist/components/PlAgDataTable/sources/table-source-v2.d.ts.map +1 -1
- package/dist/components/PlAgDataTable/sources/table-source-v2.js +28 -32
- package/dist/components/PlAgDataTable/sources/table-source-v2.js.map +1 -1
- package/dist/components/PlAgDataTable/sources/value-rendering.d.ts.map +1 -1
- package/dist/components/PlAgDataTable/sources/value-rendering.js +14 -14
- package/dist/components/PlAgDataTable/sources/value-rendering.js.map +1 -1
- package/dist/components/PlAnnotations/components/PlAnnotations.vue2.js.map +1 -1
- package/dist/lib/util/helpers/dist/disposable.js +9 -0
- package/dist/lib/util/helpers/dist/disposable.js.map +1 -0
- package/dist/lib/util/helpers/dist/index.js +2 -0
- package/dist/lib/util/helpers/dist/ref_count_pool.js +4 -0
- package/dist/lib/util/helpers/dist/ref_count_pool.js.map +1 -0
- package/package.json +8 -8
- package/src/components/PlAgDataTable/sources/table-source-v2.ts +3 -8
- package/src/components/PlAgDataTable/sources/value-rendering.ts +1 -2
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
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.
|
|
3
|
+
> @platforma-sdk/ui-vue@1.63.1 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...
|
|
7
7
|
↳ vite.js build --config /configs/vite.browser-lib.config.js --mode production
|
|
8
8
|
[36mvite v8.0.0-beta.15 [32mbuilding client environment for production...[36m[39m
|
|
9
9
|
[warn] `inlineDynamicImports` option is deprecated, please use `codeSplitting: false` instead.
|
|
10
|
-
[2K
|
|
10
|
+
[2K
|
|
11
11
|
rendering chunks...
|
|
12
12
|
|
|
13
13
|
[vite:dts] Start generate declaration files...
|
|
14
|
-
[vite:dts] Declaration files built in
|
|
14
|
+
[vite:dts] Declaration files built in 4387ms.
|
|
15
15
|
|
|
16
16
|
computing gzip size...
|
|
17
17
|
dist/components/PlAnnotations/components/PlAnnotations.vue?vue&type=style&index=0&lang.css 0.04 kB │ gzip: 0.06 kB
|
|
@@ -62,6 +62,7 @@ dist/components/PlAgChartHistogramCell/index.js
|
|
|
62
62
|
dist/components/PlAgChartStackedBarCell/index.js 0.03 kB │ gzip: 0.05 kB
|
|
63
63
|
dist/components/PlAppErrorNotificationAlert/index.js 0.04 kB │ gzip: 0.06 kB
|
|
64
64
|
dist/components/PlAnnotations/index.js 0.08 kB │ gzip: 0.07 kB
|
|
65
|
+
dist/lib/util/helpers/dist/ref_count_pool.js 0.10 kB │ gzip: 0.11 kB │ map: 4.31 kB
|
|
65
66
|
dist/AgGridVue/index.js 0.11 kB │ gzip: 0.08 kB
|
|
66
67
|
dist/lib/util/helpers/dist/hash.js 0.11 kB │ gzip: 0.12 kB │ map: 1.43 kB
|
|
67
68
|
dist/_virtual/_plugin-vue_export-helper.js 0.11 kB │ gzip: 0.12 kB
|
|
@@ -88,7 +89,6 @@ dist/components/PlAdvancedFilter/index.js
|
|
|
88
89
|
dist/components/PlAgDataTable/sources/common.js 0.19 kB │ gzip: 0.16 kB │ map: 0.60 kB
|
|
89
90
|
dist/components/BlockLayout.vue_vue_type_style_index_0_lang.module.js 0.20 kB │ gzip: 0.17 kB │ map: 0.41 kB
|
|
90
91
|
dist/components/PlAnnotations/utils.js 0.20 kB │ gzip: 0.19 kB │ map: 1.02 kB
|
|
91
|
-
dist/lib/util/helpers/dist/index.js 0.20 kB │ gzip: 0.10 kB
|
|
92
92
|
dist/components/PlTableFilters/PlTableFiltersV2.vue_vue_type_style_index_0_lang.module.js 0.20 kB │ gzip: 0.17 kB │ map: 0.42 kB
|
|
93
93
|
dist/plugins/Monetization/EndOfPeriod.vue_vue_type_style_index_0_lang.module.js 0.20 kB │ gzip: 0.18 kB │ map: 0.42 kB
|
|
94
94
|
dist/components/PlAnnotations/components/PlAnnotations.vue_vue_type_style_index_0_lang.module.js 0.21 kB │ gzip: 0.18 kB │ map: 0.42 kB
|
|
@@ -98,6 +98,7 @@ dist/components/PlAnnotations/components/FilterSidebar.vue_vue_type_style_index_
|
|
|
98
98
|
dist/components/PlAgDataTable/PlAgDataTableV2.vue_vue_type_style_index_0_lang.module.js 0.24 kB │ gzip: 0.19 kB │ map: 0.45 kB
|
|
99
99
|
dist/components/PlAnnotations/components/PlAnnotationsModal.vue_vue_type_style_index_0_lang.module.js 0.24 kB │ gzip: 0.19 kB │ map: 0.46 kB
|
|
100
100
|
dist/components/PlBtnExportArchive/Summary.vue_vue_type_style_index_0_lang.module.js 0.25 kB │ gzip: 0.19 kB │ map: 0.50 kB
|
|
101
|
+
dist/lib/util/helpers/dist/index.js 0.26 kB │ gzip: 0.12 kB
|
|
101
102
|
dist/components/PlAdvancedFilter/OperandButton.vue_vue_type_style_index_0_lang.module.js 0.26 kB │ gzip: 0.20 kB │ map: 0.50 kB
|
|
102
103
|
dist/components/PlBtnExportArchive/Item.vue_vue_type_style_index_0_lang.module.js 0.26 kB │ gzip: 0.20 kB │ map: 0.54 kB
|
|
103
104
|
dist/components/PlAgDataTable/pl-ag-overlay-loading.module.js 0.27 kB │ gzip: 0.19 kB │ map: 0.52 kB
|
|
@@ -119,6 +120,7 @@ dist/components/PlAdvancedFilter/FilterEditor.js
|
|
|
119
120
|
dist/components/PlAdvancedFilter/OperandButton.js 0.34 kB │ gzip: 0.23 kB │ map: 1.31 kB
|
|
120
121
|
dist/components/PlAnnotations/components/FilterSidebar.js 0.34 kB │ gzip: 0.23 kB │ map: 4.72 kB
|
|
121
122
|
dist/components/PlAnnotations/components/PlAnnotations.js 0.34 kB │ gzip: 0.23 kB │ map: 2.65 kB
|
|
123
|
+
dist/lib/util/helpers/dist/disposable.js 0.34 kB │ gzip: 0.18 kB │ map: 0.83 kB
|
|
122
124
|
dist/components/PlAgDataTable/PlAgDataTableV2.js 0.34 kB │ gzip: 0.24 kB │ map: 20.90 kB
|
|
123
125
|
dist/plugins/Monetization/UserCabinetCard.js 0.34 kB │ gzip: 0.23 kB │ map: 3.00 kB
|
|
124
126
|
dist/components/PlAdvancedFilter/PlAdvancedFilter.js 0.34 kB │ gzip: 0.24 kB │ map: 10.70 kB
|
|
@@ -157,7 +159,7 @@ dist/components/PlAgDataTable/sources/focus-row.js
|
|
|
157
159
|
dist/plugins/Monetization/validation.js 0.94 kB │ gzip: 0.46 kB │ map: 2.59 kB
|
|
158
160
|
dist/components/PlAgCsvExporter/PlAgCsvExporter.vue_vue_type_script_setup_true_lang.js 0.97 kB │ gzip: 0.58 kB │ map: 1.41 kB
|
|
159
161
|
dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue_vue_type_script_setup_true_lang.js 0.98 kB │ gzip: 0.56 kB │ map: 1.88 kB
|
|
160
|
-
dist/components/PlAgDataTable/sources/value-rendering.js
|
|
162
|
+
dist/components/PlAgDataTable/sources/value-rendering.js 0.98 kB │ gzip: 0.49 kB │ map: 2.99 kB
|
|
161
163
|
dist/plugins/Monetization/RunStatus.vue_vue_type_script_setup_true_lang.js 1.06 kB │ gzip: 0.57 kB │ map: 3.04 kB
|
|
162
164
|
dist/components/PlAgGridColumnManager/useFilteredItems.js 1.08 kB │ gzip: 0.56 kB │ map: 3.48 kB
|
|
163
165
|
dist/createModel.js 1.18 kB │ gzip: 0.59 kB │ map: 3.11 kB
|
|
@@ -209,19 +211,19 @@ dist/composition/fileContent.js
|
|
|
209
211
|
dist/components/PlBtnExportArchive/PlBtnExportArchive.vue_vue_type_script_setup_true_lang.js 5.08 kB │ gzip: 2.11 kB │ map: 10.36 kB
|
|
210
212
|
dist/AgGridVue/useAgGridOptions.js 5.74 kB │ gzip: 1.79 kB │ map: 14.21 kB
|
|
211
213
|
dist/internal/createAppV2.js 6.00 kB │ gzip: 2.27 kB │ map: 17.80 kB
|
|
212
|
-
dist/components/PlAgDataTable/sources/table-source-v2.js 6.
|
|
214
|
+
dist/components/PlAgDataTable/sources/table-source-v2.js 6.30 kB │ gzip: 2.53 kB │ map: 18.80 kB
|
|
213
215
|
dist/internal/createAppV3.js 6.94 kB │ gzip: 2.68 kB │ map: 21.43 kB
|
|
214
216
|
dist/components/PlAdvancedFilter/PlAdvancedFilter.vue_vue_type_script_setup_true_lang.js 7.06 kB │ gzip: 2.28 kB │ map: 14.91 kB
|
|
215
217
|
dist/components/PlAdvancedFilter/FilterEditor.vue_vue_type_script_setup_true_lang.js 10.14 kB │ gzip: 3.05 kB │ map: 21.57 kB
|
|
216
218
|
dist/components/PlAgDataTable/PlAgDataTableV2.vue_vue_type_script_setup_true_lang.js 11.51 kB │ gzip: 3.68 kB │ map: 27.94 kB
|
|
217
219
|
|
|
218
220
|
[33m[33m[PLUGIN_TIMINGS] Warning:[0m Your build spent significant time in plugins. Here is a breakdown:
|
|
219
|
-
- sourcemaps (
|
|
220
|
-
- vite:dts (
|
|
221
|
-
- vite:
|
|
222
|
-
- vite:
|
|
223
|
-
- vite:
|
|
221
|
+
- sourcemaps (34%)
|
|
222
|
+
- vite:dts (22%)
|
|
223
|
+
- vite:css-post (11%)
|
|
224
|
+
- vite:vue (10%)
|
|
225
|
+
- vite:build-import-analysis (8%)
|
|
224
226
|
See https://rolldown.rs/options/checks#plugintimings for more details.
|
|
225
227
|
[39m
|
|
226
|
-
[32m✓ built in 5.
|
|
228
|
+
[32m✓ built in 5.19s[39m
|
|
227
229
|
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.
|
|
3
|
+
> @platforma-sdk/ui-vue@1.63.1 formatter:check /home/runner/_work/platforma/platforma/sdk/ui-vue
|
|
4
4
|
> ts-builder formatter --check
|
|
5
5
|
|
|
6
6
|
Checking formatting...
|
|
@@ -8,5 +8,5 @@ Checking formatting...
|
|
|
8
8
|
Checking formatting...
|
|
9
9
|
|
|
10
10
|
All matched files use the correct format.
|
|
11
|
-
Finished in
|
|
11
|
+
Finished in 4793ms on 128 files using 8 threads.
|
|
12
12
|
Format check completed successfully
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
WARN Issue while reading "/home/runner/_work/platforma/platforma/.npmrc". Failed to replace env in config: ${NPMJS_TOKEN}
|
|
2
2
|
|
|
3
|
-
> @platforma-sdk/ui-vue@1.
|
|
3
|
+
> @platforma-sdk/ui-vue@1.63.1 linter:check /home/runner/_work/platforma/platforma/sdk/ui-vue
|
|
4
4
|
> ts-builder linter --check
|
|
5
5
|
|
|
6
6
|
Linting project...
|
|
7
7
|
↳ oxlint --config /home/runner/_work/platforma/platforma/sdk/ui-vue/.oxlintrc.json --deny-warnings
|
|
8
8
|
Found 0 warnings and 0 errors.
|
|
9
|
-
Finished in
|
|
9
|
+
Finished in 24ms on 111 files with 98 rules using 8 threads.
|
|
10
10
|
Linting completed successfully
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
WARN Issue while reading "/home/runner/_work/platforma/platforma/.npmrc". Failed to replace env in config: ${NPMJS_TOKEN}
|
|
2
2
|
|
|
3
|
-
> @platforma-sdk/ui-vue@1.
|
|
3
|
+
> @platforma-sdk/ui-vue@1.63.1 types:check /home/runner/_work/platforma/platforma/sdk/ui-vue
|
|
4
4
|
> ts-builder type-check --target browser-lib
|
|
5
5
|
|
|
6
6
|
↳ vue-tsc.js --noEmit --project ./tsconfig.json --customConditions ,
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# @platforma-sdk/ui-vue
|
|
2
2
|
|
|
3
|
+
## 1.63.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [6dc9e0d]
|
|
8
|
+
- @milaboratories/pf-spec-driver@1.2.3
|
|
9
|
+
- @milaboratories/pl-model-common@1.31.1
|
|
10
|
+
- @milaboratories/uikit@2.11.6
|
|
11
|
+
- @platforma-sdk/model@1.63.1
|
|
12
|
+
|
|
13
|
+
## 1.63.0
|
|
14
|
+
|
|
15
|
+
### Minor Changes
|
|
16
|
+
|
|
17
|
+
- 5becf87: Remove PTableAbsent concept — absent values are now null (same as NA)
|
|
18
|
+
|
|
19
|
+
### Patch Changes
|
|
20
|
+
|
|
21
|
+
- Updated dependencies [5becf87]
|
|
22
|
+
- @milaboratories/pl-model-common@1.31.0
|
|
23
|
+
- @platforma-sdk/model@1.63.0
|
|
24
|
+
- @milaboratories/pf-spec-driver@1.2.2
|
|
25
|
+
- @milaboratories/uikit@2.11.5
|
|
26
|
+
|
|
3
27
|
## 1.62.1
|
|
4
28
|
|
|
5
29
|
### Patch Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-source-v2.d.ts","sourceRoot":"","sources":["../../../../src/components/PlAgDataTable/sources/table-source-v2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EAER,sBAAsB,EACtB,WAAW,
|
|
1
|
+
{"version":3,"file":"table-source-v2.d.ts","sourceRoot":"","sources":["../../../../src/components/PlAgDataTable/sources/table-source-v2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EAER,sBAAsB,EACtB,WAAW,EACZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAKL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EAErB,KAAK,MAAM,EACX,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EAEd,KAAK,mBAAmB,EASzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAEV,MAAM,EACN,OAAO,EAIP,kBAAkB,EACnB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,KAAK,EAAE,kBAAkB,EAAgB,MAAM,UAAU,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAIxC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,wBAAgB,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,IAAI,sBAAsB,CAExF;AAyBD,6DAA6D;AAC7D,wBAAsB,oBAAoB,CAAC,EACzC,UAAU,EACV,QAAQ,EACR,KAAK,EACL,MAAM,EACN,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,GACrB,EAAE;IACD,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,gBAAgB,CAAC;IACxB,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,mBAAmB,EAAE,gBAAgB,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACnE,YAAY,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACrC,oBAAoB,CAAC,EAAE,wBAAwB,CAAC;CACjD,GAAG,OAAO,CACT,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,EAAE,YAAY,GAAG,sBAAsB,CAAC,GAAG;IACpF,QAAQ,EAAE,QAAQ,CAAC;CACpB,CACF,CAmMA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,iCAAiC,CAAC,EAAE,OAAO,CAAC;IAC5C,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;CACpC,CAAC;AAEF;;GAEG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,gBAAgB,EACtB,WAAW,EAAE,gBAAgB,EAC7B,YAAY,EAAE,mBAAmB,EAAE,GAAG,SAAS,EAC/C,oBAAoB,CAAC,EAAE,wBAAwB,GAC9C,MAAM,CAAC,kBAAkB,EAAE,WAAW,GAAG,YAAY,CAAC,CA+ExD"}
|
|
@@ -8,41 +8,37 @@ import "../../PlAgTextAndButtonCell/index.js";
|
|
|
8
8
|
import { PTableHidden as a } from "./common.js";
|
|
9
9
|
import { defaultMainMenuItems as o } from "./menu-items.js";
|
|
10
10
|
import { getColumnRenderingSpec as s } from "./value-rendering.js";
|
|
11
|
-
import { Annotation as c, ValueType as l, canonicalizeJson as u, getAxisId as d, getPTableColumnId as f, isColumnHidden as p, isColumnOptional as m, isLabelColumn as h,
|
|
11
|
+
import { Annotation as c, ValueType as l, canonicalizeJson as u, getAxisId as d, getPTableColumnId as f, isColumnHidden as p, isColumnOptional as m, isLabelColumn as h, matchAxisId as g, pTableValue as _, readAnnotation as v, readAnnotationJson as y } from "@platforma-sdk/model";
|
|
12
12
|
/** Convert columnar data from the driver to rows, used by ag-grid */
|
|
13
|
-
function
|
|
13
|
+
function b(e, t, n, r) {
|
|
14
14
|
let i = [];
|
|
15
15
|
for (let o = 0; o < t[0].data.length; ++o) {
|
|
16
|
-
let s = n.map((e) => {
|
|
17
|
-
let n = v(t[r[e]], o);
|
|
18
|
-
if (!g(n)) throw Error(`axis value is not a PTableValueAxis: ${JSON.stringify(n)}`);
|
|
19
|
-
return n;
|
|
20
|
-
}), c = {
|
|
16
|
+
let s = n.map((e) => _(t[r[e]], o)), c = {
|
|
21
17
|
id: u(s),
|
|
22
18
|
axesKey: s
|
|
23
19
|
};
|
|
24
20
|
e.forEach((e, n) => {
|
|
25
|
-
c[e.toString()] = r[n] === -1 ? a :
|
|
21
|
+
c[e.toString()] = r[n] === -1 ? a : _(t[r[n]], o);
|
|
26
22
|
}), i.push(c);
|
|
27
23
|
}
|
|
28
24
|
return i;
|
|
29
25
|
}
|
|
30
26
|
/** Calculate GridOptions for selected p-table data source */
|
|
31
|
-
async function
|
|
32
|
-
let
|
|
33
|
-
if (
|
|
34
|
-
let
|
|
35
|
-
if (
|
|
36
|
-
let T = (e) => u(f(e)), E = new Map(w.entries().map(([e, t]) => [T(t), e])), D = new Map(
|
|
27
|
+
async function x({ generation: r, pfDriver: i, model: a, sheets: o, dataRenderedTracker: s, hiddenColIds: l, cellButtonAxisParams: m }) {
|
|
28
|
+
let _ = r.value, v = /* @__PURE__ */ Error("table state generation changed"), x = await i.getSpec(a.fullTableHandle);
|
|
29
|
+
if (_ !== r.value) throw v;
|
|
30
|
+
let C = a.visibleTableHandle, w = await i.getSpec(C);
|
|
31
|
+
if (_ !== r.value) throw v;
|
|
32
|
+
let T = (e) => u(f(e)), E = new Map(w.entries().map(([e, t]) => [T(t), e])), D = new Map(x.entries().map(([e, t]) => {
|
|
37
33
|
let n = E.get(T(t)) ?? -1;
|
|
38
34
|
if (n === -1 && t.type === "axis") throw Error(`axis ${JSON.stringify(t.spec)} not present in join result`);
|
|
39
35
|
return [e, n];
|
|
40
|
-
})), O = o.map((e) => d(e.axis)), k = (e) => O.some((t) =>
|
|
41
|
-
A.some((t) =>
|
|
36
|
+
})), O = o.map((e) => d(e.axis)), k = (e) => O.some((t) => g(t, e)), A = [], j = (e, t) => {
|
|
37
|
+
A.some((t) => g(t.axisId, e)) ? console.warn(`multiple label columns match axisId: ${JSON.stringify(e)}`) : A.push({
|
|
42
38
|
axisId: e,
|
|
43
39
|
labelColumnIdx: t
|
|
44
40
|
});
|
|
45
|
-
}, M = (e) => A.find((t) =>
|
|
41
|
+
}, M = (e) => A.find((t) => g(t.axisId, e))?.labelColumnIdx ?? -1, N = x.entries().filter(([e, t]) => {
|
|
46
42
|
switch (t.type) {
|
|
47
43
|
case "axis": return !k(t.id);
|
|
48
44
|
case "column":
|
|
@@ -54,20 +50,20 @@ async function S({ generation: r, pfDriver: i, model: a, sheets: o, dataRendered
|
|
|
54
50
|
}
|
|
55
51
|
}).map(([e]) => e).toArray();
|
|
56
52
|
N.sort((e, t) => {
|
|
57
|
-
if (
|
|
58
|
-
let n =
|
|
53
|
+
if (x[e].type !== x[t].type) return x[e].type === "axis" ? -1 : 1;
|
|
54
|
+
let n = y(x[e].spec, c.Table.OrderPriority), r = y(x[t].spec, c.Table.OrderPriority);
|
|
59
55
|
return n === void 0 ? r === void 0 ? 0 : 1 : r === void 0 ? -1 : r - n;
|
|
60
56
|
});
|
|
61
57
|
let P = [...N];
|
|
62
58
|
N = N.map((e) => {
|
|
63
|
-
let t =
|
|
59
|
+
let t = x[e];
|
|
64
60
|
if (t.type === "axis") {
|
|
65
61
|
let e = M(t.id);
|
|
66
62
|
if (e !== -1) return e;
|
|
67
63
|
}
|
|
68
64
|
return e;
|
|
69
65
|
});
|
|
70
|
-
let F = [n(), ...P.map((e, t) =>
|
|
66
|
+
let F = [n(), ...P.map((e, t) => S(e, x[e], x[N[t]], l, m))], I = x.values().filter((e) => e.type === "axis").map((e) => e.spec).toArray(), L = I.keys().map((e) => {
|
|
71
67
|
let t = N.indexOf(e);
|
|
72
68
|
return t === -1 && (t = N.length, N.push(e)), t;
|
|
73
69
|
}).toArray(), R = [], z = [];
|
|
@@ -80,11 +76,11 @@ async function S({ generation: r, pfDriver: i, model: a, sheets: o, dataRendered
|
|
|
80
76
|
axesSpec: I,
|
|
81
77
|
columnDefs: F,
|
|
82
78
|
serverSideDatasource: { getRows: async (n) => {
|
|
83
|
-
if (
|
|
79
|
+
if (_ !== r.value) return n.fail();
|
|
84
80
|
try {
|
|
85
81
|
if (B === -1) {
|
|
86
|
-
let e = await i.getShape(
|
|
87
|
-
if (
|
|
82
|
+
let e = await i.getShape(C);
|
|
83
|
+
if (_ !== r.value || n.api.isDestroyed()) return n.fail();
|
|
88
84
|
B = e.rows;
|
|
89
85
|
}
|
|
90
86
|
if (B == 0) {
|
|
@@ -101,19 +97,19 @@ async function S({ generation: r, pfDriver: i, model: a, sheets: o, dataRendered
|
|
|
101
97
|
V = n;
|
|
102
98
|
let a = 0, o = [];
|
|
103
99
|
if (B > 0 && n.request.startRow !== void 0 && n.request.endRow !== void 0 && (a = Math.min(B, n.request.endRow) - n.request.startRow, a > 0)) {
|
|
104
|
-
let e = await i.getData(
|
|
100
|
+
let e = await i.getData(C, R, {
|
|
105
101
|
offset: n.request.startRow,
|
|
106
102
|
length: a
|
|
107
103
|
});
|
|
108
|
-
if (
|
|
109
|
-
o =
|
|
104
|
+
if (_ !== r.value || n.api.isDestroyed()) return n.fail();
|
|
105
|
+
o = b(P, e, L, z);
|
|
110
106
|
}
|
|
111
107
|
n.success({
|
|
112
108
|
rowData: o,
|
|
113
109
|
rowCount: B
|
|
114
110
|
}), n.api.autoSizeColumns(n.api.getAllDisplayedColumns().filter((e) => e.getColId() !== t)), n.api.setGridOption("loading", !1), s.resolve(n.api);
|
|
115
111
|
} catch (e) {
|
|
116
|
-
if (
|
|
112
|
+
if (_ !== r.value || n.api.isDestroyed()) return n.fail();
|
|
117
113
|
n.api.setGridOption("loading", !0), n.fail(), console.trace(e);
|
|
118
114
|
}
|
|
119
115
|
} }
|
|
@@ -122,7 +118,7 @@ async function S({ generation: r, pfDriver: i, model: a, sheets: o, dataRendered
|
|
|
122
118
|
/**
|
|
123
119
|
* Calculates column definition for a given p-table column
|
|
124
120
|
*/
|
|
125
|
-
function
|
|
121
|
+
function S(t, n, a, d, f) {
|
|
126
122
|
let p = u({
|
|
127
123
|
source: n,
|
|
128
124
|
labeled: a
|
|
@@ -132,7 +128,7 @@ function C(t, n, a, d, f) {
|
|
|
132
128
|
mainMenuItems: o,
|
|
133
129
|
context: n,
|
|
134
130
|
field: `${t}`,
|
|
135
|
-
headerName:
|
|
131
|
+
headerName: v(a.spec, c.Label)?.trim() ?? `Unlabeled ${n.type} ${t}`,
|
|
136
132
|
lockPosition: n.type === "axis",
|
|
137
133
|
hide: d?.includes(p) ?? m(n.spec),
|
|
138
134
|
valueFormatter: g.valueFormatter,
|
|
@@ -163,7 +159,7 @@ function C(t, n, a, d, f) {
|
|
|
163
159
|
default: throw Error(`unsupported data type: ${h}`);
|
|
164
160
|
}
|
|
165
161
|
})(),
|
|
166
|
-
tooltip:
|
|
162
|
+
tooltip: v(a.spec, c.Description)?.trim()
|
|
167
163
|
},
|
|
168
164
|
cellDataType: (() => {
|
|
169
165
|
switch (h) {
|
|
@@ -178,6 +174,6 @@ function C(t, n, a, d, f) {
|
|
|
178
174
|
})()
|
|
179
175
|
};
|
|
180
176
|
}
|
|
181
|
-
export {
|
|
177
|
+
export { x as calculateGridOptions };
|
|
182
178
|
|
|
183
179
|
//# sourceMappingURL=table-source-v2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-source-v2.js","names":[],"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 getPTableColumnId,\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 { PTableHidden } 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\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.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}`] =\n resultMapping[iCol] === -1 ? PTableHidden : 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<\n Pick<ManagedGridOptions<PlAgDataTableV2Row>, \"columnDefs\" | \"serverSideDatasource\"> & {\n axesSpec: AxesSpec;\n }\n> {\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) =>\n canonicalizeJson<PTableColumnId>(getPTableColumnId(spec));\n const dataSpecsMap = new Map(dataSpecs.entries().map(([i, spec]) => [specId(spec), i]));\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\n .entries()\n .filter(([i, spec]) => {\n switch (spec.type) {\n case \"axis\":\n 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 .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) =>\n makeColDef(field, specs[field], specs[indices[index]], hiddenColIds, cellButtonAxisParams),\n ),\n ];\n\n // mix in indices of skipped axes (axes that were partitioned or replaced with label columns)\n const axesSpec = specs\n .values()\n .filter((spec) => spec.type === \"axis\")\n .map((spec) => spec.spec)\n .toArray();\n const axes = axesSpec\n .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())\n 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 (\n rowCount > 0 &&\n params.request.startRow !== undefined &&\n params.request.endRow !== undefined\n ) {\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())\n 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\n .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:\n readAnnotation(labeledSpec.spec, Annotation.Label)?.trim() ??\n `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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"table-source-v2.js","names":[],"sources":["../../../../src/components/PlAgDataTable/sources/table-source-v2.ts"],"sourcesContent":["import type {\n AxesSpec,\n PTableColumnId,\n PTableColumnSpecColumn,\n PTableValue,\n} from \"@platforma-sdk/model\";\nimport {\n canonicalizeJson,\n getAxisId,\n isColumnOptional,\n 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 readAnnotation,\n Annotation,\n ValueType,\n readAnnotationJson,\n getPTableColumnId,\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 { PTableHidden } 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\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: PTableKey = axes.map((iAxis) =>\n pTableValue(columns[resultMapping[iAxis]], iRow),\n );\n const id = canonicalizeJson<PlTableRowId>(axesKey);\n const row: PlAgDataTableV2Row = { id, axesKey };\n fields.forEach((field, iCol) => {\n row[field.toString() as `${number}`] =\n resultMapping[iCol] === -1 ? PTableHidden : 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<\n Pick<ManagedGridOptions<PlAgDataTableV2Row>, \"columnDefs\" | \"serverSideDatasource\"> & {\n axesSpec: AxesSpec;\n }\n> {\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) =>\n canonicalizeJson<PTableColumnId>(getPTableColumnId(spec));\n const dataSpecsMap = new Map(dataSpecs.entries().map(([i, spec]) => [specId(spec), i]));\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\n .entries()\n .filter(([i, spec]) => {\n switch (spec.type) {\n case \"axis\":\n 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 .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) =>\n makeColDef(field, specs[field], specs[indices[index]], hiddenColIds, cellButtonAxisParams),\n ),\n ];\n\n // mix in indices of skipped axes (axes that were partitioned or replaced with label columns)\n const axesSpec = specs\n .values()\n .filter((spec) => spec.type === \"axis\")\n .map((spec) => spec.spec)\n .toArray();\n const axes = axesSpec\n .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())\n 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 (\n rowCount > 0 &&\n params.request.startRow !== undefined &&\n params.request.endRow !== undefined\n ) {\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())\n 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\n .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:\n readAnnotation(labeledSpec.spec, Annotation.Label)?.trim() ??\n `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"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"value-rendering.d.ts","sourceRoot":"","sources":["../../../../src/components/PlAgDataTable/sources/value-rendering.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"value-rendering.d.ts","sourceRoot":"","sources":["../../../../src/components/PlAgDataTable/sources/value-rendering.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEnD,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,WAAW,GAAG,YAAY,GAAG,SAAS,GAC5C,MAAM,GAAG,SAAS,CAUpB;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,cAAc,EAAE,kBAAkB,CAAC,kBAAkB,EAAE,WAAW,GAAG,YAAY,CAAC,CAAC;IACnF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,gBAAgB,GAAG,mBAAmB,CAgClF"}
|
|
@@ -1,35 +1,35 @@
|
|
|
1
1
|
import { isPTableHidden as e } from "./common.js";
|
|
2
|
-
import { Annotation as t, PTableNA as n, ValueType as r,
|
|
3
|
-
import * as
|
|
4
|
-
function
|
|
2
|
+
import { Annotation as t, PTableNA as n, ValueType as r, readAnnotation as i } from "@platforma-sdk/model";
|
|
3
|
+
import * as a from "d3-format";
|
|
4
|
+
function o(t) {
|
|
5
5
|
if (t === void 0) return "undefined";
|
|
6
6
|
if (e(t)) return "loading...";
|
|
7
|
-
if (
|
|
7
|
+
if (t === n) return "";
|
|
8
8
|
}
|
|
9
|
-
function
|
|
10
|
-
let n = e.type === "axis" ? e.spec.type : e.spec.valueType,
|
|
9
|
+
function s(e) {
|
|
10
|
+
let n = e.type === "axis" ? e.spec.type : e.spec.valueType, s;
|
|
11
11
|
switch (n) {
|
|
12
12
|
case r.Int:
|
|
13
13
|
case r.Long:
|
|
14
14
|
case r.Float:
|
|
15
15
|
case r.Double: {
|
|
16
|
-
let n =
|
|
17
|
-
|
|
18
|
-
let t =
|
|
16
|
+
let n = i(e.spec, t.Format), r = n ? a.format(n) : void 0;
|
|
17
|
+
s = { valueFormatter: (e) => {
|
|
18
|
+
let t = o(e.value);
|
|
19
19
|
return t === void 0 ? r ? r(Number(e.value)) : e.value.toString() : t;
|
|
20
20
|
} };
|
|
21
21
|
break;
|
|
22
22
|
}
|
|
23
23
|
default:
|
|
24
|
-
|
|
25
|
-
let t =
|
|
24
|
+
s = { valueFormatter: (e) => {
|
|
25
|
+
let t = o(e.value);
|
|
26
26
|
return t === void 0 ? e.value.toString() : t;
|
|
27
27
|
} };
|
|
28
28
|
break;
|
|
29
29
|
}
|
|
30
|
-
let c =
|
|
31
|
-
return c && (
|
|
30
|
+
let c = i(e.spec, t.Table.FontFamily);
|
|
31
|
+
return c && (s.fontFamily = c), s;
|
|
32
32
|
}
|
|
33
|
-
export {
|
|
33
|
+
export { s as getColumnRenderingSpec };
|
|
34
34
|
|
|
35
35
|
//# sourceMappingURL=value-rendering.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"value-rendering.js","names":[],"sources":["../../../../src/components/PlAgDataTable/sources/value-rendering.ts"],"sourcesContent":["import {\n Annotation,\n
|
|
1
|
+
{"version":3,"file":"value-rendering.js","names":[],"sources":["../../../../src/components/PlAgDataTable/sources/value-rendering.ts"],"sourcesContent":["import {\n Annotation,\n PTableNA,\n readAnnotation,\n ValueType,\n type PTableColumnSpec,\n type PTableValue,\n} from \"@platforma-sdk/model\";\nimport type { ValueFormatterFunc } from \"ag-grid-enterprise\";\nimport type { PTableHidden } from \"./common\";\nimport { isPTableHidden } from \"./common\";\nimport * as d3 from \"d3-format\";\nimport type { PlAgDataTableV2Row } from \"../types\";\n\nexport function formatSpecialValues(\n value: PTableValue | PTableHidden | undefined,\n): string | undefined {\n if (value === undefined) {\n return \"undefined\";\n } else if (isPTableHidden(value)) {\n return \"loading...\";\n } else if (value === PTableNA) {\n return \"\";\n } else {\n return undefined;\n }\n}\n\nexport type ColumnRenderingSpec = {\n valueFormatter: ValueFormatterFunc<PlAgDataTableV2Row, PTableValue | PTableHidden>;\n fontFamily?: string;\n};\n\nexport function getColumnRenderingSpec(spec: PTableColumnSpec): ColumnRenderingSpec {\n const valueType = spec.type === \"axis\" ? spec.spec.type : spec.spec.valueType;\n let renderSpec: ColumnRenderingSpec;\n switch (valueType) {\n case ValueType.Int:\n case ValueType.Long:\n case ValueType.Float:\n case ValueType.Double: {\n const format = readAnnotation(spec.spec, Annotation.Format);\n const formatFn = format ? d3.format(format) : undefined;\n renderSpec = {\n valueFormatter: (params) => {\n const formatted = formatSpecialValues(params.value);\n if (formatted !== undefined) return formatted;\n return formatFn ? formatFn(Number(params.value)) : params.value!.toString();\n },\n };\n break;\n }\n default:\n renderSpec = {\n valueFormatter: (params) => {\n const formatted = formatSpecialValues(params.value);\n if (formatted !== undefined) return formatted;\n return params.value!.toString();\n },\n };\n break;\n }\n const fontFamily = readAnnotation(spec.spec, Annotation.Table.FontFamily);\n if (fontFamily) renderSpec.fontFamily = fontFamily;\n return renderSpec;\n}\n"],"mappings":";;;AAcA,SAAgB,EACd,GACoB;AACpB,KAAI,MAAU,KAAA,EACZ,QAAO;KACE,EAAe,EAAM,CAC9B,QAAO;KACE,MAAU,EACnB,QAAO;;AAWX,SAAgB,EAAuB,GAA6C;CAClF,IAAM,IAAY,EAAK,SAAS,SAAS,EAAK,KAAK,OAAO,EAAK,KAAK,WAChE;AACJ,SAAQ,GAAR;EACE,KAAK,EAAU;EACf,KAAK,EAAU;EACf,KAAK,EAAU;EACf,KAAK,EAAU,QAAQ;GACrB,IAAM,IAAS,EAAe,EAAK,MAAM,EAAW,OAAO,EACrD,IAAW,IAAS,EAAG,OAAO,EAAO,GAAG,KAAA;AAC9C,OAAa,EACX,iBAAiB,MAAW;IAC1B,IAAM,IAAY,EAAoB,EAAO,MAAM;AAEnD,WADI,MAAc,KAAA,IACX,IAAW,EAAS,OAAO,EAAO,MAAM,CAAC,GAAG,EAAO,MAAO,UAAU,GADvC;MAGvC;AACD;;EAEF;AACE,OAAa,EACX,iBAAiB,MAAW;IAC1B,IAAM,IAAY,EAAoB,EAAO,MAAM;AAEnD,WADI,MAAc,KAAA,IACX,EAAO,MAAO,UAAU,GADK;MAGvC;AACD;;CAEJ,IAAM,IAAa,EAAe,EAAK,MAAM,EAAW,MAAM,WAAW;AAEzE,QADI,MAAY,EAAW,aAAa,IACjC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlAnnotations.vue_vue_type_script_setup_true_lang.js","names":["$style"],"sources":["../../../../src/components/PlAnnotations/components/PlAnnotations.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Props as BaseProps } from \"./FilterSidebar.vue\";\nexport type Props = BaseProps & {\n onDeleteSchema?: () => void;\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, effect, shallowRef } from \"vue\";\n\nimport { isNil } from \"@milaboratories/helpers\";\nimport { PlSidebarGroup, useConfirm } from \"@milaboratories/uikit\";\n\nimport type { Annotation } from \"../types\";\nimport AnnotationsSidebar from \"./AnnotationsSidebar.vue\";\nimport FilterSidebar from \"./FilterSidebar.vue\";\n\n// Models\nconst annotation = defineModel<Annotation>(\"annotation\", { required: true });\n// Props\nconst props = defineProps<Props>();\n// State\nconst selectedStepId = shallowRef<number | undefined>(undefined);\nconst selectedStep = computed(() => {\n return isNil(selectedStepId.value) || isNil(annotation.value)\n ? undefined\n : annotation.value.steps.find((step) => step.id === selectedStepId.value);\n});\n\n// Watchers\neffect(function setDefaultStepId() {\n if (selectedStepId.value === undefined && annotation.value.steps.length > 0) {\n selectedStepId.value = annotation.value.steps[0].id;\n }\n});\n// Hooks\nconst confirmResetSchema = useConfirm({\n title: \"Reset Schema\",\n message: \"Are you sure you want to reset the schema? This action cannot be undone.\",\n confirmLabel: \"Yes, reset\",\n cancelLabel: \"No, cancel\",\n});\n// Actions\nasync function handleDeleteSchema() {\n if (await confirmResetSchema()) {\n selectedStepId.value = undefined;\n props.onDeleteSchema?.();\n }\n}\n</script>\n\n<template>\n <PlSidebarGroup>\n <template #item-0>\n <AnnotationsSidebar\n v-model:annotation=\"annotation\"\n v-model:selectedStepId=\"selectedStepId\"\n :class=\"$style.sidebarItem\"\n :columns=\"props.columns\"\n @delete-schema=\"handleDeleteSchema\"\n />\n </template>\n <template #item-1>\n <FilterSidebar\n v-if=\"selectedStep\"\n v-model:step=\"selectedStep\"\n :class=\"$style.sidebarItem\"\n :columns=\"props.columns\"\n :get-suggest-options=\"props.getSuggestOptions\"\n :selectedStepId=\"selectedStepId\"\n :hasSelectedColumns=\"props.hasSelectedColumns\"\n :getValuesForSelectedColumns=\"props.getValuesForSelectedColumns\"\n />\n </template>\n </PlSidebarGroup>\n</template>\n\n<style module>\n.sidebarItem {\n width: 100%;\n height: 100%;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;EAkBA,IAAM,IAAa,EAAuB,GAAC,aAAiC,EAEtE,IAAQ,GAER,IAAiB,EAA+B,KAAA,EAAU,EAC1D,IAAe,QACZ,EAAM,EAAe,MAAM,IAAI,EAAM,EAAW,MAAK,GACxD,KAAA,IACA,EAAW,MAAM,MAAM,MAAM,MAAS,EAAK,OAAO,EAAe,MAAM,CAC3E;AAGF,IAAO,WAA4B;AACjC,GAAI,EAAe,UAAU,KAAA,KAAa,EAAW,MAAM,MAAM,SAAS,MACxE,EAAe,QAAQ,EAAW,MAAM,MAAM,GAAG;IAEnD;EAEF,IAAM,IAAqB,EAAW;GACpC,OAAO;GACP,SAAS;GACT,cAAc;GACd,aAAa;GACd,CAAC;EAEF,eAAe,IAAqB;AAClC,GAAI,MAAM,GAAoB,KAC5B,EAAe,QAAQ,KAAA,GACvB,EAAM,kBAAkB;;yBAM1B,EAsBiB,EAAA,EAAA,EAAA,MAAA;GArBJ,UAAM,QAOb,CANF,EAME,GAAA;IALQ,YAAY,EAAA;6CAAU,QAAA;IACtB,gBAAgB,EAAA;iDAAc,QAAA;IACrC,OAAK,EAAEA,EAAAA,OAAO,YAAW;IACzB,SAAS,EAAM;IACf,gBAAe;;;;;;;GAGT,UAAM,
|
|
1
|
+
{"version":3,"file":"PlAnnotations.vue_vue_type_script_setup_true_lang.js","names":["$style"],"sources":["../../../../src/components/PlAnnotations/components/PlAnnotations.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { Props as BaseProps } from \"./FilterSidebar.vue\";\nexport type Props = BaseProps & {\n onDeleteSchema?: () => void;\n};\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, effect, shallowRef } from \"vue\";\n\nimport { isNil } from \"@milaboratories/helpers\";\nimport { PlSidebarGroup, useConfirm } from \"@milaboratories/uikit\";\n\nimport type { Annotation } from \"../types\";\nimport AnnotationsSidebar from \"./AnnotationsSidebar.vue\";\nimport FilterSidebar from \"./FilterSidebar.vue\";\n\n// Models\nconst annotation = defineModel<Annotation>(\"annotation\", { required: true });\n// Props\nconst props = defineProps<Props>();\n// State\nconst selectedStepId = shallowRef<number | undefined>(undefined);\nconst selectedStep = computed(() => {\n return isNil(selectedStepId.value) || isNil(annotation.value)\n ? undefined\n : annotation.value.steps.find((step) => step.id === selectedStepId.value);\n});\n\n// Watchers\neffect(function setDefaultStepId() {\n if (selectedStepId.value === undefined && annotation.value.steps.length > 0) {\n selectedStepId.value = annotation.value.steps[0].id;\n }\n});\n// Hooks\nconst confirmResetSchema = useConfirm({\n title: \"Reset Schema\",\n message: \"Are you sure you want to reset the schema? This action cannot be undone.\",\n confirmLabel: \"Yes, reset\",\n cancelLabel: \"No, cancel\",\n});\n// Actions\nasync function handleDeleteSchema() {\n if (await confirmResetSchema()) {\n selectedStepId.value = undefined;\n props.onDeleteSchema?.();\n }\n}\n</script>\n\n<template>\n <PlSidebarGroup>\n <template #item-0>\n <AnnotationsSidebar\n v-model:annotation=\"annotation\"\n v-model:selectedStepId=\"selectedStepId\"\n :class=\"$style.sidebarItem\"\n :columns=\"props.columns\"\n @delete-schema=\"handleDeleteSchema\"\n />\n </template>\n <template #item-1>\n <FilterSidebar\n v-if=\"selectedStep\"\n v-model:step=\"selectedStep\"\n :class=\"$style.sidebarItem\"\n :columns=\"props.columns\"\n :get-suggest-options=\"props.getSuggestOptions\"\n :selectedStepId=\"selectedStepId\"\n :hasSelectedColumns=\"props.hasSelectedColumns\"\n :getValuesForSelectedColumns=\"props.getValuesForSelectedColumns\"\n />\n </template>\n </PlSidebarGroup>\n</template>\n\n<style module>\n.sidebarItem {\n width: 100%;\n height: 100%;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;EAkBA,IAAM,IAAa,EAAuB,GAAC,aAAiC,EAEtE,IAAQ,GAER,IAAiB,EAA+B,KAAA,EAAU,EAC1D,IAAe,QACZ,EAAM,EAAe,MAAM,IAAI,EAAM,EAAW,MAAK,GACxD,KAAA,IACA,EAAW,MAAM,MAAM,MAAM,MAAS,EAAK,OAAO,EAAe,MAAM,CAC3E;AAGF,IAAO,WAA4B;AACjC,GAAI,EAAe,UAAU,KAAA,KAAa,EAAW,MAAM,MAAM,SAAS,MACxE,EAAe,QAAQ,EAAW,MAAM,MAAM,GAAG;IAEnD;EAEF,IAAM,IAAqB,EAAW;GACpC,OAAO;GACP,SAAS;GACT,cAAc;GACd,aAAa;GACd,CAAC;EAEF,eAAe,IAAqB;AAClC,GAAI,MAAM,GAAoB,KAC5B,EAAe,QAAQ,KAAA,GACvB,EAAM,kBAAkB;;yBAM1B,EAsBiB,EAAA,EAAA,EAAA,MAAA;GArBJ,UAAM,QAOb,CANF,EAME,GAAA;IALQ,YAAY,EAAA;6CAAU,QAAA;IACtB,gBAAgB,EAAA;iDAAc,QAAA;IACrC,OAAK,EAAEA,EAAAA,OAAO,YAAW;IACzB,SAAS,EAAM;IACf,gBAAe;;;;;;;GAGT,UAAM,QAUb,CARM,EAAA,SAAA,GAAA,EADR,EASE,GAAA;;IAPQ,MAAM,EAAA;uCAAY,QAAA;IACzB,OAAK,EAAEA,EAAAA,OAAO,YAAW;IACzB,SAAS,EAAM;IACf,uBAAqB,EAAM;IAC3B,gBAAgB,EAAA;IAChB,oBAAoB,EAAM;IAC1B,6BAA6B,EAAM"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
function e(e) {
|
|
2
|
+
return typeof e == "object" && !!e && Symbol.dispose in e && typeof e[Symbol.dispose] == "function";
|
|
3
|
+
}
|
|
4
|
+
function t(e) {
|
|
5
|
+
return typeof e == "object" && !!e && Symbol.asyncDispose in e && typeof e[Symbol.asyncDispose] == "function";
|
|
6
|
+
}
|
|
7
|
+
export { t as isAsyncDisposable, e as isDisposable };
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=disposable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disposable.js","names":[],"sources":["../../../../../../../lib/util/helpers/src/disposable.ts"],"sourcesContent":["export function isDisposable(object: unknown): object is Disposable {\n return (\n typeof object === \"object\" &&\n object !== null &&\n Symbol.dispose in object &&\n typeof object[Symbol.dispose] === \"function\"\n );\n}\n\nexport function isAsyncDisposable(object: unknown): object is AsyncDisposable {\n return (\n typeof object === \"object\" &&\n object !== null &&\n Symbol.asyncDispose in object &&\n typeof object[Symbol.asyncDispose] === \"function\"\n );\n}\n"],"mappings":"AAAA,SAAgB,EAAa,GAAuC;AAClE,QACE,OAAO,KAAW,cAClB,KACA,OAAO,WAAW,KAClB,OAAO,EAAO,OAAO,YAAa;;AAItC,SAAgB,EAAkB,GAA4C;AAC5E,QACE,OAAO,KAAW,cAClB,KACA,OAAO,gBAAgB,KACvB,OAAO,EAAO,OAAO,iBAAkB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ref_count_pool.js","names":[],"sources":["../../../../../../../lib/util/helpers/src/ref_count_pool.ts"],"sourcesContent":["import { isAsyncDisposable, isDisposable } from \"./disposable\";\n\n/**\n * Function associated with particular entry from the RefCountResourcePool.\n *\n * Calling the function will release the reference acquired when object was\n * received from the pool.\n */\nexport type UnrefFn = () => void;\n\nexport interface PoolEntry<K extends string = string, R extends {} = {}> extends Disposable {\n /** Resource key, calculated using provided `calculateParamsKey` function */\n readonly key: K;\n\n /** Resource itself created by `createNewResource` function */\n readonly resource: R;\n\n /** Callback to be called when requested resource can be disposed. */\n readonly unref: UnrefFn;\n}\n\n/**\n * Wraps a PoolEntry for use with `using`. Auto-calls `unref()` at end of scope\n * unless `keep()` is called to transfer ownership to the caller.\n */\nexport class PoolEntryGuard<K extends string = string, R extends {} = {}> implements Disposable {\n private kept = false;\n\n constructor(readonly entry: PoolEntry<K, R>) {}\n\n get key(): K {\n return this.entry.key;\n }\n\n get resource(): R {\n return this.entry.resource;\n }\n\n /** Disarm the guard — caller takes ownership of the entry. */\n keep(): PoolEntry<K, R> {\n this.kept = true;\n return this.entry;\n }\n\n [Symbol.dispose](): void {\n if (!this.kept) this.entry.unref();\n }\n}\n\ntype RefCountEnvelope<R> = {\n refCount: number;\n readonly resource: R;\n};\n\nexport interface RefCountPool<P, K extends string, R extends {}> {\n /** Acquire resource from the pool */\n acquire(params: P): PoolEntry<K, R>;\n\n /** Try to get a resource by key */\n tryGetByKey(key: K): R | undefined;\n\n /** Get a resource by key */\n getByKey(key: K): R;\n}\n\nexport abstract class RefCountPoolBase<P, K extends string, R extends {}>\n implements RefCountPool<P, K, R>, AsyncDisposable\n{\n private readonly resources = new Map<K, RefCountEnvelope<R>>();\n private readonly disposeQueue = Promise.resolve();\n\n private check(key: K) {\n const envelope = this.resources.get(key);\n if (envelope === undefined) throw new Error(\"Unexpected state.\");\n if (envelope.refCount === 0) {\n this.resources.delete(key);\n const resource = envelope.resource;\n\n if (isDisposable(resource)) {\n void this.disposeQueue.then(() => resource[Symbol.dispose]());\n } else if (isAsyncDisposable(resource)) {\n void this.disposeQueue.then(() => resource[Symbol.asyncDispose]());\n }\n }\n }\n\n protected abstract calculateParamsKey(params: P): K;\n protected abstract createNewResource(params: P, key: K): R;\n\n public acquire(params: P): PoolEntry<K, R> {\n const key = this.calculateParamsKey(params);\n let envelope = this.resources.get(key);\n if (envelope === undefined) {\n envelope = { refCount: 0, resource: this.createNewResource(params, key) };\n this.resources.set(key, envelope);\n }\n\n // adding ref count\n envelope.refCount++;\n\n let unreferenced = false;\n const unref = () => {\n if (unreferenced) return; // unref is idempotent, calling it many times have no effect\n unreferenced = true;\n // subtracting ref count\n envelope.refCount--;\n this.check(key);\n };\n return {\n resource: envelope.resource,\n key,\n unref,\n [Symbol.dispose]: unref,\n };\n }\n\n public tryGetByKey(key: K): R | undefined {\n return this.resources.get(key)?.resource;\n }\n\n public abstract getByKey(key: K): R;\n\n public async dispose(): Promise<void> {\n void (await Promise.allSettled(\n Array.from(this.resources.values()).map((envelope) => {\n const resource = envelope.resource;\n if (isDisposable(resource)) {\n return this.disposeQueue.then(() => resource[Symbol.dispose]());\n } else if (isAsyncDisposable(resource)) {\n return this.disposeQueue.then(() => resource[Symbol.asyncDispose]());\n }\n }),\n ));\n }\n\n public async [Symbol.asyncDispose](): Promise<void> {\n return await this.dispose();\n }\n}\n"],"mappings":";AA4CG,OAAO,SA2FM,OAAO"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@platforma-sdk/ui-vue",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.63.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"exports": {
|
|
@@ -25,10 +25,10 @@
|
|
|
25
25
|
"lru-cache": "^11.2.2",
|
|
26
26
|
"vue": "^3.5.24",
|
|
27
27
|
"zod": "~3.23.8",
|
|
28
|
-
"@milaboratories/
|
|
29
|
-
"@milaboratories/
|
|
30
|
-
"@platforma-sdk/model": "1.
|
|
31
|
-
"@milaboratories/
|
|
28
|
+
"@milaboratories/pl-model-common": "1.31.1",
|
|
29
|
+
"@milaboratories/pf-spec-driver": "1.2.3",
|
|
30
|
+
"@platforma-sdk/model": "1.63.1",
|
|
31
|
+
"@milaboratories/uikit": "2.11.6"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@faker-js/faker": "^9.2.0",
|
|
@@ -43,9 +43,9 @@
|
|
|
43
43
|
"vite": "8.0.0-beta.15",
|
|
44
44
|
"vitest": "^4.0.18",
|
|
45
45
|
"@milaboratories/build-configs": "1.5.2",
|
|
46
|
-
"@milaboratories/helpers": "1.14.
|
|
47
|
-
"@milaboratories/ts-
|
|
48
|
-
"@milaboratories/ts-
|
|
46
|
+
"@milaboratories/helpers": "1.14.1",
|
|
47
|
+
"@milaboratories/ts-builder": "1.3.0",
|
|
48
|
+
"@milaboratories/ts-configs": "1.2.2"
|
|
49
49
|
},
|
|
50
50
|
"scripts": {
|
|
51
51
|
"dev": "ts-builder serve --target browser-lib",
|
|
@@ -3,7 +3,6 @@ import type {
|
|
|
3
3
|
PTableColumnId,
|
|
4
4
|
PTableColumnSpecColumn,
|
|
5
5
|
PTableValue,
|
|
6
|
-
PTableValueAxis,
|
|
7
6
|
} from "@platforma-sdk/model";
|
|
8
7
|
import {
|
|
9
8
|
canonicalizeJson,
|
|
@@ -22,7 +21,6 @@ import {
|
|
|
22
21
|
isLabelColumn as isLabelColumnSpec,
|
|
23
22
|
isColumnHidden,
|
|
24
23
|
matchAxisId,
|
|
25
|
-
isPTableValueAxis,
|
|
26
24
|
readAnnotation,
|
|
27
25
|
Annotation,
|
|
28
26
|
ValueType,
|
|
@@ -63,12 +61,9 @@ function columns2rows(
|
|
|
63
61
|
): PlAgDataTableV2Row[] {
|
|
64
62
|
const rowData: PlAgDataTableV2Row[] = [];
|
|
65
63
|
for (let iRow = 0; iRow < columns[0].data.length; ++iRow) {
|
|
66
|
-
const axesKey:
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
throw new Error(`axis value is not a PTableValueAxis: ${JSON.stringify(value)}`);
|
|
70
|
-
return value;
|
|
71
|
-
});
|
|
64
|
+
const axesKey: PTableKey = axes.map((iAxis) =>
|
|
65
|
+
pTableValue(columns[resultMapping[iAxis]], iRow),
|
|
66
|
+
);
|
|
72
67
|
const id = canonicalizeJson<PlTableRowId>(axesKey);
|
|
73
68
|
const row: PlAgDataTableV2Row = { id, axesKey };
|
|
74
69
|
fields.forEach((field, iCol) => {
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Annotation,
|
|
3
|
-
isPTableAbsent,
|
|
4
3
|
PTableNA,
|
|
5
4
|
readAnnotation,
|
|
6
5
|
ValueType,
|
|
@@ -20,7 +19,7 @@ export function formatSpecialValues(
|
|
|
20
19
|
return "undefined";
|
|
21
20
|
} else if (isPTableHidden(value)) {
|
|
22
21
|
return "loading...";
|
|
23
|
-
} else if (
|
|
22
|
+
} else if (value === PTableNA) {
|
|
24
23
|
return "";
|
|
25
24
|
} else {
|
|
26
25
|
return undefined;
|