@platforma-sdk/model 1.63.12 → 1.65.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/dist/columns/column_collection_builder.cjs +105 -92
- package/dist/columns/column_collection_builder.cjs.map +1 -1
- package/dist/columns/column_collection_builder.d.ts +13 -12
- package/dist/columns/column_collection_builder.d.ts.map +1 -1
- package/dist/columns/column_collection_builder.js +107 -94
- package/dist/columns/column_collection_builder.js.map +1 -1
- package/dist/columns/column_selector.cjs +8 -80
- package/dist/columns/column_selector.cjs.map +1 -1
- package/dist/columns/column_selector.d.ts +6 -14
- package/dist/columns/column_selector.d.ts.map +1 -1
- package/dist/columns/column_selector.js +6 -77
- package/dist/columns/column_selector.js.map +1 -1
- package/dist/columns/column_snapshot.cjs +3 -3
- package/dist/columns/column_snapshot.cjs.map +1 -1
- package/dist/columns/column_snapshot.d.ts +3 -3
- package/dist/columns/column_snapshot.d.ts.map +1 -1
- package/dist/columns/column_snapshot.js +3 -3
- package/dist/columns/column_snapshot.js.map +1 -1
- package/dist/columns/column_snapshot_provider.cjs +1 -1
- package/dist/columns/column_snapshot_provider.cjs.map +1 -1
- package/dist/columns/column_snapshot_provider.d.ts +8 -8
- package/dist/columns/column_snapshot_provider.d.ts.map +1 -1
- package/dist/columns/column_snapshot_provider.js +1 -1
- package/dist/columns/column_snapshot_provider.js.map +1 -1
- package/dist/columns/ctx_column_sources.cjs.map +1 -1
- package/dist/columns/ctx_column_sources.d.ts +2 -1
- package/dist/columns/ctx_column_sources.d.ts.map +1 -1
- package/dist/columns/ctx_column_sources.js.map +1 -1
- package/dist/columns/expand_by_partition.cjs +106 -0
- package/dist/columns/expand_by_partition.cjs.map +1 -0
- package/dist/columns/expand_by_partition.d.ts +33 -0
- package/dist/columns/expand_by_partition.d.ts.map +1 -0
- package/dist/columns/expand_by_partition.js +105 -0
- package/dist/columns/expand_by_partition.js.map +1 -0
- package/dist/columns/index.cjs +1 -0
- package/dist/columns/index.d.ts +4 -3
- package/dist/columns/index.js +1 -0
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.cjs +26 -0
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.cjs.map +1 -0
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.js +25 -0
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.js.map +1 -0
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.cjs +68 -0
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.cjs.map +1 -0
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.js +67 -0
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.js.map +1 -0
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs +27 -17
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.d.ts +4 -0
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js +28 -18
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs +258 -175
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts +37 -21
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js +261 -175
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.cjs +64 -0
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.cjs.map +1 -0
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.d.ts +17 -0
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.d.ts.map +1 -0
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.js +63 -0
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.js.map +1 -0
- package/dist/components/PlDataTable/createPlDataTable/index.cjs +2 -1
- package/dist/components/PlDataTable/createPlDataTable/index.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/index.d.ts +2 -1
- package/dist/components/PlDataTable/createPlDataTable/index.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/index.js +2 -1
- package/dist/components/PlDataTable/createPlDataTable/index.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/utils.cjs +109 -0
- package/dist/components/PlDataTable/createPlDataTable/utils.cjs.map +1 -0
- package/dist/components/PlDataTable/createPlDataTable/utils.d.ts +19 -0
- package/dist/components/PlDataTable/createPlDataTable/utils.d.ts.map +1 -0
- package/dist/components/PlDataTable/createPlDataTable/utils.js +102 -0
- package/dist/components/PlDataTable/createPlDataTable/utils.js.map +1 -0
- package/dist/components/PlDataTable/index.cjs +3 -1
- package/dist/components/PlDataTable/index.d.ts +5 -3
- package/dist/components/PlDataTable/index.js +3 -1
- package/dist/components/PlDataTable/labels.cjs +25 -11
- package/dist/components/PlDataTable/labels.cjs.map +1 -1
- package/dist/components/PlDataTable/labels.js +25 -11
- package/dist/components/PlDataTable/labels.js.map +1 -1
- package/dist/components/PlDataTable/state-migration.cjs +8 -2
- package/dist/components/PlDataTable/state-migration.cjs.map +1 -1
- package/dist/components/PlDataTable/state-migration.d.ts.map +1 -1
- package/dist/components/PlDataTable/state-migration.js +8 -2
- package/dist/components/PlDataTable/state-migration.js.map +1 -1
- package/dist/components/PlDataTable/typesV5.d.ts +23 -15
- package/dist/components/PlDataTable/typesV5.d.ts.map +1 -1
- package/dist/components/index.cjs +3 -1
- package/dist/components/index.d.ts +4 -2
- package/dist/components/index.js +3 -1
- package/dist/index.cjs +13 -9
- package/dist/index.d.ts +9 -7
- package/dist/index.js +6 -4
- package/dist/labels/derive_distinct_labels.cjs +39 -27
- package/dist/labels/derive_distinct_labels.cjs.map +1 -1
- package/dist/labels/derive_distinct_labels.d.ts +15 -15
- package/dist/labels/derive_distinct_labels.d.ts.map +1 -1
- package/dist/labels/derive_distinct_labels.js +39 -27
- package/dist/labels/derive_distinct_labels.js.map +1 -1
- package/dist/labels/index.cjs +0 -1
- package/dist/labels/index.d.ts +1 -2
- package/dist/labels/index.js +0 -1
- package/dist/package.cjs +1 -1
- package/dist/package.js +1 -1
- package/dist/render/api.cjs +10 -3
- package/dist/render/api.cjs.map +1 -1
- package/dist/render/api.d.ts +2 -2
- package/dist/render/api.d.ts.map +1 -1
- package/dist/render/api.js +10 -3
- package/dist/render/api.js.map +1 -1
- package/dist/render/util/column_collection.cjs +3 -3
- package/dist/render/util/column_collection.cjs.map +1 -1
- package/dist/render/util/column_collection.d.ts.map +1 -1
- package/dist/render/util/column_collection.js +3 -3
- package/dist/render/util/column_collection.js.map +1 -1
- package/dist/render/util/label.cjs +2 -2
- package/dist/render/util/label.cjs.map +1 -1
- package/dist/render/util/label.js +2 -2
- package/dist/render/util/label.js.map +1 -1
- package/dist/render/util/pcolumn_data.cjs.map +1 -1
- package/dist/render/util/pcolumn_data.d.ts +2 -2
- package/dist/render/util/pcolumn_data.d.ts.map +1 -1
- package/dist/render/util/pcolumn_data.js.map +1 -1
- package/package.json +7 -7
- package/src/columns/column_collection_builder.test.ts +40 -27
- package/src/columns/column_collection_builder.ts +176 -131
- package/src/columns/column_selector.test.ts +17 -399
- package/src/columns/column_selector.ts +14 -127
- package/src/columns/column_snapshot.ts +5 -5
- package/src/columns/column_snapshot_provider.ts +11 -10
- package/src/columns/ctx_column_sources.ts +2 -2
- package/src/columns/expand_by_partition.test.ts +4 -4
- package/src/columns/expand_by_partition.ts +4 -3
- package/src/columns/index.ts +1 -0
- package/src/components/PlDataTable/createPlDataTable/createPTableDefV2.ts +42 -0
- package/src/components/PlDataTable/createPlDataTable/createPTableDefV3.ts +89 -0
- package/src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts +51 -19
- package/src/components/PlDataTable/createPlDataTable/createPlDataTableV3.ts +500 -313
- package/src/components/PlDataTable/createPlDataTable/discoverColumns.ts +122 -0
- package/src/components/PlDataTable/createPlDataTable/index.ts +4 -2
- package/src/components/PlDataTable/createPlDataTable/utils.test.ts +257 -0
- package/src/components/PlDataTable/createPlDataTable/utils.ts +160 -0
- package/src/components/PlDataTable/index.ts +15 -2
- package/src/components/PlDataTable/labels.ts +29 -18
- package/src/components/PlDataTable/state-migration.ts +6 -1
- package/src/components/PlDataTable/typesV5.ts +25 -12
- package/src/labels/derive_distinct_labels.test.ts +143 -45
- package/src/labels/derive_distinct_labels.ts +102 -49
- package/src/labels/index.ts +0 -1
- package/src/render/api.ts +15 -5
- package/src/render/util/column_collection.ts +4 -3
- package/src/render/util/label.ts +2 -2
- package/src/render/util/pcolumn_data.ts +5 -3
- package/dist/labels/write_labels_to_specs.cjs +0 -14
- package/dist/labels/write_labels_to_specs.cjs.map +0 -1
- package/dist/labels/write_labels_to_specs.d.ts +0 -7
- package/dist/labels/write_labels_to_specs.d.ts.map +0 -1
- package/dist/labels/write_labels_to_specs.js +0 -13
- package/dist/labels/write_labels_to_specs.js.map +0 -1
- package/src/labels/write_labels_to_specs.ts +0 -12
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
import { deriveLabels } from "../../../render/util/label.js";
|
|
2
2
|
import { allPColumnsReady } from "../../../render/util/pcolumn_data.js";
|
|
3
|
+
import { PColumnCollection } from "../../../render/util/column_collection.js";
|
|
3
4
|
import "../../../render/index.js";
|
|
4
5
|
import { collectFilterSpecColumns } from "../../../filters/traverse.js";
|
|
5
6
|
import { upgradePlDataTableStateV2 } from "../state-migration.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
7
|
+
import { getMatchingLabelColumns } from "../labels.js";
|
|
8
|
+
import { createPTableDefV2 } from "./createPTableDefV2.js";
|
|
9
|
+
import { isColumnOptional } from "./utils.js";
|
|
10
|
+
import { Annotation, PColumnName, canonicalizeJson, getAxisId, getColumnIdAndSpec, isLinkerColumn, parseJson, uniqueBy } from "@milaboratories/pl-model-common";
|
|
10
11
|
import { identity } from "es-toolkit";
|
|
12
|
+
import { isEmpty } from "es-toolkit/compat";
|
|
11
13
|
//#region src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts
|
|
12
14
|
/**
|
|
13
15
|
* Create p-table spec and handle given ui table state
|
|
14
16
|
*
|
|
17
|
+
* @deprecated This version of createPlDataTable is deprecated and will be removed in future. Please migrate to v3 by switching to the new options format and providing necessary information for column discovery and display configuration. See createPlDataTableOptionsV3 for details.
|
|
15
18
|
* @param ctx context
|
|
16
19
|
* @param columns column list
|
|
17
20
|
* @param tableState table ui state
|
|
@@ -20,9 +23,8 @@ import { identity } from "es-toolkit";
|
|
|
20
23
|
function createPlDataTableV2(ctx, columns, tableState, options) {
|
|
21
24
|
if (columns.length === 0) return void 0;
|
|
22
25
|
const tableStateNormalized = upgradePlDataTableStateV2(tableState);
|
|
23
|
-
const allLabelColumns = getAllLabelColumns(ctx.resultPool);
|
|
24
|
-
|
|
25
|
-
let fullLabelColumns = getMatchingLabelColumns(columns.map(getColumnIdAndSpec), allLabelColumns);
|
|
26
|
+
const allLabelColumns = getAllLabelColumns(ctx.resultPool) ?? [];
|
|
27
|
+
let fullLabelColumns = getMatchingLabelColumns(columns, allLabelColumns);
|
|
26
28
|
fullLabelColumns = deriveLabels(fullLabelColumns, identity, { includeNativeLabel: true }).map((v) => {
|
|
27
29
|
return {
|
|
28
30
|
...v.value,
|
|
@@ -45,20 +47,18 @@ function createPlDataTableV2(ctx, columns, tableState, options) {
|
|
|
45
47
|
}))];
|
|
46
48
|
const fullColumnsIdsSet = new Set(fullColumnsIds.map((c) => canonicalizeJson(c)));
|
|
47
49
|
const isValidColumnId = (id) => fullColumnsIdsSet.has(id);
|
|
48
|
-
const
|
|
49
|
-
const
|
|
50
|
-
const
|
|
51
|
-
type: "and",
|
|
52
|
-
filters: [stateFilters, opsFilters]
|
|
53
|
-
} : stateFilters ?? opsFilters;
|
|
54
|
-
const firstInvalidFilterColumn = (filters ? collectFilterSpecColumns(filters) : []).find((col) => !isValidColumnId(col));
|
|
50
|
+
const filters = tableStateNormalized.pTableParams.filters;
|
|
51
|
+
const defaultFilters = options?.filters ?? void 0;
|
|
52
|
+
const firstInvalidFilterColumn = (filters !== null ? collectFilterSpecColumns(filters) : []).find((col) => !isValidColumnId(col));
|
|
55
53
|
if (firstInvalidFilterColumn) throw new Error(`Invalid filter column ${firstInvalidFilterColumn}: column reference does not match the table columns`);
|
|
54
|
+
const firstInvalidDefaultFilterColumn = (defaultFilters !== void 0 ? collectFilterSpecColumns(defaultFilters) : []).find((col) => !isValidColumnId(col));
|
|
55
|
+
if (firstInvalidDefaultFilterColumn) throw new Error(`Invalid default filter column ${firstInvalidDefaultFilterColumn}: column reference does not match the table columns`);
|
|
56
56
|
const userSorting = tableStateNormalized.pTableParams.sorting;
|
|
57
57
|
const sorting = (isEmpty(userSorting) ? options?.sorting : userSorting) ?? [];
|
|
58
58
|
const firstInvalidSortingColumn = sorting.find((s) => !isValidColumnId(canonicalizeJson(s.column)));
|
|
59
59
|
if (firstInvalidSortingColumn) throw new Error(`Invalid sorting column ${JSON.stringify(firstInvalidSortingColumn.column)}: column reference does not match the table columns`);
|
|
60
60
|
const coreJoinType = options?.coreJoinType ?? "full";
|
|
61
|
-
const fullDef =
|
|
61
|
+
const fullDef = createPTableDefV2({
|
|
62
62
|
columns,
|
|
63
63
|
labelColumns: fullLabelColumns,
|
|
64
64
|
coreJoinType,
|
|
@@ -72,7 +72,7 @@ function createPlDataTableV2(ctx, columns, tableState, options) {
|
|
|
72
72
|
const hiddenColumns = new Set((() => {
|
|
73
73
|
if (coreJoinType === "inner") return [];
|
|
74
74
|
const hiddenColIds = tableStateNormalized.pTableParams.hiddenColIds;
|
|
75
|
-
if (hiddenColIds) return hiddenColIds;
|
|
75
|
+
if (hiddenColIds !== null) return hiddenColIds.filter((s) => s.type === "column").map((s) => s.id);
|
|
76
76
|
return columns.filter((c) => isColumnOptional(c.spec)).map((c) => c.id);
|
|
77
77
|
})());
|
|
78
78
|
columns.filter((c) => isLinkerColumn(c.spec)).forEach((c) => hiddenColumns.delete(c.id));
|
|
@@ -86,7 +86,7 @@ function createPlDataTableV2(ctx, columns, tableState, options) {
|
|
|
86
86
|
const visibleColumns = columns.filter((c) => !hiddenColumns.has(c.id));
|
|
87
87
|
const visibleLabelColumns = getMatchingLabelColumns(visibleColumns.map(getColumnIdAndSpec), allLabelColumns);
|
|
88
88
|
if (!allPColumnsReady([...visibleColumns, ...visibleLabelColumns])) return void 0;
|
|
89
|
-
const visibleDef =
|
|
89
|
+
const visibleDef = createPTableDefV2({
|
|
90
90
|
columns: visibleColumns,
|
|
91
91
|
labelColumns: visibleLabelColumns,
|
|
92
92
|
coreJoinType,
|
|
@@ -100,9 +100,19 @@ function createPlDataTableV2(ctx, columns, tableState, options) {
|
|
|
100
100
|
sourceId: tableStateNormalized.pTableParams.sourceId,
|
|
101
101
|
fullTableHandle: fullHandle,
|
|
102
102
|
fullPframeHandle: pframeHandle,
|
|
103
|
-
visibleTableHandle: visibleHandle
|
|
103
|
+
visibleTableHandle: visibleHandle,
|
|
104
|
+
defaultFilters
|
|
104
105
|
};
|
|
105
106
|
}
|
|
107
|
+
function getAllLabelColumns(resultPool) {
|
|
108
|
+
return new PColumnCollection().addAxisLabelProvider(resultPool).addColumnProvider(resultPool).getColumns({
|
|
109
|
+
name: PColumnName.Label,
|
|
110
|
+
axes: [{}]
|
|
111
|
+
}, {
|
|
112
|
+
dontWaitAllData: true,
|
|
113
|
+
overrideLabelAnnotation: false
|
|
114
|
+
});
|
|
115
|
+
}
|
|
106
116
|
//#endregion
|
|
107
117
|
export { createPlDataTableV2 };
|
|
108
118
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createPlDataTableV2.js","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts"],"sourcesContent":["import type {\n AxisId,\n PColumn,\n PObjectId,\n PTableColumnId,\n PTableColumnIdAxis,\n PTableColumnIdColumn,\n CanonicalizedJson,\n} from \"@milaboratories/pl-model-common\";\nimport {\n Annotation,\n canonicalizeJson,\n getAxisId,\n getColumnIdAndSpec,\n isLinkerColumn,\n uniqueBy,\n parseJson,\n} from \"@milaboratories/pl-model-common\";\nimport type { PColumnDataUniversal, RenderCtxBase } from \"../../../render\";\nimport { allPColumnsReady, deriveLabels } from \"../../../render\";\nimport { identity } from \"es-toolkit\";\nimport type { CreatePlDataTableOps, PlDataTableFilters, PlDataTableModel } from \"../typesV5\";\nimport { upgradePlDataTableStateV2 } from \"../state-migration\";\nimport type { PlDataTableStateV2 } from \"../state-migration\";\nimport { getAllLabelColumns, getMatchingLabelColumns } from \"../labels\";\nimport { collectFilterSpecColumns } from \"../../../filters/traverse\";\nimport { isEmpty } from \"es-toolkit/compat\";\nimport { createPTableDef, isColumnOptional } from \"./createPlDataTableV3\";\n\nexport type createPlDataTableOptionsV2 = {\n columns: PColumn<PColumnDataUniversal>[];\n tableState?: PlDataTableStateV2;\n options?: CreatePlDataTableOps;\n};\n\n/**\n * Create p-table spec and handle given ui table state\n *\n * @param ctx context\n * @param columns column list\n * @param tableState table ui state\n * @returns PlAgDataTableV2 table source\n */\nexport function createPlDataTableV2<A, U>(\n ctx: RenderCtxBase<A, U>,\n columns: createPlDataTableOptionsV2[\"columns\"],\n tableState?: createPlDataTableOptionsV2[\"tableState\"],\n options?: createPlDataTableOptionsV2[\"options\"],\n): PlDataTableModel | undefined {\n if (columns.length === 0) return undefined;\n\n const tableStateNormalized = upgradePlDataTableStateV2(tableState);\n\n const allLabelColumns = getAllLabelColumns(ctx.resultPool);\n if (!allLabelColumns) return undefined;\n\n let fullLabelColumns = getMatchingLabelColumns(columns.map(getColumnIdAndSpec), allLabelColumns);\n fullLabelColumns = deriveLabels(fullLabelColumns, identity, { includeNativeLabel: true }).map(\n (v) => {\n return {\n ...v.value,\n spec: {\n ...v.value.spec,\n annotations: {\n ...v.value.spec.annotations,\n [Annotation.Label]: v.label,\n },\n },\n };\n },\n );\n\n const fullColumns = [...columns, ...fullLabelColumns];\n\n const fullColumnsAxes = uniqueBy(\n fullColumns.flatMap((c) => c.spec.axesSpec.map((a) => getAxisId(a))),\n (a) => canonicalizeJson<AxisId>(a),\n );\n const fullColumnsIds: PTableColumnId[] = [\n ...fullColumnsAxes.map((a) => ({ type: \"axis\", id: a }) satisfies PTableColumnIdAxis),\n ...fullColumns.map((c) => ({ type: \"column\", id: c.id }) satisfies PTableColumnIdColumn),\n ];\n const fullColumnsIdsSet = new Set(fullColumnsIds.map((c) => canonicalizeJson<PTableColumnId>(c)));\n const isValidColumnId = (id: string): boolean =>\n fullColumnsIdsSet.has(id as CanonicalizedJson<PTableColumnId>);\n\n // -- Filtering validation --\n const stateFilters = tableStateNormalized.pTableParams.filters;\n const opsFilters = options?.filters ?? null;\n const filters: null | PlDataTableFilters =\n stateFilters != null && opsFilters != null\n ? { type: \"and\", filters: [stateFilters, opsFilters] }\n : (stateFilters ?? opsFilters);\n const filterColumns = filters ? collectFilterSpecColumns(filters) : [];\n const firstInvalidFilterColumn = filterColumns.find((col) => !isValidColumnId(col));\n if (firstInvalidFilterColumn)\n throw new Error(\n `Invalid filter column ${firstInvalidFilterColumn}: column reference does not match the table columns`,\n );\n\n // -- Sorting validation --\n const userSorting = tableStateNormalized.pTableParams.sorting;\n const sorting = (isEmpty(userSorting) ? options?.sorting : userSorting) ?? [];\n const firstInvalidSortingColumn = sorting.find(\n (s) => !isValidColumnId(canonicalizeJson<PTableColumnId>(s.column)),\n );\n if (firstInvalidSortingColumn)\n throw new Error(\n `Invalid sorting column ${JSON.stringify(firstInvalidSortingColumn.column)}: column reference does not match the table columns`,\n );\n\n const coreJoinType = options?.coreJoinType ?? \"full\";\n const fullDef = createPTableDef({\n columns,\n labelColumns: fullLabelColumns,\n coreJoinType,\n filters,\n sorting,\n coreColumnPredicate: options?.coreColumnPredicate,\n });\n\n const fullHandle = ctx.createPTableV2(fullDef);\n const pframeHandle = ctx.createPFrame(fullColumns);\n if (!fullHandle || !pframeHandle) return undefined;\n\n const hiddenColumns = new Set<PObjectId>(\n ((): PObjectId[] => {\n // Inner join works as a filter - all columns must be present\n if (coreJoinType === \"inner\") return [];\n\n const hiddenColIds = tableStateNormalized.pTableParams.hiddenColIds;\n if (hiddenColIds) return hiddenColIds;\n\n return columns.filter((c) => isColumnOptional(c.spec)).map((c) => c.id);\n })(),\n );\n\n // Preserve linker columns\n columns.filter((c) => isLinkerColumn(c.spec)).forEach((c) => hiddenColumns.delete(c.id));\n\n // Preserve core columns as they change the shape of join.\n const coreColumnPredicate = options?.coreColumnPredicate;\n if (coreColumnPredicate) {\n const coreColumns = columns.flatMap((c) =>\n coreColumnPredicate(getColumnIdAndSpec(c)) ? [c.id] : [],\n );\n coreColumns.forEach((c) => hiddenColumns.delete(c));\n }\n\n // Preserve sorted columns from being hidden\n sorting\n .map((s) => s.column)\n .filter((c): c is PTableColumnIdColumn => c.type === \"column\")\n .forEach((c) => hiddenColumns.delete(c.id));\n\n // Preserve filter columns from being hidden\n if (filters) {\n collectFilterSpecColumns(filters)\n .flatMap((c) => {\n const obj = parseJson(c);\n return obj.type === \"column\" ? [obj.id] : [];\n })\n .forEach((c) => hiddenColumns.delete(c));\n }\n\n const visibleColumns = columns.filter((c) => !hiddenColumns.has(c.id));\n const visibleLabelColumns = getMatchingLabelColumns(\n visibleColumns.map(getColumnIdAndSpec),\n allLabelColumns,\n );\n\n // if at least one column is not yet computed, we can't show the table\n if (!allPColumnsReady([...visibleColumns, ...visibleLabelColumns])) return undefined;\n\n const visibleDef = createPTableDef({\n columns: visibleColumns,\n labelColumns: visibleLabelColumns,\n coreJoinType,\n filters,\n sorting,\n coreColumnPredicate,\n });\n const visibleHandle = ctx.createPTableV2(visibleDef);\n\n if (!visibleHandle) return undefined;\n\n return {\n sourceId: tableStateNormalized.pTableParams.sourceId,\n fullTableHandle: fullHandle,\n fullPframeHandle: pframeHandle,\n visibleTableHandle: visibleHandle,\n } satisfies PlDataTableModel;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"createPlDataTableV2.js","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts"],"sourcesContent":["import type {\n AxisId,\n PColumn,\n PObjectId,\n PTableColumnId,\n PTableColumnIdAxis,\n PTableColumnIdColumn,\n CanonicalizedJson,\n} from \"@milaboratories/pl-model-common\";\nimport {\n Annotation,\n canonicalizeJson,\n getAxisId,\n getColumnIdAndSpec,\n isLinkerColumn,\n uniqueBy,\n parseJson,\n PColumnName,\n} from \"@milaboratories/pl-model-common\";\nimport type {\n AxisLabelProvider,\n ColumnProvider,\n PColumnDataUniversal,\n RenderCtxBase,\n} from \"../../../render\";\nimport { allPColumnsReady, deriveLabels, PColumnCollection } from \"../../../render\";\nimport { identity } from \"es-toolkit\";\nimport type { CreatePlDataTableOps, PlDataTableModel } from \"../typesV5\";\nimport { upgradePlDataTableStateV2 } from \"../state-migration\";\nimport type { PlDataTableStateV2 } from \"../state-migration\";\nimport { getMatchingLabelColumns } from \"../labels\";\nimport { collectFilterSpecColumns } from \"../../../filters/traverse\";\nimport { isEmpty } from \"es-toolkit/compat\";\nimport { createPTableDefV2 } from \"./createPTableDefV2\";\nimport { isColumnOptional } from \"./utils\";\n\n/**\n * @deprecated This function is deprecated and will be removed in future. Please migrate to createPlDataTable with v3 options for improved column discovery and display configuration. See createPlDataTableOptionsV3 for details on the new options format and migration guidance.\n */\nexport type createPlDataTableOptionsV2 = {\n columns: PColumn<PColumnDataUniversal>[];\n tableState?: PlDataTableStateV2;\n options?: CreatePlDataTableOps;\n};\n\n/**\n * Create p-table spec and handle given ui table state\n *\n * @deprecated This version of createPlDataTable is deprecated and will be removed in future. Please migrate to v3 by switching to the new options format and providing necessary information for column discovery and display configuration. See createPlDataTableOptionsV3 for details.\n * @param ctx context\n * @param columns column list\n * @param tableState table ui state\n * @returns PlAgDataTableV2 table source\n */\nexport function createPlDataTableV2<A, U>(\n ctx: RenderCtxBase<A, U>,\n columns: createPlDataTableOptionsV2[\"columns\"],\n tableState?: createPlDataTableOptionsV2[\"tableState\"],\n options?: createPlDataTableOptionsV2[\"options\"],\n): PlDataTableModel | undefined {\n if (columns.length === 0) return undefined;\n\n const tableStateNormalized = upgradePlDataTableStateV2(tableState);\n const allLabelColumns = getAllLabelColumns(ctx.resultPool) ?? [];\n\n let fullLabelColumns = getMatchingLabelColumns(columns, allLabelColumns);\n fullLabelColumns = deriveLabels(fullLabelColumns, identity, { includeNativeLabel: true }).map(\n (v) => {\n return {\n ...v.value,\n spec: {\n ...v.value.spec,\n annotations: {\n ...v.value.spec.annotations,\n [Annotation.Label]: v.label,\n },\n },\n };\n },\n );\n\n const fullColumns = [...columns, ...fullLabelColumns];\n\n const fullColumnsAxes = uniqueBy(\n fullColumns.flatMap((c) => c.spec.axesSpec.map((a) => getAxisId(a))),\n (a) => canonicalizeJson<AxisId>(a),\n );\n const fullColumnsIds: PTableColumnId[] = [\n ...fullColumnsAxes.map((a) => ({ type: \"axis\", id: a }) satisfies PTableColumnIdAxis),\n ...fullColumns.map((c) => ({ type: \"column\", id: c.id }) satisfies PTableColumnIdColumn),\n ];\n const fullColumnsIdsSet = new Set(fullColumnsIds.map((c) => canonicalizeJson<PTableColumnId>(c)));\n const isValidColumnId = (id: string): boolean =>\n fullColumnsIdsSet.has(id as CanonicalizedJson<PTableColumnId>);\n\n // -- Filtering validation --\n const filters = tableStateNormalized.pTableParams.filters;\n const defaultFilters = options?.filters ?? undefined;\n const filterColumns = filters !== null ? collectFilterSpecColumns(filters) : [];\n const firstInvalidFilterColumn = filterColumns.find((col) => !isValidColumnId(col));\n if (firstInvalidFilterColumn)\n throw new Error(\n `Invalid filter column ${firstInvalidFilterColumn}: column reference does not match the table columns`,\n );\n const defaultFilterColumns =\n defaultFilters !== undefined ? collectFilterSpecColumns(defaultFilters) : [];\n const firstInvalidDefaultFilterColumn = defaultFilterColumns.find((col) => !isValidColumnId(col));\n if (firstInvalidDefaultFilterColumn)\n throw new Error(\n `Invalid default filter column ${firstInvalidDefaultFilterColumn}: column reference does not match the table columns`,\n );\n\n // -- Sorting validation --\n const userSorting = tableStateNormalized.pTableParams.sorting;\n const sorting = (isEmpty(userSorting) ? options?.sorting : userSorting) ?? [];\n const firstInvalidSortingColumn = sorting.find(\n (s) => !isValidColumnId(canonicalizeJson<PTableColumnId>(s.column)),\n );\n if (firstInvalidSortingColumn)\n throw new Error(\n `Invalid sorting column ${JSON.stringify(firstInvalidSortingColumn.column)}: column reference does not match the table columns`,\n );\n\n const coreJoinType = options?.coreJoinType ?? \"full\";\n const fullDef = createPTableDefV2({\n columns,\n labelColumns: fullLabelColumns,\n coreJoinType,\n filters,\n sorting,\n coreColumnPredicate: options?.coreColumnPredicate,\n });\n\n const fullHandle = ctx.createPTableV2(fullDef);\n const pframeHandle = ctx.createPFrame(fullColumns);\n if (!fullHandle || !pframeHandle) return undefined;\n\n const hiddenColumns = new Set<PObjectId>(\n ((): PObjectId[] => {\n // Inner join works as a filter - all columns must be present\n if (coreJoinType === \"inner\") return [];\n\n const hiddenColIds = tableStateNormalized.pTableParams.hiddenColIds;\n if (hiddenColIds !== null) {\n return hiddenColIds\n .filter((s): s is PTableColumnIdColumn => s.type === \"column\")\n .map((s) => s.id);\n }\n\n return columns.filter((c) => isColumnOptional(c.spec)).map((c) => c.id);\n })(),\n );\n\n // Preserve linker columns\n columns.filter((c) => isLinkerColumn(c.spec)).forEach((c) => hiddenColumns.delete(c.id));\n\n // Preserve core columns as they change the shape of join.\n const coreColumnPredicate = options?.coreColumnPredicate;\n if (coreColumnPredicate) {\n const coreColumns = columns.flatMap((c) =>\n coreColumnPredicate(getColumnIdAndSpec(c)) ? [c.id] : [],\n );\n coreColumns.forEach((c) => hiddenColumns.delete(c));\n }\n\n // Preserve sorted columns from being hidden\n sorting\n .map((s) => s.column)\n .filter((c): c is PTableColumnIdColumn => c.type === \"column\")\n .forEach((c) => hiddenColumns.delete(c.id));\n\n // Preserve filter columns from being hidden\n if (filters) {\n collectFilterSpecColumns(filters)\n .flatMap((c) => {\n const obj = parseJson(c);\n return obj.type === \"column\" ? [obj.id] : [];\n })\n .forEach((c) => hiddenColumns.delete(c));\n }\n\n const visibleColumns = columns.filter((c) => !hiddenColumns.has(c.id));\n const visibleLabelColumns = getMatchingLabelColumns(\n visibleColumns.map(getColumnIdAndSpec),\n allLabelColumns,\n );\n\n // if at least one column is not yet computed, we can't show the table\n if (!allPColumnsReady([...visibleColumns, ...visibleLabelColumns])) return undefined;\n\n const visibleDef = createPTableDefV2({\n columns: visibleColumns,\n labelColumns: visibleLabelColumns,\n coreJoinType,\n filters,\n sorting,\n coreColumnPredicate,\n });\n const visibleHandle = ctx.createPTableV2(visibleDef);\n\n if (!visibleHandle) return undefined;\n\n return {\n sourceId: tableStateNormalized.pTableParams.sourceId,\n fullTableHandle: fullHandle,\n fullPframeHandle: pframeHandle,\n visibleTableHandle: visibleHandle,\n defaultFilters,\n } satisfies PlDataTableModel;\n}\n\nfunction getAllLabelColumns(\n resultPool: AxisLabelProvider & ColumnProvider,\n): PColumn<PColumnDataUniversal>[] | undefined {\n return new PColumnCollection()\n .addAxisLabelProvider(resultPool)\n .addColumnProvider(resultPool)\n .getColumns(\n {\n name: PColumnName.Label,\n axes: [{}], // exactly one axis\n },\n { dontWaitAllData: true, overrideLabelAnnotation: false },\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,203 +1,286 @@
|
|
|
1
1
|
require("../../../_virtual/_rolldown/runtime.cjs");
|
|
2
|
-
const require_pcolumn_data = require("../../../render/util/pcolumn_data.cjs");
|
|
3
|
-
require("../../../render/index.cjs");
|
|
4
2
|
const require_traverse = require("../../../filters/traverse.cjs");
|
|
5
|
-
const require_filterToQuery = require("../../../filters/converters/filterToQuery.cjs");
|
|
6
|
-
const require_distill = require("../../../filters/distill.cjs");
|
|
7
|
-
require("../../../filters/index.cjs");
|
|
8
3
|
const require_state_migration = require("../state-migration.cjs");
|
|
9
4
|
const require_labels = require("../labels.cjs");
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
require("../../../columns/index.cjs");
|
|
5
|
+
const require_createPTableDefV3 = require("./createPTableDefV3.cjs");
|
|
6
|
+
const require_utils = require("./utils.cjs");
|
|
7
|
+
const require_discoverColumns = require("./discoverColumns.cjs");
|
|
14
8
|
let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
|
|
9
|
+
let _milaboratories_helpers = require("@milaboratories/helpers");
|
|
15
10
|
let es_toolkit_compat = require("es-toolkit/compat");
|
|
16
|
-
let es_toolkit = require("es-toolkit");
|
|
17
11
|
//#region src/components/PlDataTable/createPlDataTable/createPlDataTableV3.ts
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
12
|
+
function createPlDataTableV3(ctx, options) {
|
|
13
|
+
const state = require_state_migration.upgradePlDataTableStateV2(options.tableState);
|
|
14
|
+
const primaryJoinType = options.primaryJoinType ?? "full";
|
|
15
|
+
const discovered = "discoverColumnOptions" in options ? require_discoverColumns.discoverTableColumnSnaphots(ctx, options.discoverColumnOptions) : options.columns;
|
|
16
|
+
if ((0, _milaboratories_helpers.isNil)(discovered) || discovered.length === 0) return void 0;
|
|
17
|
+
const resolved = resolveDiscoveredColumns(splitDiscoveredColumns(discovered), discovered);
|
|
18
|
+
const labelColumns = require_labels.getMatchingLabelColumns(resolved.all, require_labels.getAllLabelColumns(ctx));
|
|
19
|
+
const annotated = annotateColumnGroups(resolved, labelColumns, require_utils.deriveAllLabels({
|
|
20
|
+
columns: discovered.map((dc) => ({
|
|
21
|
+
id: dc.id,
|
|
22
|
+
spec: dc.spec,
|
|
23
|
+
linkerPath: dc.linkerPath?.map((lp) => ({ spec: lp.linker.spec }))
|
|
24
|
+
})),
|
|
25
|
+
labelColumns,
|
|
26
|
+
deriveLabelsOptions: {
|
|
27
|
+
includeNativeLabel: true,
|
|
28
|
+
...options.labelsOptions
|
|
29
|
+
}
|
|
30
|
+
}), options.columnsDisplayOptions);
|
|
31
|
+
const primaryColumnIds = new Set(discovered.filter((dc) => dc.isPrimary).map((dc) => dc.id));
|
|
32
|
+
const primaryColumns = annotated.direct.filter((c) => primaryColumnIds.has(c.id));
|
|
33
|
+
const secondaryColumns = annotated.direct.filter((c) => !primaryColumnIds.has(c.id));
|
|
34
|
+
if (primaryColumns.length === 0) return void 0;
|
|
35
|
+
const columnIsAvailable = createColumnValidationById([
|
|
36
|
+
...annotated.direct,
|
|
37
|
+
...annotated.linked.flatMap((lc) => [...annotated.linkers.get(lc.id) ?? [], lc]),
|
|
38
|
+
...annotated.labels
|
|
39
|
+
]);
|
|
40
|
+
const remapedDefaultFilters = remapFilterColumnIds(options.filters, discovered);
|
|
41
|
+
const filters = concatFilters(state.pTableParams.filters, state.pTableParams.defaultFilters ?? remapedDefaultFilters);
|
|
42
|
+
validateFilters(filters, columnIsAvailable);
|
|
43
|
+
const sorting = resolveSorting(state.pTableParams.sorting, remapSortingColumnIds(options.sorting, discovered));
|
|
44
|
+
validateSorting(sorting, columnIsAvailable);
|
|
45
|
+
const fullDef = require_createPTableDefV3.createPTableDefV3({
|
|
46
|
+
primaryJoinType,
|
|
47
|
+
primaryColumns,
|
|
48
|
+
secondaryGroups: [
|
|
49
|
+
...secondaryColumns.map((c) => [c]),
|
|
50
|
+
...annotated.linked.map((lc) => [...annotated.linkers.get(lc.id) ?? [], lc]),
|
|
51
|
+
...annotated.labels.map((c) => [c])
|
|
52
|
+
],
|
|
53
|
+
filters,
|
|
54
|
+
sorting
|
|
55
|
+
});
|
|
56
|
+
const fullHandle = ctx.createPTableV2(fullDef);
|
|
57
|
+
const pframeHandle = ctx.createPFrame([
|
|
58
|
+
...annotated.direct,
|
|
59
|
+
...annotated.linked,
|
|
60
|
+
...annotated.labels,
|
|
61
|
+
...(0, _milaboratories_pl_model_common.uniqueBy)([...annotated.linkers.values()].flat(), (c) => c.id)
|
|
62
|
+
]);
|
|
63
|
+
const hiddenSpecs = state.pTableParams.hiddenColIds;
|
|
64
|
+
const hiddenColumnIds = computeHiddenColumns([...annotated.direct, ...annotated.linked], sorting, filters, hiddenSpecs);
|
|
65
|
+
const visible = buildVisibleColumns(annotated, hiddenColumnIds, labelColumns);
|
|
66
|
+
const visibleNonCoreDirect = secondaryColumns.filter((c) => !hiddenColumnIds.has(c.id));
|
|
67
|
+
const visibleLinkedGroups = buildVisibleLinkedGroups(visible.direct, visible.linked, annotated.linkers, hiddenSpecs);
|
|
68
|
+
const visibleDef = require_createPTableDefV3.createPTableDefV3({
|
|
69
|
+
primaryJoinType,
|
|
70
|
+
primaryColumns,
|
|
71
|
+
secondaryGroups: [
|
|
72
|
+
...visibleNonCoreDirect.map((c) => [c]),
|
|
73
|
+
...visibleLinkedGroups,
|
|
74
|
+
...visible.labels.map((c) => [c])
|
|
75
|
+
],
|
|
76
|
+
filters,
|
|
77
|
+
sorting
|
|
78
|
+
});
|
|
79
|
+
const visibleHandle = ctx.createPTableV2(visibleDef);
|
|
80
|
+
return {
|
|
81
|
+
sourceId: state.pTableParams.sourceId,
|
|
82
|
+
fullTableHandle: fullHandle,
|
|
83
|
+
fullPframeHandle: pframeHandle,
|
|
84
|
+
visibleTableHandle: visibleHandle,
|
|
85
|
+
defaultFilters: remapedDefaultFilters
|
|
23
86
|
};
|
|
87
|
+
}
|
|
88
|
+
/** Split discovered columns into direct (no linker path) and linked (with linker path). */
|
|
89
|
+
function splitDiscoveredColumns(columns) {
|
|
24
90
|
return {
|
|
25
|
-
|
|
26
|
-
|
|
91
|
+
direct: columns.filter((dc) => (0, _milaboratories_helpers.isNil)(dc.linkerPath) || dc.linkerPath.length === 0),
|
|
92
|
+
linked: columns.filter((dc) => !(0, _milaboratories_helpers.isNil)(dc.linkerPath) && dc.linkerPath.length > 0)
|
|
27
93
|
};
|
|
28
94
|
}
|
|
29
|
-
/**
|
|
30
|
-
function
|
|
95
|
+
/** Resolve DiscoveredColumn snapshots into PColumn objects with lazily-evaluated data. */
|
|
96
|
+
function resolveDiscoveredColumns(split, allDiscovered) {
|
|
97
|
+
const linked = split.linked.map(resolveSnapshot);
|
|
98
|
+
const linkers = new Map(split.linked.filter((dc) => !(0, _milaboratories_helpers.isNil)(dc.linkerPath)).map((dc, i) => [linked[i].id, dc.linkerPath.map((s) => resolveSnapshot(s.linker))]));
|
|
31
99
|
return {
|
|
32
|
-
|
|
33
|
-
|
|
100
|
+
all: allDiscovered.map(resolveSnapshot),
|
|
101
|
+
direct: split.direct.map(resolveSnapshot),
|
|
102
|
+
linked,
|
|
103
|
+
linkers
|
|
34
104
|
};
|
|
35
105
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
secondaryColumns.push(...params.labelColumns);
|
|
45
|
-
let query = {
|
|
46
|
-
type: "outerJoin",
|
|
47
|
-
primary: joinEntry({
|
|
48
|
-
type: params.coreJoinType === "inner" ? "innerJoin" : "fullJoin",
|
|
49
|
-
entries: coreColumns.map((c) => joinEntry({
|
|
50
|
-
type: "column",
|
|
51
|
-
column: c
|
|
52
|
-
}))
|
|
53
|
-
}),
|
|
54
|
-
secondary: secondaryColumns.map((c) => joinEntry({
|
|
55
|
-
type: "column",
|
|
56
|
-
column: c
|
|
57
|
-
}))
|
|
106
|
+
/** Annotate all column groups with derived labels and display options. */
|
|
107
|
+
function annotateColumnGroups(resolved, labelColumns, derivedLabels, displayOptions) {
|
|
108
|
+
return {
|
|
109
|
+
direct: require_utils.withTableVisualAnnotations(displayOptions, require_utils.withLabelAnnotations(derivedLabels, resolved.direct)),
|
|
110
|
+
linked: require_utils.withTableVisualAnnotations(displayOptions, require_utils.withLabelAnnotations(derivedLabels, resolved.linked)),
|
|
111
|
+
linkers: new Map([...resolved.linkers].map(([id, cols]) => [id, require_utils.withLabelAnnotations(derivedLabels, cols)])),
|
|
112
|
+
labels: require_utils.withLabelAnnotations(derivedLabels, labelColumns)
|
|
58
113
|
};
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
114
|
+
}
|
|
115
|
+
/** Build an index of all valid column IDs (axes + columns) for filter/sorting validation. */
|
|
116
|
+
function createColumnValidationById(fullColumns) {
|
|
117
|
+
const allIds = [...(0, _milaboratories_pl_model_common.uniqueBy)(fullColumns.flatMap((c) => c.spec.axesSpec.map(_milaboratories_pl_model_common.getAxisId)), (a) => (0, _milaboratories_pl_model_common.canonicalizeJson)(a)).map((a) => ({
|
|
118
|
+
type: "axis",
|
|
119
|
+
id: a
|
|
120
|
+
})), ...fullColumns.map((c) => ({
|
|
121
|
+
type: "column",
|
|
122
|
+
id: c.id
|
|
123
|
+
}))];
|
|
124
|
+
const validIdSet = new Set(allIds.map((c) => (0, _milaboratories_pl_model_common.canonicalizeJson)(c)));
|
|
125
|
+
return (id) => {
|
|
126
|
+
return validIdSet.has(id);
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
/** Validate that all column references in filters exist in the table. */
|
|
130
|
+
function validateFilters(filters, isValidColumnId) {
|
|
131
|
+
if (filters == null) return;
|
|
132
|
+
const firstInvalid = require_traverse.collectFilterSpecColumns(filters).find((col) => !isValidColumnId(col));
|
|
133
|
+
if (firstInvalid !== void 0) throw new Error(`Invalid filter column ${firstInvalid}: column reference does not match the table columns`);
|
|
134
|
+
}
|
|
135
|
+
/** Merge two filter trees into one AND-combined tree. Returns the non-nil one if the other is nil. */
|
|
136
|
+
function concatFilters(a, b) {
|
|
137
|
+
if ((0, _milaboratories_helpers.isNil)(a)) return b;
|
|
138
|
+
if ((0, _milaboratories_helpers.isNil)(b)) return a;
|
|
139
|
+
return {
|
|
140
|
+
...a,
|
|
141
|
+
filters: [...a.filters, ...b.filters]
|
|
79
142
|
};
|
|
80
|
-
return { query };
|
|
81
143
|
}
|
|
82
|
-
/**
|
|
83
|
-
function
|
|
84
|
-
return (0,
|
|
144
|
+
/** Pick user sorting from state if non-empty, otherwise fall back to options default. */
|
|
145
|
+
function resolveSorting(userSorting, defaultSorting) {
|
|
146
|
+
return ((0, es_toolkit_compat.isEmpty)(userSorting) ? defaultSorting : userSorting) ?? [];
|
|
85
147
|
}
|
|
86
|
-
/**
|
|
87
|
-
function
|
|
88
|
-
|
|
148
|
+
/** Validate that all column references in sorting exist in the table. */
|
|
149
|
+
function validateSorting(sorting, isValidColumnId) {
|
|
150
|
+
const firstInvalid = sorting.find((s) => !isValidColumnId((0, _milaboratories_pl_model_common.canonicalizeJson)(s.column)));
|
|
151
|
+
if (firstInvalid !== void 0) throw new Error(`Invalid sorting column ${JSON.stringify(firstInvalid.column)}: column reference does not match the table columns`);
|
|
89
152
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const
|
|
94
|
-
const
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
for (const
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
153
|
+
/** Determine which columns should be hidden based on state or optional-column defaults. */
|
|
154
|
+
function computeHiddenColumns(columns, sorting, filters, hiddenSpecs) {
|
|
155
|
+
const alwaysHidden = columns.filter((c) => require_utils.isColumnHidden(c.spec)).map((c) => c.id);
|
|
156
|
+
const optionalHidden = !(0, _milaboratories_helpers.isNil)(hiddenSpecs) ? hiddenSpecs.filter((s) => s.type === "column").map((s) => s.id) : columns.filter((c) => require_utils.isColumnOptional(c.spec)).map((c) => c.id);
|
|
157
|
+
const initial = [...alwaysHidden, ...optionalHidden];
|
|
158
|
+
const preserved = collectPreservedColumnIds(sorting, filters);
|
|
159
|
+
return new Set(initial.filter((id) => !preserved.has(id)));
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Build visible linked column groups. Non-hidden groups are included fully;
|
|
163
|
+
* hidden groups are trimmed to only the prefix that brings axes not yet
|
|
164
|
+
* covered by earlier groups (visible or previously trimmed).
|
|
165
|
+
*/
|
|
166
|
+
function buildVisibleLinkedGroups(direct, linked, linkers, hiddenSpecs) {
|
|
167
|
+
const result = [];
|
|
168
|
+
const coveredAxisIds = /* @__PURE__ */ new Set();
|
|
169
|
+
const collectAxes = (group) => {
|
|
170
|
+
for (const col of group) for (const as of col.spec.axesSpec) coveredAxisIds.add((0, _milaboratories_pl_model_common.canonicalizeJson)((0, _milaboratories_pl_model_common.getAxisId)(as)));
|
|
171
|
+
};
|
|
172
|
+
collectAxes(direct);
|
|
173
|
+
for (const lc of linked) {
|
|
174
|
+
const group = [...linkers.get(lc.id) ?? [], lc];
|
|
175
|
+
result.push(group);
|
|
176
|
+
collectAxes(group);
|
|
177
|
+
}
|
|
178
|
+
for (const group of linkers.values()) {
|
|
179
|
+
const trimmed = trimGroupByVisibleAxes(group, hiddenSpecs, coveredAxisIds);
|
|
180
|
+
if (trimmed.length > 0) {
|
|
181
|
+
result.push(trimmed);
|
|
182
|
+
collectAxes(trimmed);
|
|
116
183
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
const
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
const
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
const
|
|
173
|
-
columns: visibleColumns,
|
|
174
|
-
labelColumns: visibleLabelColumns,
|
|
175
|
-
coreJoinType,
|
|
176
|
-
filters,
|
|
177
|
-
sorting,
|
|
178
|
-
coreColumnPredicate
|
|
179
|
-
});
|
|
180
|
-
const visibleHandle = ctx.createPTableV2(visibleDef);
|
|
181
|
-
if (!visibleHandle) return void 0;
|
|
184
|
+
}
|
|
185
|
+
return result;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* For a linked column group [linker1, ..., linkerN, column], find the rightmost
|
|
189
|
+
* element that has at least one non-hidden and not-yet-covered axis.
|
|
190
|
+
* Return the prefix up to and including that element.
|
|
191
|
+
* If no element has such an axis, return empty array.
|
|
192
|
+
*/
|
|
193
|
+
function trimGroupByVisibleAxes(group, hiddenSpecs, coveredAxisIds) {
|
|
194
|
+
if (hiddenSpecs === null) return group;
|
|
195
|
+
const hiddenAxisIds = new Set(hiddenSpecs.filter((s) => s.type === "axis").map((s) => (0, _milaboratories_pl_model_common.canonicalizeJson)(s.id)));
|
|
196
|
+
const uncoveredAxisIds = new Set(group.flatMap((c) => c.spec.axesSpec.map((as) => (0, _milaboratories_pl_model_common.canonicalizeJson)((0, _milaboratories_pl_model_common.getAxisId)(as)))).filter((id) => !hiddenAxisIds.has(id) && !coveredAxisIds.has(id)));
|
|
197
|
+
let lastNeeded = -1;
|
|
198
|
+
for (let i = 0; i < group.length; i++) {
|
|
199
|
+
const newAxes = group[i].spec.axesSpec.map((as) => (0, _milaboratories_pl_model_common.canonicalizeJson)((0, _milaboratories_pl_model_common.getAxisId)(as))).filter((id) => uncoveredAxisIds.has(id));
|
|
200
|
+
if (newAxes.length > 0) {
|
|
201
|
+
for (const id of newAxes) uncoveredAxisIds.delete(id);
|
|
202
|
+
lastNeeded = i;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return lastNeeded === -1 ? [] : group.slice(0, lastNeeded + 1);
|
|
206
|
+
}
|
|
207
|
+
/** Collect IDs of columns that must remain visible (sorted, filtered). */
|
|
208
|
+
function collectPreservedColumnIds(sorting, filters) {
|
|
209
|
+
const sortedIds = (sorting ?? []).map((s) => s.column).filter((c) => c.type === "column").map((c) => c.id);
|
|
210
|
+
const filterIds = !(0, _milaboratories_helpers.isNil)(filters) ? require_traverse.collectFilterSpecColumns(filters).flatMap((c) => {
|
|
211
|
+
const obj = (0, _milaboratories_pl_model_common.parseJson)(c);
|
|
212
|
+
return obj.type === "column" ? [obj.id] : [];
|
|
213
|
+
}) : [];
|
|
214
|
+
return new Set([...sortedIds, ...filterIds]);
|
|
215
|
+
}
|
|
216
|
+
/** Filter annotated columns to only visible ones, re-matching label columns for the visible subset. */
|
|
217
|
+
function buildVisibleColumns(annotated, hiddenColumns, originalLabelColumns) {
|
|
218
|
+
const direct = annotated.direct.filter((c) => !hiddenColumns.has(c.id));
|
|
219
|
+
const linked = annotated.linked.filter((c) => !hiddenColumns.has(c.id));
|
|
220
|
+
return {
|
|
221
|
+
direct,
|
|
222
|
+
linked,
|
|
223
|
+
labels: require_labels.getMatchingLabelColumns([...direct, ...linked].map(_milaboratories_pl_model_common.getColumnIdAndSpec), originalLabelColumns)
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
/** Resolve a ColumnSnapshot to a PColumn with lazily-evaluated data. */
|
|
227
|
+
function resolveSnapshot(snap) {
|
|
228
|
+
return {
|
|
229
|
+
id: snap.id,
|
|
230
|
+
spec: snap.spec,
|
|
231
|
+
data: snap.data?.get()
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
/** Remap column references in sorting entries. */
|
|
235
|
+
function remapSortingColumnIds(sorting, columns) {
|
|
236
|
+
return sorting?.map((s) => {
|
|
237
|
+
if (s.column.type === "axis") return s;
|
|
238
|
+
const id = s.column.id;
|
|
239
|
+
const column = columns.find((c) => (c.originalId ?? c.id) === id) ?? (0, _milaboratories_helpers.throwError)(`Column ID "${id}" in sorting does not match any discovered column`);
|
|
182
240
|
return {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
241
|
+
...s,
|
|
242
|
+
column: {
|
|
243
|
+
type: "column",
|
|
244
|
+
id: column.id
|
|
245
|
+
}
|
|
187
246
|
};
|
|
188
|
-
}
|
|
189
|
-
collection.dispose();
|
|
190
|
-
}
|
|
247
|
+
});
|
|
191
248
|
}
|
|
192
|
-
/**
|
|
193
|
-
function
|
|
194
|
-
if (
|
|
195
|
-
|
|
249
|
+
/** Remap column references in a filter tree. */
|
|
250
|
+
function remapFilterColumnIds(filters, columns) {
|
|
251
|
+
if ((0, _milaboratories_helpers.isNil)(filters)) return filters;
|
|
252
|
+
const map = (tableColumnId) => {
|
|
253
|
+
const parsed = (0, _milaboratories_pl_model_common.parseJson)(tableColumnId);
|
|
254
|
+
if (parsed.type === "axis") return tableColumnId;
|
|
255
|
+
const originalId = parsed.id;
|
|
256
|
+
return (0, _milaboratories_pl_model_common.canonicalizeJson)({
|
|
257
|
+
type: "column",
|
|
258
|
+
id: (columns.find((c) => (c.originalId ?? c.id) === originalId) ?? (0, _milaboratories_helpers.throwError)(`Column ID "${parsed.id}" in filters does not match any discovered column`)).id
|
|
259
|
+
});
|
|
260
|
+
};
|
|
261
|
+
return require_traverse.traverseFilterSpec(filters, {
|
|
262
|
+
leaf: (leaf) => {
|
|
263
|
+
if (leaf.type === void 0) return leaf;
|
|
264
|
+
const result = { ...leaf };
|
|
265
|
+
if ("column" in result) result.column = map(result.column);
|
|
266
|
+
if ("rhs" in result) result.rhs = map(result.rhs);
|
|
267
|
+
return result;
|
|
268
|
+
},
|
|
269
|
+
and: (results) => ({
|
|
270
|
+
type: "and",
|
|
271
|
+
filters: results
|
|
272
|
+
}),
|
|
273
|
+
or: (results) => ({
|
|
274
|
+
type: "or",
|
|
275
|
+
filters: results
|
|
276
|
+
}),
|
|
277
|
+
not: (result) => ({
|
|
278
|
+
type: "not",
|
|
279
|
+
filter: result
|
|
280
|
+
})
|
|
281
|
+
});
|
|
196
282
|
}
|
|
197
283
|
//#endregion
|
|
198
|
-
exports.createPTableDef = createPTableDef;
|
|
199
284
|
exports.createPlDataTableV3 = createPlDataTableV3;
|
|
200
|
-
exports.isColumnHidden = isColumnHidden;
|
|
201
|
-
exports.isColumnOptional = isColumnOptional;
|
|
202
285
|
|
|
203
286
|
//# sourceMappingURL=createPlDataTableV3.cjs.map
|