@platforma-sdk/ui-vue 1.79.27 → 1.80.0
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 +19 -19
- 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 +38 -0
- package/dist/components/PlAdvancedFilter/FilterEditor.js.map +1 -1
- package/dist/components/PlAdvancedFilter/FilterEditor.style.js.map +1 -1
- package/dist/components/PlAdvancedFilter/FilterEditor.vue.d.ts.map +1 -1
- package/dist/components/PlAdvancedFilter/FilterEditor.vue2.js +124 -113
- package/dist/components/PlAdvancedFilter/FilterEditor.vue2.js.map +1 -1
- package/dist/components/PlAdvancedFilter/types.d.ts +1 -1
- package/dist/components/PlAdvancedFilter/types.d.ts.map +1 -1
- package/dist/components/PlAdvancedFilter/utils.d.ts +1 -1
- package/dist/components/PlAdvancedFilter/utils.d.ts.map +1 -1
- package/dist/components/PlAdvancedFilter/utils.js.map +1 -1
- package/dist/components/PlAgDataTable/PlAgDataTableV2.js.map +1 -1
- package/dist/components/PlAgDataTable/PlAgDataTableV2.style.js.map +1 -1
- package/dist/components/PlAgDataTable/PlAgDataTableV2.vue.d.ts.map +1 -1
- package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js +125 -121
- package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js.map +1 -1
- package/dist/components/PlAgDataTable/compositions/useFilterableColumns.d.ts +4 -4
- package/dist/components/PlAgDataTable/sources/row-number.d.ts.map +1 -1
- package/dist/components/PlAgDataTable/sources/row-number.js +1 -1
- package/dist/components/PlAgDataTable/sources/row-number.js.map +1 -1
- package/dist/components/PlAgDataTable/sources/table-source-v2.d.ts +40 -4
- package/dist/components/PlAgDataTable/sources/table-source-v2.d.ts.map +1 -1
- package/dist/components/PlAgDataTable/sources/table-source-v2.js +91 -56
- package/dist/components/PlAgDataTable/sources/table-source-v2.js.map +1 -1
- package/dist/components/PlAgDataTable/sources/table-state-v2.d.ts.map +1 -1
- package/dist/components/PlAgDataTable/sources/table-state-v2.js +65 -64
- package/dist/components/PlAgDataTable/sources/table-state-v2.js.map +1 -1
- package/dist/components/PlAgDataTable/sources/value-rendering.d.ts +3 -3
- package/dist/components/PlAgDataTable/sources/value-rendering.d.ts.map +1 -1
- package/dist/components/PlAgDataTable/sources/value-rendering.js +12 -12
- package/dist/components/PlAgDataTable/sources/value-rendering.js.map +1 -1
- package/dist/components/PlAnnotations/components/PlAnnotations.vue2.js.map +1 -1
- package/dist/components/PlTableFilters/PlTableFiltersV2.js.map +1 -1
- package/dist/components/PlTableFilters/PlTableFiltersV2.style.js.map +1 -1
- package/dist/components/PlTableFilters/PlTableFiltersV2.vue.d.ts.map +1 -1
- package/dist/components/PlTableFilters/PlTableFiltersV2.vue2.js +42 -45
- package/dist/components/PlTableFilters/PlTableFiltersV2.vue2.js.map +1 -1
- package/dist/internal/service_factories.d.ts +4 -3
- package/dist/internal/service_factories.d.ts.map +1 -1
- package/dist/internal/service_factories.js +6 -4
- package/dist/internal/service_factories.js.map +1 -1
- package/package.json +7 -6
- package/src/components/PlAdvancedFilter/FilterEditor.vue +39 -10
- package/src/components/PlAdvancedFilter/types.ts +3 -2
- package/src/components/PlAdvancedFilter/utils.ts +1 -1
- package/src/components/PlAgDataTable/PlAgDataTableV2.vue +21 -5
- package/src/components/PlAgDataTable/sources/row-number.ts +1 -0
- package/src/components/PlAgDataTable/sources/table-source-v2.ts +132 -31
- package/src/components/PlAgDataTable/sources/table-state-v2.ts +6 -7
- package/src/components/PlAgDataTable/sources/value-rendering.ts +7 -7
- package/src/components/PlTableFilters/PlTableFiltersV2.vue +9 -13
- package/src/internal/service_factories.ts +2 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"row-number.js","names":[],"sources":["../../../../src/components/PlAgDataTable/sources/row-number.ts"],"sourcesContent":["import type { AgGridEvent, AgPublicEventType } from \"ag-grid-enterprise\";\nimport {\n isColumnSelectionCol,\n type ColDef,\n type GridApi,\n type ValueGetterParams,\n} from \"ag-grid-enterprise\";\nimport { nextTick } from \"vue\";\nimport { PlAgRowNumCheckbox } from \"../../PlAgRowNumCheckbox\";\nimport PlAgRowNumHeader from \"../../PlAgRowNumHeader.vue\";\n\nexport const PlAgDataTableRowNumberColId = '\"##RowNumberColumnId##\"';\n\nconst HeaderSize = 45;\n\nexport function makeRowNumberColDef<TData = any>(): ColDef<TData> {\n return {\n colId: PlAgDataTableRowNumberColId,\n headerName: \"#\",\n headerComponent: PlAgRowNumHeader,\n valueGetter: (params: ValueGetterParams) => {\n if (params.node === null) return null;\n if (params.node.rowIndex === null) return null;\n return params.node.rowIndex + 1;\n },\n cellRenderer: PlAgRowNumCheckbox,\n headerClass: \"pl-ag-header-align-center\",\n suppressNavigable: true,\n suppressMovable: true,\n mainMenuItems: [],\n contextMenuItems: [],\n lockPosition: \"left\",\n pinned: \"left\",\n lockPinned: true,\n width: HeaderSize,\n suppressSizeToFit: true,\n suppressAutoSize: true,\n cellStyle: {\n color: \"var(--txt-03)\",\n \"background-color\": \"var(--bg-base-light)\",\n overflow: \"visible !important\",\n \"text-align\": \"center\",\n },\n sortable: false,\n resizable: false,\n };\n}\n\nfunction createCellFake(): HTMLDivElement {\n const div = document.createElement(\"div\");\n\n div.style.visibility = \"hidden\";\n div.style.position = \"absolute\";\n div.style.boxSizing = \"border-box\";\n\n div.style.padding = \"15.5px\";\n div.style.border = \"1px solid\";\n div.style.width = \"auto\";\n\n document.body.appendChild(div);\n return div;\n}\n\nfunction destroyCellFake(cellFake: HTMLDivElement) {\n document.body.removeChild(cellFake);\n}\n\nfunction adjustRowNumberColumnWidth(gridApi: GridApi, cellFake: HTMLDivElement, force?: boolean) {\n const rowNode = gridApi.getDisplayedRowAtIndex(gridApi.getLastDisplayedRowIndex());\n if (!rowNode) return;\n\n const lastDisplayedRowNumber = gridApi.getCellValue({\n rowNode,\n colKey: PlAgDataTableRowNumberColId,\n });\n\n if (typeof lastDisplayedRowNumber !== \"number\") return;\n\n const lastDisplayedRowNumberDigitCount = lastDisplayedRowNumber.toString().length;\n if (!force && cellFake.innerHTML.length === lastDisplayedRowNumberDigitCount) return;\n\n const WidestDigit = \"5\";\n cellFake.innerHTML = WidestDigit.repeat(lastDisplayedRowNumberDigitCount);\n\n nextTick(() => {\n gridApi.applyColumnState({\n state: [\n {\n colId: PlAgDataTableRowNumberColId,\n pinned: \"left\", // sometimes pinnig is strangely not applied\n width: Math.max(HeaderSize, cellFake.offsetWidth),\n },\n ],\n });\n });\n}\n\nfunction fixColumnOrder(gridApi: GridApi) {\n if (gridApi.isDestroyed()) return;\n const columns = gridApi.getAllGridColumns() ?? [];\n const selectionIndex = columns.findIndex(isColumnSelectionCol);\n const numRowsIndex = columns.findIndex(\n (column) => column.getId() === PlAgDataTableRowNumberColId,\n );\n if (numRowsIndex !== -1) {\n if (selectionIndex !== -1) {\n if (selectionIndex !== 0 || numRowsIndex !== 1) {\n gridApi.moveColumns([columns[numRowsIndex], columns[selectionIndex]], 0);\n }\n } else {\n if (numRowsIndex !== 0) {\n gridApi.moveColumns([columns[numRowsIndex]], 0);\n }\n }\n }\n}\n\nexport function autoSizeRowNumberColumn(gridApi: GridApi) {\n const cellFake = createCellFake();\n\n gridApi.addEventListener(\"firstDataRendered\", (event) => {\n adjustRowNumberColumnWidth(event.api, cellFake);\n });\n gridApi.addEventListener(\"viewportChanged\", (event) => {\n adjustRowNumberColumnWidth(event.api, cellFake);\n });\n gridApi.addEventListener(\"columnVisible\", (event) => {\n if (\n event.columns &&\n event.columns.some(\n (column) => column.isVisible() && column.getColId() === PlAgDataTableRowNumberColId,\n )\n ) {\n adjustRowNumberColumnWidth(event.api, cellFake);\n }\n });\n gridApi.addEventListener(\"columnResized\", (event) => {\n if (\n event.finished &&\n event.source === \"autosizeColumns\" &&\n event.columns?.some(\n (column) => column.isVisible() && column.getColId() === PlAgDataTableRowNumberColId,\n )\n ) {\n adjustRowNumberColumnWidth(event.api, cellFake, true);\n }\n });\n\n const refreshCells = (event: AgGridEvent) => event.api.refreshCells();\n const refreshCellsOn: AgPublicEventType[] = [\"sortChanged\", \"filterChanged\", \"modelUpdated\"];\n refreshCellsOn.forEach((eventType) => gridApi.addEventListener(eventType, refreshCells));\n\n gridApi.addEventListener(\"displayedColumnsChanged\", (event) => {\n fixColumnOrder(event.api);\n });\n gridApi.addEventListener(\"gridPreDestroyed\", () => {\n destroyCellFake(cellFake);\n });\n adjustRowNumberColumnWidth(gridApi, cellFake);\n fixColumnOrder(gridApi);\n}\n"],"mappings":";;;;;;AAWA,IAAa,IAA8B,6BAErC,IAAa;AAEnB,SAAgB,IAAkD;AAChE,QAAO;EACL,OAAO;EACP,YAAY;EACZ,iBAAiB;EACjB,cAAc,MACR,EAAO,SAAS,QAChB,EAAO,KAAK,aAAa,OAAa,OACnC,EAAO,KAAK,WAAW;EAEhC,cAAc;EACd,aAAa;EACb,mBAAmB;EACnB,iBAAiB;EACjB,eAAe,EAAE;EACjB,kBAAkB,EAAE;EACpB,cAAc;EACd,QAAQ;EACR,YAAY;EACZ,OAAO;EACP,mBAAmB;EACnB,kBAAkB;EAClB,WAAW;GACT,OAAO;GACP,oBAAoB;GACpB,UAAU;GACV,cAAc;GACf;EACD,UAAU;EACV,WAAW;EACZ;;AAGH,SAAS,IAAiC;CACxC,IAAM,IAAM,SAAS,cAAc,MAAM;AAWzC,QATA,EAAI,MAAM,aAAa,UACvB,EAAI,MAAM,WAAW,YACrB,EAAI,MAAM,YAAY,cAEtB,EAAI,MAAM,UAAU,UACpB,EAAI,MAAM,SAAS,aACnB,EAAI,MAAM,QAAQ,QAElB,SAAS,KAAK,YAAY,EAAI,EACvB;;AAGT,SAAS,EAAgB,GAA0B;AACjD,UAAS,KAAK,YAAY,EAAS;;AAGrC,SAAS,EAA2B,GAAkB,GAA0B,GAAiB;CAC/F,IAAM,IAAU,EAAQ,uBAAuB,EAAQ,0BAA0B,CAAC;AAClF,KAAI,CAAC,EAAS;CAEd,IAAM,IAAyB,EAAQ,aAAa;EAClD;EACA,QAAQ;EACT,CAAC;AAEF,KAAI,OAAO,KAA2B,SAAU;CAEhD,IAAM,IAAmC,EAAuB,UAAU,CAAC;AACvE,EAAC,KAAS,EAAS,UAAU,WAAW,MAG5C,EAAS,YADW,IACa,OAAO,EAAiC,EAEzE,QAAe;
|
|
1
|
+
{"version":3,"file":"row-number.js","names":[],"sources":["../../../../src/components/PlAgDataTable/sources/row-number.ts"],"sourcesContent":["import type { AgGridEvent, AgPublicEventType } from \"ag-grid-enterprise\";\nimport {\n isColumnSelectionCol,\n type ColDef,\n type GridApi,\n type ValueGetterParams,\n} from \"ag-grid-enterprise\";\nimport { nextTick } from \"vue\";\nimport { PlAgRowNumCheckbox } from \"../../PlAgRowNumCheckbox\";\nimport PlAgRowNumHeader from \"../../PlAgRowNumHeader.vue\";\n\nexport const PlAgDataTableRowNumberColId = '\"##RowNumberColumnId##\"';\n\nconst HeaderSize = 45;\n\nexport function makeRowNumberColDef<TData = any>(): ColDef<TData> {\n return {\n colId: PlAgDataTableRowNumberColId,\n headerName: \"#\",\n headerComponent: PlAgRowNumHeader,\n valueGetter: (params: ValueGetterParams) => {\n if (params.node === null) return null;\n if (params.node.rowIndex === null) return null;\n return params.node.rowIndex + 1;\n },\n cellRenderer: PlAgRowNumCheckbox,\n headerClass: \"pl-ag-header-align-center\",\n suppressNavigable: true,\n suppressMovable: true,\n mainMenuItems: [],\n contextMenuItems: [],\n lockPosition: \"left\",\n pinned: \"left\",\n lockPinned: true,\n width: HeaderSize,\n suppressSizeToFit: true,\n suppressAutoSize: true,\n cellStyle: {\n color: \"var(--txt-03)\",\n \"background-color\": \"var(--bg-base-light)\",\n overflow: \"visible !important\",\n \"text-align\": \"center\",\n },\n sortable: false,\n resizable: false,\n };\n}\n\nfunction createCellFake(): HTMLDivElement {\n const div = document.createElement(\"div\");\n\n div.style.visibility = \"hidden\";\n div.style.position = \"absolute\";\n div.style.boxSizing = \"border-box\";\n\n div.style.padding = \"15.5px\";\n div.style.border = \"1px solid\";\n div.style.width = \"auto\";\n\n document.body.appendChild(div);\n return div;\n}\n\nfunction destroyCellFake(cellFake: HTMLDivElement) {\n document.body.removeChild(cellFake);\n}\n\nfunction adjustRowNumberColumnWidth(gridApi: GridApi, cellFake: HTMLDivElement, force?: boolean) {\n const rowNode = gridApi.getDisplayedRowAtIndex(gridApi.getLastDisplayedRowIndex());\n if (!rowNode) return;\n\n const lastDisplayedRowNumber = gridApi.getCellValue({\n rowNode,\n colKey: PlAgDataTableRowNumberColId,\n });\n\n if (typeof lastDisplayedRowNumber !== \"number\") return;\n\n const lastDisplayedRowNumberDigitCount = lastDisplayedRowNumber.toString().length;\n if (!force && cellFake.innerHTML.length === lastDisplayedRowNumberDigitCount) return;\n\n const WidestDigit = \"5\";\n cellFake.innerHTML = WidestDigit.repeat(lastDisplayedRowNumberDigitCount);\n\n nextTick(() => {\n if (gridApi.isDestroyed()) return;\n gridApi.applyColumnState({\n state: [\n {\n colId: PlAgDataTableRowNumberColId,\n pinned: \"left\", // sometimes pinnig is strangely not applied\n width: Math.max(HeaderSize, cellFake.offsetWidth),\n },\n ],\n });\n });\n}\n\nfunction fixColumnOrder(gridApi: GridApi) {\n if (gridApi.isDestroyed()) return;\n const columns = gridApi.getAllGridColumns() ?? [];\n const selectionIndex = columns.findIndex(isColumnSelectionCol);\n const numRowsIndex = columns.findIndex(\n (column) => column.getId() === PlAgDataTableRowNumberColId,\n );\n if (numRowsIndex !== -1) {\n if (selectionIndex !== -1) {\n if (selectionIndex !== 0 || numRowsIndex !== 1) {\n gridApi.moveColumns([columns[numRowsIndex], columns[selectionIndex]], 0);\n }\n } else {\n if (numRowsIndex !== 0) {\n gridApi.moveColumns([columns[numRowsIndex]], 0);\n }\n }\n }\n}\n\nexport function autoSizeRowNumberColumn(gridApi: GridApi) {\n const cellFake = createCellFake();\n\n gridApi.addEventListener(\"firstDataRendered\", (event) => {\n adjustRowNumberColumnWidth(event.api, cellFake);\n });\n gridApi.addEventListener(\"viewportChanged\", (event) => {\n adjustRowNumberColumnWidth(event.api, cellFake);\n });\n gridApi.addEventListener(\"columnVisible\", (event) => {\n if (\n event.columns &&\n event.columns.some(\n (column) => column.isVisible() && column.getColId() === PlAgDataTableRowNumberColId,\n )\n ) {\n adjustRowNumberColumnWidth(event.api, cellFake);\n }\n });\n gridApi.addEventListener(\"columnResized\", (event) => {\n if (\n event.finished &&\n event.source === \"autosizeColumns\" &&\n event.columns?.some(\n (column) => column.isVisible() && column.getColId() === PlAgDataTableRowNumberColId,\n )\n ) {\n adjustRowNumberColumnWidth(event.api, cellFake, true);\n }\n });\n\n const refreshCells = (event: AgGridEvent) => event.api.refreshCells();\n const refreshCellsOn: AgPublicEventType[] = [\"sortChanged\", \"filterChanged\", \"modelUpdated\"];\n refreshCellsOn.forEach((eventType) => gridApi.addEventListener(eventType, refreshCells));\n\n gridApi.addEventListener(\"displayedColumnsChanged\", (event) => {\n fixColumnOrder(event.api);\n });\n gridApi.addEventListener(\"gridPreDestroyed\", () => {\n destroyCellFake(cellFake);\n });\n adjustRowNumberColumnWidth(gridApi, cellFake);\n fixColumnOrder(gridApi);\n}\n"],"mappings":"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"}
|
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
import { AxesSpec, PTableColumnSpecColumn, PTableHandle, PTableValue, PFrameDriver, PlDataTableSheet, AxisId, PTableColumnSpec, PTableKey, PlTableColumnIdJson } from '@platforma-sdk/model';
|
|
1
|
+
import { AnnotationDataStatus, AxesSpec, PlDataTableColumnsMeta, PTableColumnSpecColumn, PTableHandle, PTableValue, PFrameDriver, PlDataTableSheet, AxisId, PTableColumnSpec, PTableKey, PlTableColumnIdJson } from '@platforma-sdk/model';
|
|
2
2
|
import { ColDef, GridApi, ManagedGridOptions } from 'ag-grid-enterprise';
|
|
3
3
|
import { PlAgDataTableV2Row } from '../types';
|
|
4
4
|
import { PTableHidden } from './common';
|
|
5
5
|
import { Ref } from 'vue';
|
|
6
6
|
import { DeferredCircular } from './focus-row';
|
|
7
|
-
export declare function isLabelColumn(column: PTableColumnSpec): column is PTableColumnSpecColumn;
|
|
8
7
|
/** Calculate GridOptions for selected p-table data source */
|
|
9
|
-
export declare function calculateGridOptions({ generation, pfDriver, sheets, fullTableHandle, visibleTableHandle, dataRenderedTracker, hiddenColIds, cellButtonAxisParams, }: {
|
|
8
|
+
export declare function calculateGridOptions({ generation, pfDriver, sheets, fullTableHandle, visibleTableHandle, columnsMeta, dataRenderedTracker, hiddenColIds, cellButtonAxisParams, }: {
|
|
10
9
|
sheets: PlDataTableSheet[];
|
|
11
10
|
pfDriver: PFrameDriver;
|
|
12
11
|
generation: Ref<number>;
|
|
13
12
|
fullTableHandle: PTableHandle;
|
|
14
13
|
visibleTableHandle: PTableHandle;
|
|
14
|
+
/** Sidecar display metadata (label/visibility/order/status/hidden axes) from the model. */
|
|
15
|
+
columnsMeta?: PlDataTableColumnsMeta;
|
|
15
16
|
dataRenderedTracker: DeferredCircular<GridApi<PlAgDataTableV2Row>>;
|
|
16
17
|
hiddenColIds?: PlTableColumnIdJson[];
|
|
17
18
|
cellButtonAxisParams?: PlAgCellButtonAxisParams;
|
|
@@ -26,5 +27,40 @@ export type PlAgCellButtonAxisParams = {
|
|
|
26
27
|
/**
|
|
27
28
|
* Calculates column definition for a given p-table column
|
|
28
29
|
*/
|
|
29
|
-
export declare function makeColDef(iCol
|
|
30
|
+
export declare function makeColDef({ iCol, spec, dataStatus, hiddenColIds, cellButtonAxisParams, columnsMeta, }: {
|
|
31
|
+
iCol: number;
|
|
32
|
+
spec: PTableColumnSpec;
|
|
33
|
+
/** Per-column rendering status from the model; `undefined` for hidden cols. */
|
|
34
|
+
dataStatus: AnnotationDataStatus | undefined;
|
|
35
|
+
hiddenColIds: PlTableColumnIdJson[] | undefined;
|
|
36
|
+
cellButtonAxisParams?: PlAgCellButtonAxisParams;
|
|
37
|
+
/** Sidecar meta used to resolve the effective header label. */
|
|
38
|
+
columnsMeta?: PlDataTableColumnsMeta;
|
|
39
|
+
}): ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden>;
|
|
40
|
+
export declare function isLabelColumn(column: PTableColumnSpec): column is PTableColumnSpecColumn;
|
|
41
|
+
/**
|
|
42
|
+
* Effective column label: sidecar override wins over intrinsic spec
|
|
43
|
+
* annotation. Axes have no label override in the sidecar — they fall through
|
|
44
|
+
* to `pl7.app/label` on the axis spec.
|
|
45
|
+
*/
|
|
46
|
+
export declare function effectiveLabel(spec: PTableColumnSpec, meta: PlDataTableColumnsMeta | undefined): string | undefined;
|
|
47
|
+
/**
|
|
48
|
+
* Effective visibility. For columns: sidecar override wins over the intrinsic
|
|
49
|
+
* `pl7.app/table/visibility` annotation. For axes: `meta.axes[id].hidden`
|
|
50
|
+
* forces hidden; otherwise the intrinsic axis annotation rules.
|
|
51
|
+
*
|
|
52
|
+
* Kept out of the spec on purpose — baking visibility into a column spec via
|
|
53
|
+
* override changes its `ColumnUniversalId`, so the same physical column reached
|
|
54
|
+
* two ways (e.g. as primary and as a discovered label) would diverge into two
|
|
55
|
+
* ids and render twice. The sidecar preserves identity; readers apply this at
|
|
56
|
+
* use sites.
|
|
57
|
+
*/
|
|
58
|
+
export declare function effectiveVisibility(spec: PTableColumnSpec, meta: PlDataTableColumnsMeta | undefined): "default" | "optional" | "hidden";
|
|
59
|
+
/**
|
|
60
|
+
* Effective order priority — number suitable for left-to-right comparison
|
|
61
|
+
* (higher = further left). Sidecar override on columns wins over the
|
|
62
|
+
* intrinsic `pl7.app/table/orderPriority`; axes have no override.
|
|
63
|
+
* `undefined` when neither source supplied a value (consumer decides default).
|
|
64
|
+
*/
|
|
65
|
+
export declare function effectiveOrder(spec: PTableColumnSpec, meta: PlDataTableColumnsMeta | undefined): number | undefined;
|
|
30
66
|
//# sourceMappingURL=table-source-v2.d.ts.map
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"table-source-v2.d.ts","sourceRoot":"","sources":["../../../../src/components/PlAgDataTable/sources/table-source-v2.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,119 +22,152 @@ function C(e, t, n, r) {
|
|
|
22
22
|
}
|
|
23
23
|
return i;
|
|
24
24
|
}
|
|
25
|
-
async function w({ generation: r, pfDriver: i, sheets: a, fullTableHandle: o, visibleTableHandle: s,
|
|
26
|
-
let
|
|
27
|
-
if (
|
|
28
|
-
let
|
|
25
|
+
async function w({ generation: r, pfDriver: i, sheets: a, fullTableHandle: o, visibleTableHandle: s, columnsMeta: c, dataRenderedTracker: l, hiddenColIds: u, cellButtonAxisParams: d }) {
|
|
26
|
+
let f = r.value, [p, m] = await Promise.all([i.getSpec(o), i.getSpec(s)]);
|
|
27
|
+
if (f !== r.value) throw Error("table state generation changed");
|
|
28
|
+
let h = p, g = m, _ = k(h, g), v = A(a), y = N(M(h, v, j(h, v), c), h, c), b = u ?? P(y, h, c), x = [n(), ...y.map((e) => {
|
|
29
|
+
let t = h[e];
|
|
30
|
+
return T({
|
|
31
|
+
iCol: e,
|
|
32
|
+
spec: t,
|
|
33
|
+
dataStatus: (_.get(e) ?? -1) >= 0 && t.type === "column" ? c?.columns[t.id]?.status : void 0,
|
|
34
|
+
hiddenColIds: b,
|
|
35
|
+
cellButtonAxisParams: d,
|
|
36
|
+
columnsMeta: c
|
|
37
|
+
});
|
|
38
|
+
})], S = F(g), { requestIndices: w, axesResultIndices: E, fieldResultMapping: D } = I(y, S.map(([e]) => e), _), O = -1, L;
|
|
29
39
|
return {
|
|
30
|
-
axesSpec:
|
|
31
|
-
columnDefs:
|
|
40
|
+
axesSpec: S.map(([, { spec: e }]) => e),
|
|
41
|
+
columnDefs: x,
|
|
32
42
|
serverSideDatasource: { getRows: async (n) => {
|
|
33
|
-
if (
|
|
43
|
+
if (f !== r.value) return n.fail();
|
|
34
44
|
try {
|
|
35
|
-
if (
|
|
45
|
+
if (O === -1) {
|
|
36
46
|
let e = await i.getShape(s);
|
|
37
|
-
if (
|
|
38
|
-
|
|
47
|
+
if (f !== r.value || n.api.isDestroyed()) return n.fail();
|
|
48
|
+
O = e.rows;
|
|
39
49
|
}
|
|
40
|
-
if (
|
|
50
|
+
if (O == 0) {
|
|
41
51
|
n.success({
|
|
42
52
|
rowData: [],
|
|
43
|
-
rowCount:
|
|
53
|
+
rowCount: O
|
|
44
54
|
}), n.api.setGridOption("loading", !1), n.api.showNoRowsOverlay();
|
|
45
55
|
return;
|
|
46
56
|
}
|
|
47
|
-
if (
|
|
57
|
+
if (L && !e(L.request.sortModel, n.request.sortModel)) return n.success({
|
|
48
58
|
rowData: [],
|
|
49
|
-
rowCount:
|
|
59
|
+
rowCount: O
|
|
50
60
|
});
|
|
51
|
-
|
|
61
|
+
L = n;
|
|
52
62
|
let a = 0, o = [];
|
|
53
|
-
if (
|
|
54
|
-
let e = await i.getData(s,
|
|
63
|
+
if (O > 0 && n.request.startRow !== void 0 && n.request.endRow !== void 0 && (a = Math.min(O, n.request.endRow) - n.request.startRow, a > 0)) {
|
|
64
|
+
let e = await i.getData(s, w, {
|
|
55
65
|
offset: n.request.startRow,
|
|
56
66
|
length: a
|
|
57
67
|
});
|
|
58
|
-
if (
|
|
59
|
-
o = C(
|
|
68
|
+
if (f !== r.value || n.api.isDestroyed()) return n.fail();
|
|
69
|
+
o = C(y, e, D, E);
|
|
60
70
|
}
|
|
61
71
|
n.success({
|
|
62
72
|
rowData: o,
|
|
63
|
-
rowCount:
|
|
64
|
-
}), n.api.autoSizeColumns(n.api.getAllDisplayedColumns().filter((e) => e.getColId() !== t)), n.api.setGridOption("loading", !1),
|
|
73
|
+
rowCount: O
|
|
74
|
+
}), n.api.autoSizeColumns(n.api.getAllDisplayedColumns().filter((e) => e.getColId() !== t)), n.api.setGridOption("loading", !1), l.resolve(n.api);
|
|
65
75
|
} catch (e) {
|
|
66
|
-
if (
|
|
76
|
+
if (f !== r.value || n.api.isDestroyed()) return n.fail();
|
|
67
77
|
n.api.setGridOption("loading", !0), n.fail(), console.trace(e);
|
|
68
78
|
}
|
|
69
79
|
} }
|
|
70
80
|
};
|
|
71
81
|
}
|
|
72
|
-
function T(t, n, o, p) {
|
|
73
|
-
let
|
|
74
|
-
|
|
75
|
-
let
|
|
82
|
+
function T({ iCol: t, spec: n, dataStatus: o, hiddenColIds: p, cellButtonAxisParams: m, columnsMeta: g }) {
|
|
83
|
+
let _ = u(f(n)), v = n.type === "axis" ? n.spec.type : n.spec.valueType, b = s(n, o), x = {};
|
|
84
|
+
b.fontFamily && (b.fontFamily === "monospace" ? (x.fontFamily = "Spline Sans Mono", x.fontWeight = 300) : x.fontFamily = b.fontFamily);
|
|
85
|
+
let S = E(n, g)?.trim() ?? `Unlabeled ${n.type} ${t}`;
|
|
76
86
|
return {
|
|
77
|
-
colId:
|
|
87
|
+
colId: _,
|
|
78
88
|
mainMenuItems: r,
|
|
79
89
|
context: n,
|
|
80
90
|
field: `${t}`,
|
|
81
|
-
headerName:
|
|
91
|
+
headerName: S,
|
|
82
92
|
lockPosition: n.type === "axis" || h(n.spec) && n.spec.axesSpec.length === 1,
|
|
83
|
-
hide:
|
|
84
|
-
valueFormatter:
|
|
93
|
+
hide: p !== void 0 && p.includes(_),
|
|
94
|
+
valueFormatter: b.valueFormatter,
|
|
85
95
|
headerComponent: i,
|
|
86
|
-
cellRendererSelector:
|
|
96
|
+
cellRendererSelector: m?.showCellButtonForAxisId ? () => {
|
|
87
97
|
let t = n.type === "axis" ? n.id : h(n.spec) && n.spec.axesSpec.length === 1 ? d(n.spec.axesSpec[0]) : void 0;
|
|
88
|
-
if (t && e(t,
|
|
98
|
+
if (t && e(t, m.showCellButtonForAxisId)) return {
|
|
89
99
|
component: a,
|
|
90
100
|
params: {
|
|
91
|
-
invokeRowsOnDoubleClick:
|
|
101
|
+
invokeRowsOnDoubleClick: m.cellButtonInvokeRowsOnDoubleClick,
|
|
92
102
|
onClick: (e) => {
|
|
93
|
-
|
|
103
|
+
m.trigger(e.data?.axesKey);
|
|
94
104
|
}
|
|
95
105
|
}
|
|
96
106
|
};
|
|
97
107
|
} : void 0,
|
|
98
|
-
cellStyle:
|
|
108
|
+
cellStyle: x,
|
|
99
109
|
headerComponentParams: {
|
|
100
110
|
type: (() => {
|
|
101
|
-
switch (
|
|
111
|
+
switch (v) {
|
|
102
112
|
case l.Int:
|
|
103
113
|
case l.Long:
|
|
104
114
|
case l.Float:
|
|
105
115
|
case l.Double: return "Number";
|
|
106
116
|
case l.String:
|
|
107
117
|
case l.Bytes: return "Text";
|
|
108
|
-
default: throw Error(`unsupported data type: ${
|
|
118
|
+
default: throw Error(`unsupported data type: ${v}`);
|
|
109
119
|
}
|
|
110
120
|
})(),
|
|
111
121
|
tooltip: y(n.spec, c.Description)?.trim()
|
|
112
122
|
},
|
|
113
123
|
cellDataType: (() => {
|
|
114
|
-
switch (
|
|
124
|
+
switch (v) {
|
|
115
125
|
case l.Int:
|
|
116
126
|
case l.Long:
|
|
117
127
|
case l.Float:
|
|
118
128
|
case l.Double: return "number";
|
|
119
129
|
case l.String:
|
|
120
130
|
case l.Bytes: return "text";
|
|
121
|
-
default: throw Error(`unsupported data type: ${
|
|
131
|
+
default: throw Error(`unsupported data type: ${v}`);
|
|
122
132
|
}
|
|
123
133
|
})()
|
|
124
134
|
};
|
|
125
135
|
}
|
|
126
136
|
function E(e, t) {
|
|
137
|
+
if (e.type === "column") {
|
|
138
|
+
let n = t?.columns[e.id]?.label;
|
|
139
|
+
if (n !== void 0) return n;
|
|
140
|
+
}
|
|
141
|
+
return y(e.spec, c.Label);
|
|
142
|
+
}
|
|
143
|
+
function D(e, t) {
|
|
144
|
+
if (e.type === "axis") {
|
|
145
|
+
if (t?.axes[u(d(e.id))]?.hidden === !0) return "hidden";
|
|
146
|
+
} else {
|
|
147
|
+
let n = t?.columns[e.id]?.visibility;
|
|
148
|
+
if (n !== void 0) return n;
|
|
149
|
+
}
|
|
150
|
+
return p(e.spec) ? "hidden" : m(e.spec) ? "optional" : "default";
|
|
151
|
+
}
|
|
152
|
+
function O(e, t) {
|
|
153
|
+
if (e.type === "column") {
|
|
154
|
+
let n = t?.columns[e.id]?.order;
|
|
155
|
+
if (n !== void 0) return n;
|
|
156
|
+
}
|
|
157
|
+
return b(e.spec, c.Table.OrderPriority);
|
|
158
|
+
}
|
|
159
|
+
function k(e, t) {
|
|
127
160
|
let n = (e) => u(f(e)), r = new Map(t.entries().map(([e, t]) => [n(t), e]));
|
|
128
161
|
return new Map(e.entries().map(([e, t]) => {
|
|
129
162
|
let i = r.get(n(t));
|
|
130
163
|
return [e, x(i) ? -1 : i];
|
|
131
164
|
}));
|
|
132
165
|
}
|
|
133
|
-
function
|
|
166
|
+
function A(e) {
|
|
134
167
|
let t = e.map((e) => d(e.axis));
|
|
135
168
|
return (e) => t.some((t) => _(t, e));
|
|
136
169
|
}
|
|
137
|
-
function
|
|
170
|
+
function j(e, t) {
|
|
138
171
|
let n = [];
|
|
139
172
|
for (let [r, i] of e.entries()) {
|
|
140
173
|
if (i.type !== "column" || !h(i.spec)) continue;
|
|
@@ -152,31 +185,33 @@ function O(e, t) {
|
|
|
152
185
|
}
|
|
153
186
|
return (e) => n.find((t) => _(t.axisId, e))?.labelColumnIdx ?? -1;
|
|
154
187
|
}
|
|
155
|
-
function
|
|
188
|
+
function M(e, t, n, r) {
|
|
156
189
|
return e.entries().filter(([, e]) => {
|
|
157
190
|
switch (e.type) {
|
|
158
|
-
case "axis": return !(n(e.id) > -1 ||
|
|
159
|
-
case "column": return
|
|
191
|
+
case "axis": return !(n(e.id) > -1 || D(e, r) === "hidden") && !t(e.id);
|
|
192
|
+
case "column": return D(e, r) !== "hidden" && !g(e.spec);
|
|
160
193
|
}
|
|
161
194
|
}).map(([e]) => e).toArray();
|
|
162
195
|
}
|
|
163
|
-
function
|
|
164
|
-
let
|
|
165
|
-
let
|
|
166
|
-
|
|
196
|
+
function N(e, t, n) {
|
|
197
|
+
let r = (e) => {
|
|
198
|
+
let r = t[e];
|
|
199
|
+
if (r.type === "axis" || h(r.spec)) return Infinity;
|
|
200
|
+
let i = Number(O(r, n));
|
|
201
|
+
return isNaN(i) ? 0 : i;
|
|
167
202
|
};
|
|
168
|
-
return [...e].sort((e, t) =>
|
|
203
|
+
return [...e].sort((e, t) => r(t) - r(e));
|
|
169
204
|
}
|
|
170
|
-
function
|
|
171
|
-
return e.reduce((e,
|
|
172
|
-
let
|
|
173
|
-
return
|
|
205
|
+
function P(e, t, n) {
|
|
206
|
+
return e.reduce((e, r) => {
|
|
207
|
+
let i = t[r];
|
|
208
|
+
return i.type === "column" && D(i, n) === "optional" && e.push(u(f(i))), e;
|
|
174
209
|
}, []);
|
|
175
210
|
}
|
|
176
|
-
function
|
|
211
|
+
function F(e) {
|
|
177
212
|
return e.entries().filter((e) => e[1].type === "axis").toArray();
|
|
178
213
|
}
|
|
179
|
-
function
|
|
214
|
+
function I(e, t, n) {
|
|
180
215
|
let r = e.map((e) => {
|
|
181
216
|
let t = n.get(e);
|
|
182
217
|
return x(t) || t === -1 ? null : t;
|
|
@@ -188,6 +223,6 @@ function N(e, t, n) {
|
|
|
188
223
|
};
|
|
189
224
|
}
|
|
190
225
|
//#endregion
|
|
191
|
-
export { w as calculateGridOptions };
|
|
226
|
+
export { w as calculateGridOptions, D as effectiveVisibility };
|
|
192
227
|
|
|
193
228
|
//# 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 PTableColumnSpecAxis,\n PTableColumnSpecColumn,\n PTableHandle,\n PTableValue,\n} from \"@platforma-sdk/model\";\nimport {\n canonicalizeJson,\n getAxisId,\n pTableValue,\n type PFrameDriver,\n type PlDataTableSheet,\n type PTableVector,\n type AxisId,\n type PTableColumnSpec,\n type PTableKey,\n type PlTableColumnIdJson,\n isLabelColumn as isLabelColumnSpec,\n isLinkerColumn as isLinkerColumnSpec,\n isColumnHidden,\n isColumnOptional,\n matchAxisId,\n readAnnotation,\n readAnnotationJson,\n Annotation,\n ValueType,\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\";\nimport { isNil, uniq } from \"es-toolkit\";\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 fieldResultMapping: number[],\n axesResultIndices: number[],\n): PlAgDataTableV2Row[] {\n const rowData: PlAgDataTableV2Row[] = [];\n for (let rowIdx = 0; rowIdx < columns[0].data.length; ++rowIdx) {\n const axesKey: PTableKey = axesResultIndices.map((ri) => pTableValue(columns[ri], rowIdx));\n const id = canonicalizeJson<PlTableRowId>(axesKey);\n const row = fields.reduce<PlAgDataTableV2Row>(\n (acc, field, colIdx) => {\n acc[field.toString() as `${number}`] =\n fieldResultMapping[colIdx] === -1\n ? PTableHidden\n : pTableValue(columns[fieldResultMapping[colIdx]], rowIdx);\n return acc;\n },\n { id, axesKey },\n );\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 sheets,\n fullTableHandle,\n visibleTableHandle,\n dataRenderedTracker,\n hiddenColIds,\n cellButtonAxisParams,\n}: {\n sheets: PlDataTableSheet[];\n pfDriver: PFrameDriver;\n generation: Ref<number>;\n fullTableHandle: PTableHandle;\n visibleTableHandle: PTableHandle;\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\n // get specs of the full table\n const [tableSpecs, visibleTableSpecs] = await Promise.all([\n pfDriver.getSpec(fullTableHandle),\n pfDriver.getSpec(visibleTableHandle),\n ]);\n\n if (stateGeneration !== generation.value) throw new Error(\"table state generation changed\");\n\n // index mapping from full specs to visible subset (hidden columns → -1)\n const specsToVisibleSpecsMapping = buildSpecsToVisibleSpecsMapping(tableSpecs, visibleTableSpecs);\n\n const isPartitionedAxis = createPartitionedAxisPredicate(sheets);\n\n // label columns indexed by labeled axis (used for displayability filter)\n const getLabelColumnIndex = collectLabelColumnsByAxis(tableSpecs, isPartitionedAxis);\n\n // displayable column indices ordered: axes first, then columns by OrderPriority\n const fields = sortIndicesByTypeAndPriority(\n selectDisplayableIndices(tableSpecs, isPartitionedAxis, getLabelColumnIndex),\n tableSpecs,\n );\n\n // default hidden columns derived from Optional annotation when no saved state\n const resolvedHiddenColIds = hiddenColIds ?? computeDefaultHiddenColIds(fields, tableSpecs);\n\n const columnDefs: ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden>[] = [\n makeRowNumberColDef(),\n ...fields.map((field) =>\n makeColDef(field, tableSpecs[field], resolvedHiddenColIds, cellButtonAxisParams),\n ),\n ];\n\n // axes — taken directly from visible table (always present as part of join)\n const visibleAxes = collectVisibleAxes(visibleTableSpecs);\n\n // request indices: display fields + visible axes for row selection keys.\n const { requestIndices, axesResultIndices, fieldResultMapping } = buildRequestIndices(\n fields,\n visibleAxes.map(([idx]) => idx),\n specsToVisibleSpecsMapping,\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(visibleTableHandle);\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(visibleTableHandle, 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, fieldResultMapping, axesResultIndices);\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: visibleAxes.map(([, { spec }]) => spec),\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 hiddenColIds: PlTableColumnIdJson[] | undefined,\n cellButtonAxisParams?: PlAgCellButtonAxisParams,\n): ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden> {\n const colId = canonicalizeJson<PTableColumnId>(getPTableColumnId(spec));\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 const headerName =\n readAnnotation(spec.spec, Annotation.Label)?.trim() ?? `Unlabeled ${spec.type} ${iCol}`;\n\n return {\n colId,\n mainMenuItems: defaultMainMenuItems,\n context: spec,\n field: `${iCol}`,\n headerName,\n lockPosition:\n spec.type === \"axis\" || (isLabelColumnSpec(spec.spec) && spec.spec.axesSpec.length === 1),\n hide: hiddenColIds !== undefined && hiddenColIds.includes(colId),\n valueFormatter: columnRenderingSpec.valueFormatter,\n headerComponent: PlAgColumnHeader,\n cellRendererSelector: cellButtonAxisParams?.showCellButtonForAxisId\n ? () => {\n const axisId =\n spec.type === \"axis\"\n ? spec.id\n : isLabelColumnSpec(spec.spec) && spec.spec.axesSpec.length === 1\n ? getAxisId(spec.spec.axesSpec[0])\n : undefined;\n if (axisId && 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(spec.spec, Annotation.Description)?.trim(),\n // info: readAnnotation(spec.spec, Annotation.Table.Info)?.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\n/** Build index mapping from full tableSpecs to their position in visibleTableSpecs (missing → -1). */\nfunction buildSpecsToVisibleSpecsMapping(\n tableSpecs: PTableColumnSpec[],\n visibleTableSpecs: PTableColumnSpec[],\n): Map<number, number> {\n const specId = (spec: PTableColumnSpec) =>\n canonicalizeJson<PTableColumnId>(getPTableColumnId(spec));\n const visibleSpecsMap = new Map(\n visibleTableSpecs.entries().map(([i, spec]) => [specId(spec), i] as const),\n );\n return new Map(\n tableSpecs.entries().map(([i, spec]) => {\n const visibleSpecIdx = visibleSpecsMap.get(specId(spec));\n return [i, isNil(visibleSpecIdx) ? -1 : visibleSpecIdx];\n }),\n );\n}\n\n/** Predicate that returns true when an axis is one of the sheet partition axes. */\nfunction createPartitionedAxisPredicate(sheets: PlDataTableSheet[]): (axisId: AxisId) => boolean {\n const sheetAxesIds = sheets.map((sheet) => getAxisId(sheet.axis));\n return (axisId) => sheetAxesIds.some((id) => matchAxisId(id, axisId));\n}\n\n/**\n * Collect label columns (skipping partitioned axes and duplicates) and return a\n * lookup function that resolves labeled axisId → label column index (or -1).\n */\nfunction collectLabelColumnsByAxis(\n tableSpecs: PTableColumnSpec[],\n isPartitionedAxis: (axisId: AxisId) => boolean,\n): (axisId: AxisId) => number {\n const labelColumns: { axisId: AxisId; labelColumnIdx: number }[] = [];\n for (const [i, spec] of tableSpecs.entries()) {\n if (spec.type !== \"column\" || !isLabelColumnSpec(spec.spec)) continue;\n const labeledAxisId = getAxisId(spec.spec.axesSpec[0]);\n if (isPartitionedAxis(labeledAxisId)) continue;\n if (labelColumns.some((info) => matchAxisId(info.axisId, labeledAxisId))) {\n console.warn(`multiple label columns match axisId: ${JSON.stringify(labeledAxisId)}`);\n continue;\n }\n labelColumns.push({ axisId: labeledAxisId, labelColumnIdx: i });\n }\n return (axisId) =>\n labelColumns.find((info) => matchAxisId(info.axisId, axisId))?.labelColumnIdx ?? -1;\n}\n\n/** Indices of columns to display: drop partitioned axes, label/linker columns, hidden columns. */\nfunction selectDisplayableIndices(\n tableSpecs: PTableColumnSpec[],\n isPartitionedAxis: (axisId: AxisId) => boolean,\n getLabelColumnIndex: (axisId: AxisId) => number,\n): number[] {\n return tableSpecs\n .entries()\n .filter(([, spec]) => {\n switch (spec.type) {\n case \"axis\":\n return (\n !(getLabelColumnIndex(spec.id) > -1 ? true : isColumnHidden(spec.spec)) &&\n !isPartitionedAxis(spec.id)\n );\n case \"column\":\n return !isColumnHidden(spec.spec) && !isLinkerColumnSpec(spec.spec);\n }\n })\n .map(([i]) => i)\n .toArray();\n}\n\n/** Sort: axes first, then columns by OrderPriority annotation (higher priority = further left). */\nfunction sortIndicesByTypeAndPriority(indices: number[], tableSpecs: PTableColumnSpec[]): number[] {\n const priorityOf = (i: number): number => {\n const spec = tableSpecs[i];\n const prior =\n spec.type === \"axis\" || isLabelColumnSpec(spec.spec)\n ? Infinity\n : Number(readAnnotationJson(spec.spec, Annotation.Table.OrderPriority));\n\n return isNaN(prior) ? 0 : prior;\n };\n return [...indices].sort((a, b) => priorityOf(b) - priorityOf(a));\n}\n\n/** Default hidden col ids built from columns marked with the Optional annotation. */\nfunction computeDefaultHiddenColIds(\n fields: number[],\n tableSpecs: PTableColumnSpec[],\n): PlTableColumnIdJson[] {\n return fields.reduce<PlTableColumnIdJson[]>((acc, field) => {\n const spec = tableSpecs[field];\n return spec.type === \"column\" && isColumnOptional(spec.spec)\n ? [...acc, canonicalizeJson<PTableColumnId>(getPTableColumnId(spec))]\n : acc;\n }, []);\n}\n\n/** Extract axis indices and specs from the visible table (always present as part of join). */\nfunction collectVisibleAxes(\n visibleTableSpecs: PTableColumnSpec[],\n): [number, PTableColumnSpecAxis][] {\n return visibleTableSpecs\n .entries()\n .filter((entry): entry is [number, PTableColumnSpecAxis] => entry[1].type === \"axis\")\n .toArray();\n}\n\n/**\n * Compose request indices for the visible table:\n * non-hidden display fields first, then visible axes (deduplicated).\n * Returns fieldResultMapping (display field → position in requestIndices, -1 if not requested)\n * and axesResultIndices (visible axis → position in requestIndices).\n */\nfunction buildRequestIndices(\n indices: number[],\n visibleAxesIndices: number[],\n specsToVisibleSpecsMapping: Map<number, number>,\n): {\n requestIndices: number[];\n axesResultIndices: number[];\n fieldResultMapping: number[];\n} {\n const resolved = indices.map((displayField) => {\n const idx = specsToVisibleSpecsMapping.get(displayField);\n return isNil(idx) || idx === -1 ? null : idx;\n });\n const requestIndices = uniq([\n ...resolved.filter((v): v is number => v !== null),\n ...visibleAxesIndices,\n ]);\n const fieldResultMapping = resolved.map((v) => (v === null ? -1 : requestIndices.indexOf(v)));\n const axesResultIndices = visibleAxesIndices.map((vi) => requestIndices.indexOf(vi));\n\n return { requestIndices, axesResultIndices, fieldResultMapping };\n}\n"],"mappings":";;;;;;;;;;;;;AAyDA,SAAS,EACP,GACA,GACA,GACA,GACsB;CACtB,IAAM,IAAgC,EAAE;AACxC,MAAK,IAAI,IAAS,GAAG,IAAS,EAAQ,GAAG,KAAK,QAAQ,EAAE,GAAQ;EAC9D,IAAM,IAAqB,EAAkB,KAAK,MAAO,EAAY,EAAQ,IAAK,EAAO,CAAC,EACpF,IAAK,EAA+B,EAAQ,EAC5C,IAAM,EAAO,QAChB,GAAK,GAAO,OACX,EAAI,EAAM,UAAU,IAClB,EAAmB,OAAY,KAC3B,IACA,EAAY,EAAQ,EAAmB,KAAU,EAAO,EACvD,IAET;GAAE;GAAI;GAAS,CAChB;AAED,IAAQ,KAAK,EAAI;;AAEnB,QAAO;;AAIT,eAAsB,EAAqB,EACzC,eACA,aACA,WACA,oBACA,uBACA,wBACA,iBACA,2BAcA;CACA,IAAM,IAAkB,EAAW,OAG7B,CAAC,GAAY,KAAqB,MAAM,QAAQ,IAAI,CACxD,EAAS,QAAQ,EAAgB,EACjC,EAAS,QAAQ,EAAmB,CACrC,CAAC;AAEF,KAAI,MAAoB,EAAW,MAAO,OAAU,MAAM,iCAAiC;CAG3F,IAAM,IAA6B,EAAgC,GAAY,EAAkB,EAE3F,IAAoB,EAA+B,EAAO,EAM1D,IAAS,EACb,EAAyB,GAAY,GAJX,EAA0B,GAAY,EAAkB,CAIN,EAC5E,EACD,EAGK,IAAuB,KAAgB,EAA2B,GAAQ,EAAW,EAErF,IAAuE,CAC3E,GAAqB,EACrB,GAAG,EAAO,KAAK,MACb,EAAW,GAAO,EAAW,IAAQ,GAAsB,EAAqB,CACjF,CACF,EAGK,IAAc,EAAmB,EAAkB,EAGnD,EAAE,mBAAgB,sBAAmB,0BAAuB,EAChE,GACA,EAAY,KAAK,CAAC,OAAS,EAAI,EAC/B,EACD,EAEG,IAAW,IACX;AA+DJ,QAAO;EACL,UAAU,EAAY,KAAK,GAAG,EAAE,eAAY,EAAK;EACjD;EACA,sBAjEsE,EACtE,SAAS,OAAO,MAAqC;AACnD,OAAI,MAAoB,EAAW,MAAO,QAAO,EAAO,MAAM;AAC9D,OAAI;AACF,QAAI,MAAa,IAAI;KACnB,IAAM,IAAU,MAAM,EAAS,SAAS,EAAmB;AAC3D,SAAI,MAAoB,EAAW,SAAS,EAAO,IAAI,aAAa,CAClE,QAAO,EAAO,MAAM;AACtB,SAAW,EAAQ;;AAGrB,QAAI,KAAY,GAAG;AAKjB,KAJA,EAAO,QAAQ;MAAE,SAAS,EAAE;MAAE;MAAU,CAAC,EAGzC,EAAO,IAAI,cAAc,WAAW,GAAM,EAC1C,EAAO,IAAI,mBAAmB;AAC9B;;AAIF,QAAI,KAAc,CAAC,EAAY,EAAW,QAAQ,WAAW,EAAO,QAAQ,UAAU,CACpF,QAAO,EAAO,QAAQ;KAAE,SAAS,EAAE;KAAE;KAAU,CAAC;AAElD,QAAa;IAEb,IAAI,IAAS,GACT,IAAgC,EAAE;AACtC,QACE,IAAW,KACX,EAAO,QAAQ,aAAa,KAAA,KAC5B,EAAO,QAAQ,WAAW,KAAA,MAE1B,IAAS,KAAK,IAAI,GAAU,EAAO,QAAQ,OAAO,GAAG,EAAO,QAAQ,UAChE,IAAS,IAAG;KACd,IAAM,IAAO,MAAM,EAAS,QAAQ,GAAoB,GAAgB;MACtE,QAAQ,EAAO,QAAQ;MACvB;MACD,CAAC;AACF,SAAI,MAAoB,EAAW,SAAS,EAAO,IAAI,aAAa,CAClE,QAAO,EAAO,MAAM;AACtB,SAAU,EAAa,GAAQ,GAAM,GAAoB,EAAkB;;AAW/E,IAPA,EAAO,QAAQ;KAAE;KAAS;KAAU,CAAC,EACrC,EAAO,IAAI,gBACT,EAAO,IACJ,wBAAwB,CACxB,QAAQ,MAAW,EAAO,UAAU,KAAK,EAA4B,CACzE,EACD,EAAO,IAAI,cAAc,WAAW,GAAM,EAC1C,EAAoB,QAAQ,EAAO,IAAI;YAChC,GAAgB;AACvB,QAAI,MAAoB,EAAW,SAAS,EAAO,IAAI,aAAa,CAAE,QAAO,EAAO,MAAM;AAG1F,IAFA,EAAO,IAAI,cAAc,WAAW,GAAK,EACzC,EAAO,MAAM,EACb,QAAQ,MAAM,EAAM;;KAGzB;EAMA;;AAYH,SAAgB,EACd,GACA,GACA,GACA,GACwD;CACxD,IAAM,IAAQ,EAAiC,EAAkB,EAAK,CAAC,EACjE,IAAY,EAAK,SAAS,SAAS,EAAK,KAAK,OAAO,EAAK,KAAK,WAC9D,IAAsB,EAAuB,EAAK,EAClD,IAAuB,EAAE;AAC/B,CAAI,EAAoB,eAClB,EAAoB,eAAe,eACrC,EAAU,aAAa,oBACvB,EAAU,aAAa,OAEvB,EAAU,aAAa,EAAoB;CAG/C,IAAM,IACJ,EAAe,EAAK,MAAM,EAAW,MAAM,EAAE,MAAM,IAAI,aAAa,EAAK,KAAK,GAAG;AAEnF,QAAO;EACL;EACA,eAAe;EACf,SAAS;EACT,OAAO,GAAG;EACV;EACA,cACE,EAAK,SAAS,UAAW,EAAkB,EAAK,KAAK,IAAI,EAAK,KAAK,SAAS,WAAW;EACzF,MAAM,MAAiB,KAAA,KAAa,EAAa,SAAS,EAAM;EAChE,gBAAgB,EAAoB;EACpC,iBAAiB;EACjB,sBAAsB,GAAsB,gCAClC;GACJ,IAAM,IACJ,EAAK,SAAS,SACV,EAAK,KACL,EAAkB,EAAK,KAAK,IAAI,EAAK,KAAK,SAAS,WAAW,IAC5D,EAAU,EAAK,KAAK,SAAS,GAAG,GAChC,KAAA;AACR,OAAI,KAAU,EAAY,GAAQ,EAAqB,wBAAwB,CAC7E,QAAO;IACL,WAAW;IACX,QAAQ;KACN,yBAAyB,EAAqB;KAC9C,UAAU,MAAoD;AAC5D,QAAqB,QAAQ,EAAO,MAAM,QAAQ;;KAErD;IACF;MAGL,KAAA;EACJ;EACA,uBAAuB;GACrB,aAAsC;AACpC,YAAQ,GAAR;KACE,KAAK,EAAU;KACf,KAAK,EAAU;KACf,KAAK,EAAU;KACf,KAAK,EAAU,OACb,QAAO;KACT,KAAK,EAAU;KACf,KAAK,EAAU,MACb,QAAO;KACT,QACE,OAAM,MAAM,0BAA0B,IAAY;;OAEpD;GACJ,SAAS,EAAe,EAAK,MAAM,EAAW,YAAY,EAAE,MAAM;GAEnE;EACD,qBAAqB;AACnB,WAAQ,GAAR;IACE,KAAK,EAAU;IACf,KAAK,EAAU;IACf,KAAK,EAAU;IACf,KAAK,EAAU,OACb,QAAO;IACT,KAAK,EAAU;IACf,KAAK,EAAU,MACb,QAAO;IACT,QACE,OAAM,MAAM,0BAA0B,IAAY;;MAEpD;EACL;;AAIH,SAAS,EACP,GACA,GACqB;CACrB,IAAM,KAAU,MACd,EAAiC,EAAkB,EAAK,CAAC,EACrD,IAAkB,IAAI,IAC1B,EAAkB,SAAS,CAAC,KAAK,CAAC,GAAG,OAAU,CAAC,EAAO,EAAK,EAAE,EAAE,CAAU,CAC3E;AACD,QAAO,IAAI,IACT,EAAW,SAAS,CAAC,KAAK,CAAC,GAAG,OAAU;EACtC,IAAM,IAAiB,EAAgB,IAAI,EAAO,EAAK,CAAC;AACxD,SAAO,CAAC,GAAG,EAAM,EAAe,GAAG,KAAK,EAAe;GACvD,CACH;;AAIH,SAAS,EAA+B,GAAyD;CAC/F,IAAM,IAAe,EAAO,KAAK,MAAU,EAAU,EAAM,KAAK,CAAC;AACjE,SAAQ,MAAW,EAAa,MAAM,MAAO,EAAY,GAAI,EAAO,CAAC;;AAOvE,SAAS,EACP,GACA,GAC4B;CAC5B,IAAM,IAA6D,EAAE;AACrE,MAAK,IAAM,CAAC,GAAG,MAAS,EAAW,SAAS,EAAE;AAC5C,MAAI,EAAK,SAAS,YAAY,CAAC,EAAkB,EAAK,KAAK,CAAE;EAC7D,IAAM,IAAgB,EAAU,EAAK,KAAK,SAAS,GAAG;AAClD,SAAkB,EAAc,EACpC;OAAI,EAAa,MAAM,MAAS,EAAY,EAAK,QAAQ,EAAc,CAAC,EAAE;AACxE,YAAQ,KAAK,wCAAwC,KAAK,UAAU,EAAc,GAAG;AACrF;;AAEF,KAAa,KAAK;IAAE,QAAQ;IAAe,gBAAgB;IAAG,CAAC;;;AAEjE,SAAQ,MACN,EAAa,MAAM,MAAS,EAAY,EAAK,QAAQ,EAAO,CAAC,EAAE,kBAAkB;;AAIrF,SAAS,EACP,GACA,GACA,GACU;AACV,QAAO,EACJ,SAAS,CACT,QAAQ,GAAG,OAAU;AACpB,UAAQ,EAAK,MAAb;GACE,KAAK,OACH,QACE,EAAE,EAAoB,EAAK,GAAG,GAAG,MAAY,EAAe,EAAK,KAAK,KACtE,CAAC,EAAkB,EAAK,GAAG;GAE/B,KAAK,SACH,QAAO,CAAC,EAAe,EAAK,KAAK,IAAI,CAAC,EAAmB,EAAK,KAAK;;GAEvE,CACD,KAAK,CAAC,OAAO,EAAE,CACf,SAAS;;AAId,SAAS,EAA6B,GAAmB,GAA0C;CACjG,IAAM,KAAc,MAAsB;EACxC,IAAM,IAAO,EAAW,IAClB,IACJ,EAAK,SAAS,UAAU,EAAkB,EAAK,KAAK,GAChD,WACA,OAAO,EAAmB,EAAK,MAAM,EAAW,MAAM,cAAc,CAAC;AAE3E,SAAO,MAAM,EAAM,GAAG,IAAI;;AAE5B,QAAO,CAAC,GAAG,EAAQ,CAAC,MAAM,GAAG,MAAM,EAAW,EAAE,GAAG,EAAW,EAAE,CAAC;;AAInE,SAAS,EACP,GACA,GACuB;AACvB,QAAO,EAAO,QAA+B,GAAK,MAAU;EAC1D,IAAM,IAAO,EAAW;AACxB,SAAO,EAAK,SAAS,YAAY,EAAiB,EAAK,KAAK,GACxD,CAAC,GAAG,GAAK,EAAiC,EAAkB,EAAK,CAAC,CAAC,GACnE;IACH,EAAE,CAAC;;AAIR,SAAS,EACP,GACkC;AAClC,QAAO,EACJ,SAAS,CACT,QAAQ,MAAmD,EAAM,GAAG,SAAS,OAAO,CACpF,SAAS;;AASd,SAAS,EACP,GACA,GACA,GAKA;CACA,IAAM,IAAW,EAAQ,KAAK,MAAiB;EAC7C,IAAM,IAAM,EAA2B,IAAI,EAAa;AACxD,SAAO,EAAM,EAAI,IAAI,MAAQ,KAAK,OAAO;GACzC,EACI,IAAiB,EAAK,CAC1B,GAAG,EAAS,QAAQ,MAAmB,MAAM,KAAK,EAClD,GAAG,EACJ,CAAC,EACI,IAAqB,EAAS,KAAK,MAAO,MAAM,OAAO,KAAK,EAAe,QAAQ,EAAE,CAAE;AAG7F,QAAO;EAAE;EAAgB,mBAFC,EAAmB,KAAK,MAAO,EAAe,QAAQ,EAAG,CAAC;EAExC;EAAoB"}
|
|
1
|
+
{"version":3,"file":"table-source-v2.js","names":[],"sources":["../../../../src/components/PlAgDataTable/sources/table-source-v2.ts"],"sourcesContent":["import type {\n AnnotationDataStatus,\n AxesSpec,\n PlDataTableColumnsMeta,\n PTableColumnId,\n PTableColumnSpecAxis,\n PTableColumnSpecColumn,\n PTableHandle,\n PTableValue,\n} from \"@platforma-sdk/model\";\nimport {\n canonicalizeJson,\n getAxisId,\n pTableValue,\n type PFrameDriver,\n type PlDataTableSheet,\n type PTableVector,\n type AxisId,\n type PTableColumnSpec,\n type PTableKey,\n type PlTableColumnIdJson,\n isLabelColumn as isLabelColumnSpec,\n isLinkerColumn as isLinkerColumnSpec,\n isColumnHidden,\n isColumnOptional,\n matchAxisId,\n readAnnotation,\n readAnnotationJson,\n Annotation,\n ValueType,\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\";\nimport { isNil, uniq } from \"es-toolkit\";\n\n/** Convert columnar data from the driver to rows, used by ag-grid */\nfunction columns2rows(\n fields: number[],\n columns: PTableVector[],\n fieldResultMapping: number[],\n axesResultIndices: number[],\n): PlAgDataTableV2Row[] {\n const rowData: PlAgDataTableV2Row[] = [];\n for (let rowIdx = 0; rowIdx < columns[0].data.length; ++rowIdx) {\n const axesKey: PTableKey = axesResultIndices.map((ri) => pTableValue(columns[ri], rowIdx));\n const id = canonicalizeJson<PlTableRowId>(axesKey);\n const row = fields.reduce<PlAgDataTableV2Row>(\n (acc, field, colIdx) => {\n acc[field.toString() as `${number}`] =\n fieldResultMapping[colIdx] === -1\n ? PTableHidden\n : pTableValue(columns[fieldResultMapping[colIdx]], rowIdx);\n return acc;\n },\n { id, axesKey },\n );\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 sheets,\n fullTableHandle,\n visibleTableHandle,\n columnsMeta,\n dataRenderedTracker,\n hiddenColIds,\n cellButtonAxisParams,\n}: {\n sheets: PlDataTableSheet[];\n pfDriver: PFrameDriver;\n generation: Ref<number>;\n fullTableHandle: PTableHandle;\n visibleTableHandle: PTableHandle;\n /** Sidecar display metadata (label/visibility/order/status/hidden axes) from the model. */\n columnsMeta?: PlDataTableColumnsMeta;\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\n // get specs of the full table\n const [rawTableSpecs, rawVisibleTableSpecs] = await Promise.all([\n pfDriver.getSpec(fullTableHandle),\n pfDriver.getSpec(visibleTableHandle),\n ]);\n\n if (stateGeneration !== generation.value) throw new Error(\"table state generation changed\");\n\n // Engine specs flow through untouched; readers below merge `columnsMeta` at\n // their use sites via the `effective*` helpers — keeps spec === what the\n // engine produced (matters for `colDef.context` consumers).\n const tableSpecs = rawTableSpecs;\n const visibleTableSpecs = rawVisibleTableSpecs;\n\n // index mapping from full specs to visible subset (hidden columns → -1)\n const specsToVisibleSpecsMapping = buildSpecsToVisibleSpecsMapping(tableSpecs, visibleTableSpecs);\n\n const isPartitionedAxis = createPartitionedAxisPredicate(sheets);\n\n // label columns indexed by labeled axis (used for displayability filter)\n const getLabelColumnIndex = collectLabelColumnsByAxis(tableSpecs, isPartitionedAxis);\n\n // displayable column indices ordered: axes first, then columns by OrderPriority\n const fields = sortIndicesByTypeAndPriority(\n selectDisplayableIndices(tableSpecs, isPartitionedAxis, getLabelColumnIndex, columnsMeta),\n tableSpecs,\n columnsMeta,\n );\n\n // default hidden columns derived from Optional annotation when no saved state\n const resolvedHiddenColIds =\n hiddenColIds ?? computeDefaultHiddenColIds(fields, tableSpecs, columnsMeta);\n\n const columnDefs: ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden>[] = [\n makeRowNumberColDef(),\n ...fields.map((field) => {\n const spec = tableSpecs[field];\n // Only visible columns get a status (hidden columns → undefined → no\n // \"computing/absent\" placeholder rendering).\n const visible = (specsToVisibleSpecsMapping.get(field) ?? -1) >= 0;\n const status =\n visible && spec.type === \"column\" ? columnsMeta?.columns[spec.id]?.status : undefined;\n return makeColDef({\n iCol: field,\n spec,\n dataStatus: status,\n hiddenColIds: resolvedHiddenColIds,\n cellButtonAxisParams,\n columnsMeta,\n });\n }),\n ];\n\n // axes — taken directly from visible table (always present as part of join)\n const visibleAxes = collectVisibleAxes(visibleTableSpecs);\n\n // request indices: display fields + visible axes for row selection keys.\n const { requestIndices, axesResultIndices, fieldResultMapping } = buildRequestIndices(\n fields,\n visibleAxes.map(([idx]) => idx),\n specsToVisibleSpecsMapping,\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(visibleTableHandle);\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(visibleTableHandle, 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, fieldResultMapping, axesResultIndices);\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: visibleAxes.map(([, { spec }]) => spec),\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,\n spec,\n dataStatus,\n hiddenColIds,\n cellButtonAxisParams,\n columnsMeta,\n}: {\n iCol: number;\n spec: PTableColumnSpec;\n /** Per-column rendering status from the model; `undefined` for hidden cols. */\n dataStatus: AnnotationDataStatus | undefined;\n hiddenColIds: PlTableColumnIdJson[] | undefined;\n cellButtonAxisParams?: PlAgCellButtonAxisParams;\n /** Sidecar meta used to resolve the effective header label. */\n columnsMeta?: PlDataTableColumnsMeta;\n}): ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden> {\n const colId = canonicalizeJson<PTableColumnId>(getPTableColumnId(spec));\n const valueType = spec.type === \"axis\" ? spec.spec.type : spec.spec.valueType;\n const columnRenderingSpec = getColumnRenderingSpec(spec, dataStatus);\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 const headerName = effectiveLabel(spec, columnsMeta)?.trim() ?? `Unlabeled ${spec.type} ${iCol}`;\n\n return {\n colId,\n mainMenuItems: defaultMainMenuItems,\n context: spec,\n field: `${iCol}`,\n headerName,\n lockPosition:\n spec.type === \"axis\" || (isLabelColumnSpec(spec.spec) && spec.spec.axesSpec.length === 1),\n hide: hiddenColIds !== undefined && hiddenColIds.includes(colId),\n valueFormatter: columnRenderingSpec.valueFormatter,\n headerComponent: PlAgColumnHeader,\n cellRendererSelector: cellButtonAxisParams?.showCellButtonForAxisId\n ? () => {\n const axisId =\n spec.type === \"axis\"\n ? spec.id\n : isLabelColumnSpec(spec.spec) && spec.spec.axesSpec.length === 1\n ? getAxisId(spec.spec.axesSpec[0])\n : undefined;\n if (axisId && 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(spec.spec, Annotation.Description)?.trim(),\n // info: readAnnotation(spec.spec, Annotation.Table.Info)?.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\nexport function isLabelColumn(column: PTableColumnSpec): column is PTableColumnSpecColumn {\n return column.type === \"column\" && isLabelColumnSpec(column.spec);\n}\n\n/**\n * Effective column label: sidecar override wins over intrinsic spec\n * annotation. Axes have no label override in the sidecar — they fall through\n * to `pl7.app/label` on the axis spec.\n */\nexport function effectiveLabel(\n spec: PTableColumnSpec,\n meta: PlDataTableColumnsMeta | undefined,\n): string | undefined {\n if (spec.type === \"column\") {\n const override = meta?.columns[spec.id]?.label;\n if (override !== undefined) return override;\n }\n return readAnnotation(spec.spec, Annotation.Label);\n}\n\n/**\n * Effective visibility. For columns: sidecar override wins over the intrinsic\n * `pl7.app/table/visibility` annotation. For axes: `meta.axes[id].hidden`\n * forces hidden; otherwise the intrinsic axis annotation rules.\n *\n * Kept out of the spec on purpose — baking visibility into a column spec via\n * override changes its `ColumnUniversalId`, so the same physical column reached\n * two ways (e.g. as primary and as a discovered label) would diverge into two\n * ids and render twice. The sidecar preserves identity; readers apply this at\n * use sites.\n */\nexport function effectiveVisibility(\n spec: PTableColumnSpec,\n meta: PlDataTableColumnsMeta | undefined,\n): \"default\" | \"optional\" | \"hidden\" {\n if (spec.type === \"axis\") {\n if (meta?.axes[canonicalizeJson<AxisId>(getAxisId(spec.id))]?.hidden === true) return \"hidden\";\n } else {\n const override = meta?.columns[spec.id]?.visibility;\n if (override !== undefined) return override;\n }\n if (isColumnHidden(spec.spec)) return \"hidden\";\n if (isColumnOptional(spec.spec)) return \"optional\";\n return \"default\";\n}\n\n/**\n * Effective order priority — number suitable for left-to-right comparison\n * (higher = further left). Sidecar override on columns wins over the\n * intrinsic `pl7.app/table/orderPriority`; axes have no override.\n * `undefined` when neither source supplied a value (consumer decides default).\n */\nexport function effectiveOrder(\n spec: PTableColumnSpec,\n meta: PlDataTableColumnsMeta | undefined,\n): number | undefined {\n if (spec.type === \"column\") {\n const override = meta?.columns[spec.id]?.order;\n if (override !== undefined) return override;\n }\n const raw = readAnnotationJson(spec.spec, Annotation.Table.OrderPriority);\n return raw as number | undefined;\n}\n\n/** Build index mapping from full tableSpecs to their position in visibleTableSpecs (missing → -1). */\nfunction buildSpecsToVisibleSpecsMapping(\n tableSpecs: PTableColumnSpec[],\n visibleTableSpecs: PTableColumnSpec[],\n): Map<number, number> {\n const specId = (spec: PTableColumnSpec) =>\n canonicalizeJson<PTableColumnId>(getPTableColumnId(spec));\n const visibleSpecsMap = new Map(\n visibleTableSpecs.entries().map(([i, spec]) => [specId(spec), i] as const),\n );\n return new Map(\n tableSpecs.entries().map(([i, spec]) => {\n const visibleSpecIdx = visibleSpecsMap.get(specId(spec));\n return [i, isNil(visibleSpecIdx) ? -1 : visibleSpecIdx];\n }),\n );\n}\n\n/** Predicate that returns true when an axis is one of the sheet partition axes. */\nfunction createPartitionedAxisPredicate(sheets: PlDataTableSheet[]): (axisId: AxisId) => boolean {\n const sheetAxesIds = sheets.map((sheet) => getAxisId(sheet.axis));\n return (axisId) => sheetAxesIds.some((id) => matchAxisId(id, axisId));\n}\n\n/**\n * Collect label columns (skipping partitioned axes and duplicates) and return a\n * lookup function that resolves labeled axisId → label column index (or -1).\n */\nfunction collectLabelColumnsByAxis(\n tableSpecs: PTableColumnSpec[],\n isPartitionedAxis: (axisId: AxisId) => boolean,\n): (axisId: AxisId) => number {\n const labelColumns: { axisId: AxisId; labelColumnIdx: number }[] = [];\n for (const [i, spec] of tableSpecs.entries()) {\n if (spec.type !== \"column\" || !isLabelColumnSpec(spec.spec)) continue;\n const labeledAxisId = getAxisId(spec.spec.axesSpec[0]);\n if (isPartitionedAxis(labeledAxisId)) continue;\n if (labelColumns.some((info) => matchAxisId(info.axisId, labeledAxisId))) {\n console.warn(`multiple label columns match axisId: ${JSON.stringify(labeledAxisId)}`);\n continue;\n }\n labelColumns.push({ axisId: labeledAxisId, labelColumnIdx: i });\n }\n return (axisId) =>\n labelColumns.find((info) => matchAxisId(info.axisId, axisId))?.labelColumnIdx ?? -1;\n}\n\n/** Indices of columns to display: drop partitioned axes, label/linker columns, hidden columns. */\nfunction selectDisplayableIndices(\n tableSpecs: PTableColumnSpec[],\n isPartitionedAxis: (axisId: AxisId) => boolean,\n getLabelColumnIndex: (axisId: AxisId) => number,\n meta: PlDataTableColumnsMeta | undefined,\n): number[] {\n return tableSpecs\n .entries()\n .filter(([, spec]) => {\n switch (spec.type) {\n case \"axis\":\n return (\n !(getLabelColumnIndex(spec.id) > -1\n ? true\n : effectiveVisibility(spec, meta) === \"hidden\") && !isPartitionedAxis(spec.id)\n );\n case \"column\":\n return effectiveVisibility(spec, meta) !== \"hidden\" && !isLinkerColumnSpec(spec.spec);\n }\n })\n .map(([i]) => i)\n .toArray();\n}\n\n/** Sort: axes first, then columns by OrderPriority annotation (higher priority = further left). */\nfunction sortIndicesByTypeAndPriority(\n indices: number[],\n tableSpecs: PTableColumnSpec[],\n meta: PlDataTableColumnsMeta | undefined,\n): number[] {\n const priorityOf = (i: number): number => {\n const spec = tableSpecs[i];\n if (spec.type === \"axis\" || isLabelColumnSpec(spec.spec)) return Infinity;\n const prior = Number(effectiveOrder(spec, meta));\n return isNaN(prior) ? 0 : prior;\n };\n return [...indices].sort((a, b) => priorityOf(b) - priorityOf(a));\n}\n\n/** Default hidden col ids built from columns marked with the Optional annotation. */\nfunction computeDefaultHiddenColIds(\n fields: number[],\n tableSpecs: PTableColumnSpec[],\n meta: PlDataTableColumnsMeta | undefined,\n): PlTableColumnIdJson[] {\n return fields.reduce<PlTableColumnIdJson[]>((acc, field) => {\n const spec = tableSpecs[field];\n if (spec.type === \"column\" && effectiveVisibility(spec, meta) === \"optional\") {\n acc.push(canonicalizeJson<PTableColumnId>(getPTableColumnId(spec)));\n }\n return acc;\n }, []);\n}\n\n/** Extract axis indices and specs from the visible table (always present as part of join). */\nfunction collectVisibleAxes(\n visibleTableSpecs: PTableColumnSpec[],\n): [number, PTableColumnSpecAxis][] {\n return visibleTableSpecs\n .entries()\n .filter((entry): entry is [number, PTableColumnSpecAxis] => entry[1].type === \"axis\")\n .toArray();\n}\n\n/**\n * Compose request indices for the visible table:\n * non-hidden display fields first, then visible axes (deduplicated).\n * Returns fieldResultMapping (display field → position in requestIndices, -1 if not requested)\n * and axesResultIndices (visible axis → position in requestIndices).\n */\nfunction buildRequestIndices(\n indices: number[],\n visibleAxesIndices: number[],\n specsToVisibleSpecsMapping: Map<number, number>,\n): {\n requestIndices: number[];\n axesResultIndices: number[];\n fieldResultMapping: number[];\n} {\n const resolved = indices.map((displayField) => {\n const idx = specsToVisibleSpecsMapping.get(displayField);\n return isNil(idx) || idx === -1 ? null : idx;\n });\n const requestIndices = uniq([\n ...resolved.filter((v): v is number => v !== null),\n ...visibleAxesIndices,\n ]);\n const fieldResultMapping = resolved.map((v) => (v === null ? -1 : requestIndices.indexOf(v)));\n const axesResultIndices = visibleAxesIndices.map((vi) => requestIndices.indexOf(vi));\n\n return { requestIndices, axesResultIndices, fieldResultMapping };\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-state-v2.d.ts","sourceRoot":"","sources":["../../../../src/components/PlAgDataTable/sources/table-state-v2.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"table-state-v2.d.ts","sourceRoot":"","sources":["../../../../src/components/PlAgDataTable/sources/table-state-v2.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EAOvB,KAAK,kBAAkB,EAEvB,0BAA0B,EAE3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAY,KAAK,GAAG,EAAE,KAAK,mBAAmB,EAAE,MAAM,KAAK,CAAC;AACnE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAoC,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAKhF,wBAAgB,aAAa,CAC3B,sBAAsB,EAAE,GAAG,CAAC,kBAAkB,CAAC,EAC/C,QAAQ,EAAE,GAAG,CAAC,qBAAqB,CAAC,EACpC,OAAO,EAAE,GAAG,CAAC,gBAAgB,EAAE,CAAC,EAChC,cAAc,EAAE,GAAG,CAAC,GAAG,GAAG,kBAAkB,CAAC,GAC5C;IACD,SAAS,EAAE,mBAAmB,CAAC,wBAAwB,CAAC,CAAC;IACzD,WAAW,EAAE,mBAAmB,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAE1D,YAAY,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC1C,YAAY,EAAE,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAC9C,mBAAmB,EAAE,GAAG,CAAC,IAAI,GAAG,0BAA0B,CAAC,CAAC;IAC5D,mBAAmB,EAAE,MAAM,IAAI,CAAC;CACjC,CAgJA"}
|