@platforma-sdk/model 1.45.0 → 1.45.17

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.
Files changed (34) hide show
  1. package/dist/components/PFrameForGraphs.cjs +5 -22
  2. package/dist/components/PFrameForGraphs.cjs.map +1 -1
  3. package/dist/components/PFrameForGraphs.d.ts +0 -2
  4. package/dist/components/PFrameForGraphs.d.ts.map +1 -1
  5. package/dist/components/PFrameForGraphs.js +7 -22
  6. package/dist/components/PFrameForGraphs.js.map +1 -1
  7. package/dist/components/PlDataTable.cjs +6 -38
  8. package/dist/components/PlDataTable.cjs.map +1 -1
  9. package/dist/components/PlDataTable.d.ts +1 -4
  10. package/dist/components/PlDataTable.d.ts.map +1 -1
  11. package/dist/components/PlDataTable.js +7 -38
  12. package/dist/components/PlDataTable.js.map +1 -1
  13. package/dist/index.cjs +2 -3
  14. package/dist/index.cjs.map +1 -1
  15. package/dist/index.js +3 -3
  16. package/dist/package.json.cjs +1 -1
  17. package/dist/package.json.js +1 -1
  18. package/dist/render/api.cjs +7 -1
  19. package/dist/render/api.cjs.map +1 -1
  20. package/dist/render/api.d.ts +3 -3
  21. package/dist/render/api.d.ts.map +1 -1
  22. package/dist/render/api.js +7 -1
  23. package/dist/render/api.js.map +1 -1
  24. package/dist/render/util/pcolumn_data.cjs +21 -0
  25. package/dist/render/util/pcolumn_data.cjs.map +1 -1
  26. package/dist/render/util/pcolumn_data.d.ts +4 -1
  27. package/dist/render/util/pcolumn_data.d.ts.map +1 -1
  28. package/dist/render/util/pcolumn_data.js +21 -2
  29. package/dist/render/util/pcolumn_data.js.map +1 -1
  30. package/package.json +4 -4
  31. package/src/components/PFrameForGraphs.ts +5 -23
  32. package/src/components/PlDataTable.ts +5 -40
  33. package/src/render/api.ts +9 -5
  34. package/src/render/util/pcolumn_data.ts +24 -0
@@ -2,9 +2,9 @@
2
2
 
3
3
  var plModelCommon = require('@milaboratories/pl-model-common');
4
4
  require('canonicalize');
5
- var accessor = require('../render/accessor.cjs');
6
5
  var column_collection = require('../render/util/column_collection.cjs');
7
6
  require('../render/util/label.cjs');
7
+ var pcolumn_data = require('../render/util/pcolumn_data.cjs');
8
8
  var PlDataTable = require('./PlDataTable.cjs');
9
9
 
10
10
  /** Create id for column copy with added keys in axes domains */
@@ -141,21 +141,6 @@ function getAdditionalColumnsForColumn(blockAxes, column) {
141
141
  });
142
142
  return [column, ...additionalColumns];
143
143
  }
144
- function isColumnReady(c) {
145
- let ready = true;
146
- if (c.data instanceof accessor.TreeNodeAccessor) {
147
- ready = ready && c.data.getIsReadyOrError();
148
- }
149
- else if (plModelCommon.isDataInfo(c.data)) {
150
- plModelCommon.visitDataInfo(c.data, (v) => {
151
- ready = ready && v.getIsReadyOrError();
152
- });
153
- }
154
- return ready;
155
- }
156
- function allColumnsReady(columns) {
157
- return columns.every(isColumnReady);
158
- }
159
144
  /**
160
145
  The aim of createPFrameForGraphs: to create pframe with block’s columns and all compatible columns from result pool
161
146
  (including linker columns and all label columns).
@@ -175,7 +160,7 @@ function createPFrameForGraphs(ctx, blockColumns) {
175
160
  columns.addColumnProvider(ctx.resultPool);
176
161
  const allColumns = columns.getColumns((spec) => !isHiddenFromGraphColumn(spec), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? [];
177
162
  // if at least one column is not yet ready, we can't show the graph
178
- if (!allColumnsReady(allColumns)) {
163
+ if (!pcolumn_data.allPColumnsReady(allColumns)) {
179
164
  return undefined;
180
165
  }
181
166
  const allAxes = new Map(allColumns
@@ -188,7 +173,7 @@ function createPFrameForGraphs(ctx, blockColumns) {
188
173
  const extendedColumns = enrichCompatible(allAxes, allColumns);
189
174
  return ctx.createPFrame(extendedColumns);
190
175
  }
191
- if (!allColumnsReady(blockColumns)) {
176
+ if (!pcolumn_data.allPColumnsReady(blockColumns)) {
192
177
  return undefined;
193
178
  }
194
179
  // if current block has its own columns then take from result pool only compatible with them
@@ -220,7 +205,7 @@ function createPFrameForGraphs(ctx, blockColumns) {
220
205
  return Array.from(blockAxes.values()).some((selectorAxisSpec) => plModelCommon.matchAxisId(plModelCommon.getAxisId(selectorAxisSpec), axisId));
221
206
  }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => !PlDataTable.isLabelColumn(column.spec));
222
207
  // if at least one column is not yet ready, we can't show the graph
223
- if (!allColumnsReady(compatibleWithoutLabels)) {
208
+ if (!pcolumn_data.allPColumnsReady(compatibleWithoutLabels)) {
224
209
  return undefined;
225
210
  }
226
211
  // extend axes set for label columns request
@@ -241,7 +226,7 @@ function createPFrameForGraphs(ctx, blockColumns) {
241
226
  return Array.from(allAxes.values()).some((selectorAxisSpec) => plModelCommon.matchAxisId(plModelCommon.getAxisId(selectorAxisSpec), axisId));
242
227
  }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => PlDataTable.isLabelColumn(column.spec));
243
228
  // if at least one column is not yet ready, we can't show the graph
244
- if (!allColumnsReady(compatibleLabels)) {
229
+ if (!pcolumn_data.allPColumnsReady(compatibleLabels)) {
245
230
  return undefined;
246
231
  }
247
232
  const compatible = [...compatibleWithoutLabels, ...compatibleLabels];
@@ -250,10 +235,8 @@ function createPFrameForGraphs(ctx, blockColumns) {
250
235
  return ctx.createPFrame(extendedColumns);
251
236
  }
252
237
 
253
- exports.allColumnsReady = allColumnsReady;
254
238
  exports.createPFrameForGraphs = createPFrameForGraphs;
255
239
  exports.enrichCompatible = enrichCompatible;
256
240
  exports.getAvailableWithLinkersAxes = getAvailableWithLinkersAxes;
257
- exports.isColumnReady = isColumnReady;
258
241
  exports.isLinkerColumn = isLinkerColumn;
259
242
  //# sourceMappingURL=PFrameForGraphs.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"PFrameForGraphs.cjs","sources":["../../src/components/PFrameForGraphs.ts"],"sourcesContent":["import type {\n AxisId,\n AxisSpecNormalized,\n CanonicalizedJson,\n PColumn,\n PColumnSpec,\n PFrameHandle,\n PObjectId,\n} from '@milaboratories/pl-model-common';\nimport {\n canonicalizeJson,\n getAxisId,\n isDataInfo,\n matchAxisId,\n visitDataInfo,\n getColumnIdAndSpec,\n Annotation,\n readAnnotation,\n getNormalizedAxesList,\n stringifyJson,\n readAnnotationJson,\n LinkerMap,\n getArrayFromAxisTree,\n getAxesTree,\n} from '@milaboratories/pl-model-common';\nimport type { PColumnDataUniversal, RenderCtx } from '../render';\nimport { PColumnCollection, TreeNodeAccessor } from '../render';\nimport { isLabelColumn } from './PlDataTable';\n\n/** Create id for column copy with added keys in axes domains */\nconst colId = (id: PObjectId, domains: (Record<string, string> | undefined)[]) => {\n let wid = id.toString();\n domains?.forEach((domain) => {\n if (domain) {\n for (const [k, v] of Object.entries(domain)) {\n wid += k;\n wid += v;\n }\n }\n });\n return wid;\n};\n\n/** All combinations with 1 key from each list */\nfunction getKeysCombinations(idsLists: AxisId[][]) {\n if (!idsLists.length) {\n return [];\n }\n let result: AxisId[][] = [[]];\n idsLists.forEach((list) => {\n const nextResult: AxisId[][] = [];\n list.forEach((key) => {\n nextResult.push(...result.map((resultItem) => [...resultItem, key]));\n });\n result = nextResult;\n });\n return result;\n}\n\n/** Check if column is a linker column */\nexport function isLinkerColumn(column: PColumnSpec): boolean {\n return !!readAnnotationJson(column, Annotation.IsLinkerColumn);\n}\n\nfunction isHiddenFromGraphColumn(column: PColumnSpec): boolean {\n return !!readAnnotationJson(column, Annotation.HideDataFromGraphs);\n}\n\ntype AxesVault = Map<CanonicalizedJson<AxisId>, AxisSpecNormalized>;\n\nexport function getAvailableWithLinkersAxes(\n linkerColumns: PColumn<PColumnDataUniversal>[],\n blockAxes: AxesVault,\n): AxesVault {\n const linkerMap = LinkerMap.fromColumns(linkerColumns.map(getColumnIdAndSpec));\n const startKeys: CanonicalizedJson<AxisId[]>[] = [];\n const blockAxesGrouped: AxisId[][] = [...blockAxes.values()].map((axis) => getArrayFromAxisTree(getAxesTree(axis)).map(getAxisId));\n\n for (const axesGroupBlock of blockAxesGrouped) {\n const matched = linkerMap.keyAxesIds.find(\n (keyIds: AxisId[]) => keyIds.every(\n (keySourceAxis) => axesGroupBlock.find((axisSpecFromBlock) => matchAxisId(axisSpecFromBlock, keySourceAxis)),\n ),\n );\n if (matched) {\n startKeys.push(canonicalizeJson(matched)); // linker column can contain fewer domains than in block's columns, it's fixed on next step in enrichCompatible\n }\n }\n\n const availableKeys = linkerMap.searchAvailableAxesKeys(startKeys);\n const availableAxes = linkerMap.getAxesListFromKeysList([...availableKeys]);\n\n return new Map(availableAxes.map((axisSpec) => {\n const id = getAxisId(axisSpec);\n return [canonicalizeJson(id), axisSpec];\n }));\n}\n/** Add columns with fully compatible axes created from partial compatible ones */\nexport function enrichCompatible(blockAxes: AxesVault, columns: PColumn<PColumnDataUniversal>[]) {\n const result: PColumn<PColumnDataUniversal>[] = [];\n columns.forEach((column) => {\n result.push(...getAdditionalColumnsForColumn(blockAxes, column));\n });\n return result;\n}\n\nfunction getAdditionalColumnsForColumn(\n blockAxes: AxesVault,\n column: PColumn<PColumnDataUniversal>,\n): PColumn<PColumnDataUniversal>[] {\n const columnAxesIds = column.spec.axesSpec.map(getAxisId);\n\n if (columnAxesIds.every((id) => blockAxes.has(canonicalizeJson(id)))) {\n return [column]; // the column is compatible with its own domains without modifications\n }\n\n // options with different possible domains for every axis of secondary column\n const secondaryIdsOptions = columnAxesIds.map((id) => {\n const result = [];\n for (const [_, mainId] of blockAxes) {\n if (matchAxisId(mainId, id) && !matchAxisId(id, mainId)) {\n result.push(mainId);\n }\n }\n return result;\n });\n // all possible combinations of axes with added domains\n const secondaryIdsVariants = getKeysCombinations(secondaryIdsOptions);\n\n // sets of added to column domain fields\n const allAddedDomainValues = new Set<string>();\n const addedNotToAllVariantsDomainValues = new Set<string>();\n const addedByVariantsDomainValues = secondaryIdsVariants.map((idsList) => {\n const addedSet = new Set<string>();\n idsList.map((axisId, idx) => {\n const d1 = column.spec.axesSpec[idx].domain;\n const d2 = axisId.domain;\n Object.entries(d2 ?? {}).forEach(([key, value]) => {\n if (d1?.[key] === undefined) {\n const item = JSON.stringify([key, value]);\n addedSet.add(item);\n allAddedDomainValues.add(item);\n }\n });\n return ({\n ...axisId,\n annotations: column.spec.axesSpec[idx].annotations,\n });\n });\n return addedSet;\n });\n [...allAddedDomainValues].forEach((addedPart) => {\n if (addedByVariantsDomainValues.some((s) => !s.has(addedPart))) {\n addedNotToAllVariantsDomainValues.add(addedPart);\n }\n });\n\n const additionalColumns = secondaryIdsVariants.map((idsList, idx) => {\n const id = colId(column.id, idsList.map((id) => id.domain));\n\n const label = readAnnotation(column.spec, Annotation.Label) ?? '';\n const labelDomainPart = ([...addedByVariantsDomainValues[idx]])\n .filter((str) => addedNotToAllVariantsDomainValues.has(str))\n .sort()\n .map((v) => JSON.parse(v)?.[1]) // use in labels only domain values, but sort them by key to save the same order in all column variants\n .join(' / ');\n\n const annotations: Annotation = {\n ...column.spec.annotations,\n [Annotation.Graph.IsVirtual]: stringifyJson(true),\n };\n if (label || labelDomainPart) {\n annotations[Annotation.Label] = label && labelDomainPart ? label + ' / ' + labelDomainPart : label + labelDomainPart;\n }\n\n return {\n id: id as PObjectId,\n spec: {\n ...column.spec,\n axesSpec: idsList.map((axisId, idx) => ({\n ...axisId,\n annotations: column.spec.axesSpec[idx].annotations,\n })),\n annotations,\n },\n data: column.data,\n };\n });\n\n return [column, ...additionalColumns];\n}\n\nexport function isColumnReady(c: PColumn<PColumnDataUniversal>) {\n let ready = true;\n if (c.data instanceof TreeNodeAccessor) {\n ready = ready && c.data.getIsReadyOrError();\n } else if (isDataInfo(c.data)) {\n visitDataInfo(c.data, (v) => {\n ready = ready && v.getIsReadyOrError();\n });\n }\n return ready;\n}\n\nexport function allColumnsReady(columns: PColumn<PColumnDataUniversal>[]): boolean {\n return columns.every(isColumnReady);\n}\n\n/**\n The aim of createPFrameForGraphs: to create pframe with block’s columns and all compatible columns from result pool\n (including linker columns and all label columns).\n Block’s columns are added to pframe as is.\n Other columns are added basing on set of axes of block’s columns, considering available with linker columns.\n Compatible columns must have at least one axis from block’s axes set. This axis of the compatible column from\n result pool must satisfy matchAxisId (it can have less domain keys than in block’s axis, but without conflicting values\n among existing ones).\n In requests to pframe (calculateTableData) columns must have strictly the same axes. For compatibility in case\n of partially matched axis we add to pframe a copy of this column with modified axis (with filled missed domains)\n and modified label (with added domain values in case if more than one copy with different domains exist).\n */\nexport function createPFrameForGraphs<A, U>(\n ctx: RenderCtx<A, U>,\n blockColumns?: PColumn<PColumnDataUniversal>[],\n): PFrameHandle | undefined {\n // if current block doesn't produce own columns then use all columns from result pool\n if (!blockColumns) {\n const columns = new PColumnCollection();\n columns.addColumnProvider(ctx.resultPool);\n\n const allColumns = columns.getColumns((spec) => !isHiddenFromGraphColumn(spec), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? [];\n // if at least one column is not yet ready, we can't show the graph\n if (!allColumnsReady(allColumns)) {\n return undefined;\n }\n\n const allAxes: AxesVault = new Map(allColumns\n .flatMap((column) => getNormalizedAxesList(column.spec.axesSpec))\n .map((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return [canonicalizeJson(axisId), axisSpec];\n }));\n\n // additional columns are duplicates with extra fields in domains for compatibility if there are ones with partial match\n const extendedColumns = enrichCompatible(allAxes, allColumns);\n\n return ctx.createPFrame(extendedColumns);\n };\n\n if (!allColumnsReady(blockColumns)) {\n return undefined;\n }\n\n // if current block has its own columns then take from result pool only compatible with them\n const columns = new PColumnCollection();\n columns.addColumnProvider(ctx.resultPool);\n columns.addColumns(blockColumns);\n\n // all possible axes from block columns\n const blockAxes: AxesVault = new Map();\n // axes from block columns and compatible result pool columns\n const allAxes: AxesVault = new Map();\n for (const c of blockColumns) {\n for (const spec of getNormalizedAxesList(c.spec.axesSpec)) {\n const aid = getAxisId(spec);\n blockAxes.set(canonicalizeJson(aid), spec);\n allAxes.set(canonicalizeJson(aid), spec);\n }\n }\n\n // all linker columns always go to pFrame - even it's impossible to use some of them they all are hidden\n const linkerColumns = columns.getColumns((spec) => isLinkerColumn(spec)) ?? [];\n const availableWithLinkersAxes = getAvailableWithLinkersAxes(linkerColumns, blockAxes);\n\n // all possible axes from connected linkers\n for (const item of availableWithLinkersAxes) {\n blockAxes.set(...item);\n allAxes.set(...item);\n }\n\n // all compatible with block columns but without label columns\n let compatibleWithoutLabels = (columns.getColumns((spec) => !isHiddenFromGraphColumn(spec) && spec.axesSpec.some((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return Array.from(blockAxes.values()).some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));\n }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => !isLabelColumn(column.spec));\n\n // if at least one column is not yet ready, we can't show the graph\n if (!allColumnsReady(compatibleWithoutLabels)) {\n return undefined;\n }\n\n // extend axes set for label columns request\n for (const c of compatibleWithoutLabels) {\n for (const spec of getNormalizedAxesList(c.spec.axesSpec)) {\n const aid = getAxisId(spec);\n allAxes.set(canonicalizeJson(aid), spec);\n }\n }\n\n // extend allowed columns - add columns thad doesn't have axes from block, but have all axes in 'allAxes' list (that means all axes from linkers or from 'hanging' of other selected columns)\n compatibleWithoutLabels = (columns.getColumns((spec) => !isHiddenFromGraphColumn(spec) && spec.axesSpec.every((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return Array.from(allAxes.values()).some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));\n }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => !isLabelColumn(column.spec));\n\n // label columns must be compatible with full set of axes - block axes and axes from compatible columns from result pool\n const compatibleLabels = (columns.getColumns((spec) => !isHiddenFromGraphColumn(spec) && spec.axesSpec.some((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return Array.from(allAxes.values()).some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));\n }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => isLabelColumn(column.spec));\n\n // if at least one column is not yet ready, we can't show the graph\n if (!allColumnsReady(compatibleLabels)) {\n return undefined;\n }\n\n const compatible = [...compatibleWithoutLabels, ...compatibleLabels];\n\n // additional columns are duplicates with extra fields in domains for compatibility if there are ones with partial match\n const extendedColumns = enrichCompatible(blockAxes, compatible);\n\n return ctx.createPFrame(extendedColumns);\n}\n"],"names":["readAnnotationJson","Annotation","LinkerMap","getColumnIdAndSpec","getArrayFromAxisTree","getAxesTree","getAxisId","matchAxisId","canonicalizeJson","readAnnotation","stringifyJson","TreeNodeAccessor","isDataInfo","visitDataInfo","PColumnCollection","getNormalizedAxesList","isLabelColumn"],"mappings":"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"}
1
+ {"version":3,"file":"PFrameForGraphs.cjs","sources":["../../src/components/PFrameForGraphs.ts"],"sourcesContent":["import type {\n AxisId,\n AxisSpecNormalized,\n CanonicalizedJson,\n PColumn,\n PColumnSpec,\n PFrameHandle,\n PObjectId,\n} from '@milaboratories/pl-model-common';\nimport {\n canonicalizeJson,\n getAxisId,\n matchAxisId,\n getColumnIdAndSpec,\n Annotation,\n readAnnotation,\n getNormalizedAxesList,\n stringifyJson,\n readAnnotationJson,\n LinkerMap,\n getArrayFromAxisTree,\n getAxesTree,\n} from '@milaboratories/pl-model-common';\nimport type { PColumnDataUniversal, RenderCtx } from '../render';\nimport { allPColumnsReady, PColumnCollection } from '../render';\nimport { isLabelColumn } from './PlDataTable';\n\n/** Create id for column copy with added keys in axes domains */\nconst colId = (id: PObjectId, domains: (Record<string, string> | undefined)[]) => {\n let wid = id.toString();\n domains?.forEach((domain) => {\n if (domain) {\n for (const [k, v] of Object.entries(domain)) {\n wid += k;\n wid += v;\n }\n }\n });\n return wid;\n};\n\n/** All combinations with 1 key from each list */\nfunction getKeysCombinations(idsLists: AxisId[][]) {\n if (!idsLists.length) {\n return [];\n }\n let result: AxisId[][] = [[]];\n idsLists.forEach((list) => {\n const nextResult: AxisId[][] = [];\n list.forEach((key) => {\n nextResult.push(...result.map((resultItem) => [...resultItem, key]));\n });\n result = nextResult;\n });\n return result;\n}\n\n/** Check if column is a linker column */\nexport function isLinkerColumn(column: PColumnSpec): boolean {\n return !!readAnnotationJson(column, Annotation.IsLinkerColumn);\n}\n\nfunction isHiddenFromGraphColumn(column: PColumnSpec): boolean {\n return !!readAnnotationJson(column, Annotation.HideDataFromGraphs);\n}\n\ntype AxesVault = Map<CanonicalizedJson<AxisId>, AxisSpecNormalized>;\n\nexport function getAvailableWithLinkersAxes(\n linkerColumns: PColumn<PColumnDataUniversal>[],\n blockAxes: AxesVault,\n): AxesVault {\n const linkerMap = LinkerMap.fromColumns(linkerColumns.map(getColumnIdAndSpec));\n const startKeys: CanonicalizedJson<AxisId[]>[] = [];\n const blockAxesGrouped: AxisId[][] = [...blockAxes.values()].map((axis) => getArrayFromAxisTree(getAxesTree(axis)).map(getAxisId));\n\n for (const axesGroupBlock of blockAxesGrouped) {\n const matched = linkerMap.keyAxesIds.find(\n (keyIds: AxisId[]) => keyIds.every(\n (keySourceAxis) => axesGroupBlock.find((axisSpecFromBlock) => matchAxisId(axisSpecFromBlock, keySourceAxis)),\n ),\n );\n if (matched) {\n startKeys.push(canonicalizeJson(matched)); // linker column can contain fewer domains than in block's columns, it's fixed on next step in enrichCompatible\n }\n }\n\n const availableKeys = linkerMap.searchAvailableAxesKeys(startKeys);\n const availableAxes = linkerMap.getAxesListFromKeysList([...availableKeys]);\n\n return new Map(availableAxes.map((axisSpec) => {\n const id = getAxisId(axisSpec);\n return [canonicalizeJson(id), axisSpec];\n }));\n}\n/** Add columns with fully compatible axes created from partial compatible ones */\nexport function enrichCompatible(blockAxes: AxesVault, columns: PColumn<PColumnDataUniversal>[]) {\n const result: PColumn<PColumnDataUniversal>[] = [];\n columns.forEach((column) => {\n result.push(...getAdditionalColumnsForColumn(blockAxes, column));\n });\n return result;\n}\n\nfunction getAdditionalColumnsForColumn(\n blockAxes: AxesVault,\n column: PColumn<PColumnDataUniversal>,\n): PColumn<PColumnDataUniversal>[] {\n const columnAxesIds = column.spec.axesSpec.map(getAxisId);\n\n if (columnAxesIds.every((id) => blockAxes.has(canonicalizeJson(id)))) {\n return [column]; // the column is compatible with its own domains without modifications\n }\n\n // options with different possible domains for every axis of secondary column\n const secondaryIdsOptions = columnAxesIds.map((id) => {\n const result = [];\n for (const [_, mainId] of blockAxes) {\n if (matchAxisId(mainId, id) && !matchAxisId(id, mainId)) {\n result.push(mainId);\n }\n }\n return result;\n });\n // all possible combinations of axes with added domains\n const secondaryIdsVariants = getKeysCombinations(secondaryIdsOptions);\n\n // sets of added to column domain fields\n const allAddedDomainValues = new Set<string>();\n const addedNotToAllVariantsDomainValues = new Set<string>();\n const addedByVariantsDomainValues = secondaryIdsVariants.map((idsList) => {\n const addedSet = new Set<string>();\n idsList.map((axisId, idx) => {\n const d1 = column.spec.axesSpec[idx].domain;\n const d2 = axisId.domain;\n Object.entries(d2 ?? {}).forEach(([key, value]) => {\n if (d1?.[key] === undefined) {\n const item = JSON.stringify([key, value]);\n addedSet.add(item);\n allAddedDomainValues.add(item);\n }\n });\n return ({\n ...axisId,\n annotations: column.spec.axesSpec[idx].annotations,\n });\n });\n return addedSet;\n });\n [...allAddedDomainValues].forEach((addedPart) => {\n if (addedByVariantsDomainValues.some((s) => !s.has(addedPart))) {\n addedNotToAllVariantsDomainValues.add(addedPart);\n }\n });\n\n const additionalColumns = secondaryIdsVariants.map((idsList, idx) => {\n const id = colId(column.id, idsList.map((id) => id.domain));\n\n const label = readAnnotation(column.spec, Annotation.Label) ?? '';\n const labelDomainPart = ([...addedByVariantsDomainValues[idx]])\n .filter((str) => addedNotToAllVariantsDomainValues.has(str))\n .sort()\n .map((v) => JSON.parse(v)?.[1]) // use in labels only domain values, but sort them by key to save the same order in all column variants\n .join(' / ');\n\n const annotations: Annotation = {\n ...column.spec.annotations,\n [Annotation.Graph.IsVirtual]: stringifyJson(true),\n };\n if (label || labelDomainPart) {\n annotations[Annotation.Label] = label && labelDomainPart ? label + ' / ' + labelDomainPart : label + labelDomainPart;\n }\n\n return {\n id: id as PObjectId,\n spec: {\n ...column.spec,\n axesSpec: idsList.map((axisId, idx) => ({\n ...axisId,\n annotations: column.spec.axesSpec[idx].annotations,\n })),\n annotations,\n },\n data: column.data,\n };\n });\n\n return [column, ...additionalColumns];\n}\n\n/**\n The aim of createPFrameForGraphs: to create pframe with block’s columns and all compatible columns from result pool\n (including linker columns and all label columns).\n Block’s columns are added to pframe as is.\n Other columns are added basing on set of axes of block’s columns, considering available with linker columns.\n Compatible columns must have at least one axis from block’s axes set. This axis of the compatible column from\n result pool must satisfy matchAxisId (it can have less domain keys than in block’s axis, but without conflicting values\n among existing ones).\n In requests to pframe (calculateTableData) columns must have strictly the same axes. For compatibility in case\n of partially matched axis we add to pframe a copy of this column with modified axis (with filled missed domains)\n and modified label (with added domain values in case if more than one copy with different domains exist).\n */\nexport function createPFrameForGraphs<A, U>(\n ctx: RenderCtx<A, U>,\n blockColumns?: PColumn<PColumnDataUniversal>[],\n): PFrameHandle | undefined {\n // if current block doesn't produce own columns then use all columns from result pool\n if (!blockColumns) {\n const columns = new PColumnCollection();\n columns.addColumnProvider(ctx.resultPool);\n\n const allColumns = columns.getColumns((spec) => !isHiddenFromGraphColumn(spec), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? [];\n // if at least one column is not yet ready, we can't show the graph\n if (!allPColumnsReady(allColumns)) {\n return undefined;\n }\n\n const allAxes: AxesVault = new Map(allColumns\n .flatMap((column) => getNormalizedAxesList(column.spec.axesSpec))\n .map((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return [canonicalizeJson(axisId), axisSpec];\n }));\n\n // additional columns are duplicates with extra fields in domains for compatibility if there are ones with partial match\n const extendedColumns = enrichCompatible(allAxes, allColumns);\n\n return ctx.createPFrame(extendedColumns);\n };\n\n if (!allPColumnsReady(blockColumns)) {\n return undefined;\n }\n\n // if current block has its own columns then take from result pool only compatible with them\n const columns = new PColumnCollection();\n columns.addColumnProvider(ctx.resultPool);\n columns.addColumns(blockColumns);\n\n // all possible axes from block columns\n const blockAxes: AxesVault = new Map();\n // axes from block columns and compatible result pool columns\n const allAxes: AxesVault = new Map();\n for (const c of blockColumns) {\n for (const spec of getNormalizedAxesList(c.spec.axesSpec)) {\n const aid = getAxisId(spec);\n blockAxes.set(canonicalizeJson(aid), spec);\n allAxes.set(canonicalizeJson(aid), spec);\n }\n }\n\n // all linker columns always go to pFrame - even it's impossible to use some of them they all are hidden\n const linkerColumns = columns.getColumns((spec) => isLinkerColumn(spec)) ?? [];\n const availableWithLinkersAxes = getAvailableWithLinkersAxes(linkerColumns, blockAxes);\n\n // all possible axes from connected linkers\n for (const item of availableWithLinkersAxes) {\n blockAxes.set(...item);\n allAxes.set(...item);\n }\n\n // all compatible with block columns but without label columns\n let compatibleWithoutLabels = (columns.getColumns((spec) => !isHiddenFromGraphColumn(spec) && spec.axesSpec.some((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return Array.from(blockAxes.values()).some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));\n }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => !isLabelColumn(column.spec));\n\n // if at least one column is not yet ready, we can't show the graph\n if (!allPColumnsReady(compatibleWithoutLabels)) {\n return undefined;\n }\n\n // extend axes set for label columns request\n for (const c of compatibleWithoutLabels) {\n for (const spec of getNormalizedAxesList(c.spec.axesSpec)) {\n const aid = getAxisId(spec);\n allAxes.set(canonicalizeJson(aid), spec);\n }\n }\n\n // extend allowed columns - add columns thad doesn't have axes from block, but have all axes in 'allAxes' list (that means all axes from linkers or from 'hanging' of other selected columns)\n compatibleWithoutLabels = (columns.getColumns((spec) => !isHiddenFromGraphColumn(spec) && spec.axesSpec.every((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return Array.from(allAxes.values()).some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));\n }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => !isLabelColumn(column.spec));\n\n // label columns must be compatible with full set of axes - block axes and axes from compatible columns from result pool\n const compatibleLabels = (columns.getColumns((spec) => !isHiddenFromGraphColumn(spec) && spec.axesSpec.some((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return Array.from(allAxes.values()).some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));\n }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => isLabelColumn(column.spec));\n\n // if at least one column is not yet ready, we can't show the graph\n if (!allPColumnsReady(compatibleLabels)) {\n return undefined;\n }\n\n const compatible = [...compatibleWithoutLabels, ...compatibleLabels];\n\n // additional columns are duplicates with extra fields in domains for compatibility if there are ones with partial match\n const extendedColumns = enrichCompatible(blockAxes, compatible);\n\n return ctx.createPFrame(extendedColumns);\n}\n"],"names":["readAnnotationJson","Annotation","LinkerMap","getColumnIdAndSpec","getArrayFromAxisTree","getAxesTree","getAxisId","matchAxisId","canonicalizeJson","readAnnotation","stringifyJson","PColumnCollection","allPColumnsReady","getNormalizedAxesList","isLabelColumn"],"mappings":"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"}
@@ -6,8 +6,6 @@ type AxesVault = Map<CanonicalizedJson<AxisId>, AxisSpecNormalized>;
6
6
  export declare function getAvailableWithLinkersAxes(linkerColumns: PColumn<PColumnDataUniversal>[], blockAxes: AxesVault): AxesVault;
7
7
  /** Add columns with fully compatible axes created from partial compatible ones */
8
8
  export declare function enrichCompatible(blockAxes: AxesVault, columns: PColumn<PColumnDataUniversal>[]): PColumn<PColumnDataUniversal>[];
9
- export declare function isColumnReady(c: PColumn<PColumnDataUniversal>): boolean;
10
- export declare function allColumnsReady(columns: PColumn<PColumnDataUniversal>[]): boolean;
11
9
  /**
12
10
  The aim of createPFrameForGraphs: to create pframe with block’s columns and all compatible columns from result pool
13
11
  (including linker columns and all label columns).
@@ -1 +1 @@
1
- {"version":3,"file":"PFrameForGraphs.d.ts","sourceRoot":"","sources":["../../src/components/PFrameForGraphs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,kBAAkB,EAClB,iBAAiB,EACjB,OAAO,EACP,WAAW,EACX,YAAY,EAEb,MAAM,iCAAiC,CAAC;AAiBzC,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAkCjE,yCAAyC;AACzC,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAE3D;AAMD,KAAK,SAAS,GAAG,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC,CAAC;AAEpE,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,OAAO,CAAC,oBAAoB,CAAC,EAAE,EAC9C,SAAS,EAAE,SAAS,GACnB,SAAS,CAuBX;AACD,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,oBAAoB,CAAC,EAAE,mCAM9F;AAwFD,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,WAU7D;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,oBAAoB,CAAC,EAAE,GAAG,OAAO,CAEjF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,CAAC,EACxC,GAAG,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EACpB,YAAY,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,EAAE,GAC7C,YAAY,GAAG,SAAS,CAkG1B"}
1
+ {"version":3,"file":"PFrameForGraphs.d.ts","sourceRoot":"","sources":["../../src/components/PFrameForGraphs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,kBAAkB,EAClB,iBAAiB,EACjB,OAAO,EACP,WAAW,EACX,YAAY,EAEb,MAAM,iCAAiC,CAAC;AAezC,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAkCjE,yCAAyC;AACzC,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAE3D;AAMD,KAAK,SAAS,GAAG,GAAG,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC,CAAC;AAEpE,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,OAAO,CAAC,oBAAoB,CAAC,EAAE,EAC9C,SAAS,EAAE,SAAS,GACnB,SAAS,CAuBX;AACD,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,oBAAoB,CAAC,EAAE,mCAM9F;AAwFD;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,CAAC,EACxC,GAAG,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EACpB,YAAY,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,EAAE,GAC7C,YAAY,GAAG,SAAS,CAkG1B"}
@@ -1,8 +1,8 @@
1
- import { readAnnotationJson, Annotation, LinkerMap, getColumnIdAndSpec, getArrayFromAxisTree, getAxesTree, getAxisId, matchAxisId, canonicalizeJson, isDataInfo, visitDataInfo, getNormalizedAxesList, readAnnotation, stringifyJson } from '@milaboratories/pl-model-common';
1
+ import { readAnnotationJson, Annotation, LinkerMap, getColumnIdAndSpec, getArrayFromAxisTree, getAxesTree, getAxisId, matchAxisId, canonicalizeJson, getNormalizedAxesList, readAnnotation, stringifyJson } from '@milaboratories/pl-model-common';
2
2
  import 'canonicalize';
3
- import { TreeNodeAccessor } from '../render/accessor.js';
4
3
  import { PColumnCollection } from '../render/util/column_collection.js';
5
4
  import '../render/util/label.js';
5
+ import { allPColumnsReady } from '../render/util/pcolumn_data.js';
6
6
  import { isLabelColumn } from './PlDataTable.js';
7
7
 
8
8
  /** Create id for column copy with added keys in axes domains */
@@ -139,21 +139,6 @@ function getAdditionalColumnsForColumn(blockAxes, column) {
139
139
  });
140
140
  return [column, ...additionalColumns];
141
141
  }
142
- function isColumnReady(c) {
143
- let ready = true;
144
- if (c.data instanceof TreeNodeAccessor) {
145
- ready = ready && c.data.getIsReadyOrError();
146
- }
147
- else if (isDataInfo(c.data)) {
148
- visitDataInfo(c.data, (v) => {
149
- ready = ready && v.getIsReadyOrError();
150
- });
151
- }
152
- return ready;
153
- }
154
- function allColumnsReady(columns) {
155
- return columns.every(isColumnReady);
156
- }
157
142
  /**
158
143
  The aim of createPFrameForGraphs: to create pframe with block’s columns and all compatible columns from result pool
159
144
  (including linker columns and all label columns).
@@ -173,7 +158,7 @@ function createPFrameForGraphs(ctx, blockColumns) {
173
158
  columns.addColumnProvider(ctx.resultPool);
174
159
  const allColumns = columns.getColumns((spec) => !isHiddenFromGraphColumn(spec), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? [];
175
160
  // if at least one column is not yet ready, we can't show the graph
176
- if (!allColumnsReady(allColumns)) {
161
+ if (!allPColumnsReady(allColumns)) {
177
162
  return undefined;
178
163
  }
179
164
  const allAxes = new Map(allColumns
@@ -186,7 +171,7 @@ function createPFrameForGraphs(ctx, blockColumns) {
186
171
  const extendedColumns = enrichCompatible(allAxes, allColumns);
187
172
  return ctx.createPFrame(extendedColumns);
188
173
  }
189
- if (!allColumnsReady(blockColumns)) {
174
+ if (!allPColumnsReady(blockColumns)) {
190
175
  return undefined;
191
176
  }
192
177
  // if current block has its own columns then take from result pool only compatible with them
@@ -218,7 +203,7 @@ function createPFrameForGraphs(ctx, blockColumns) {
218
203
  return Array.from(blockAxes.values()).some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));
219
204
  }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => !isLabelColumn(column.spec));
220
205
  // if at least one column is not yet ready, we can't show the graph
221
- if (!allColumnsReady(compatibleWithoutLabels)) {
206
+ if (!allPColumnsReady(compatibleWithoutLabels)) {
222
207
  return undefined;
223
208
  }
224
209
  // extend axes set for label columns request
@@ -239,7 +224,7 @@ function createPFrameForGraphs(ctx, blockColumns) {
239
224
  return Array.from(allAxes.values()).some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));
240
225
  }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => isLabelColumn(column.spec));
241
226
  // if at least one column is not yet ready, we can't show the graph
242
- if (!allColumnsReady(compatibleLabels)) {
227
+ if (!allPColumnsReady(compatibleLabels)) {
243
228
  return undefined;
244
229
  }
245
230
  const compatible = [...compatibleWithoutLabels, ...compatibleLabels];
@@ -248,5 +233,5 @@ function createPFrameForGraphs(ctx, blockColumns) {
248
233
  return ctx.createPFrame(extendedColumns);
249
234
  }
250
235
 
251
- export { allColumnsReady, createPFrameForGraphs, enrichCompatible, getAvailableWithLinkersAxes, isColumnReady, isLinkerColumn };
236
+ export { createPFrameForGraphs, enrichCompatible, getAvailableWithLinkersAxes, isLinkerColumn };
252
237
  //# sourceMappingURL=PFrameForGraphs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PFrameForGraphs.js","sources":["../../src/components/PFrameForGraphs.ts"],"sourcesContent":["import type {\n AxisId,\n AxisSpecNormalized,\n CanonicalizedJson,\n PColumn,\n PColumnSpec,\n PFrameHandle,\n PObjectId,\n} from '@milaboratories/pl-model-common';\nimport {\n canonicalizeJson,\n getAxisId,\n isDataInfo,\n matchAxisId,\n visitDataInfo,\n getColumnIdAndSpec,\n Annotation,\n readAnnotation,\n getNormalizedAxesList,\n stringifyJson,\n readAnnotationJson,\n LinkerMap,\n getArrayFromAxisTree,\n getAxesTree,\n} from '@milaboratories/pl-model-common';\nimport type { PColumnDataUniversal, RenderCtx } from '../render';\nimport { PColumnCollection, TreeNodeAccessor } from '../render';\nimport { isLabelColumn } from './PlDataTable';\n\n/** Create id for column copy with added keys in axes domains */\nconst colId = (id: PObjectId, domains: (Record<string, string> | undefined)[]) => {\n let wid = id.toString();\n domains?.forEach((domain) => {\n if (domain) {\n for (const [k, v] of Object.entries(domain)) {\n wid += k;\n wid += v;\n }\n }\n });\n return wid;\n};\n\n/** All combinations with 1 key from each list */\nfunction getKeysCombinations(idsLists: AxisId[][]) {\n if (!idsLists.length) {\n return [];\n }\n let result: AxisId[][] = [[]];\n idsLists.forEach((list) => {\n const nextResult: AxisId[][] = [];\n list.forEach((key) => {\n nextResult.push(...result.map((resultItem) => [...resultItem, key]));\n });\n result = nextResult;\n });\n return result;\n}\n\n/** Check if column is a linker column */\nexport function isLinkerColumn(column: PColumnSpec): boolean {\n return !!readAnnotationJson(column, Annotation.IsLinkerColumn);\n}\n\nfunction isHiddenFromGraphColumn(column: PColumnSpec): boolean {\n return !!readAnnotationJson(column, Annotation.HideDataFromGraphs);\n}\n\ntype AxesVault = Map<CanonicalizedJson<AxisId>, AxisSpecNormalized>;\n\nexport function getAvailableWithLinkersAxes(\n linkerColumns: PColumn<PColumnDataUniversal>[],\n blockAxes: AxesVault,\n): AxesVault {\n const linkerMap = LinkerMap.fromColumns(linkerColumns.map(getColumnIdAndSpec));\n const startKeys: CanonicalizedJson<AxisId[]>[] = [];\n const blockAxesGrouped: AxisId[][] = [...blockAxes.values()].map((axis) => getArrayFromAxisTree(getAxesTree(axis)).map(getAxisId));\n\n for (const axesGroupBlock of blockAxesGrouped) {\n const matched = linkerMap.keyAxesIds.find(\n (keyIds: AxisId[]) => keyIds.every(\n (keySourceAxis) => axesGroupBlock.find((axisSpecFromBlock) => matchAxisId(axisSpecFromBlock, keySourceAxis)),\n ),\n );\n if (matched) {\n startKeys.push(canonicalizeJson(matched)); // linker column can contain fewer domains than in block's columns, it's fixed on next step in enrichCompatible\n }\n }\n\n const availableKeys = linkerMap.searchAvailableAxesKeys(startKeys);\n const availableAxes = linkerMap.getAxesListFromKeysList([...availableKeys]);\n\n return new Map(availableAxes.map((axisSpec) => {\n const id = getAxisId(axisSpec);\n return [canonicalizeJson(id), axisSpec];\n }));\n}\n/** Add columns with fully compatible axes created from partial compatible ones */\nexport function enrichCompatible(blockAxes: AxesVault, columns: PColumn<PColumnDataUniversal>[]) {\n const result: PColumn<PColumnDataUniversal>[] = [];\n columns.forEach((column) => {\n result.push(...getAdditionalColumnsForColumn(blockAxes, column));\n });\n return result;\n}\n\nfunction getAdditionalColumnsForColumn(\n blockAxes: AxesVault,\n column: PColumn<PColumnDataUniversal>,\n): PColumn<PColumnDataUniversal>[] {\n const columnAxesIds = column.spec.axesSpec.map(getAxisId);\n\n if (columnAxesIds.every((id) => blockAxes.has(canonicalizeJson(id)))) {\n return [column]; // the column is compatible with its own domains without modifications\n }\n\n // options with different possible domains for every axis of secondary column\n const secondaryIdsOptions = columnAxesIds.map((id) => {\n const result = [];\n for (const [_, mainId] of blockAxes) {\n if (matchAxisId(mainId, id) && !matchAxisId(id, mainId)) {\n result.push(mainId);\n }\n }\n return result;\n });\n // all possible combinations of axes with added domains\n const secondaryIdsVariants = getKeysCombinations(secondaryIdsOptions);\n\n // sets of added to column domain fields\n const allAddedDomainValues = new Set<string>();\n const addedNotToAllVariantsDomainValues = new Set<string>();\n const addedByVariantsDomainValues = secondaryIdsVariants.map((idsList) => {\n const addedSet = new Set<string>();\n idsList.map((axisId, idx) => {\n const d1 = column.spec.axesSpec[idx].domain;\n const d2 = axisId.domain;\n Object.entries(d2 ?? {}).forEach(([key, value]) => {\n if (d1?.[key] === undefined) {\n const item = JSON.stringify([key, value]);\n addedSet.add(item);\n allAddedDomainValues.add(item);\n }\n });\n return ({\n ...axisId,\n annotations: column.spec.axesSpec[idx].annotations,\n });\n });\n return addedSet;\n });\n [...allAddedDomainValues].forEach((addedPart) => {\n if (addedByVariantsDomainValues.some((s) => !s.has(addedPart))) {\n addedNotToAllVariantsDomainValues.add(addedPart);\n }\n });\n\n const additionalColumns = secondaryIdsVariants.map((idsList, idx) => {\n const id = colId(column.id, idsList.map((id) => id.domain));\n\n const label = readAnnotation(column.spec, Annotation.Label) ?? '';\n const labelDomainPart = ([...addedByVariantsDomainValues[idx]])\n .filter((str) => addedNotToAllVariantsDomainValues.has(str))\n .sort()\n .map((v) => JSON.parse(v)?.[1]) // use in labels only domain values, but sort them by key to save the same order in all column variants\n .join(' / ');\n\n const annotations: Annotation = {\n ...column.spec.annotations,\n [Annotation.Graph.IsVirtual]: stringifyJson(true),\n };\n if (label || labelDomainPart) {\n annotations[Annotation.Label] = label && labelDomainPart ? label + ' / ' + labelDomainPart : label + labelDomainPart;\n }\n\n return {\n id: id as PObjectId,\n spec: {\n ...column.spec,\n axesSpec: idsList.map((axisId, idx) => ({\n ...axisId,\n annotations: column.spec.axesSpec[idx].annotations,\n })),\n annotations,\n },\n data: column.data,\n };\n });\n\n return [column, ...additionalColumns];\n}\n\nexport function isColumnReady(c: PColumn<PColumnDataUniversal>) {\n let ready = true;\n if (c.data instanceof TreeNodeAccessor) {\n ready = ready && c.data.getIsReadyOrError();\n } else if (isDataInfo(c.data)) {\n visitDataInfo(c.data, (v) => {\n ready = ready && v.getIsReadyOrError();\n });\n }\n return ready;\n}\n\nexport function allColumnsReady(columns: PColumn<PColumnDataUniversal>[]): boolean {\n return columns.every(isColumnReady);\n}\n\n/**\n The aim of createPFrameForGraphs: to create pframe with block’s columns and all compatible columns from result pool\n (including linker columns and all label columns).\n Block’s columns are added to pframe as is.\n Other columns are added basing on set of axes of block’s columns, considering available with linker columns.\n Compatible columns must have at least one axis from block’s axes set. This axis of the compatible column from\n result pool must satisfy matchAxisId (it can have less domain keys than in block’s axis, but without conflicting values\n among existing ones).\n In requests to pframe (calculateTableData) columns must have strictly the same axes. For compatibility in case\n of partially matched axis we add to pframe a copy of this column with modified axis (with filled missed domains)\n and modified label (with added domain values in case if more than one copy with different domains exist).\n */\nexport function createPFrameForGraphs<A, U>(\n ctx: RenderCtx<A, U>,\n blockColumns?: PColumn<PColumnDataUniversal>[],\n): PFrameHandle | undefined {\n // if current block doesn't produce own columns then use all columns from result pool\n if (!blockColumns) {\n const columns = new PColumnCollection();\n columns.addColumnProvider(ctx.resultPool);\n\n const allColumns = columns.getColumns((spec) => !isHiddenFromGraphColumn(spec), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? [];\n // if at least one column is not yet ready, we can't show the graph\n if (!allColumnsReady(allColumns)) {\n return undefined;\n }\n\n const allAxes: AxesVault = new Map(allColumns\n .flatMap((column) => getNormalizedAxesList(column.spec.axesSpec))\n .map((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return [canonicalizeJson(axisId), axisSpec];\n }));\n\n // additional columns are duplicates with extra fields in domains for compatibility if there are ones with partial match\n const extendedColumns = enrichCompatible(allAxes, allColumns);\n\n return ctx.createPFrame(extendedColumns);\n };\n\n if (!allColumnsReady(blockColumns)) {\n return undefined;\n }\n\n // if current block has its own columns then take from result pool only compatible with them\n const columns = new PColumnCollection();\n columns.addColumnProvider(ctx.resultPool);\n columns.addColumns(blockColumns);\n\n // all possible axes from block columns\n const blockAxes: AxesVault = new Map();\n // axes from block columns and compatible result pool columns\n const allAxes: AxesVault = new Map();\n for (const c of blockColumns) {\n for (const spec of getNormalizedAxesList(c.spec.axesSpec)) {\n const aid = getAxisId(spec);\n blockAxes.set(canonicalizeJson(aid), spec);\n allAxes.set(canonicalizeJson(aid), spec);\n }\n }\n\n // all linker columns always go to pFrame - even it's impossible to use some of them they all are hidden\n const linkerColumns = columns.getColumns((spec) => isLinkerColumn(spec)) ?? [];\n const availableWithLinkersAxes = getAvailableWithLinkersAxes(linkerColumns, blockAxes);\n\n // all possible axes from connected linkers\n for (const item of availableWithLinkersAxes) {\n blockAxes.set(...item);\n allAxes.set(...item);\n }\n\n // all compatible with block columns but without label columns\n let compatibleWithoutLabels = (columns.getColumns((spec) => !isHiddenFromGraphColumn(spec) && spec.axesSpec.some((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return Array.from(blockAxes.values()).some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));\n }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => !isLabelColumn(column.spec));\n\n // if at least one column is not yet ready, we can't show the graph\n if (!allColumnsReady(compatibleWithoutLabels)) {\n return undefined;\n }\n\n // extend axes set for label columns request\n for (const c of compatibleWithoutLabels) {\n for (const spec of getNormalizedAxesList(c.spec.axesSpec)) {\n const aid = getAxisId(spec);\n allAxes.set(canonicalizeJson(aid), spec);\n }\n }\n\n // extend allowed columns - add columns thad doesn't have axes from block, but have all axes in 'allAxes' list (that means all axes from linkers or from 'hanging' of other selected columns)\n compatibleWithoutLabels = (columns.getColumns((spec) => !isHiddenFromGraphColumn(spec) && spec.axesSpec.every((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return Array.from(allAxes.values()).some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));\n }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => !isLabelColumn(column.spec));\n\n // label columns must be compatible with full set of axes - block axes and axes from compatible columns from result pool\n const compatibleLabels = (columns.getColumns((spec) => !isHiddenFromGraphColumn(spec) && spec.axesSpec.some((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return Array.from(allAxes.values()).some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));\n }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => isLabelColumn(column.spec));\n\n // if at least one column is not yet ready, we can't show the graph\n if (!allColumnsReady(compatibleLabels)) {\n return undefined;\n }\n\n const compatible = [...compatibleWithoutLabels, ...compatibleLabels];\n\n // additional columns are duplicates with extra fields in domains for compatibility if there are ones with partial match\n const extendedColumns = enrichCompatible(blockAxes, compatible);\n\n return ctx.createPFrame(extendedColumns);\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PFrameForGraphs.js","sources":["../../src/components/PFrameForGraphs.ts"],"sourcesContent":["import type {\n AxisId,\n AxisSpecNormalized,\n CanonicalizedJson,\n PColumn,\n PColumnSpec,\n PFrameHandle,\n PObjectId,\n} from '@milaboratories/pl-model-common';\nimport {\n canonicalizeJson,\n getAxisId,\n matchAxisId,\n getColumnIdAndSpec,\n Annotation,\n readAnnotation,\n getNormalizedAxesList,\n stringifyJson,\n readAnnotationJson,\n LinkerMap,\n getArrayFromAxisTree,\n getAxesTree,\n} from '@milaboratories/pl-model-common';\nimport type { PColumnDataUniversal, RenderCtx } from '../render';\nimport { allPColumnsReady, PColumnCollection } from '../render';\nimport { isLabelColumn } from './PlDataTable';\n\n/** Create id for column copy with added keys in axes domains */\nconst colId = (id: PObjectId, domains: (Record<string, string> | undefined)[]) => {\n let wid = id.toString();\n domains?.forEach((domain) => {\n if (domain) {\n for (const [k, v] of Object.entries(domain)) {\n wid += k;\n wid += v;\n }\n }\n });\n return wid;\n};\n\n/** All combinations with 1 key from each list */\nfunction getKeysCombinations(idsLists: AxisId[][]) {\n if (!idsLists.length) {\n return [];\n }\n let result: AxisId[][] = [[]];\n idsLists.forEach((list) => {\n const nextResult: AxisId[][] = [];\n list.forEach((key) => {\n nextResult.push(...result.map((resultItem) => [...resultItem, key]));\n });\n result = nextResult;\n });\n return result;\n}\n\n/** Check if column is a linker column */\nexport function isLinkerColumn(column: PColumnSpec): boolean {\n return !!readAnnotationJson(column, Annotation.IsLinkerColumn);\n}\n\nfunction isHiddenFromGraphColumn(column: PColumnSpec): boolean {\n return !!readAnnotationJson(column, Annotation.HideDataFromGraphs);\n}\n\ntype AxesVault = Map<CanonicalizedJson<AxisId>, AxisSpecNormalized>;\n\nexport function getAvailableWithLinkersAxes(\n linkerColumns: PColumn<PColumnDataUniversal>[],\n blockAxes: AxesVault,\n): AxesVault {\n const linkerMap = LinkerMap.fromColumns(linkerColumns.map(getColumnIdAndSpec));\n const startKeys: CanonicalizedJson<AxisId[]>[] = [];\n const blockAxesGrouped: AxisId[][] = [...blockAxes.values()].map((axis) => getArrayFromAxisTree(getAxesTree(axis)).map(getAxisId));\n\n for (const axesGroupBlock of blockAxesGrouped) {\n const matched = linkerMap.keyAxesIds.find(\n (keyIds: AxisId[]) => keyIds.every(\n (keySourceAxis) => axesGroupBlock.find((axisSpecFromBlock) => matchAxisId(axisSpecFromBlock, keySourceAxis)),\n ),\n );\n if (matched) {\n startKeys.push(canonicalizeJson(matched)); // linker column can contain fewer domains than in block's columns, it's fixed on next step in enrichCompatible\n }\n }\n\n const availableKeys = linkerMap.searchAvailableAxesKeys(startKeys);\n const availableAxes = linkerMap.getAxesListFromKeysList([...availableKeys]);\n\n return new Map(availableAxes.map((axisSpec) => {\n const id = getAxisId(axisSpec);\n return [canonicalizeJson(id), axisSpec];\n }));\n}\n/** Add columns with fully compatible axes created from partial compatible ones */\nexport function enrichCompatible(blockAxes: AxesVault, columns: PColumn<PColumnDataUniversal>[]) {\n const result: PColumn<PColumnDataUniversal>[] = [];\n columns.forEach((column) => {\n result.push(...getAdditionalColumnsForColumn(blockAxes, column));\n });\n return result;\n}\n\nfunction getAdditionalColumnsForColumn(\n blockAxes: AxesVault,\n column: PColumn<PColumnDataUniversal>,\n): PColumn<PColumnDataUniversal>[] {\n const columnAxesIds = column.spec.axesSpec.map(getAxisId);\n\n if (columnAxesIds.every((id) => blockAxes.has(canonicalizeJson(id)))) {\n return [column]; // the column is compatible with its own domains without modifications\n }\n\n // options with different possible domains for every axis of secondary column\n const secondaryIdsOptions = columnAxesIds.map((id) => {\n const result = [];\n for (const [_, mainId] of blockAxes) {\n if (matchAxisId(mainId, id) && !matchAxisId(id, mainId)) {\n result.push(mainId);\n }\n }\n return result;\n });\n // all possible combinations of axes with added domains\n const secondaryIdsVariants = getKeysCombinations(secondaryIdsOptions);\n\n // sets of added to column domain fields\n const allAddedDomainValues = new Set<string>();\n const addedNotToAllVariantsDomainValues = new Set<string>();\n const addedByVariantsDomainValues = secondaryIdsVariants.map((idsList) => {\n const addedSet = new Set<string>();\n idsList.map((axisId, idx) => {\n const d1 = column.spec.axesSpec[idx].domain;\n const d2 = axisId.domain;\n Object.entries(d2 ?? {}).forEach(([key, value]) => {\n if (d1?.[key] === undefined) {\n const item = JSON.stringify([key, value]);\n addedSet.add(item);\n allAddedDomainValues.add(item);\n }\n });\n return ({\n ...axisId,\n annotations: column.spec.axesSpec[idx].annotations,\n });\n });\n return addedSet;\n });\n [...allAddedDomainValues].forEach((addedPart) => {\n if (addedByVariantsDomainValues.some((s) => !s.has(addedPart))) {\n addedNotToAllVariantsDomainValues.add(addedPart);\n }\n });\n\n const additionalColumns = secondaryIdsVariants.map((idsList, idx) => {\n const id = colId(column.id, idsList.map((id) => id.domain));\n\n const label = readAnnotation(column.spec, Annotation.Label) ?? '';\n const labelDomainPart = ([...addedByVariantsDomainValues[idx]])\n .filter((str) => addedNotToAllVariantsDomainValues.has(str))\n .sort()\n .map((v) => JSON.parse(v)?.[1]) // use in labels only domain values, but sort them by key to save the same order in all column variants\n .join(' / ');\n\n const annotations: Annotation = {\n ...column.spec.annotations,\n [Annotation.Graph.IsVirtual]: stringifyJson(true),\n };\n if (label || labelDomainPart) {\n annotations[Annotation.Label] = label && labelDomainPart ? label + ' / ' + labelDomainPart : label + labelDomainPart;\n }\n\n return {\n id: id as PObjectId,\n spec: {\n ...column.spec,\n axesSpec: idsList.map((axisId, idx) => ({\n ...axisId,\n annotations: column.spec.axesSpec[idx].annotations,\n })),\n annotations,\n },\n data: column.data,\n };\n });\n\n return [column, ...additionalColumns];\n}\n\n/**\n The aim of createPFrameForGraphs: to create pframe with block’s columns and all compatible columns from result pool\n (including linker columns and all label columns).\n Block’s columns are added to pframe as is.\n Other columns are added basing on set of axes of block’s columns, considering available with linker columns.\n Compatible columns must have at least one axis from block’s axes set. This axis of the compatible column from\n result pool must satisfy matchAxisId (it can have less domain keys than in block’s axis, but without conflicting values\n among existing ones).\n In requests to pframe (calculateTableData) columns must have strictly the same axes. For compatibility in case\n of partially matched axis we add to pframe a copy of this column with modified axis (with filled missed domains)\n and modified label (with added domain values in case if more than one copy with different domains exist).\n */\nexport function createPFrameForGraphs<A, U>(\n ctx: RenderCtx<A, U>,\n blockColumns?: PColumn<PColumnDataUniversal>[],\n): PFrameHandle | undefined {\n // if current block doesn't produce own columns then use all columns from result pool\n if (!blockColumns) {\n const columns = new PColumnCollection();\n columns.addColumnProvider(ctx.resultPool);\n\n const allColumns = columns.getColumns((spec) => !isHiddenFromGraphColumn(spec), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? [];\n // if at least one column is not yet ready, we can't show the graph\n if (!allPColumnsReady(allColumns)) {\n return undefined;\n }\n\n const allAxes: AxesVault = new Map(allColumns\n .flatMap((column) => getNormalizedAxesList(column.spec.axesSpec))\n .map((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return [canonicalizeJson(axisId), axisSpec];\n }));\n\n // additional columns are duplicates with extra fields in domains for compatibility if there are ones with partial match\n const extendedColumns = enrichCompatible(allAxes, allColumns);\n\n return ctx.createPFrame(extendedColumns);\n };\n\n if (!allPColumnsReady(blockColumns)) {\n return undefined;\n }\n\n // if current block has its own columns then take from result pool only compatible with them\n const columns = new PColumnCollection();\n columns.addColumnProvider(ctx.resultPool);\n columns.addColumns(blockColumns);\n\n // all possible axes from block columns\n const blockAxes: AxesVault = new Map();\n // axes from block columns and compatible result pool columns\n const allAxes: AxesVault = new Map();\n for (const c of blockColumns) {\n for (const spec of getNormalizedAxesList(c.spec.axesSpec)) {\n const aid = getAxisId(spec);\n blockAxes.set(canonicalizeJson(aid), spec);\n allAxes.set(canonicalizeJson(aid), spec);\n }\n }\n\n // all linker columns always go to pFrame - even it's impossible to use some of them they all are hidden\n const linkerColumns = columns.getColumns((spec) => isLinkerColumn(spec)) ?? [];\n const availableWithLinkersAxes = getAvailableWithLinkersAxes(linkerColumns, blockAxes);\n\n // all possible axes from connected linkers\n for (const item of availableWithLinkersAxes) {\n blockAxes.set(...item);\n allAxes.set(...item);\n }\n\n // all compatible with block columns but without label columns\n let compatibleWithoutLabels = (columns.getColumns((spec) => !isHiddenFromGraphColumn(spec) && spec.axesSpec.some((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return Array.from(blockAxes.values()).some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));\n }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => !isLabelColumn(column.spec));\n\n // if at least one column is not yet ready, we can't show the graph\n if (!allPColumnsReady(compatibleWithoutLabels)) {\n return undefined;\n }\n\n // extend axes set for label columns request\n for (const c of compatibleWithoutLabels) {\n for (const spec of getNormalizedAxesList(c.spec.axesSpec)) {\n const aid = getAxisId(spec);\n allAxes.set(canonicalizeJson(aid), spec);\n }\n }\n\n // extend allowed columns - add columns thad doesn't have axes from block, but have all axes in 'allAxes' list (that means all axes from linkers or from 'hanging' of other selected columns)\n compatibleWithoutLabels = (columns.getColumns((spec) => !isHiddenFromGraphColumn(spec) && spec.axesSpec.every((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return Array.from(allAxes.values()).some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));\n }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => !isLabelColumn(column.spec));\n\n // label columns must be compatible with full set of axes - block axes and axes from compatible columns from result pool\n const compatibleLabels = (columns.getColumns((spec) => !isHiddenFromGraphColumn(spec) && spec.axesSpec.some((axisSpec) => {\n const axisId = getAxisId(axisSpec);\n return Array.from(allAxes.values()).some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));\n }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => isLabelColumn(column.spec));\n\n // if at least one column is not yet ready, we can't show the graph\n if (!allPColumnsReady(compatibleLabels)) {\n return undefined;\n }\n\n const compatible = [...compatibleWithoutLabels, ...compatibleLabels];\n\n // additional columns are duplicates with extra fields in domains for compatibility if there are ones with partial match\n const extendedColumns = enrichCompatible(blockAxes, compatible);\n\n return ctx.createPFrame(extendedColumns);\n}\n"],"names":[],"mappings":"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"}
@@ -2,9 +2,9 @@
2
2
 
3
3
  var plModelCommon = require('@milaboratories/pl-model-common');
4
4
  require('canonicalize');
5
- var accessor = require('../render/accessor.cjs');
6
5
  var column_collection = require('../render/util/column_collection.cjs');
7
6
  require('../render/util/label.cjs');
7
+ var pcolumn_data = require('../render/util/pcolumn_data.cjs');
8
8
  var PFrameForGraphs = require('./PFrameForGraphs.cjs');
9
9
 
10
10
  function makeDefaultPTableParams() {
@@ -137,41 +137,6 @@ function getMatchingLabelColumns(columns, allLabelColumns) {
137
137
  }
138
138
  return labelColumns;
139
139
  }
140
- /** Check if all columns are computed */
141
- function allColumnsComputed(columns) {
142
- const isValues = (d) => Array.isArray(d);
143
- const isAccessor = (d) => d instanceof accessor.TreeNodeAccessor;
144
- const isDataInfo = (d) => typeof d === 'object' && 'type' in d;
145
- return columns
146
- .map((c) => c.data)
147
- .every((d) => {
148
- if (isValues(d)) {
149
- return true;
150
- }
151
- else if (isAccessor(d)) {
152
- return d.getIsReadyOrError();
153
- }
154
- else if (isDataInfo(d)) {
155
- const type = d.type;
156
- switch (type) {
157
- case 'Json':
158
- return true;
159
- case 'JsonPartitioned':
160
- return Object.values(d.parts).every((p) => p.getIsReadyOrError());
161
- case 'BinaryPartitioned':
162
- return Object.values(d.parts)
163
- .every((p) => p.index.getIsReadyOrError() && p.values.getIsReadyOrError());
164
- case 'ParquetPartitioned':
165
- return Object.values(d.parts)
166
- .every((p) => p.getIsReadyOrError());
167
- }
168
- }
169
- else {
170
- // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
171
- throw Error(`unsupported column data type: ${d}`);
172
- }
173
- });
174
- }
175
140
  function createPTableDef(params) {
176
141
  let coreColumns = params.columns;
177
142
  const secondaryColumns = [];
@@ -263,6 +228,8 @@ function createPlDataTableV2(ctx, inputColumns, tableState, ops) {
263
228
  coreColumnPredicate: ops?.coreColumnPredicate,
264
229
  });
265
230
  const fullHandle = ctx.createPTable(fullDef);
231
+ if (!fullHandle)
232
+ return undefined;
266
233
  const hiddenColumns = new Set((() => {
267
234
  // Inner join works as a filter - all columns must be present
268
235
  if (coreJoinType === 'inner')
@@ -291,7 +258,7 @@ function createPlDataTableV2(ctx, inputColumns, tableState, ops) {
291
258
  const visibleColumns = columns.filter((c) => !hiddenColumns.has(c.id));
292
259
  const visibleLabelColumns = getMatchingLabelColumns(visibleColumns.map(plModelCommon.getColumnIdAndSpec), allLabelColumns);
293
260
  // if at least one column is not yet computed, we can't show the table
294
- if (!allColumnsComputed([...visibleColumns, ...visibleLabelColumns]))
261
+ if (!pcolumn_data.allPColumnsReady([...visibleColumns, ...visibleLabelColumns]))
295
262
  return undefined;
296
263
  const visibleDef = createPTableDef({
297
264
  columns: visibleColumns,
@@ -303,6 +270,8 @@ function createPlDataTableV2(ctx, inputColumns, tableState, ops) {
303
270
  coreColumnPredicate,
304
271
  });
305
272
  const visibleHandle = ctx.createPTable(visibleDef);
273
+ if (!visibleHandle)
274
+ return undefined;
306
275
  return {
307
276
  sourceId: tableStateNormalized.pTableParams.sourceId,
308
277
  fullTableHandle: fullHandle,
@@ -322,7 +291,6 @@ function createPlDataTableSheet(ctx, axis, values) {
322
291
  };
323
292
  }
324
293
 
325
- exports.allColumnsComputed = allColumnsComputed;
326
294
  exports.createPlDataTableSheet = createPlDataTableSheet;
327
295
  exports.createPlDataTableStateV2 = createPlDataTableStateV2;
328
296
  exports.createPlDataTableV2 = createPlDataTableV2;