@platforma-sdk/model 1.74.0 → 1.75.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 +4 -3
- package/dist/columns/column_collection_builder.cjs.map +1 -1
- package/dist/columns/column_collection_builder.d.ts +5 -5
- package/dist/columns/column_collection_builder.d.ts.map +1 -1
- package/dist/columns/column_collection_builder.js +4 -3
- package/dist/columns/column_collection_builder.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.d.ts +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs +14 -14
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts +3 -2
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js +16 -16
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.cjs +50 -4
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.js +51 -6
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/index.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/index.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/utils.cjs +7 -4
- package/dist/components/PlDataTable/createPlDataTable/utils.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/utils.js +16 -13
- package/dist/components/PlDataTable/createPlDataTable/utils.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTableSheet.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTableSheet.d.ts +1 -1
- package/dist/components/PlDataTable/createPlDataTableSheet.js.map +1 -1
- package/dist/components/PlDataTable/index.d.ts +1 -1
- package/dist/components/PlDataTable/state-migration.cjs +31 -5
- package/dist/components/PlDataTable/state-migration.cjs.map +1 -1
- package/dist/components/PlDataTable/state-migration.d.ts +13 -1
- package/dist/components/PlDataTable/state-migration.d.ts.map +1 -1
- package/dist/components/PlDataTable/state-migration.js +32 -6
- package/dist/components/PlDataTable/state-migration.js.map +1 -1
- package/dist/components/PlDataTable/typesV5.d.ts +19 -90
- package/dist/components/PlDataTable/typesV5.d.ts.map +1 -1
- package/dist/components/PlDataTable/typesV6.d.ts +98 -0
- package/dist/components/PlDataTable/typesV6.d.ts.map +1 -0
- package/dist/components/PlDatasetSelector/enrichment_discovery.cjs +5 -5
- package/dist/components/PlDatasetSelector/enrichment_discovery.cjs.map +1 -1
- package/dist/components/PlDatasetSelector/enrichment_discovery.js +5 -5
- package/dist/components/PlDatasetSelector/enrichment_discovery.js.map +1 -1
- package/dist/components/index.d.ts +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/labels/derive_distinct_labels.cjs +2 -2
- package/dist/labels/derive_distinct_labels.cjs.map +1 -1
- package/dist/labels/derive_distinct_labels.js +2 -2
- package/dist/labels/derive_distinct_labels.js.map +1 -1
- package/dist/labels/derive_distinct_tooltips.cjs +2 -1
- package/dist/labels/derive_distinct_tooltips.cjs.map +1 -1
- package/dist/labels/derive_distinct_tooltips.js +2 -1
- package/dist/labels/derive_distinct_tooltips.js.map +1 -1
- package/dist/package.cjs +1 -1
- package/dist/package.js +1 -1
- package/package.json +8 -8
- package/src/columns/column_collection_builder.test.ts +3 -7
- package/src/columns/column_collection_builder.ts +14 -35
- package/src/components/PlDataTable/createPlDataTable/createPTableDefV2.ts +1 -1
- package/src/components/PlDataTable/createPlDataTable/createPTableDefV3.ts +1 -1
- package/src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts +1 -1
- package/src/components/PlDataTable/createPlDataTable/createPlDataTableV3.ts +36 -21
- package/src/components/PlDataTable/createPlDataTable/discoverColumns.ts +57 -8
- package/src/components/PlDataTable/createPlDataTable/index.ts +1 -1
- package/src/components/PlDataTable/createPlDataTable/utils.test.ts +1 -1
- package/src/components/PlDataTable/createPlDataTable/utils.ts +9 -8
- package/src/components/PlDataTable/createPlDataTableSheet.ts +1 -1
- package/src/components/PlDataTable/index.ts +1 -2
- package/src/components/PlDataTable/state-migration.ts +71 -8
- package/src/components/PlDataTable/typesV5.ts +14 -153
- package/src/components/PlDataTable/typesV6.ts +152 -0
- package/src/components/PlDatasetSelector/enrichment_discovery.ts +5 -5
- package/src/labels/derive_distinct_labels.ts +2 -2
- package/src/labels/derive_distinct_tooltips.ts +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-migration.d.ts","names":[],"sources":["../../../src/components/PlDataTable/state-migration.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"state-migration.d.ts","names":[],"sources":["../../../src/components/PlDataTable/state-migration.ts"],"mappings":";;;;;;;;AAyBA;KAAY,kBAAA;EAIN,SAAA;IACE,WAAA;MACE,aAAA,EAAe,iBAAA,CAAkB,gBAAA;IAAA;IAEnC,IAAA;MACE,SAAA;QACE,KAAA,EAAO,iBAAA,CAAkB,gBAAA;QACzB,IAAA;MAAA;IAAA;IAGJ,gBAAA;MACE,YAAA,EAAc,iBAAA,CAAkB,gBAAA;IAAA;IAElC,QAAA;IACA,MAAA,GAAS,MAAA,CAAO,iBAAA,CAAkB,MAAA;EAAA;EAEpC,YAAA;IACE,OAAA,GAAU,aAAA;IACV,OAAA,GAAU,kBAAA;EAAA;AAAA;EAIZ,OAAA;EACA,UAAA;IACE,QAAA;IACA,SAAA;MACE,WAAA;QACE,aAAA,EAAe,iBAAA,CAAkB,gBAAA;MAAA;MAEnC,IAAA;QACE,SAAA;UACE,KAAA,EAAO,iBAAA,CAAkB,gBAAA;UACzB,IAAA;QAAA;MAAA;MAGJ,gBAAA;QACE,YAAA,EAAc,iBAAA,CAAkB,gBAAA;MAAA;IAAA;IAGpC,WAAA,EAAa,qBAAA;EAAA;EAEf,YAAA;IACE,YAAA,EAAc,SAAA;IACd,OAAA,EAAS,kBAAA;IACT,OAAA,EAAS,aAAA;EAAA;AAAA;EAIX,OAAA;EACA,UAAA;IACE,QAAA;IACA,SAAA;MACE,WAAA;QACE,aAAA,EAAe,iBAAA,CAAkB,gBAAA;MAAA;MAEnC,IAAA;QACE,SAAA;UACE,KAAA,EAAO,iBAAA,CAAkB,gBAAA;UACzB,IAAA;QAAA;MAAA;MAGJ,gBAAA;QACE,YAAA,EAAc,iBAAA,CAAkB,gBAAA;MAAA;IAAA;IAGpC,WAAA,EAAa,qBAAA;IACb,YAAA,EAAc,sBAAA;EAAA;EAEhB,YAAA,EAAc,cAAA;AAAA;EAGd,OAAA;EACA,UAAA;IACE,QAAA;IACA,SAAA,EAAW,wBAAA;IACX,WAAA,EAAa,qBAAA;IACb,YAAA,EAAc,sBAAA;EAAA,KAjDK;EAoDrB,YAAA;IACE,QAAA;IACA,YAAA,EAAc,SAAA;IACd,OAAA,EAAS,aAAA;EAAA;AAAA;EAKX,OAAA;EACA,UAAA;IACE,QAAA;IACA,SAAA,EAAW,sBAAA;IACX,WAAA,EAAa,qBAAA;IACb,YAAA,SAAqB,0BAAA;IACrB,mBAAA,SAA4B,0BAAA;IAC5B,YAAA;EAAA;EAEF,YAAA,EAAc,cAAA;AAAA,IAGhB,4BAAA;;iBAGY,yBAAA,CACd,KAAA,EAAO,kBAAA,eACN,4BAAA;AAAA,iBA2Ma,yBAAA,CAAA,GAA6B,cAAA;AAAA,iBAU7B,wBAAA,CAAA,GAA4B,4BAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { distillFilterSpec } from "../../filters/distill.js";
|
|
2
2
|
import "../../filters/index.js";
|
|
3
|
-
import { canonicalizeJson } from "@milaboratories/pl-model-common";
|
|
3
|
+
import { canonicalizeJson, parseJson } from "@milaboratories/pl-model-common";
|
|
4
4
|
//#region src/components/PlDataTable/state-migration.ts
|
|
5
5
|
/** Upgrade PlDataTableStateV2 to the latest version */
|
|
6
6
|
function upgradePlDataTableStateV2(state) {
|
|
@@ -15,11 +15,37 @@ function upgradePlDataTableStateV2(state) {
|
|
|
15
15
|
pTableParams: createDefaultPTableParams()
|
|
16
16
|
};
|
|
17
17
|
if (state.version === 3) state = createPlDataTableStateV2();
|
|
18
|
-
if (state.version === 4) state =
|
|
18
|
+
if (state.version === 4) state = migrateV4toV6(state);
|
|
19
|
+
if (state.version === 5) state = migrateV5toV6(state);
|
|
19
20
|
return state;
|
|
20
21
|
}
|
|
21
|
-
/** Migrate
|
|
22
|
-
function
|
|
22
|
+
/** Migrate v5 to v6: unwrap `{source, labeled}` colIds in gridState. */
|
|
23
|
+
function migrateV5toV6(state) {
|
|
24
|
+
return {
|
|
25
|
+
version: 6,
|
|
26
|
+
stateCache: state.stateCache.map((entry) => ({
|
|
27
|
+
...entry,
|
|
28
|
+
gridState: unwrapV5GridState(entry.gridState)
|
|
29
|
+
})),
|
|
30
|
+
pTableParams: createDefaultPTableParams()
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/** Convert v5 wrapped colId JSON to bare PTableColumnSpec JSON, taking `.source`. */
|
|
34
|
+
function unwrapV5ColId(json) {
|
|
35
|
+
return canonicalizeJson(parseJson(json).source);
|
|
36
|
+
}
|
|
37
|
+
function unwrapV5GridState(gridState) {
|
|
38
|
+
return {
|
|
39
|
+
columnOrder: gridState.columnOrder ? { orderedColIds: gridState.columnOrder.orderedColIds.map(unwrapV5ColId) } : void 0,
|
|
40
|
+
sort: gridState.sort ? { sortModel: gridState.sort.sortModel.map((s) => ({
|
|
41
|
+
colId: unwrapV5ColId(s.colId),
|
|
42
|
+
sort: s.sort
|
|
43
|
+
})) } : void 0,
|
|
44
|
+
columnVisibility: gridState.columnVisibility ? { hiddenColIds: gridState.columnVisibility.hiddenColIds.map(unwrapV5ColId) } : void 0
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/** Migrate v4 state to v6: convert per-column filters to tree-based format (skips v5). */
|
|
48
|
+
function migrateV4toV6(state) {
|
|
23
49
|
let idCounter = 0;
|
|
24
50
|
const nextId = () => ++idCounter;
|
|
25
51
|
const migratedCache = state.stateCache.map((entry) => {
|
|
@@ -44,7 +70,7 @@ function migrateV4toV5(state) {
|
|
|
44
70
|
const oldSourceId = state.pTableParams.sourceId;
|
|
45
71
|
const currentCache = oldSourceId ? migratedCache.find((e) => e.sourceId === oldSourceId) : void 0;
|
|
46
72
|
return {
|
|
47
|
-
version:
|
|
73
|
+
version: 6,
|
|
48
74
|
stateCache: migratedCache,
|
|
49
75
|
pTableParams: currentCache && oldSourceId ? {
|
|
50
76
|
sourceId: oldSourceId,
|
|
@@ -195,7 +221,7 @@ function createDefaultPTableParams() {
|
|
|
195
221
|
}
|
|
196
222
|
function createPlDataTableStateV2() {
|
|
197
223
|
return {
|
|
198
|
-
version:
|
|
224
|
+
version: 6,
|
|
199
225
|
stateCache: [],
|
|
200
226
|
pTableParams: createDefaultPTableParams()
|
|
201
227
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-migration.js","names":[],"sources":["../../../src/components/PlDataTable/state-migration.ts"],"sourcesContent":["import type {\n AxisId,\n CanonicalizedJson,\n PObjectId,\n PTableColumnId,\n PTableColumnSpec,\n PTableRecordFilter,\n PTableSorting,\n} from \"@milaboratories/pl-model-common\";\nimport { canonicalizeJson } from \"@milaboratories/pl-model-common\";\nimport { distillFilterSpec } from \"../../filters\";\nimport type { PlDataTableFilterState, PlTableFilter } from \"./typesV4\";\nimport type {\n PlDataTableFiltersWithMeta,\n PlDataTableGridStateCore,\n PlDataTableSheetState,\n PlDataTableStateV2CacheEntry,\n PlDataTableStateV2Normalized,\n PTableParamsV2,\n} from \"./typesV5\";\n\n/**\n * PlDataTableV2 persisted state\n */\nexport type PlDataTableStateV2 =\n // Old versions of the state\n | {\n // no version\n gridState: {\n columnOrder?: {\n orderedColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sort?: {\n sortModel: {\n colId: CanonicalizedJson<PTableColumnSpec>;\n sort: \"asc\" | \"desc\";\n }[];\n };\n columnVisibility?: {\n hiddenColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sourceId?: string;\n sheets?: Record<CanonicalizedJson<AxisId>, string | number>;\n };\n pTableParams?: {\n sorting?: PTableSorting[];\n filters?: PTableRecordFilter[];\n };\n }\n | {\n version: 2;\n stateCache: {\n sourceId: string;\n gridState: {\n columnOrder?: {\n orderedColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sort?: {\n sortModel: {\n colId: CanonicalizedJson<PTableColumnSpec>;\n sort: \"asc\" | \"desc\";\n }[];\n };\n columnVisibility?: {\n hiddenColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n };\n sheetsState: PlDataTableSheetState[];\n }[];\n pTableParams: {\n hiddenColIds: PObjectId[] | null;\n filters: PTableRecordFilter[];\n sorting: PTableSorting[];\n };\n }\n | {\n version: 3;\n stateCache: {\n sourceId: string;\n gridState: {\n columnOrder?: {\n orderedColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sort?: {\n sortModel: {\n colId: CanonicalizedJson<PTableColumnSpec>;\n sort: \"asc\" | \"desc\";\n }[];\n };\n columnVisibility?: {\n hiddenColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n };\n sheetsState: PlDataTableSheetState[];\n filtersState: PlDataTableFilterState[];\n }[];\n pTableParams: PTableParamsV2;\n }\n | {\n version: 4;\n stateCache: {\n sourceId: string;\n gridState: PlDataTableGridStateCore;\n sheetsState: PlDataTableSheetState[];\n filtersState: PlDataTableFilterState[];\n }[];\n /** Old format; only fields used in migration are typed */\n pTableParams: {\n sourceId: string | null;\n hiddenColIds: PObjectId[] | null;\n sorting: PTableSorting[];\n };\n }\n // Normalized state\n | PlDataTableStateV2Normalized;\n\n/** Upgrade PlDataTableStateV2 to the latest version */\nexport function upgradePlDataTableStateV2(\n state: PlDataTableStateV2 | undefined,\n): PlDataTableStateV2Normalized {\n // Block just added, had no state, model started earlier than the UI\n if (!state) {\n return createPlDataTableStateV2();\n }\n // v1 -> v2\n if (!(\"version\" in state)) {\n // Non upgradeable as sourceId calculation algorithm has changed, resetting state to default\n state = createPlDataTableStateV2();\n }\n // v2 -> v3\n if (state.version === 2) {\n state = {\n version: 3,\n stateCache: state.stateCache.map((entry) => ({\n ...entry,\n filtersState: [],\n })),\n pTableParams: createDefaultPTableParams(),\n };\n }\n // v3 -> v4\n if (state.version === 3) {\n // Non upgradeable as column ids calculation algorithm has changed, resetting state to default\n state = createPlDataTableStateV2();\n }\n // v4 -> v5: migrate per-column filters to tree-based format\n if (state.version === 4) {\n state = migrateV4toV5(state);\n }\n return state;\n}\n\n/** Migrate v4 state to v5: convert per-column filters to tree-based format */\nfunction migrateV4toV5(\n state: Extract<PlDataTableStateV2, { version: 4 }>,\n): PlDataTableStateV2Normalized {\n let idCounter = 0;\n const nextId = () => ++idCounter;\n\n const migratedCache: PlDataTableStateV2CacheEntry[] = state.stateCache.map((entry) => {\n const leaves: PlDataTableFiltersWithMeta[\"filters\"] = [];\n for (const f of entry.filtersState) {\n if (f.filter !== null && !f.filter.disabled) {\n const column = canonicalizeJson(f.id);\n leaves.push(migrateTableFilter(column, f.filter.value, nextId));\n }\n }\n const filtersState: PlDataTableFiltersWithMeta | null =\n leaves.length > 0 ? { id: nextId(), type: \"and\", filters: leaves } : null;\n\n return {\n sourceId: entry.sourceId,\n gridState: entry.gridState,\n sheetsState: entry.sheetsState,\n filtersState,\n defaultFiltersState: null,\n };\n });\n\n const oldSourceId = state.pTableParams.sourceId;\n const currentCache = oldSourceId\n ? migratedCache.find((e) => e.sourceId === oldSourceId)\n : undefined;\n\n return {\n version: 5,\n stateCache: migratedCache,\n pTableParams:\n currentCache && oldSourceId\n ? {\n sourceId: oldSourceId,\n hiddenColIds:\n state.pTableParams.hiddenColIds?.map((id) => ({ type: \"column\" as const, id })) ??\n null,\n filters: distillFilterSpec(currentCache.filtersState),\n defaultFilters: null,\n sorting: state.pTableParams.sorting,\n }\n : createDefaultPTableParams(),\n };\n}\n\n/** Migrate a single per-column PlTableFilter to a tree-based FilterSpec node */\nfunction migrateTableFilter(\n column: CanonicalizedJson<PTableColumnId>,\n filter: PlTableFilter,\n nextId: () => number,\n): PlDataTableFiltersWithMeta[\"filters\"][number] {\n const id = nextId();\n switch (filter.type) {\n case \"isNA\":\n return { id, type: \"isNA\", column };\n case \"isNotNA\":\n return { id, type: \"isNotNA\", column };\n case \"number_equals\":\n return { id, type: \"equal\", column, x: filter.reference };\n case \"number_notEquals\":\n return { id, type: \"notEqual\", column, x: filter.reference };\n case \"number_greaterThan\":\n return { id, type: \"greaterThan\", column, x: filter.reference };\n case \"number_greaterThanOrEqualTo\":\n return { id, type: \"greaterThanOrEqual\", column, x: filter.reference };\n case \"number_lessThan\":\n return { id, type: \"lessThan\", column, x: filter.reference };\n case \"number_lessThanOrEqualTo\":\n return { id, type: \"lessThanOrEqual\", column, x: filter.reference };\n case \"number_between\":\n return {\n id,\n type: \"and\",\n filters: [\n filter.includeLowerBound\n ? { id: nextId(), type: \"greaterThanOrEqual\" as const, column, x: filter.lowerBound }\n : { id: nextId(), type: \"greaterThan\" as const, column, x: filter.lowerBound },\n filter.includeUpperBound\n ? { id: nextId(), type: \"lessThanOrEqual\" as const, column, x: filter.upperBound }\n : { id: nextId(), type: \"lessThan\" as const, column, x: filter.upperBound },\n ],\n };\n case \"string_equals\":\n return { id, type: \"patternEquals\", column, value: filter.reference };\n case \"string_notEquals\":\n return { id, type: \"patternNotEquals\", column, value: filter.reference };\n case \"string_contains\":\n return { id, type: \"patternContainSubsequence\", column, value: filter.reference };\n case \"string_doesNotContain\":\n return { id, type: \"patternNotContainSubsequence\", column, value: filter.reference };\n case \"string_matches\":\n return { id, type: \"patternMatchesRegularExpression\", column, value: filter.reference };\n case \"string_doesNotMatch\":\n return {\n id,\n type: \"not\",\n filter: {\n id: nextId(),\n type: \"patternMatchesRegularExpression\",\n column,\n value: filter.reference,\n },\n };\n case \"string_containsFuzzyMatch\":\n return {\n id,\n type: \"patternFuzzyContainSubsequence\",\n column,\n value: filter.reference,\n maxEdits: filter.maxEdits,\n substitutionsOnly: filter.substitutionsOnly,\n ...(filter.wildcard !== undefined ? { wildcard: filter.wildcard } : {}),\n };\n }\n}\n\nexport function createDefaultPTableParams(): PTableParamsV2 {\n return {\n sourceId: null,\n hiddenColIds: null,\n filters: null,\n defaultFilters: null,\n sorting: [],\n };\n}\n\nexport function createPlDataTableStateV2(): PlDataTableStateV2Normalized {\n return {\n version: 5,\n stateCache: [],\n pTableParams: createDefaultPTableParams(),\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"state-migration.js","names":[],"sources":["../../../src/components/PlDataTable/state-migration.ts"],"sourcesContent":["import type {\n AxisId,\n CanonicalizedJson,\n PObjectId,\n PTableColumnId,\n PTableColumnSpec,\n PTableRecordFilter,\n PTableSorting,\n} from \"@milaboratories/pl-model-common\";\nimport { canonicalizeJson, parseJson } from \"@milaboratories/pl-model-common\";\nimport { distillFilterSpec } from \"../../filters\";\nimport type { PlDataTableFilterState, PlTableFilter } from \"./typesV4\";\nimport type {\n PlDataTableFiltersWithMeta,\n PlDataTableGridStateCore,\n PlDataTableSheetState,\n PlDataTableStateV2CacheEntry,\n PlDataTableStateV2Normalized,\n PTableParamsV2,\n} from \"./typesV6\";\nimport type { PlDataTableGridStateV5, PlDataTableV5ColIdJson } from \"./typesV5\";\n\n/**\n * PlDataTableV2 persisted state\n */\nexport type PlDataTableStateV2 =\n // Old versions of the state\n | {\n // no version\n gridState: {\n columnOrder?: {\n orderedColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sort?: {\n sortModel: {\n colId: CanonicalizedJson<PTableColumnSpec>;\n sort: \"asc\" | \"desc\";\n }[];\n };\n columnVisibility?: {\n hiddenColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sourceId?: string;\n sheets?: Record<CanonicalizedJson<AxisId>, string | number>;\n };\n pTableParams?: {\n sorting?: PTableSorting[];\n filters?: PTableRecordFilter[];\n };\n }\n | {\n version: 2;\n stateCache: {\n sourceId: string;\n gridState: {\n columnOrder?: {\n orderedColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sort?: {\n sortModel: {\n colId: CanonicalizedJson<PTableColumnSpec>;\n sort: \"asc\" | \"desc\";\n }[];\n };\n columnVisibility?: {\n hiddenColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n };\n sheetsState: PlDataTableSheetState[];\n }[];\n pTableParams: {\n hiddenColIds: PObjectId[] | null;\n filters: PTableRecordFilter[];\n sorting: PTableSorting[];\n };\n }\n | {\n version: 3;\n stateCache: {\n sourceId: string;\n gridState: {\n columnOrder?: {\n orderedColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n sort?: {\n sortModel: {\n colId: CanonicalizedJson<PTableColumnSpec>;\n sort: \"asc\" | \"desc\";\n }[];\n };\n columnVisibility?: {\n hiddenColIds: CanonicalizedJson<PTableColumnSpec>[];\n };\n };\n sheetsState: PlDataTableSheetState[];\n filtersState: PlDataTableFilterState[];\n }[];\n pTableParams: PTableParamsV2;\n }\n | {\n version: 4;\n stateCache: {\n sourceId: string;\n gridState: PlDataTableGridStateCore;\n sheetsState: PlDataTableSheetState[];\n filtersState: PlDataTableFilterState[];\n }[];\n /** Old format; only fields used in migration are typed */\n pTableParams: {\n sourceId: string | null;\n hiddenColIds: PObjectId[] | null;\n sorting: PTableSorting[];\n };\n }\n // v5 stored colIds as `{source, labeled}` wrappers; only the gridState shape differs.\n | {\n version: 5;\n stateCache: {\n sourceId: string;\n gridState: PlDataTableGridStateV5;\n sheetsState: PlDataTableSheetState[];\n filtersState: null | PlDataTableFiltersWithMeta;\n defaultFiltersState: null | PlDataTableFiltersWithMeta;\n searchString?: string;\n }[];\n pTableParams: PTableParamsV2;\n }\n // Normalized state\n | PlDataTableStateV2Normalized;\n\n/** Upgrade PlDataTableStateV2 to the latest version */\nexport function upgradePlDataTableStateV2(\n state: PlDataTableStateV2 | undefined,\n): PlDataTableStateV2Normalized {\n // Block just added, had no state, model started earlier than the UI\n if (!state) {\n return createPlDataTableStateV2();\n }\n // v1 -> v2\n if (!(\"version\" in state)) {\n // Non upgradeable as sourceId calculation algorithm has changed, resetting state to default\n state = createPlDataTableStateV2();\n }\n // v2 -> v3\n if (state.version === 2) {\n state = {\n version: 3,\n stateCache: state.stateCache.map((entry) => ({\n ...entry,\n filtersState: [],\n })),\n pTableParams: createDefaultPTableParams(),\n };\n }\n // v3 -> v4\n if (state.version === 3) {\n // Non upgradeable as column ids calculation algorithm has changed, resetting state to default\n state = createPlDataTableStateV2();\n }\n // v4 -> v6: migrate per-column filters to tree-based format (skips v5).\n // v4 gridState already used bare PTableColumnSpec colIds, so we jump\n // straight to v6 without going through the v5 wrapper format.\n if (state.version === 4) {\n state = migrateV4toV6(state);\n }\n // v5 -> v6: unwrap `{source, labeled}` colIds in gridState back to bare PTableColumnSpec.\n if (state.version === 5) {\n state = migrateV5toV6(state);\n }\n return state;\n}\n\n/** Migrate v5 to v6: unwrap `{source, labeled}` colIds in gridState. */\nfunction migrateV5toV6(\n state: Extract<PlDataTableStateV2, { version: 5 }>,\n): PlDataTableStateV2Normalized {\n // pTableParams reset: v5 stored DiscoveredPColumnId-based hiddenColIds with\n // empty-array fields (e.g. `{column, path: [], columnQualifications: [], ...}`).\n // v6 distills empty fields, so the same logical column serialises differently\n // and lookups would silently miss every previously-hidden discovered column.\n // gridState colIds are derived from PTableColumnSpec and unaffected.\n return {\n version: 6,\n stateCache: state.stateCache.map((entry) => ({\n ...entry,\n gridState: unwrapV5GridState(entry.gridState),\n })),\n pTableParams: createDefaultPTableParams(),\n };\n}\n\n/** Convert v5 wrapped colId JSON to bare PTableColumnSpec JSON, taking `.source`. */\nfunction unwrapV5ColId(json: PlDataTableV5ColIdJson): CanonicalizedJson<PTableColumnSpec> {\n return canonicalizeJson(parseJson(json).source);\n}\n\nfunction unwrapV5GridState(gridState: PlDataTableGridStateV5): PlDataTableGridStateCore {\n return {\n columnOrder: gridState.columnOrder\n ? { orderedColIds: gridState.columnOrder.orderedColIds.map(unwrapV5ColId) }\n : undefined,\n sort: gridState.sort\n ? {\n sortModel: gridState.sort.sortModel.map((s) => ({\n colId: unwrapV5ColId(s.colId),\n sort: s.sort,\n })),\n }\n : undefined,\n columnVisibility: gridState.columnVisibility\n ? { hiddenColIds: gridState.columnVisibility.hiddenColIds.map(unwrapV5ColId) }\n : undefined,\n };\n}\n\n/** Migrate v4 state to v6: convert per-column filters to tree-based format (skips v5). */\nfunction migrateV4toV6(\n state: Extract<PlDataTableStateV2, { version: 4 }>,\n): PlDataTableStateV2Normalized {\n let idCounter = 0;\n const nextId = () => ++idCounter;\n\n const migratedCache: PlDataTableStateV2CacheEntry[] = state.stateCache.map((entry) => {\n const leaves: PlDataTableFiltersWithMeta[\"filters\"] = [];\n for (const f of entry.filtersState) {\n if (f.filter !== null && !f.filter.disabled) {\n const column = canonicalizeJson(f.id);\n leaves.push(migrateTableFilter(column, f.filter.value, nextId));\n }\n }\n const filtersState: PlDataTableFiltersWithMeta | null =\n leaves.length > 0 ? { id: nextId(), type: \"and\", filters: leaves } : null;\n\n return {\n sourceId: entry.sourceId,\n gridState: entry.gridState,\n sheetsState: entry.sheetsState,\n filtersState,\n defaultFiltersState: null,\n };\n });\n\n const oldSourceId = state.pTableParams.sourceId;\n const currentCache = oldSourceId\n ? migratedCache.find((e) => e.sourceId === oldSourceId)\n : undefined;\n\n return {\n version: 6,\n stateCache: migratedCache,\n pTableParams:\n currentCache && oldSourceId\n ? {\n sourceId: oldSourceId,\n hiddenColIds:\n state.pTableParams.hiddenColIds?.map((id) => ({ type: \"column\" as const, id })) ??\n null,\n filters: distillFilterSpec(currentCache.filtersState),\n defaultFilters: null,\n sorting: state.pTableParams.sorting,\n }\n : createDefaultPTableParams(),\n };\n}\n\n/** Migrate a single per-column PlTableFilter to a tree-based FilterSpec node */\nfunction migrateTableFilter(\n column: CanonicalizedJson<PTableColumnId>,\n filter: PlTableFilter,\n nextId: () => number,\n): PlDataTableFiltersWithMeta[\"filters\"][number] {\n const id = nextId();\n switch (filter.type) {\n case \"isNA\":\n return { id, type: \"isNA\", column };\n case \"isNotNA\":\n return { id, type: \"isNotNA\", column };\n case \"number_equals\":\n return { id, type: \"equal\", column, x: filter.reference };\n case \"number_notEquals\":\n return { id, type: \"notEqual\", column, x: filter.reference };\n case \"number_greaterThan\":\n return { id, type: \"greaterThan\", column, x: filter.reference };\n case \"number_greaterThanOrEqualTo\":\n return { id, type: \"greaterThanOrEqual\", column, x: filter.reference };\n case \"number_lessThan\":\n return { id, type: \"lessThan\", column, x: filter.reference };\n case \"number_lessThanOrEqualTo\":\n return { id, type: \"lessThanOrEqual\", column, x: filter.reference };\n case \"number_between\":\n return {\n id,\n type: \"and\",\n filters: [\n filter.includeLowerBound\n ? { id: nextId(), type: \"greaterThanOrEqual\" as const, column, x: filter.lowerBound }\n : { id: nextId(), type: \"greaterThan\" as const, column, x: filter.lowerBound },\n filter.includeUpperBound\n ? { id: nextId(), type: \"lessThanOrEqual\" as const, column, x: filter.upperBound }\n : { id: nextId(), type: \"lessThan\" as const, column, x: filter.upperBound },\n ],\n };\n case \"string_equals\":\n return { id, type: \"patternEquals\", column, value: filter.reference };\n case \"string_notEquals\":\n return { id, type: \"patternNotEquals\", column, value: filter.reference };\n case \"string_contains\":\n return { id, type: \"patternContainSubsequence\", column, value: filter.reference };\n case \"string_doesNotContain\":\n return { id, type: \"patternNotContainSubsequence\", column, value: filter.reference };\n case \"string_matches\":\n return { id, type: \"patternMatchesRegularExpression\", column, value: filter.reference };\n case \"string_doesNotMatch\":\n return {\n id,\n type: \"not\",\n filter: {\n id: nextId(),\n type: \"patternMatchesRegularExpression\",\n column,\n value: filter.reference,\n },\n };\n case \"string_containsFuzzyMatch\":\n return {\n id,\n type: \"patternFuzzyContainSubsequence\",\n column,\n value: filter.reference,\n maxEdits: filter.maxEdits,\n substitutionsOnly: filter.substitutionsOnly,\n ...(filter.wildcard !== undefined ? { wildcard: filter.wildcard } : {}),\n };\n }\n}\n\nexport function createDefaultPTableParams(): PTableParamsV2 {\n return {\n sourceId: null,\n hiddenColIds: null,\n filters: null,\n defaultFilters: null,\n sorting: [],\n };\n}\n\nexport function createPlDataTableStateV2(): PlDataTableStateV2Normalized {\n return {\n version: 6,\n stateCache: [],\n pTableParams: createDefaultPTableParams(),\n };\n}\n"],"mappings":"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"}
|
|
@@ -1,102 +1,31 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { AxisId, AxisSpec, CanonicalizedJson, ListOptionBase, PColumnIdAndSpec, PFrameHandle, PTableColumnId, PTableColumnSpec, PTableHandle, PTableSorting, RootFilterSpec } from "@milaboratories/pl-model-common";
|
|
3
|
-
import { Nil } from "@milaboratories/helpers";
|
|
1
|
+
import { CanonicalizedJson, PTableColumnSpec } from "@milaboratories/pl-model-common";
|
|
4
2
|
|
|
5
3
|
//#region src/components/PlDataTable/typesV5.d.ts
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
/**
|
|
5
|
+
* v5 colId wrapper. v5 stored every grid colId as `{ source, labeled }` —
|
|
6
|
+
* `source` was the original column spec, `labeled` was the spec with
|
|
7
|
+
* labeled axes substituted by their label columns. v6 dropped the wrapper
|
|
8
|
+
* and stores bare `PTableColumnSpec`. Kept here for the v5→v6 migration.
|
|
9
|
+
*/
|
|
10
|
+
type PlDataTableV5ColIdWrapper = {
|
|
11
|
+
source: PTableColumnSpec;
|
|
8
12
|
labeled: PTableColumnSpec;
|
|
9
13
|
};
|
|
10
|
-
type
|
|
11
|
-
type
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
};
|
|
14
|
+
type PlDataTableV5ColIdJson = CanonicalizedJson<PlDataTableV5ColIdWrapper>;
|
|
15
|
+
type PlDataTableGridStateV5 = {
|
|
16
|
+
columnOrder?: {
|
|
17
|
+
orderedColIds: PlDataTableV5ColIdJson[];
|
|
18
|
+
};
|
|
15
19
|
sort?: {
|
|
16
|
-
|
|
17
|
-
|
|
20
|
+
sortModel: {
|
|
21
|
+
colId: PlDataTableV5ColIdJson;
|
|
18
22
|
sort: "asc" | "desc";
|
|
19
23
|
}[];
|
|
20
|
-
};
|
|
24
|
+
};
|
|
21
25
|
columnVisibility?: {
|
|
22
|
-
|
|
26
|
+
hiddenColIds: PlDataTableV5ColIdJson[];
|
|
23
27
|
};
|
|
24
28
|
};
|
|
25
|
-
type PlDataTableSheet = {
|
|
26
|
-
/** spec of the axis to use */axis: AxisSpec; /** options to show in the filter dropdown */
|
|
27
|
-
options: ListOptionBase<string | number>[]; /** default (selected) value */
|
|
28
|
-
defaultValue?: string | number;
|
|
29
|
-
};
|
|
30
|
-
type PlDataTableSheetState = {
|
|
31
|
-
/** id of the axis */axisId: AxisId; /** selected value */
|
|
32
|
-
value: string | number;
|
|
33
|
-
};
|
|
34
|
-
/** Tree-based filter state compatible with PlAdvancedFilter's RootFilter */
|
|
35
|
-
type PlDataTableFilterMeta = {
|
|
36
|
-
id: number;
|
|
37
|
-
source?: "table-filter" | "table-search";
|
|
38
|
-
isExpanded?: boolean;
|
|
39
|
-
isSuppressed?: boolean;
|
|
40
|
-
};
|
|
41
|
-
type PlDataTableFilterSpecLeaf = FilterSpecLeaf$1<CanonicalizedJson<PTableColumnId>>;
|
|
42
|
-
type PlDataTableFilters = RootFilterSpec<PlDataTableFilterSpecLeaf>;
|
|
43
|
-
type PlDataTableFiltersWithMeta = RootFilterSpec<PlDataTableFilterSpecLeaf, PlDataTableFilterMeta>;
|
|
44
|
-
type PlDataTableStateV2CacheEntry = {
|
|
45
|
-
/** DataSource identifier for state management */sourceId: string; /** Internal ag-grid state */
|
|
46
|
-
gridState: PlDataTableGridStateCore; /** Sheets state */
|
|
47
|
-
sheetsState: PlDataTableSheetState[]; /** User filters state (tree-based, compatible with PlAdvancedFilter) */
|
|
48
|
-
filtersState: null | PlDataTableFiltersWithMeta; /** Default filters state from model (snapshot of defaults) */
|
|
49
|
-
defaultFiltersState: null | PlDataTableFiltersWithMeta; /** Fast search string */
|
|
50
|
-
searchString?: string;
|
|
51
|
-
};
|
|
52
|
-
type PTableParamsV2 = {
|
|
53
|
-
sourceId: null;
|
|
54
|
-
hiddenColIds: null;
|
|
55
|
-
sorting: [];
|
|
56
|
-
filters: null;
|
|
57
|
-
defaultFilters: null;
|
|
58
|
-
} | {
|
|
59
|
-
sourceId: string;
|
|
60
|
-
hiddenColIds: null | PTableColumnId[];
|
|
61
|
-
sorting: PTableSorting[];
|
|
62
|
-
filters: null | PlDataTableFilters;
|
|
63
|
-
defaultFilters: null | PlDataTableFilters;
|
|
64
|
-
};
|
|
65
|
-
type PlDataTableStateV2Normalized = {
|
|
66
|
-
/** Version for upgrades */version: 5; /** Internal states, LRU cache for 5 sourceId-s */
|
|
67
|
-
stateCache: PlDataTableStateV2CacheEntry[]; /** PTable params derived from the cache state for the current sourceId */
|
|
68
|
-
pTableParams: PTableParamsV2;
|
|
69
|
-
};
|
|
70
|
-
/** PlAgDataTable model */
|
|
71
|
-
type PlDataTableModel = {
|
|
72
|
-
/** DataSource identifier for state management */sourceId: null | string; /** p-table including all columns, used to show the full specification of the table */
|
|
73
|
-
fullTableHandle?: PTableHandle; /** p-frame handle */
|
|
74
|
-
fullPframeHandle?: PFrameHandle; /** p-table including only visible columns, used to get the data */
|
|
75
|
-
visibleTableHandle?: PTableHandle; /** Default filters from model options, surfaced for UI display */
|
|
76
|
-
defaultFilters?: Nil | PlDataTableFilters;
|
|
77
|
-
};
|
|
78
|
-
type CreatePlDataTableOps = {
|
|
79
|
-
/** Filters for columns and non-partitioned axes */filters?: PlDataTableFilters; /** Sorting to columns hidden from user */
|
|
80
|
-
sorting?: PTableSorting[];
|
|
81
|
-
/**
|
|
82
|
-
* Selects columns for which will be inner-joined to the table.
|
|
83
|
-
*
|
|
84
|
-
* Default behaviour: all columns are considered to be core
|
|
85
|
-
*/
|
|
86
|
-
coreColumnPredicate?: (spec: PColumnIdAndSpec) => boolean;
|
|
87
|
-
/**
|
|
88
|
-
* Determines how core columns should be joined together:
|
|
89
|
-
* inner - so user will only see records present in all core columns
|
|
90
|
-
* full - so user will only see records present in any of the core columns
|
|
91
|
-
*
|
|
92
|
-
* All non-core columns will be left joined to the table produced by the core
|
|
93
|
-
* columns, in other words records form the pool of non-core columns will only
|
|
94
|
-
* make their way into the final table if core table contains corresponding key.
|
|
95
|
-
*
|
|
96
|
-
* Default: 'full'
|
|
97
|
-
*/
|
|
98
|
-
coreJoinType?: "inner" | "full";
|
|
99
|
-
};
|
|
100
29
|
//#endregion
|
|
101
|
-
export {
|
|
30
|
+
export { PlDataTableGridStateV5 };
|
|
102
31
|
//# sourceMappingURL=typesV5.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typesV5.d.ts","names":[],"sources":["../../../src/components/PlDataTable/typesV5.ts"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"typesV5.d.ts","names":[],"sources":["../../../src/components/PlDataTable/typesV5.ts"],"mappings":";;;;;AAQA;;;;KAAY,yBAAA;EACV,MAAA,EAAQ,gBAAA;EACR,OAAA,EAAS,gBAAA;AAAA;AAAA,KAGC,sBAAA,GAAyB,iBAAA,CAAkB,yBAAA;AAAA,KAE3C,sBAAA;EACV,WAAA;IAAgB,aAAA,EAAe,sBAAA;EAAA;EAC/B,IAAA;IAAS,SAAA;MAAa,KAAA,EAAO,sBAAA;MAAwB,IAAA;IAAA;EAAA;EACrD,gBAAA;IAAqB,YAAA,EAAc,sBAAA;EAAA;AAAA"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { FilterSpecLeaf as FilterSpecLeaf$1 } from "../../filters/types.js";
|
|
2
|
+
import { AxisId, AxisSpec, CanonicalizedJson, ListOptionBase, PColumnIdAndSpec, PFrameHandle, PTableColumnId, PTableColumnSpec, PTableHandle, PTableSorting, RootFilterSpec } from "@milaboratories/pl-model-common";
|
|
3
|
+
import { Nil } from "@milaboratories/helpers";
|
|
4
|
+
|
|
5
|
+
//#region src/components/PlDataTable/typesV6.d.ts
|
|
6
|
+
type PlTableColumnIdJson = CanonicalizedJson<PTableColumnSpec>;
|
|
7
|
+
type PlDataTableGridStateCore = {
|
|
8
|
+
/** Includes column ordering */columnOrder?: {
|
|
9
|
+
/** All colIds in order */orderedColIds: PlTableColumnIdJson[];
|
|
10
|
+
}; /** Includes current sort columns and direction */
|
|
11
|
+
sort?: {
|
|
12
|
+
/** Sorted columns and directions in order */sortModel: {
|
|
13
|
+
/** Column Id to apply the sort to. */colId: PlTableColumnIdJson; /** Sort direction */
|
|
14
|
+
sort: "asc" | "desc";
|
|
15
|
+
}[];
|
|
16
|
+
}; /** Includes column visibility */
|
|
17
|
+
columnVisibility?: {
|
|
18
|
+
/** All colIds which were hidden */hiddenColIds: PlTableColumnIdJson[];
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
type PlDataTableSheet = {
|
|
22
|
+
/** spec of the axis to use */axis: AxisSpec; /** options to show in the filter dropdown */
|
|
23
|
+
options: ListOptionBase<string | number>[]; /** default (selected) value */
|
|
24
|
+
defaultValue?: string | number;
|
|
25
|
+
};
|
|
26
|
+
type PlDataTableSheetState = {
|
|
27
|
+
/** id of the axis */axisId: AxisId; /** selected value */
|
|
28
|
+
value: string | number;
|
|
29
|
+
};
|
|
30
|
+
/** Tree-based filter state compatible with PlAdvancedFilter's RootFilter */
|
|
31
|
+
type PlDataTableFilterMeta = {
|
|
32
|
+
id: number;
|
|
33
|
+
source?: "table-filter" | "table-search";
|
|
34
|
+
isExpanded?: boolean;
|
|
35
|
+
isSuppressed?: boolean;
|
|
36
|
+
};
|
|
37
|
+
type PlDataTableFilterSpecLeaf = FilterSpecLeaf$1<CanonicalizedJson<PTableColumnId>>;
|
|
38
|
+
type PlDataTableFilters = RootFilterSpec<PlDataTableFilterSpecLeaf>;
|
|
39
|
+
type PlDataTableFiltersWithMeta = RootFilterSpec<PlDataTableFilterSpecLeaf, PlDataTableFilterMeta>;
|
|
40
|
+
type PlDataTableStateV2CacheEntry = {
|
|
41
|
+
/** DataSource identifier for state management */sourceId: string; /** Internal ag-grid state */
|
|
42
|
+
gridState: PlDataTableGridStateCore; /** Sheets state */
|
|
43
|
+
sheetsState: PlDataTableSheetState[]; /** User filters state (tree-based, compatible with PlAdvancedFilter) */
|
|
44
|
+
filtersState: null | PlDataTableFiltersWithMeta; /** Default filters state from model (snapshot of defaults) */
|
|
45
|
+
defaultFiltersState: null | PlDataTableFiltersWithMeta; /** Fast search string */
|
|
46
|
+
searchString?: string;
|
|
47
|
+
};
|
|
48
|
+
type PTableParamsV2 = {
|
|
49
|
+
sourceId: null;
|
|
50
|
+
hiddenColIds: null;
|
|
51
|
+
sorting: [];
|
|
52
|
+
filters: null;
|
|
53
|
+
defaultFilters: null;
|
|
54
|
+
} | {
|
|
55
|
+
sourceId: string;
|
|
56
|
+
hiddenColIds: null | PTableColumnId[];
|
|
57
|
+
sorting: PTableSorting[];
|
|
58
|
+
filters: null | PlDataTableFilters;
|
|
59
|
+
defaultFilters: null | PlDataTableFilters;
|
|
60
|
+
};
|
|
61
|
+
type PlDataTableStateV2Normalized = {
|
|
62
|
+
/** Version for upgrades */version: 6; /** Internal states, LRU cache for 5 sourceId-s */
|
|
63
|
+
stateCache: PlDataTableStateV2CacheEntry[]; /** PTable params derived from the cache state for the current sourceId */
|
|
64
|
+
pTableParams: PTableParamsV2;
|
|
65
|
+
};
|
|
66
|
+
/** PlAgDataTable model */
|
|
67
|
+
type PlDataTableModel = {
|
|
68
|
+
/** DataSource identifier for state management */sourceId: null | string; /** p-table including all columns, used to show the full specification of the table */
|
|
69
|
+
fullTableHandle?: PTableHandle; /** p-frame handle */
|
|
70
|
+
fullPframeHandle?: PFrameHandle; /** p-table including only visible columns, used to get the data */
|
|
71
|
+
visibleTableHandle?: PTableHandle; /** Default filters from model options, surfaced for UI display */
|
|
72
|
+
defaultFilters?: Nil | PlDataTableFilters;
|
|
73
|
+
};
|
|
74
|
+
type CreatePlDataTableOps = {
|
|
75
|
+
/** Filters for columns and non-partitioned axes */filters?: PlDataTableFilters; /** Sorting to columns hidden from user */
|
|
76
|
+
sorting?: PTableSorting[];
|
|
77
|
+
/**
|
|
78
|
+
* Selects columns for which will be inner-joined to the table.
|
|
79
|
+
*
|
|
80
|
+
* Default behaviour: all columns are considered to be core
|
|
81
|
+
*/
|
|
82
|
+
coreColumnPredicate?: (spec: PColumnIdAndSpec) => boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Determines how core columns should be joined together:
|
|
85
|
+
* inner - so user will only see records present in all core columns
|
|
86
|
+
* full - so user will only see records present in any of the core columns
|
|
87
|
+
*
|
|
88
|
+
* All non-core columns will be left joined to the table produced by the core
|
|
89
|
+
* columns, in other words records form the pool of non-core columns will only
|
|
90
|
+
* make their way into the final table if core table contains corresponding key.
|
|
91
|
+
*
|
|
92
|
+
* Default: 'full'
|
|
93
|
+
*/
|
|
94
|
+
coreJoinType?: "inner" | "full";
|
|
95
|
+
};
|
|
96
|
+
//#endregion
|
|
97
|
+
export { CreatePlDataTableOps, PTableParamsV2, PlDataTableFilterMeta, PlDataTableFilterSpecLeaf, PlDataTableFilters, PlDataTableFiltersWithMeta, PlDataTableGridStateCore, PlDataTableModel, PlDataTableSheet, PlDataTableSheetState, PlDataTableStateV2CacheEntry, PlDataTableStateV2Normalized, PlTableColumnIdJson };
|
|
98
|
+
//# sourceMappingURL=typesV6.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typesV6.d.ts","names":[],"sources":["../../../src/components/PlDataTable/typesV6.ts"],"mappings":";;;;;KAgBY,mBAAA,GAAsB,iBAAA,CAAkB,gBAAA;AAAA,KAExC,wBAAA;iCAEV,WAAA;IAJ6B,0BAM3B,aAAA,EAAe,mBAAA;EAAA,GANiD;EASlE,IAAA;IAPkC,6CAShC,SAAA;MALe,sCAOb,KAAA,EAAO,mBAAA,EAQK;MANZ,IAAA;IAAA;EAAA,GATF;EAaF,gBAAA;IAVA,mCAYE,YAAA,EAAc,mBAAA;EAAA;AAAA;AAAA,KAIN,gBAAA;EANV,8BAQA,IAAA,EAAM,QAAA,EANU;EAQhB,OAAA,EAAS,cAAA,qBAR0B;EAUnC,YAAA;AAAA;AAAA,KAGU,qBAAA;EALa,qBAOvB,MAAA,EAAQ,MAAA,EATF;EAWN,KAAA;AAAA;;KAIU,qBAAA;EACV,EAAA;EACA,MAAA;EACA,UAAA;EACA,YAAA;AAAA;AAAA,KAEU,yBAAA,GAA4B,gBAAA,CAAe,iBAAA,CAAkB,cAAA;AAAA,KAC7D,kBAAA,GAAqB,cAAA,CAAe,yBAAA;AAAA,KACpC,0BAAA,GAA6B,cAAA,CACvC,yBAAA,EACA,qBAAA;AAAA,KAGU,4BAAA;EAjBL,iDAmBL,QAAA,UAf+B;EAiB/B,SAAA,EAAW,wBAAA,EAjBoB;EAmB/B,WAAA,EAAa,qBAAA,IAjBb;EAmBA,YAAA,SAAqB,0BAAA,EAjBrB;EAmBA,mBAAA,SAA4B,0BAAA,EAnBhB;EAqBZ,YAAA;AAAA;AAAA,KAGU,cAAA;EAEN,QAAA;EACA,YAAA;EACA,OAAA;EACA,OAAA;EACA,cAAA;AAAA;EAGA,QAAA;EACA,YAAA,SAAqB,cAAA;EACrB,OAAA,EAAS,aAAA;EACT,OAAA,SAAgB,kBAAA;EAChB,cAAA,SAAuB,kBAAA;AAAA;AAAA,KAGjB,4BAAA;EArCqB,2BAuC/B,OAAA,KAtCU;EAwCV,UAAA,EAAY,4BAAA;EAEZ,YAAA,EAAc,cAAA;AAAA;;KAIJ,gBAAA;EA9C2C,iDAgDrD,QAAA,iBA/CA;EAiDA,eAAA,GAAkB,YAAA,EAhDG;EAkDrB,gBAAA,GAAmB,YAAA,EA/CT;EAiDV,kBAAA,GAAqB,YAAA;EAErB,cAAA,GAAiB,GAAA,GAAM,kBAAA;AAAA;AAAA,KAGb,oBAAA;EA5CkB,mDA8C5B,OAAA,GAAU,kBAAA,EA9C4C;EAiDtD,OAAA,GAAU,aAAA;EAvDV;;;;;EA8DA,mBAAA,IAAuB,IAAA,EAAM,gBAAA;EAxD7B;;;;;AAKF;;;;;;EAgEE,YAAA;AAAA"}
|
|
@@ -35,10 +35,10 @@ function findEnrichmentColumns(collection, options) {
|
|
|
35
35
|
});
|
|
36
36
|
const predicate = options?.predicate;
|
|
37
37
|
return variants.filter((v) => {
|
|
38
|
-
if (v.path
|
|
38
|
+
if ((v.path?.length ?? 0) === 0) return false;
|
|
39
39
|
if (predicate !== void 0 && !predicate(v.column.spec)) return false;
|
|
40
40
|
if (!isGloballyAddressable(v.column.id)) return false;
|
|
41
|
-
if (v.path
|
|
41
|
+
if (v.path?.some((p) => !isGloballyAddressable(p.linker.id))) return false;
|
|
42
42
|
return true;
|
|
43
43
|
});
|
|
44
44
|
}
|
|
@@ -51,18 +51,18 @@ function enrichmentVariantsToRefs(variants, labelOptions) {
|
|
|
51
51
|
if (variants.length === 0) return [];
|
|
52
52
|
const labels = require_derive_distinct_labels.deriveDistinctLabels(variants.map((variant) => ({
|
|
53
53
|
spec: variant.column.spec,
|
|
54
|
-
linkerPath: variant.path
|
|
54
|
+
linkerPath: variant.path?.map((p) => ({ spec: p.linker.spec })),
|
|
55
55
|
qualifications: variant.qualifications
|
|
56
56
|
})), labelOptions);
|
|
57
57
|
return variants.map((variant, i) => {
|
|
58
|
-
const path = variant.path
|
|
58
|
+
const path = variant.path?.map((step) => ({
|
|
59
59
|
type: "linker",
|
|
60
60
|
linker: step.linker.id
|
|
61
61
|
}));
|
|
62
62
|
return {
|
|
63
63
|
ref: (0, _milaboratories_pl_model_common.createEnrichmentRef)(variant.column.id, {
|
|
64
64
|
path,
|
|
65
|
-
qualifications: variant.qualifications
|
|
65
|
+
qualifications: variant.qualifications?.forHit
|
|
66
66
|
}),
|
|
67
67
|
label: labels[i]
|
|
68
68
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enrichment_discovery.cjs","names":["Annotation","deriveDistinctLabels"],"sources":["../../../src/components/PlDatasetSelector/enrichment_discovery.ts"],"sourcesContent":["import { Annotation, createEnrichmentRef } from \"@milaboratories/pl-model-common\";\nimport type {\n EnrichmentStep,\n LabeledEnrichmentRef,\n LabeledEnrichmentRefs,\n MultiColumnSelector,\n PObjectId,\n PObjectSpec,\n} from \"@milaboratories/pl-model-common\";\nimport type {\n AnchoredColumnCollection,\n ColumnVariant,\n} from \"../../columns/column_collection_builder\";\nimport {\n deriveDistinctLabels,\n type DeriveLabelsOptions,\n type Entry,\n} from \"../../labels/derive_distinct_labels\";\n\n/**\n * True for global-form ids — `canonicalize({__isRef: true, blockId, name})` —\n * which the workflow can resolve via bquery. Local-form ids (`resolvePath`)\n * fail this check and are excluded from auto-discovery; prerun/outputs hops\n * must be supplied as resolved `{spec, data}` instead.\n */\nfunction isGloballyAddressable(id: PObjectId): boolean {\n try {\n const decoded = JSON.parse(id);\n return (\n typeof decoded === \"object\" &&\n decoded !== null &&\n decoded.__isRef === true &&\n typeof decoded.blockId === \"string\" &&\n typeof decoded.name === \"string\"\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Linker-reached hits attached to the anchor primary. Drops zero-hop variants\n * (filters / the primary itself) and structural hits (subset, linker, label\n * columns). Narrow further with `include` selectors or a `predicate`.\n */\nexport function findEnrichmentColumns(\n collection: AnchoredColumnCollection,\n options?: {\n maxHops?: number;\n include?: MultiColumnSelector | MultiColumnSelector[];\n predicate?: (spec: PObjectSpec) => boolean;\n },\n): ColumnVariant[] {\n const include =\n options?.include === undefined\n ? undefined\n : Array.isArray(options.include)\n ? options.include\n : [options.include];\n const variants = collection.findColumnVariants({\n mode: \"enrichment\",\n maxHops: options?.maxHops ?? 4,\n include,\n exclude: [\n { annotations: { [Annotation.IsSubset]: \"true\" } },\n { annotations: { [Annotation.IsLinkerColumn]: \"true\" } },\n { name: Annotation.Label },\n ],\n });\n const predicate = options?.predicate;\n return variants.filter((v) => {\n if (v.path
|
|
1
|
+
{"version":3,"file":"enrichment_discovery.cjs","names":["Annotation","deriveDistinctLabels"],"sources":["../../../src/components/PlDatasetSelector/enrichment_discovery.ts"],"sourcesContent":["import { Annotation, createEnrichmentRef } from \"@milaboratories/pl-model-common\";\nimport type {\n EnrichmentStep,\n LabeledEnrichmentRef,\n LabeledEnrichmentRefs,\n MultiColumnSelector,\n PObjectId,\n PObjectSpec,\n} from \"@milaboratories/pl-model-common\";\nimport type {\n AnchoredColumnCollection,\n ColumnVariant,\n} from \"../../columns/column_collection_builder\";\nimport {\n deriveDistinctLabels,\n type DeriveLabelsOptions,\n type Entry,\n} from \"../../labels/derive_distinct_labels\";\n\n/**\n * True for global-form ids — `canonicalize({__isRef: true, blockId, name})` —\n * which the workflow can resolve via bquery. Local-form ids (`resolvePath`)\n * fail this check and are excluded from auto-discovery; prerun/outputs hops\n * must be supplied as resolved `{spec, data}` instead.\n */\nfunction isGloballyAddressable(id: PObjectId): boolean {\n try {\n const decoded = JSON.parse(id);\n return (\n typeof decoded === \"object\" &&\n decoded !== null &&\n decoded.__isRef === true &&\n typeof decoded.blockId === \"string\" &&\n typeof decoded.name === \"string\"\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Linker-reached hits attached to the anchor primary. Drops zero-hop variants\n * (filters / the primary itself) and structural hits (subset, linker, label\n * columns). Narrow further with `include` selectors or a `predicate`.\n */\nexport function findEnrichmentColumns(\n collection: AnchoredColumnCollection,\n options?: {\n maxHops?: number;\n include?: MultiColumnSelector | MultiColumnSelector[];\n predicate?: (spec: PObjectSpec) => boolean;\n },\n): ColumnVariant[] {\n const include =\n options?.include === undefined\n ? undefined\n : Array.isArray(options.include)\n ? options.include\n : [options.include];\n const variants = collection.findColumnVariants({\n mode: \"enrichment\",\n maxHops: options?.maxHops ?? 4,\n include,\n exclude: [\n { annotations: { [Annotation.IsSubset]: \"true\" } },\n { annotations: { [Annotation.IsLinkerColumn]: \"true\" } },\n { name: Annotation.Label },\n ],\n });\n const predicate = options?.predicate;\n return variants.filter((v) => {\n if ((v.path?.length ?? 0) === 0) return false;\n if (predicate !== undefined && !predicate(v.column.spec)) return false;\n if (!isGloballyAddressable(v.column.id)) return false;\n if (v.path?.some((p) => !isGloballyAddressable(p.linker.id))) return false;\n return true;\n });\n}\n\n/**\n * Pair each variant with a path-disambiguated label (so export headers stay\n * unique) and carry hit/linker `PObjectId`s through verbatim. Propagates\n * `qualifications.forHit`; `forQueries` is re-derived by the table builder.\n */\nexport function enrichmentVariantsToRefs(\n variants: ColumnVariant[],\n labelOptions?: DeriveLabelsOptions,\n): LabeledEnrichmentRefs {\n if (variants.length === 0) return [];\n\n const entries: Entry[] = variants.map((variant) => ({\n spec: variant.column.spec,\n linkerPath: variant.path?.map((p) => ({ spec: p.linker.spec })),\n qualifications: variant.qualifications,\n }));\n const labels = deriveDistinctLabels(entries, labelOptions);\n\n return variants.map((variant, i): LabeledEnrichmentRef => {\n const path: undefined | EnrichmentStep[] = variant.path?.map((step) => ({\n type: \"linker\",\n linker: step.linker.id,\n }));\n return {\n ref: createEnrichmentRef(variant.column.id, {\n path,\n qualifications: variant.qualifications?.forHit,\n }),\n label: labels[i],\n };\n });\n}\n"],"mappings":";;;;;;;;;;AAyBA,SAAS,sBAAsB,IAAwB;AACrD,KAAI;EACF,MAAM,UAAU,KAAK,MAAM,GAAG;AAC9B,SACE,OAAO,YAAY,YACnB,YAAY,QACZ,QAAQ,YAAY,QACpB,OAAO,QAAQ,YAAY,YAC3B,OAAO,QAAQ,SAAS;SAEpB;AACN,SAAO;;;;;;;;AASX,SAAgB,sBACd,YACA,SAKiB;CACjB,MAAM,UACJ,SAAS,YAAY,KAAA,IACjB,KAAA,IACA,MAAM,QAAQ,QAAQ,QAAQ,GAC5B,QAAQ,UACR,CAAC,QAAQ,QAAQ;CACzB,MAAM,WAAW,WAAW,mBAAmB;EAC7C,MAAM;EACN,SAAS,SAAS,WAAW;EAC7B;EACA,SAAS;GACP,EAAE,aAAa,GAAGA,gCAAAA,WAAW,WAAW,QAAQ,EAAE;GAClD,EAAE,aAAa,GAAGA,gCAAAA,WAAW,iBAAiB,QAAQ,EAAE;GACxD,EAAE,MAAMA,gCAAAA,WAAW,OAAO;GAC3B;EACF,CAAC;CACF,MAAM,YAAY,SAAS;AAC3B,QAAO,SAAS,QAAQ,MAAM;AAC5B,OAAK,EAAE,MAAM,UAAU,OAAO,EAAG,QAAO;AACxC,MAAI,cAAc,KAAA,KAAa,CAAC,UAAU,EAAE,OAAO,KAAK,CAAE,QAAO;AACjE,MAAI,CAAC,sBAAsB,EAAE,OAAO,GAAG,CAAE,QAAO;AAChD,MAAI,EAAE,MAAM,MAAM,MAAM,CAAC,sBAAsB,EAAE,OAAO,GAAG,CAAC,CAAE,QAAO;AACrE,SAAO;GACP;;;;;;;AAQJ,SAAgB,yBACd,UACA,cACuB;AACvB,KAAI,SAAS,WAAW,EAAG,QAAO,EAAE;CAOpC,MAAM,SAASC,+BAAAA,qBALU,SAAS,KAAK,aAAa;EAClD,MAAM,QAAQ,OAAO;EACrB,YAAY,QAAQ,MAAM,KAAK,OAAO,EAAE,MAAM,EAAE,OAAO,MAAM,EAAE;EAC/D,gBAAgB,QAAQ;EACzB,EAAE,EAC0C,aAAa;AAE1D,QAAO,SAAS,KAAK,SAAS,MAA4B;EACxD,MAAM,OAAqC,QAAQ,MAAM,KAAK,UAAU;GACtE,MAAM;GACN,QAAQ,KAAK,OAAO;GACrB,EAAE;AACH,SAAO;GACL,MAAA,GAAA,gCAAA,qBAAyB,QAAQ,OAAO,IAAI;IAC1C;IACA,gBAAgB,QAAQ,gBAAgB;IACzC,CAAC;GACF,OAAO,OAAO;GACf;GACD"}
|
|
@@ -34,10 +34,10 @@ function findEnrichmentColumns(collection, options) {
|
|
|
34
34
|
});
|
|
35
35
|
const predicate = options?.predicate;
|
|
36
36
|
return variants.filter((v) => {
|
|
37
|
-
if (v.path
|
|
37
|
+
if ((v.path?.length ?? 0) === 0) return false;
|
|
38
38
|
if (predicate !== void 0 && !predicate(v.column.spec)) return false;
|
|
39
39
|
if (!isGloballyAddressable(v.column.id)) return false;
|
|
40
|
-
if (v.path
|
|
40
|
+
if (v.path?.some((p) => !isGloballyAddressable(p.linker.id))) return false;
|
|
41
41
|
return true;
|
|
42
42
|
});
|
|
43
43
|
}
|
|
@@ -50,18 +50,18 @@ function enrichmentVariantsToRefs(variants, labelOptions) {
|
|
|
50
50
|
if (variants.length === 0) return [];
|
|
51
51
|
const labels = deriveDistinctLabels(variants.map((variant) => ({
|
|
52
52
|
spec: variant.column.spec,
|
|
53
|
-
linkerPath: variant.path
|
|
53
|
+
linkerPath: variant.path?.map((p) => ({ spec: p.linker.spec })),
|
|
54
54
|
qualifications: variant.qualifications
|
|
55
55
|
})), labelOptions);
|
|
56
56
|
return variants.map((variant, i) => {
|
|
57
|
-
const path = variant.path
|
|
57
|
+
const path = variant.path?.map((step) => ({
|
|
58
58
|
type: "linker",
|
|
59
59
|
linker: step.linker.id
|
|
60
60
|
}));
|
|
61
61
|
return {
|
|
62
62
|
ref: createEnrichmentRef(variant.column.id, {
|
|
63
63
|
path,
|
|
64
|
-
qualifications: variant.qualifications
|
|
64
|
+
qualifications: variant.qualifications?.forHit
|
|
65
65
|
}),
|
|
66
66
|
label: labels[i]
|
|
67
67
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enrichment_discovery.js","names":[],"sources":["../../../src/components/PlDatasetSelector/enrichment_discovery.ts"],"sourcesContent":["import { Annotation, createEnrichmentRef } from \"@milaboratories/pl-model-common\";\nimport type {\n EnrichmentStep,\n LabeledEnrichmentRef,\n LabeledEnrichmentRefs,\n MultiColumnSelector,\n PObjectId,\n PObjectSpec,\n} from \"@milaboratories/pl-model-common\";\nimport type {\n AnchoredColumnCollection,\n ColumnVariant,\n} from \"../../columns/column_collection_builder\";\nimport {\n deriveDistinctLabels,\n type DeriveLabelsOptions,\n type Entry,\n} from \"../../labels/derive_distinct_labels\";\n\n/**\n * True for global-form ids — `canonicalize({__isRef: true, blockId, name})` —\n * which the workflow can resolve via bquery. Local-form ids (`resolvePath`)\n * fail this check and are excluded from auto-discovery; prerun/outputs hops\n * must be supplied as resolved `{spec, data}` instead.\n */\nfunction isGloballyAddressable(id: PObjectId): boolean {\n try {\n const decoded = JSON.parse(id);\n return (\n typeof decoded === \"object\" &&\n decoded !== null &&\n decoded.__isRef === true &&\n typeof decoded.blockId === \"string\" &&\n typeof decoded.name === \"string\"\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Linker-reached hits attached to the anchor primary. Drops zero-hop variants\n * (filters / the primary itself) and structural hits (subset, linker, label\n * columns). Narrow further with `include` selectors or a `predicate`.\n */\nexport function findEnrichmentColumns(\n collection: AnchoredColumnCollection,\n options?: {\n maxHops?: number;\n include?: MultiColumnSelector | MultiColumnSelector[];\n predicate?: (spec: PObjectSpec) => boolean;\n },\n): ColumnVariant[] {\n const include =\n options?.include === undefined\n ? undefined\n : Array.isArray(options.include)\n ? options.include\n : [options.include];\n const variants = collection.findColumnVariants({\n mode: \"enrichment\",\n maxHops: options?.maxHops ?? 4,\n include,\n exclude: [\n { annotations: { [Annotation.IsSubset]: \"true\" } },\n { annotations: { [Annotation.IsLinkerColumn]: \"true\" } },\n { name: Annotation.Label },\n ],\n });\n const predicate = options?.predicate;\n return variants.filter((v) => {\n if (v.path
|
|
1
|
+
{"version":3,"file":"enrichment_discovery.js","names":[],"sources":["../../../src/components/PlDatasetSelector/enrichment_discovery.ts"],"sourcesContent":["import { Annotation, createEnrichmentRef } from \"@milaboratories/pl-model-common\";\nimport type {\n EnrichmentStep,\n LabeledEnrichmentRef,\n LabeledEnrichmentRefs,\n MultiColumnSelector,\n PObjectId,\n PObjectSpec,\n} from \"@milaboratories/pl-model-common\";\nimport type {\n AnchoredColumnCollection,\n ColumnVariant,\n} from \"../../columns/column_collection_builder\";\nimport {\n deriveDistinctLabels,\n type DeriveLabelsOptions,\n type Entry,\n} from \"../../labels/derive_distinct_labels\";\n\n/**\n * True for global-form ids — `canonicalize({__isRef: true, blockId, name})` —\n * which the workflow can resolve via bquery. Local-form ids (`resolvePath`)\n * fail this check and are excluded from auto-discovery; prerun/outputs hops\n * must be supplied as resolved `{spec, data}` instead.\n */\nfunction isGloballyAddressable(id: PObjectId): boolean {\n try {\n const decoded = JSON.parse(id);\n return (\n typeof decoded === \"object\" &&\n decoded !== null &&\n decoded.__isRef === true &&\n typeof decoded.blockId === \"string\" &&\n typeof decoded.name === \"string\"\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Linker-reached hits attached to the anchor primary. Drops zero-hop variants\n * (filters / the primary itself) and structural hits (subset, linker, label\n * columns). Narrow further with `include` selectors or a `predicate`.\n */\nexport function findEnrichmentColumns(\n collection: AnchoredColumnCollection,\n options?: {\n maxHops?: number;\n include?: MultiColumnSelector | MultiColumnSelector[];\n predicate?: (spec: PObjectSpec) => boolean;\n },\n): ColumnVariant[] {\n const include =\n options?.include === undefined\n ? undefined\n : Array.isArray(options.include)\n ? options.include\n : [options.include];\n const variants = collection.findColumnVariants({\n mode: \"enrichment\",\n maxHops: options?.maxHops ?? 4,\n include,\n exclude: [\n { annotations: { [Annotation.IsSubset]: \"true\" } },\n { annotations: { [Annotation.IsLinkerColumn]: \"true\" } },\n { name: Annotation.Label },\n ],\n });\n const predicate = options?.predicate;\n return variants.filter((v) => {\n if ((v.path?.length ?? 0) === 0) return false;\n if (predicate !== undefined && !predicate(v.column.spec)) return false;\n if (!isGloballyAddressable(v.column.id)) return false;\n if (v.path?.some((p) => !isGloballyAddressable(p.linker.id))) return false;\n return true;\n });\n}\n\n/**\n * Pair each variant with a path-disambiguated label (so export headers stay\n * unique) and carry hit/linker `PObjectId`s through verbatim. Propagates\n * `qualifications.forHit`; `forQueries` is re-derived by the table builder.\n */\nexport function enrichmentVariantsToRefs(\n variants: ColumnVariant[],\n labelOptions?: DeriveLabelsOptions,\n): LabeledEnrichmentRefs {\n if (variants.length === 0) return [];\n\n const entries: Entry[] = variants.map((variant) => ({\n spec: variant.column.spec,\n linkerPath: variant.path?.map((p) => ({ spec: p.linker.spec })),\n qualifications: variant.qualifications,\n }));\n const labels = deriveDistinctLabels(entries, labelOptions);\n\n return variants.map((variant, i): LabeledEnrichmentRef => {\n const path: undefined | EnrichmentStep[] = variant.path?.map((step) => ({\n type: \"linker\",\n linker: step.linker.id,\n }));\n return {\n ref: createEnrichmentRef(variant.column.id, {\n path,\n qualifications: variant.qualifications?.forHit,\n }),\n label: labels[i],\n };\n });\n}\n"],"mappings":";;;;;;;;;AAyBA,SAAS,sBAAsB,IAAwB;AACrD,KAAI;EACF,MAAM,UAAU,KAAK,MAAM,GAAG;AAC9B,SACE,OAAO,YAAY,YACnB,YAAY,QACZ,QAAQ,YAAY,QACpB,OAAO,QAAQ,YAAY,YAC3B,OAAO,QAAQ,SAAS;SAEpB;AACN,SAAO;;;;;;;;AASX,SAAgB,sBACd,YACA,SAKiB;CACjB,MAAM,UACJ,SAAS,YAAY,KAAA,IACjB,KAAA,IACA,MAAM,QAAQ,QAAQ,QAAQ,GAC5B,QAAQ,UACR,CAAC,QAAQ,QAAQ;CACzB,MAAM,WAAW,WAAW,mBAAmB;EAC7C,MAAM;EACN,SAAS,SAAS,WAAW;EAC7B;EACA,SAAS;GACP,EAAE,aAAa,GAAG,WAAW,WAAW,QAAQ,EAAE;GAClD,EAAE,aAAa,GAAG,WAAW,iBAAiB,QAAQ,EAAE;GACxD,EAAE,MAAM,WAAW,OAAO;GAC3B;EACF,CAAC;CACF,MAAM,YAAY,SAAS;AAC3B,QAAO,SAAS,QAAQ,MAAM;AAC5B,OAAK,EAAE,MAAM,UAAU,OAAO,EAAG,QAAO;AACxC,MAAI,cAAc,KAAA,KAAa,CAAC,UAAU,EAAE,OAAO,KAAK,CAAE,QAAO;AACjE,MAAI,CAAC,sBAAsB,EAAE,OAAO,GAAG,CAAE,QAAO;AAChD,MAAI,EAAE,MAAM,MAAM,MAAM,CAAC,sBAAsB,EAAE,OAAO,GAAG,CAAC,CAAE,QAAO;AACrE,SAAO;GACP;;;;;;;AAQJ,SAAgB,yBACd,UACA,cACuB;AACvB,KAAI,SAAS,WAAW,EAAG,QAAO,EAAE;CAOpC,MAAM,SAAS,qBALU,SAAS,KAAK,aAAa;EAClD,MAAM,QAAQ,OAAO;EACrB,YAAY,QAAQ,MAAM,KAAK,OAAO,EAAE,MAAM,EAAE,OAAO,MAAM,EAAE;EAC/D,gBAAgB,QAAQ;EACzB,EAAE,EAC0C,aAAa;AAE1D,QAAO,SAAS,KAAK,SAAS,MAA4B;EACxD,MAAM,OAAqC,QAAQ,MAAM,KAAK,UAAU;GACtE,MAAM;GACN,QAAQ,KAAK,OAAO;GACrB,EAAE;AACH,SAAO;GACL,KAAK,oBAAoB,QAAQ,OAAO,IAAI;IAC1C;IACA,gBAAgB,QAAQ,gBAAgB;IACzC,CAAC;GACF,OAAO,OAAO;GACf;GACD"}
|
|
@@ -5,7 +5,7 @@ import { AnnotationScriptUi, AnnotationStepUi, AnyForm, FilterUi, FilterUiOfType
|
|
|
5
5
|
import { DatasetOption, DatasetSelection, createDatasetSelection, isDatasetSelection } from "./PlDatasetSelector/dataset_selection.js";
|
|
6
6
|
import { buildRefMap, filterMatchesToOptions, findFilterColumns } from "./PlDatasetSelector/filter_discovery.js";
|
|
7
7
|
import { BuildDatasetOptions, buildDatasetOptions } from "./PlDatasetSelector/build_dataset_options.js";
|
|
8
|
-
import { PTableParamsV2, PlDataTableFilterMeta, PlDataTableFilterSpecLeaf, PlDataTableFilters, PlDataTableFiltersWithMeta, PlDataTableGridStateCore, PlDataTableModel, PlDataTableSheet, PlDataTableSheetState, PlDataTableStateV2CacheEntry, PlDataTableStateV2Normalized,
|
|
8
|
+
import { PTableParamsV2, PlDataTableFilterMeta, PlDataTableFilterSpecLeaf, PlDataTableFilters, PlDataTableFiltersWithMeta, PlDataTableGridStateCore, PlDataTableModel, PlDataTableSheet, PlDataTableSheetState, PlDataTableStateV2CacheEntry, PlDataTableStateV2Normalized, PlTableColumnIdJson } from "./PlDataTable/typesV6.js";
|
|
9
9
|
import { PlDataTableStateV2, createDefaultPTableParams, createPlDataTableStateV2, upgradePlDataTableStateV2 } from "./PlDataTable/state-migration.js";
|
|
10
10
|
import { createPlDataTableSheet } from "./PlDataTable/createPlDataTableSheet.js";
|
|
11
11
|
import { createPlDataTableV2 } from "./PlDataTable/createPlDataTable/createPlDataTableV2.js";
|
package/dist/index.d.ts
CHANGED
|
@@ -51,7 +51,7 @@ import { AnnotationScriptUi, AnnotationStepUi, AnyForm, FilterUi, FilterUiOfType
|
|
|
51
51
|
import { DatasetOption, DatasetSelection, createDatasetSelection, isDatasetSelection } from "./components/PlDatasetSelector/dataset_selection.js";
|
|
52
52
|
import { buildRefMap, filterMatchesToOptions, findFilterColumns } from "./components/PlDatasetSelector/filter_discovery.js";
|
|
53
53
|
import { BuildDatasetOptions, buildDatasetOptions } from "./components/PlDatasetSelector/build_dataset_options.js";
|
|
54
|
-
import { PTableParamsV2, PlDataTableFilterMeta, PlDataTableFilterSpecLeaf, PlDataTableFilters, PlDataTableFiltersWithMeta, PlDataTableGridStateCore, PlDataTableModel, PlDataTableSheet, PlDataTableSheetState, PlDataTableStateV2CacheEntry, PlDataTableStateV2Normalized,
|
|
54
|
+
import { PTableParamsV2, PlDataTableFilterMeta, PlDataTableFilterSpecLeaf, PlDataTableFilters, PlDataTableFiltersWithMeta, PlDataTableGridStateCore, PlDataTableModel, PlDataTableSheet, PlDataTableSheetState, PlDataTableStateV2CacheEntry, PlDataTableStateV2Normalized, PlTableColumnIdJson } from "./components/PlDataTable/typesV6.js";
|
|
55
55
|
import { PlDataTableStateV2, createDefaultPTableParams, createPlDataTableStateV2, upgradePlDataTableStateV2 } from "./components/PlDataTable/state-migration.js";
|
|
56
56
|
import { createPlDataTableSheet } from "./components/PlDataTable/createPlDataTableSheet.js";
|
|
57
57
|
import { createPlDataTableV2 } from "./components/PlDataTable/createPlDataTable/createPlDataTableV2.js";
|
|
@@ -74,4 +74,4 @@ import { getService } from "./services/get_services.js";
|
|
|
74
74
|
import { getEnvironmentValue } from "./env_value.js";
|
|
75
75
|
export * from "@milaboratories/pl-model-common";
|
|
76
76
|
export * from "@milaboratories/pl-error-like";
|
|
77
|
-
export { ActAnd, ActExtractArchiveAndGetURL, ActFlatten, ActGetBlobContent, ActGetBlobContentAsJson, ActGetBlobContentAsString, ActGetDownloadedBlobContent, ActGetField, ActGetFromCtx, ActGetImmediate, ActGetLastLogs, ActGetLogHandle, ActGetOnDemandBlobContent, ActGetProgressLog, ActGetProgressLogWithInfo, ActGetResourceField, ActGetResourceValueAsJson, ActImportProgress, ActIsEmpty, ActIsolate, ActMakeArray, ActMakeObject, ActMapArrayValues, ActMapRecordValues, ActMapResourceFields, ActNot, ActOr, ActionResult, AnchorEntry, AnchoredBuildOptions, AnchoredColumnCollection, AnchoredFindColumnsOptions, AndFilter, AnnotationFilter, AnnotationMode, AnnotationScript, AnnotationScript2, AnnotationScriptUi, AnnotationSpec, AnnotationSpecUi, AnnotationStep, AnnotationStepUi, AnyForm, Args, ArrayColumnProvider, AxesVault, AxisLabelProvider, BLOCK_SERVICE_FLAGS, BLOCK_STORAGE_FACADE_VERSION, BlockApiV1, BlockApiV2, BlockConfig, BlockConfigV3, BlockConfigV4, BlockDefaultModelServices, BlockDefaultUiServices, BlockModel, BlockModelInfo, BlockModelV3, BlockRenderCtx, BlockServiceFlags, BlockStatePatch, type BlockStorage, BlockStorageFacade, BlockStorageFacadeCallbacks, BlockStorageFacadeHandles, type BlockStorageSchemaVersion, BuildDatasetOptions, BuildOptions, CancelSubscription, Cfg, CfgAnd, CfgBlobContent, CfgBlobContentAsJson, CfgBlobContentAsString, CfgDownloadedBlobContent, CfgExtractArchiveAndGetURL, CfgFlatten, CfgGetFromCtx, CfgGetJsonField, CfgGetResourceField, CfgImmediate, CfgImportProgress, CfgIsEmpty, CfgIsolate, CfgLastLogs, CfgLogHandle, CfgMakeArray, CfgMakeObject, CfgMapArrayValues, CfgMapRecordValues, CfgMapResourceFields, CfgNot, CfgOnDemandBlobContent, CfgOr, CfgProgressLog, CfgProgressLogWithInfo, CfgRenderingMode, CfgResourceValueAsJson, Checked, ColumnCollection, ColumnCollectionBuilder, ColumnData, ColumnDataStatus, ColumnMatch, ColumnMatcher, ColumnOrderRule, ColumnProvider, ColumnSelector, ColumnSnapshot, ColumnSnapshotProvider, ColumnSource, ColumnVariant, ColumnVisibilityRule, ColumnsDisplayOptions, ColumnsSelectorConfig, CommonFieldTraverseOps, CommonTraversalOps, ConfAction, ConfigRenderLambda, ConfigRenderLambdaFlags, ConfigResult, CurrentSdkInfo, DataModel, DataModelBuilder, DatasetOption, DatasetSelection, DeriveHref, DeriveLabelsFormatters, DeriveLabelsOptions, Entry, ExpandByPartitionOpts, ExpandByPartitionResult, ExpressionSpec, ExtractAction, ExtractFunctionHandleReturn, ExtractFutureRefType, FieldTraversalStep, FieldType, FilterSpec, FilterSpecLeaf, FilterSpecNode, FilterSpecOfType, FilterSpecType, FilterSpecUi, FilterUi, FilterUiOfType, FilterUiType, FindColumnsOptions, FormField, FutureRef, GetFieldStep, InferArgsType, InferBlockState, InferBlockStatePatch, InferDataType, InferFactoryData, InferFactoryModelServices, InferFactoryOutputs, InferFactoryParams, InferFactoryUiServices, InferHrefType, InferOutputType, InferOutputsFromConfigs, InferOutputsFromLambdas, InferOutputsType, InferPluginData, InferPluginHandle, InferPluginHandles, InferPluginNames, InferRenderFunctionReturn, InferUiState, InferVarTypeSafe, IsNA, It, internal_d_exports as JsRenderInternal, DeriveLabelsOptions as LabelDerivationOps, LinkerStep, Log10, MainOutputs, MatchQualifications, MatchVariant, MatchingMode, type MigrateBlockStorageConfig, type MigrationFailure, type MigrationResult, type MigrationSuccess, ModelServices, type MutateStoragePayload, NotFilter, NumericalComparisonFilter, OptionalPlResourceEntry, OrFilter, OutputColumnProvider, OutputColumnProviderOpts, OutputError, PColumnCollection, PColumnDataUniversal, PColumnEntryUniversal, PColumnEntryWithLabel, PColumnKeyList, PColumnLazyUniversal, PColumnLazyWithLabel, PColumnPredicate, PColumnResourceMapData, PColumnResourceMapEntry, PFrameImpl, POCExtractAction, PTableKey, PTableParamsV2, type ParamsInput, Patch, PatternFilter, PatternPredicate, PatternPredicateContainSubsequence, PatternPredicateEquals, PlDataTableFilterMeta, PlDataTableFilterSpecLeaf, PlDataTableFilters, PlDataTableFiltersWithMeta, PlDataTableGridStateCore, PlDataTableModel, PlDataTableSheet, PlDataTableSheetState, PlDataTableStateV2, PlDataTableStateV2CacheEntry, PlDataTableStateV2Normalized, PlMultiSequenceAlignmentColorSchemeOption, PlMultiSequenceAlignmentModel, PlMultiSequenceAlignmentSettings, PlMultiSequenceAlignmentWidget, PlResourceEntry, PlSelectionModel,
|
|
77
|
+
export { ActAnd, ActExtractArchiveAndGetURL, ActFlatten, ActGetBlobContent, ActGetBlobContentAsJson, ActGetBlobContentAsString, ActGetDownloadedBlobContent, ActGetField, ActGetFromCtx, ActGetImmediate, ActGetLastLogs, ActGetLogHandle, ActGetOnDemandBlobContent, ActGetProgressLog, ActGetProgressLogWithInfo, ActGetResourceField, ActGetResourceValueAsJson, ActImportProgress, ActIsEmpty, ActIsolate, ActMakeArray, ActMakeObject, ActMapArrayValues, ActMapRecordValues, ActMapResourceFields, ActNot, ActOr, ActionResult, AnchorEntry, AnchoredBuildOptions, AnchoredColumnCollection, AnchoredFindColumnsOptions, AndFilter, AnnotationFilter, AnnotationMode, AnnotationScript, AnnotationScript2, AnnotationScriptUi, AnnotationSpec, AnnotationSpecUi, AnnotationStep, AnnotationStepUi, AnyForm, Args, ArrayColumnProvider, AxesVault, AxisLabelProvider, BLOCK_SERVICE_FLAGS, BLOCK_STORAGE_FACADE_VERSION, BlockApiV1, BlockApiV2, BlockConfig, BlockConfigV3, BlockConfigV4, BlockDefaultModelServices, BlockDefaultUiServices, BlockModel, BlockModelInfo, BlockModelV3, BlockRenderCtx, BlockServiceFlags, BlockStatePatch, type BlockStorage, BlockStorageFacade, BlockStorageFacadeCallbacks, BlockStorageFacadeHandles, type BlockStorageSchemaVersion, BuildDatasetOptions, BuildOptions, CancelSubscription, Cfg, CfgAnd, CfgBlobContent, CfgBlobContentAsJson, CfgBlobContentAsString, CfgDownloadedBlobContent, CfgExtractArchiveAndGetURL, CfgFlatten, CfgGetFromCtx, CfgGetJsonField, CfgGetResourceField, CfgImmediate, CfgImportProgress, CfgIsEmpty, CfgIsolate, CfgLastLogs, CfgLogHandle, CfgMakeArray, CfgMakeObject, CfgMapArrayValues, CfgMapRecordValues, CfgMapResourceFields, CfgNot, CfgOnDemandBlobContent, CfgOr, CfgProgressLog, CfgProgressLogWithInfo, CfgRenderingMode, CfgResourceValueAsJson, Checked, ColumnCollection, ColumnCollectionBuilder, ColumnData, ColumnDataStatus, ColumnMatch, ColumnMatcher, ColumnOrderRule, ColumnProvider, ColumnSelector, ColumnSnapshot, ColumnSnapshotProvider, ColumnSource, ColumnVariant, ColumnVisibilityRule, ColumnsDisplayOptions, ColumnsSelectorConfig, CommonFieldTraverseOps, CommonTraversalOps, ConfAction, ConfigRenderLambda, ConfigRenderLambdaFlags, ConfigResult, CurrentSdkInfo, DataModel, DataModelBuilder, DatasetOption, DatasetSelection, DeriveHref, DeriveLabelsFormatters, DeriveLabelsOptions, Entry, ExpandByPartitionOpts, ExpandByPartitionResult, ExpressionSpec, ExtractAction, ExtractFunctionHandleReturn, ExtractFutureRefType, FieldTraversalStep, FieldType, FilterSpec, FilterSpecLeaf, FilterSpecNode, FilterSpecOfType, FilterSpecType, FilterSpecUi, FilterUi, FilterUiOfType, FilterUiType, FindColumnsOptions, FormField, FutureRef, GetFieldStep, InferArgsType, InferBlockState, InferBlockStatePatch, InferDataType, InferFactoryData, InferFactoryModelServices, InferFactoryOutputs, InferFactoryParams, InferFactoryUiServices, InferHrefType, InferOutputType, InferOutputsFromConfigs, InferOutputsFromLambdas, InferOutputsType, InferPluginData, InferPluginHandle, InferPluginHandles, InferPluginNames, InferRenderFunctionReturn, InferUiState, InferVarTypeSafe, IsNA, It, internal_d_exports as JsRenderInternal, DeriveLabelsOptions as LabelDerivationOps, LinkerStep, Log10, MainOutputs, MatchQualifications, MatchVariant, MatchingMode, type MigrateBlockStorageConfig, type MigrationFailure, type MigrationResult, type MigrationSuccess, ModelServices, type MutateStoragePayload, NotFilter, NumericalComparisonFilter, OptionalPlResourceEntry, OrFilter, OutputColumnProvider, OutputColumnProviderOpts, OutputError, PColumnCollection, PColumnDataUniversal, PColumnEntryUniversal, PColumnEntryWithLabel, PColumnKeyList, PColumnLazyUniversal, PColumnLazyWithLabel, PColumnPredicate, PColumnResourceMapData, PColumnResourceMapEntry, PFrameImpl, POCExtractAction, PTableKey, PTableParamsV2, type ParamsInput, Patch, PatternFilter, PatternPredicate, PatternPredicateContainSubsequence, PatternPredicateEquals, PlDataTableFilterMeta, PlDataTableFilterSpecLeaf, PlDataTableFilters, PlDataTableFiltersWithMeta, PlDataTableGridStateCore, PlDataTableModel, PlDataTableSheet, PlDataTableSheetState, PlDataTableStateV2, PlDataTableStateV2CacheEntry, PlDataTableStateV2Normalized, PlMultiSequenceAlignmentColorSchemeOption, PlMultiSequenceAlignmentModel, PlMultiSequenceAlignmentSettings, PlMultiSequenceAlignmentWidget, PlResourceEntry, PlSelectionModel, PlTableColumnIdJson, Platforma, PlatformaApiVersion, PlatformaExtended, PlatformaFactory, PlatformaSDKVersion, PlatformaV1, PlatformaV2, PlatformaV3, type PluginConfig, type PluginData, PluginDataModel, PluginDataModelBuilder, type PluginDataModelVersions, type PluginFactory, PluginFactoryLike, PluginHandle, PluginInstance, PluginModel, type PluginName, type PluginOutputs, type PluginParams, type PluginRecord, type PluginRegistry, PluginRenderCtx, PrimitiveOrConfig, PrimitiveToCfg, RT_BINARY_PARTITIONED, RT_BINARY_SUPER_PARTITIONED, RT_JSON_PARTITIONED, RT_JSON_SUPER_PARTITIONED, RT_PARQUET_PARTITIONED, RT_PARQUET_SUPER_PARTITIONED, RT_RESOURCE_MAP, RT_RESOURCE_MAP_PARTITIONED, RelaxedAxisSelector, RelaxedColumnSelector, RelaxedRecord, RelaxedStringMatchers, RenderCtx, RenderCtxBase, RenderCtxLegacy, RenderFunction, RenderFunctionLegacy, ResolveCfgType, ResolveModelServices, ResolveUiServices, ResourceTraversalOps, ResourceType, ResultPool, ResultPoolColumnSnapshotProvider, SdkInfo, ServiceProxy, SimplifiedPColumnSpec, SimplifiedUniversalPColumnEntry, SnapshotColumnProvider, SortedCumulativeSum, Entry as SpecExtractorResult, SplitAxis, StagingOutputs, StdCtx, StdCtxArgsOnly, StringMatcher, TooltipEntry, Trace, TraceEntry, TransformedColumn, TreeNodeAccessor, TypeField, TypeFieldRecord, TypeForm, TypeToLiteral, TypedConfig, TypedConfigOrConfigLambda, TypedConfigOrString, UiServices, UiState, Unionize, UniversalColumnOption, UnwrapFutureRef, ValueRank, type VersionedData, allPColumnsReady, and, blockServiceNames, buildDatasetOptions, buildRefMap, buildServices, collectCtxColumnSnapshotProviders, compileAnnotationScript, compileFilter, compileFilters, convertColumnSelectorToMultiColumnSelector, convertFilterSpecsToExpressionSpecs, convertFilterUiToExpressionImpl, convertFilterUiToExpressions, convertOrParsePColumnData, convertRelaxedAxisSelectorToMultiAxisSelector, convertRelaxedColumnSelectorToMultiColumnSelector, createBlockStorage, createColumnSnapshot, createDatasetSelection, createDefaultPTableParams, createPFrameForGraphs, createPlDataTable, createPlDataTableOptionsV3, createPlDataTableSheet, createPlDataTableStateV2, createPlDataTableV2, createPlDataTableV3, createPlSelectionModel, createReadyColumnData, createRowSelectionColumn, createServiceProxy, deriveDataFromStorage, deriveDistinctLabels, deriveDistinctTooltips, deriveLabels, discoverTableColumnSnaphots, distillFilterSpec, downgradeCfgOrLambda, enrichCompatible, expandByPartition, extractArchiveAndGetURL, extractConfig, filterDataInfoEntries, filterMatchesToOptions, filterSpecToSpecQueryExpr, findFilterColumns, flatten, fromPlOption, fromPlRef, getAllRelatedColumns, getAvailableWithLinkersAxes, getAxisUniqueValues, getBlobContent, getBlobContentAsJson, getBlobContentAsString, getColumnOrAxisValueLabelsId, getColumnSpecById, getColumnUniqueValues, getColumnsFull, getDownloadedBlobContent, getEffectiveVisibility, getEnvironmentValue, getFromCfg, getImmediate, getImportProgress, getJsonField, getLastLogs, getLogHandle, getOnDemandBlobContent, getOrderPriority, getPartitionKeysList, getPlatformaApiVersion, getPluginData, getProgressLog, getProgressLogWithInfo, getRawPlatformaInstance, getRelatedColumns, getRequestColumnsFromSelectedSources, getResourceField, getResourceValueAsJson, getService, getSingleColumnData, getStorageData, getUniquePartitionKeys, getUniqueSourceValuesWithLabels, ifDef, isBlockStorage, isColumnHidden, isColumnOptional, isColumnSnapshotProvider, isConfigLambda, isDatasetSelection, isEmpty, isHiddenFromGraphColumn, isHiddenFromUIColumn, isPColumnReady, isPluginOutputKey, isolate, makeArray, makeObject, mapArrayValues, mapRecordValues, mapResourceFields, migrateBlockStorage, normalizeBlockStorage, not, or, parsePColumnData, parseResourceMap, pluginOutputKey, pluginOutputPrefix, readOutput, registerFacadeCallbacks, toColumnSnapshotProvider, unreachable, updateStorageData, upgradePlDataTableStateV2, wrapOutputs };
|
|
@@ -136,7 +136,7 @@ function enrichRecord(value, index, options) {
|
|
|
136
136
|
});
|
|
137
137
|
}
|
|
138
138
|
}
|
|
139
|
-
if (qualifications !== void 0) {
|
|
139
|
+
if (qualifications !== void 0 && qualifications.forQueries !== void 0) {
|
|
140
140
|
for (const [anchorId, qs] of Object.entries(qualifications.forQueries)) {
|
|
141
141
|
if (qs.length === 0) continue;
|
|
142
142
|
const anchorText = (0, es_toolkit.isFunction)(formatters?.anchorQualification) ? formatters.anchorQualification(anchorId, qs, spec, index) : `[${anchorId}: ${formatQualifications(qs)}]`;
|
|
@@ -147,7 +147,7 @@ function enrichRecord(value, index, options) {
|
|
|
147
147
|
importance: -11
|
|
148
148
|
});
|
|
149
149
|
}
|
|
150
|
-
if (qualifications.forHit.length > 0) {
|
|
150
|
+
if (qualifications.forHit !== void 0 && qualifications.forHit.length > 0) {
|
|
151
151
|
const hitText = (0, es_toolkit.isFunction)(formatters?.hitQualification) ? formatters.hitQualification(qualifications.forHit, spec, index) : `[${formatQualifications(qualifications.forHit)}]`;
|
|
152
152
|
if (!(0, es_toolkit.isNil)(hitText)) trace.push({
|
|
153
153
|
type: HIT_QUAL_TYPE,
|