@platforma-sdk/model 1.45.23 → 1.45.26

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.
@@ -199,10 +199,11 @@ function createPFrameForGraphs(ctx, blockColumns) {
199
199
  blockAxes.set(...item);
200
200
  allAxes.set(...item);
201
201
  }
202
+ const blockAxesArr = Array.from(blockAxes.values());
202
203
  // all compatible with block columns but without label columns
203
204
  let compatibleWithoutLabels = (columns.getColumns((spec) => !isHiddenFromGraphColumn(spec) && spec.axesSpec.some((axisSpec) => {
204
205
  const axisId = plModelCommon.getAxisId(axisSpec);
205
- return Array.from(blockAxes.values()).some((selectorAxisSpec) => plModelCommon.matchAxisId(plModelCommon.getAxisId(selectorAxisSpec), axisId));
206
+ return blockAxesArr.some((selectorAxisSpec) => plModelCommon.matchAxisId(plModelCommon.getAxisId(selectorAxisSpec), axisId));
206
207
  }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => !PlDataTable.isLabelColumn(column.spec));
207
208
  // if at least one column is not yet ready, we can't show the graph
208
209
  if (!pcolumn_data.allPColumnsReady(compatibleWithoutLabels)) {
@@ -215,15 +216,16 @@ function createPFrameForGraphs(ctx, blockColumns) {
215
216
  allAxes.set(plModelCommon.canonicalizeJson(aid), spec);
216
217
  }
217
218
  }
219
+ const allAxesArr = Array.from(allAxes.values());
218
220
  // 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)
219
221
  compatibleWithoutLabels = (columns.getColumns((spec) => !isHiddenFromGraphColumn(spec) && spec.axesSpec.every((axisSpec) => {
220
222
  const axisId = plModelCommon.getAxisId(axisSpec);
221
- return Array.from(allAxes.values()).some((selectorAxisSpec) => plModelCommon.matchAxisId(plModelCommon.getAxisId(selectorAxisSpec), axisId));
223
+ return allAxesArr.some((selectorAxisSpec) => plModelCommon.matchAxisId(plModelCommon.getAxisId(selectorAxisSpec), axisId));
222
224
  }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => !PlDataTable.isLabelColumn(column.spec));
223
225
  // label columns must be compatible with full set of axes - block axes and axes from compatible columns from result pool
224
226
  const compatibleLabels = (columns.getColumns((spec) => !isHiddenFromGraphColumn(spec) && spec.axesSpec.some((axisSpec) => {
225
227
  const axisId = plModelCommon.getAxisId(axisSpec);
226
- return Array.from(allAxes.values()).some((selectorAxisSpec) => plModelCommon.matchAxisId(plModelCommon.getAxisId(selectorAxisSpec), axisId));
228
+ return allAxesArr.some((selectorAxisSpec) => plModelCommon.matchAxisId(plModelCommon.getAxisId(selectorAxisSpec), axisId));
227
229
  }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => PlDataTable.isLabelColumn(column.spec));
228
230
  // if at least one column is not yet ready, we can't show the graph
229
231
  if (!pcolumn_data.allPColumnsReady(compatibleLabels)) {
@@ -238,5 +240,6 @@ function createPFrameForGraphs(ctx, blockColumns) {
238
240
  exports.createPFrameForGraphs = createPFrameForGraphs;
239
241
  exports.enrichCompatible = enrichCompatible;
240
242
  exports.getAvailableWithLinkersAxes = getAvailableWithLinkersAxes;
243
+ exports.isHiddenFromGraphColumn = isHiddenFromGraphColumn;
241
244
  exports.isLinkerColumn = isLinkerColumn;
242
245
  //# 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 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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"}
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 Annotation,\n canonicalizeJson,\n getArrayFromAxisTree,\n getAxesTree,\n getAxisId,\n getColumnIdAndSpec,\n getNormalizedAxesList,\n LinkerMap,\n matchAxisId,\n readAnnotation,\n readAnnotationJson,\n stringifyJson,\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\nexport function 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 const blockAxesArr = Array.from(blockAxes.values());\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 blockAxesArr.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 const allAxesArr = Array.from(allAxes.values());\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 allAxesArr.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 allAxesArr.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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"}
@@ -2,6 +2,7 @@ import type { AxisId, AxisSpecNormalized, CanonicalizedJson, PColumn, PColumnSpe
2
2
  import type { PColumnDataUniversal, RenderCtx } from '../render';
3
3
  /** Check if column is a linker column */
4
4
  export declare function isLinkerColumn(column: PColumnSpec): boolean;
5
+ export declare function isHiddenFromGraphColumn(column: PColumnSpec): boolean;
5
6
  type AxesVault = Map<CanonicalizedJson<AxisId>, AxisSpecNormalized>;
6
7
  export declare function getAvailableWithLinkersAxes(linkerColumns: PColumn<PColumnDataUniversal>[], blockAxes: AxesVault): AxesVault;
7
8
  /** Add columns with fully compatible axes created from partial compatible ones */
@@ -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;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
+ {"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;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAEpE;AAED,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,CAoG1B"}
@@ -197,10 +197,11 @@ function createPFrameForGraphs(ctx, blockColumns) {
197
197
  blockAxes.set(...item);
198
198
  allAxes.set(...item);
199
199
  }
200
+ const blockAxesArr = Array.from(blockAxes.values());
200
201
  // all compatible with block columns but without label columns
201
202
  let compatibleWithoutLabels = (columns.getColumns((spec) => !isHiddenFromGraphColumn(spec) && spec.axesSpec.some((axisSpec) => {
202
203
  const axisId = getAxisId(axisSpec);
203
- return Array.from(blockAxes.values()).some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));
204
+ return blockAxesArr.some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));
204
205
  }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => !isLabelColumn(column.spec));
205
206
  // if at least one column is not yet ready, we can't show the graph
206
207
  if (!allPColumnsReady(compatibleWithoutLabels)) {
@@ -213,15 +214,16 @@ function createPFrameForGraphs(ctx, blockColumns) {
213
214
  allAxes.set(canonicalizeJson(aid), spec);
214
215
  }
215
216
  }
217
+ const allAxesArr = Array.from(allAxes.values());
216
218
  // 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)
217
219
  compatibleWithoutLabels = (columns.getColumns((spec) => !isHiddenFromGraphColumn(spec) && spec.axesSpec.every((axisSpec) => {
218
220
  const axisId = getAxisId(axisSpec);
219
- return Array.from(allAxes.values()).some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));
221
+ return allAxesArr.some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));
220
222
  }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => !isLabelColumn(column.spec));
221
223
  // label columns must be compatible with full set of axes - block axes and axes from compatible columns from result pool
222
224
  const compatibleLabels = (columns.getColumns((spec) => !isHiddenFromGraphColumn(spec) && spec.axesSpec.some((axisSpec) => {
223
225
  const axisId = getAxisId(axisSpec);
224
- return Array.from(allAxes.values()).some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));
226
+ return allAxesArr.some((selectorAxisSpec) => matchAxisId(getAxisId(selectorAxisSpec), axisId));
225
227
  }), { dontWaitAllData: true, overrideLabelAnnotation: false }) ?? []).filter((column) => isLabelColumn(column.spec));
226
228
  // if at least one column is not yet ready, we can't show the graph
227
229
  if (!allPColumnsReady(compatibleLabels)) {
@@ -233,5 +235,5 @@ function createPFrameForGraphs(ctx, blockColumns) {
233
235
  return ctx.createPFrame(extendedColumns);
234
236
  }
235
237
 
236
- export { createPFrameForGraphs, enrichCompatible, getAvailableWithLinkersAxes, isLinkerColumn };
238
+ export { createPFrameForGraphs, enrichCompatible, getAvailableWithLinkersAxes, isHiddenFromGraphColumn, isLinkerColumn };
237
239
  //# 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 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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"}
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 Annotation,\n canonicalizeJson,\n getArrayFromAxisTree,\n getAxesTree,\n getAxisId,\n getColumnIdAndSpec,\n getNormalizedAxesList,\n LinkerMap,\n matchAxisId,\n readAnnotation,\n readAnnotationJson,\n stringifyJson,\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\nexport function 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 const blockAxesArr = Array.from(blockAxes.values());\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 blockAxesArr.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 const allAxesArr = Array.from(allAxes.values());\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 allAxesArr.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 allAxesArr.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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"filters_ui.cjs","sources":["../../../src/components/PlAnnotations/filters_ui.ts"],"sourcesContent":["// @DEPRECATED - use sdk/model/src/filters + sdk/model/src/annotations\nimport type { SUniversalPColumnId } from '@milaboratories/pl-model-common';\nimport type { FilterSpecUi } from '../../annotations';\nimport type { FilterSpec, FilterSpecLeaf } from '../../filters';\nimport type { AnnotationFilter, AnnotationMode, AnnotationScript, IsNA, NotFilter, NumericalComparisonFilter, PatternFilter, PatternPredicate, ValueRank } from './filter';\n\nexport type FilterUi = FilterSpec<Extract<\n FilterSpecLeaf,\n // supported filters\n { type:\n | 'lessThan'\n | 'greaterThan'\n | 'lessThanOrEqual'\n | 'greaterThanOrEqual'\n | 'lessThanColumn'\n | 'lessThanColumnOrEqual'\n | 'patternContainSubsequence'\n | 'patternNotContainSubsequence'\n | 'patternEquals'\n | 'patternNotEquals'\n | 'topN'\n | 'bottomN'\n | 'isNA'\n | 'isNotNA';\n }\n>, { id?: number; name?: string; isExpanded?: boolean }>;\n\nexport type FilterUiType = Exclude<FilterUi, { type: undefined }>['type'];\n\nexport type FilterUiOfType<T extends FilterUiType> = Extract<FilterUi, { type: T }>;\n\n// DEPRECATED - use lib/ui/uikit/src/composition/filters\nexport function unreachable(x: never): never {\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n throw new Error('Unexpected object: ' + x);\n}\n\nexport type TypeToLiteral<T> =\n [T] extends [FilterUiType] ? 'FilterUiType' :\n [T] extends [SUniversalPColumnId] ? 'SUniversalPColumnId' :\n [T] extends [PatternPredicate] ? 'PatternPredicate' :\n [T] extends [AnnotationFilter[]] ? 'AnnotationFilter[]' :\n [T] extends [AnnotationFilter] ? 'AnnotationFilter' :\n [T] extends [number] ? 'number' :\n [T] extends [number | undefined] ? 'number?' :\n [T] extends [string] ? 'string' :\n [T] extends [string | undefined] ? 'string?' :\n [T] extends [boolean] ? 'boolean' :\n [T] extends [boolean | undefined] ? 'boolean?' :\n [T] extends [unknown[]] ? 'unknown[]' :\n // this is special\n T extends number ? 'number' :\n T extends string ? 'string' :\n T extends boolean ? 'boolean' :\n T extends Record<string, unknown> ? 'form' :\n 'unknown';\n\n// @TODO: \"parse\" option\nexport type TypeField<V> = {\n fieldType: TypeToLiteral<V>;\n label: string;\n defaultValue: () => V | undefined;\n};\n\nexport type TypeFieldRecord<T extends FilterUi> = { [K in keyof T]: TypeField<T[K]>; };\n\nexport type TypeForm<T> = {\n [P in keyof T]: T[P] extends Record<string, unknown> ? {\n fieldType: 'form';\n label?: string;\n form?: T[P] extends Record<string, unknown> ? TypeForm<T[P]> : undefined;\n defaultValue: () => T[P];\n } : TypeField<T[P]>;\n};\n\nexport type FormField =\n {\n fieldType: 'form';\n form?: Record<string, FormField>;\n defaultValue: () => Record<string, unknown>;\n }\n | TypeField<FilterUiType>\n | TypeField<string>\n | TypeField<number>\n | TypeField<number | undefined>\n | TypeField<boolean>\n | TypeField<boolean | undefined>\n | TypeField<SUniversalPColumnId>;\n\nexport type AnyForm = Record<string, FormField>;\n\nexport type AnnotationStepUi = FilterSpecUi<Extract<FilterUi, { type: 'and' | 'or' }>> & { id: number };\n\nexport type AnnotationScriptUi = {\n isCreated?: boolean;\n title: string;\n mode: AnnotationMode;\n steps: AnnotationStepUi[];\n};\n\nexport function compileFilter(ui: FilterUi): AnnotationFilter {\n if (ui.type === 'or') {\n return {\n type: 'or' as const,\n filters: compileFilters(ui.filters),\n };\n }\n\n if (ui.type === 'and') {\n return {\n type: 'and' as const,\n filters: compileFilters(ui.filters),\n };\n }\n\n if (ui.type === 'not') {\n return {\n type: 'not' as const,\n filter: compileFilter(ui.filter),\n };\n }\n\n if (ui.type === 'isNA') {\n return {\n type: 'isNA' as const,\n column: ui.column,\n };\n }\n\n if (ui.type === 'isNotNA') {\n const isNAFilter: IsNA = { type: 'isNA', column: ui.column };\n const notFilter: NotFilter = { type: 'not', filter: isNAFilter };\n return notFilter;\n }\n\n if (ui.type === 'patternEquals') {\n return {\n type: 'pattern' as const,\n column: ui.column,\n predicate: {\n type: 'equals' as const,\n value: ui.value,\n },\n };\n }\n\n if (ui.type === 'patternNotEquals') {\n const patternFilter: PatternFilter = {\n type: 'pattern',\n column: ui.column,\n predicate: { type: 'equals', value: ui.value },\n };\n const notFilter: NotFilter = { type: 'not', filter: patternFilter };\n return notFilter;\n }\n\n if (ui.type === 'patternContainSubsequence') {\n return {\n type: 'pattern' as const,\n column: ui.column,\n predicate: {\n type: 'containSubsequence' as const,\n value: ui.value,\n },\n };\n }\n\n if (ui.type === 'patternNotContainSubsequence') {\n const patternFilter: PatternFilter = {\n type: 'pattern',\n column: ui.column,\n predicate: { type: 'containSubsequence', value: ui.value },\n };\n const notFilter: NotFilter = { type: 'not', filter: patternFilter };\n return notFilter;\n }\n\n if (ui.type === 'topN') {\n const rankTransform: ValueRank = {\n transformer: 'rank',\n column: ui.column,\n descending: true,\n };\n const comparisonFilter: NumericalComparisonFilter = {\n type: 'numericalComparison',\n lhs: rankTransform,\n rhs: ui.n,\n allowEqual: true,\n };\n return comparisonFilter;\n }\n\n if (ui.type === 'bottomN') {\n const rankTransform: ValueRank = {\n transformer: 'rank',\n column: ui.column,\n };\n const comparisonFilter: NumericalComparisonFilter = {\n type: 'numericalComparison',\n lhs: rankTransform,\n rhs: ui.n,\n allowEqual: true,\n };\n return comparisonFilter;\n }\n\n if (ui.type === 'lessThan') {\n return {\n type: 'numericalComparison' as const,\n lhs: ui.column,\n rhs: ui.x,\n };\n }\n\n if (ui.type === 'greaterThan') {\n return {\n type: 'numericalComparison' as const,\n rhs: ui.column,\n lhs: ui.x,\n };\n }\n\n if (ui.type === 'greaterThanOrEqual') {\n return {\n type: 'numericalComparison' as const,\n rhs: ui.column,\n lhs: ui.x,\n allowEqual: true,\n };\n }\n\n if (ui.type === 'lessThanOrEqual') {\n return {\n type: 'numericalComparison' as const,\n lhs: ui.column,\n rhs: ui.x,\n allowEqual: true,\n };\n }\n\n if (ui.type === 'lessThanColumn') {\n return {\n type: 'numericalComparison' as const,\n lhs: ui.column,\n rhs: ui.rhs,\n minDiff: ui.minDiff,\n allowEqual: undefined,\n };\n }\n\n if (ui.type === 'lessThanColumnOrEqual') {\n return {\n type: 'numericalComparison' as const,\n lhs: ui.column,\n rhs: ui.rhs,\n minDiff: ui.minDiff,\n allowEqual: true,\n };\n }\n\n unreachable(ui);\n}\n\nexport function compileFilters(uiFilters: FilterUi[]): AnnotationFilter[] {\n return uiFilters.filter((f) => f.type !== undefined).map(compileFilter);\n}\n\nexport function compileAnnotationScript(uiScript: AnnotationScriptUi): AnnotationScript {\n return {\n title: uiScript.title,\n mode: uiScript.mode,\n steps: uiScript.steps\n .filter((step) => {\n // No need to compile empty steps\n if (step.filter.type == null) {\n return false;\n }\n\n if (step.filter.type === 'or') {\n return step.filter.filters.length > 0;\n }\n\n if (step.filter.type === 'and') {\n return step.filter.filters.length > 0;\n }\n\n return false;\n })\n .map((step) => ({\n label: step.label.trim(),\n filter: compileFilter(step.filter),\n })),\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"filters_ui.cjs","sources":["../../../src/components/PlAnnotations/filters_ui.ts"],"sourcesContent":["// @DEPRECATED - use sdk/model/src/filters + sdk/model/src/annotations\nimport type { SUniversalPColumnId } from '@milaboratories/pl-model-common';\nimport type { FilterSpecUi } from '../../annotations';\nimport type { FilterSpec, FilterSpecLeaf } from '../../filters';\nimport type { AnnotationFilter, AnnotationMode, AnnotationScript, IsNA, NotFilter, NumericalComparisonFilter, PatternFilter, PatternPredicate, ValueRank } from './filter';\n\nexport type FilterUi = FilterSpec<Extract<\n FilterSpecLeaf,\n // supported filters\n { type:\n | 'lessThan'\n | 'greaterThan'\n | 'lessThanOrEqual'\n | 'greaterThanOrEqual'\n | 'lessThanColumn'\n | 'lessThanColumnOrEqual'\n | 'patternContainSubsequence'\n | 'patternNotContainSubsequence'\n | 'patternEquals'\n | 'patternNotEquals'\n | 'topN'\n | 'bottomN'\n | 'isNA'\n | 'isNotNA';\n }\n>, { id: number; name?: string; isExpanded?: boolean }>;\n\nexport type FilterUiType = Exclude<FilterUi, { type: undefined }>['type'];\n\nexport type FilterUiOfType<T extends FilterUiType> = Extract<FilterUi, { type: T }>;\n\n// DEPRECATED - use lib/ui/uikit/src/composition/filters\nexport function unreachable(x: never): never {\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n throw new Error('Unexpected object: ' + x);\n}\n\nexport type TypeToLiteral<T> =\n [T] extends [FilterUiType] ? 'FilterUiType' :\n [T] extends [SUniversalPColumnId] ? 'SUniversalPColumnId' :\n [T] extends [PatternPredicate] ? 'PatternPredicate' :\n [T] extends [AnnotationFilter[]] ? 'AnnotationFilter[]' :\n [T] extends [AnnotationFilter] ? 'AnnotationFilter' :\n [T] extends [number] ? 'number' :\n [T] extends [number | undefined] ? 'number?' :\n [T] extends [string] ? 'string' :\n [T] extends [string | undefined] ? 'string?' :\n [T] extends [boolean] ? 'boolean' :\n [T] extends [boolean | undefined] ? 'boolean?' :\n [T] extends [unknown[]] ? 'unknown[]' :\n // this is special\n T extends number ? 'number' :\n T extends string ? 'string' :\n T extends boolean ? 'boolean' :\n T extends Record<string, unknown> ? 'form' :\n 'unknown';\n\n// @TODO: \"parse\" option\nexport type TypeField<V> = {\n fieldType: TypeToLiteral<V>;\n label: string;\n defaultValue: () => V | undefined;\n};\n\nexport type TypeFieldRecord<T extends FilterUi> = { [K in keyof T]: TypeField<T[K]>; };\n\nexport type TypeForm<T> = {\n [P in keyof T]: T[P] extends Record<string, unknown> ? {\n fieldType: 'form';\n label?: string;\n form?: T[P] extends Record<string, unknown> ? TypeForm<T[P]> : undefined;\n defaultValue: () => T[P];\n } : TypeField<T[P]>;\n};\n\nexport type FormField =\n {\n fieldType: 'form';\n form?: Record<string, FormField>;\n defaultValue: () => Record<string, unknown>;\n }\n | TypeField<FilterUiType>\n | TypeField<string>\n | TypeField<number>\n | TypeField<number | undefined>\n | TypeField<boolean>\n | TypeField<boolean | undefined>\n | TypeField<SUniversalPColumnId>;\n\nexport type AnyForm = Record<string, FormField>;\n\nexport type AnnotationStepUi = FilterSpecUi<Extract<FilterUi, { type: 'and' | 'or' }>> & { id: number };\n\nexport type AnnotationScriptUi = {\n isCreated?: boolean;\n title: string;\n mode: AnnotationMode;\n steps: AnnotationStepUi[];\n};\n\nexport function compileFilter(ui: FilterUi): AnnotationFilter {\n if (ui.type === 'or') {\n return {\n type: 'or' as const,\n filters: compileFilters(ui.filters),\n };\n }\n\n if (ui.type === 'and') {\n return {\n type: 'and' as const,\n filters: compileFilters(ui.filters),\n };\n }\n\n if (ui.type === 'not') {\n return {\n type: 'not' as const,\n filter: compileFilter(ui.filter),\n };\n }\n\n if (ui.type === 'isNA') {\n return {\n type: 'isNA' as const,\n column: ui.column,\n };\n }\n\n if (ui.type === 'isNotNA') {\n const isNAFilter: IsNA = { type: 'isNA', column: ui.column };\n const notFilter: NotFilter = { type: 'not', filter: isNAFilter };\n return notFilter;\n }\n\n if (ui.type === 'patternEquals') {\n return {\n type: 'pattern' as const,\n column: ui.column,\n predicate: {\n type: 'equals' as const,\n value: ui.value,\n },\n };\n }\n\n if (ui.type === 'patternNotEquals') {\n const patternFilter: PatternFilter = {\n type: 'pattern',\n column: ui.column,\n predicate: { type: 'equals', value: ui.value },\n };\n const notFilter: NotFilter = { type: 'not', filter: patternFilter };\n return notFilter;\n }\n\n if (ui.type === 'patternContainSubsequence') {\n return {\n type: 'pattern' as const,\n column: ui.column,\n predicate: {\n type: 'containSubsequence' as const,\n value: ui.value,\n },\n };\n }\n\n if (ui.type === 'patternNotContainSubsequence') {\n const patternFilter: PatternFilter = {\n type: 'pattern',\n column: ui.column,\n predicate: { type: 'containSubsequence', value: ui.value },\n };\n const notFilter: NotFilter = { type: 'not', filter: patternFilter };\n return notFilter;\n }\n\n if (ui.type === 'topN') {\n const rankTransform: ValueRank = {\n transformer: 'rank',\n column: ui.column,\n descending: true,\n };\n const comparisonFilter: NumericalComparisonFilter = {\n type: 'numericalComparison',\n lhs: rankTransform,\n rhs: ui.n,\n allowEqual: true,\n };\n return comparisonFilter;\n }\n\n if (ui.type === 'bottomN') {\n const rankTransform: ValueRank = {\n transformer: 'rank',\n column: ui.column,\n };\n const comparisonFilter: NumericalComparisonFilter = {\n type: 'numericalComparison',\n lhs: rankTransform,\n rhs: ui.n,\n allowEqual: true,\n };\n return comparisonFilter;\n }\n\n if (ui.type === 'lessThan') {\n return {\n type: 'numericalComparison' as const,\n lhs: ui.column,\n rhs: ui.x,\n };\n }\n\n if (ui.type === 'greaterThan') {\n return {\n type: 'numericalComparison' as const,\n rhs: ui.column,\n lhs: ui.x,\n };\n }\n\n if (ui.type === 'greaterThanOrEqual') {\n return {\n type: 'numericalComparison' as const,\n rhs: ui.column,\n lhs: ui.x,\n allowEqual: true,\n };\n }\n\n if (ui.type === 'lessThanOrEqual') {\n return {\n type: 'numericalComparison' as const,\n lhs: ui.column,\n rhs: ui.x,\n allowEqual: true,\n };\n }\n\n if (ui.type === 'lessThanColumn') {\n return {\n type: 'numericalComparison' as const,\n lhs: ui.column,\n rhs: ui.rhs,\n minDiff: ui.minDiff,\n allowEqual: undefined,\n };\n }\n\n if (ui.type === 'lessThanColumnOrEqual') {\n return {\n type: 'numericalComparison' as const,\n lhs: ui.column,\n rhs: ui.rhs,\n minDiff: ui.minDiff,\n allowEqual: true,\n };\n }\n\n unreachable(ui);\n}\n\nexport function compileFilters(uiFilters: FilterUi[]): AnnotationFilter[] {\n return uiFilters.filter((f) => f.type !== undefined).map(compileFilter);\n}\n\nexport function compileAnnotationScript(uiScript: AnnotationScriptUi): AnnotationScript {\n return {\n title: uiScript.title,\n mode: uiScript.mode,\n steps: uiScript.steps\n .filter((step) => {\n // No need to compile empty steps\n if (step.filter.type == null) {\n return false;\n }\n\n if (step.filter.type === 'or') {\n return step.filter.filters.length > 0;\n }\n\n if (step.filter.type === 'and') {\n return step.filter.filters.length > 0;\n }\n\n return false;\n })\n .map((step) => ({\n label: step.label.trim(),\n filter: compileFilter(step.filter),\n })),\n };\n}\n"],"names":[],"mappings":";;AA+BA;AACM,SAAU,WAAW,CAAC,CAAQ,EAAA;;AAElC,IAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,CAAC,CAAC;AAC5C;AAiEM,SAAU,aAAa,CAAC,EAAY,EAAA;AACxC,IAAA,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI,EAAE;QACpB,OAAO;AACL,YAAA,IAAI,EAAE,IAAa;AACnB,YAAA,OAAO,EAAE,cAAc,CAAC,EAAE,CAAC,OAAO,CAAC;SACpC;IACH;AAEA,IAAA,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,EAAE;QACrB,OAAO;AACL,YAAA,IAAI,EAAE,KAAc;AACpB,YAAA,OAAO,EAAE,cAAc,CAAC,EAAE,CAAC,OAAO,CAAC;SACpC;IACH;AAEA,IAAA,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,EAAE;QACrB,OAAO;AACL,YAAA,IAAI,EAAE,KAAc;AACpB,YAAA,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC,MAAM,CAAC;SACjC;IACH;AAEA,IAAA,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,EAAE;QACtB,OAAO;AACL,YAAA,IAAI,EAAE,MAAe;YACrB,MAAM,EAAE,EAAE,CAAC,MAAM;SAClB;IACH;AAEA,IAAA,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,EAAE;AACzB,QAAA,MAAM,UAAU,GAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE;QAC5D,MAAM,SAAS,GAAc,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE;AAChE,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,IAAI,EAAE,CAAC,IAAI,KAAK,eAAe,EAAE;QAC/B,OAAO;AACL,YAAA,IAAI,EAAE,SAAkB;YACxB,MAAM,EAAE,EAAE,CAAC,MAAM;AACjB,YAAA,SAAS,EAAE;AACT,gBAAA,IAAI,EAAE,QAAiB;gBACvB,KAAK,EAAE,EAAE,CAAC,KAAK;AAChB,aAAA;SACF;IACH;AAEA,IAAA,IAAI,EAAE,CAAC,IAAI,KAAK,kBAAkB,EAAE;AAClC,QAAA,MAAM,aAAa,GAAkB;AACnC,YAAA,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE;SAC/C;QACD,MAAM,SAAS,GAAc,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE;AACnE,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,IAAI,EAAE,CAAC,IAAI,KAAK,2BAA2B,EAAE;QAC3C,OAAO;AACL,YAAA,IAAI,EAAE,SAAkB;YACxB,MAAM,EAAE,EAAE,CAAC,MAAM;AACjB,YAAA,SAAS,EAAE;AACT,gBAAA,IAAI,EAAE,oBAA6B;gBACnC,KAAK,EAAE,EAAE,CAAC,KAAK;AAChB,aAAA;SACF;IACH;AAEA,IAAA,IAAI,EAAE,CAAC,IAAI,KAAK,8BAA8B,EAAE;AAC9C,QAAA,MAAM,aAAa,GAAkB;AACnC,YAAA,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,SAAS,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE;SAC3D;QACD,MAAM,SAAS,GAAc,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE;AACnE,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,EAAE;AACtB,QAAA,MAAM,aAAa,GAAc;AAC/B,YAAA,WAAW,EAAE,MAAM;YACnB,MAAM,EAAE,EAAE,CAAC,MAAM;AACjB,YAAA,UAAU,EAAE,IAAI;SACjB;AACD,QAAA,MAAM,gBAAgB,GAA8B;AAClD,YAAA,IAAI,EAAE,qBAAqB;AAC3B,YAAA,GAAG,EAAE,aAAa;YAClB,GAAG,EAAE,EAAE,CAAC,CAAC;AACT,YAAA,UAAU,EAAE,IAAI;SACjB;AACD,QAAA,OAAO,gBAAgB;IACzB;AAEA,IAAA,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,EAAE;AACzB,QAAA,MAAM,aAAa,GAAc;AAC/B,YAAA,WAAW,EAAE,MAAM;YACnB,MAAM,EAAE,EAAE,CAAC,MAAM;SAClB;AACD,QAAA,MAAM,gBAAgB,GAA8B;AAClD,YAAA,IAAI,EAAE,qBAAqB;AAC3B,YAAA,GAAG,EAAE,aAAa;YAClB,GAAG,EAAE,EAAE,CAAC,CAAC;AACT,YAAA,UAAU,EAAE,IAAI;SACjB;AACD,QAAA,OAAO,gBAAgB;IACzB;AAEA,IAAA,IAAI,EAAE,CAAC,IAAI,KAAK,UAAU,EAAE;QAC1B,OAAO;AACL,YAAA,IAAI,EAAE,qBAA8B;YACpC,GAAG,EAAE,EAAE,CAAC,MAAM;YACd,GAAG,EAAE,EAAE,CAAC,CAAC;SACV;IACH;AAEA,IAAA,IAAI,EAAE,CAAC,IAAI,KAAK,aAAa,EAAE;QAC7B,OAAO;AACL,YAAA,IAAI,EAAE,qBAA8B;YACpC,GAAG,EAAE,EAAE,CAAC,MAAM;YACd,GAAG,EAAE,EAAE,CAAC,CAAC;SACV;IACH;AAEA,IAAA,IAAI,EAAE,CAAC,IAAI,KAAK,oBAAoB,EAAE;QACpC,OAAO;AACL,YAAA,IAAI,EAAE,qBAA8B;YACpC,GAAG,EAAE,EAAE,CAAC,MAAM;YACd,GAAG,EAAE,EAAE,CAAC,CAAC;AACT,YAAA,UAAU,EAAE,IAAI;SACjB;IACH;AAEA,IAAA,IAAI,EAAE,CAAC,IAAI,KAAK,iBAAiB,EAAE;QACjC,OAAO;AACL,YAAA,IAAI,EAAE,qBAA8B;YACpC,GAAG,EAAE,EAAE,CAAC,MAAM;YACd,GAAG,EAAE,EAAE,CAAC,CAAC;AACT,YAAA,UAAU,EAAE,IAAI;SACjB;IACH;AAEA,IAAA,IAAI,EAAE,CAAC,IAAI,KAAK,gBAAgB,EAAE;QAChC,OAAO;AACL,YAAA,IAAI,EAAE,qBAA8B;YACpC,GAAG,EAAE,EAAE,CAAC,MAAM;YACd,GAAG,EAAE,EAAE,CAAC,GAAG;YACX,OAAO,EAAE,EAAE,CAAC,OAAO;AACnB,YAAA,UAAU,EAAE,SAAS;SACtB;IACH;AAEA,IAAA,IAAI,EAAE,CAAC,IAAI,KAAK,uBAAuB,EAAE;QACvC,OAAO;AACL,YAAA,IAAI,EAAE,qBAA8B;YACpC,GAAG,EAAE,EAAE,CAAC,MAAM;YACd,GAAG,EAAE,EAAE,CAAC,GAAG;YACX,OAAO,EAAE,EAAE,CAAC,OAAO;AACnB,YAAA,UAAU,EAAE,IAAI;SACjB;IACH;IAEA,WAAW,CAAC,EAAE,CAAC;AACjB;AAEM,SAAU,cAAc,CAAC,SAAqB,EAAA;IAClD,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC;AACzE;AAEM,SAAU,uBAAuB,CAAC,QAA4B,EAAA;IAClE,OAAO;QACL,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,KAAK,EAAE,QAAQ,CAAC;AACb,aAAA,MAAM,CAAC,CAAC,IAAI,KAAI;;YAEf,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,EAAE;AAC5B,gBAAA,OAAO,KAAK;YACd;YAEA,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE;gBAC7B,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YACvC;YAEA,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE;gBAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YACvC;AAEA,YAAA,OAAO,KAAK;AACd,QAAA,CAAC;AACA,aAAA,GAAG,CAAC,CAAC,IAAI,MAAM;AACd,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;AACxB,YAAA,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;AACnC,SAAA,CAAC,CAAC;KACN;AACH;;;;;;;"}
@@ -5,7 +5,7 @@ import type { AnnotationFilter, AnnotationMode, AnnotationScript, PatternPredica
5
5
  export type FilterUi = FilterSpec<Extract<FilterSpecLeaf, {
6
6
  type: 'lessThan' | 'greaterThan' | 'lessThanOrEqual' | 'greaterThanOrEqual' | 'lessThanColumn' | 'lessThanColumnOrEqual' | 'patternContainSubsequence' | 'patternNotContainSubsequence' | 'patternEquals' | 'patternNotEquals' | 'topN' | 'bottomN' | 'isNA' | 'isNotNA';
7
7
  }>, {
8
- id?: number;
8
+ id: number;
9
9
  name?: string;
10
10
  isExpanded?: boolean;
11
11
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"filters_ui.d.ts","sourceRoot":"","sources":["../../../src/components/PlAnnotations/filters_ui.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"filters_ui.d.ts","sourceRoot":"","sources":["../../../src/components/PlAnnotations/filters_ui.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"filters_ui.js","sources":["../../../src/components/PlAnnotations/filters_ui.ts"],"sourcesContent":["// @DEPRECATED - use sdk/model/src/filters + sdk/model/src/annotations\nimport type { SUniversalPColumnId } from '@milaboratories/pl-model-common';\nimport type { FilterSpecUi } from '../../annotations';\nimport type { FilterSpec, FilterSpecLeaf } from '../../filters';\nimport type { AnnotationFilter, AnnotationMode, AnnotationScript, IsNA, NotFilter, NumericalComparisonFilter, PatternFilter, PatternPredicate, ValueRank } from './filter';\n\nexport type FilterUi = FilterSpec<Extract<\n FilterSpecLeaf,\n // supported filters\n { type:\n | 'lessThan'\n | 'greaterThan'\n | 'lessThanOrEqual'\n | 'greaterThanOrEqual'\n | 'lessThanColumn'\n | 'lessThanColumnOrEqual'\n | 'patternContainSubsequence'\n | 'patternNotContainSubsequence'\n | 'patternEquals'\n | 'patternNotEquals'\n | 'topN'\n | 'bottomN'\n | 'isNA'\n | 'isNotNA';\n }\n>, { id?: number; name?: string; isExpanded?: boolean }>;\n\nexport type FilterUiType = Exclude<FilterUi, { type: undefined }>['type'];\n\nexport type FilterUiOfType<T extends FilterUiType> = Extract<FilterUi, { type: T }>;\n\n// DEPRECATED - use lib/ui/uikit/src/composition/filters\nexport function unreachable(x: never): never {\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n throw new Error('Unexpected object: ' + x);\n}\n\nexport type TypeToLiteral<T> =\n [T] extends [FilterUiType] ? 'FilterUiType' :\n [T] extends [SUniversalPColumnId] ? 'SUniversalPColumnId' :\n [T] extends [PatternPredicate] ? 'PatternPredicate' :\n [T] extends [AnnotationFilter[]] ? 'AnnotationFilter[]' :\n [T] extends [AnnotationFilter] ? 'AnnotationFilter' :\n [T] extends [number] ? 'number' :\n [T] extends [number | undefined] ? 'number?' :\n [T] extends [string] ? 'string' :\n [T] extends [string | undefined] ? 'string?' :\n [T] extends [boolean] ? 'boolean' :\n [T] extends [boolean | undefined] ? 'boolean?' :\n [T] extends [unknown[]] ? 'unknown[]' :\n // this is special\n T extends number ? 'number' :\n T extends string ? 'string' :\n T extends boolean ? 'boolean' :\n T extends Record<string, unknown> ? 'form' :\n 'unknown';\n\n// @TODO: \"parse\" option\nexport type TypeField<V> = {\n fieldType: TypeToLiteral<V>;\n label: string;\n defaultValue: () => V | undefined;\n};\n\nexport type TypeFieldRecord<T extends FilterUi> = { [K in keyof T]: TypeField<T[K]>; };\n\nexport type TypeForm<T> = {\n [P in keyof T]: T[P] extends Record<string, unknown> ? {\n fieldType: 'form';\n label?: string;\n form?: T[P] extends Record<string, unknown> ? TypeForm<T[P]> : undefined;\n defaultValue: () => T[P];\n } : TypeField<T[P]>;\n};\n\nexport type FormField =\n {\n fieldType: 'form';\n form?: Record<string, FormField>;\n defaultValue: () => Record<string, unknown>;\n }\n | TypeField<FilterUiType>\n | TypeField<string>\n | TypeField<number>\n | TypeField<number | undefined>\n | TypeField<boolean>\n | TypeField<boolean | undefined>\n | TypeField<SUniversalPColumnId>;\n\nexport type AnyForm = Record<string, FormField>;\n\nexport type AnnotationStepUi = FilterSpecUi<Extract<FilterUi, { type: 'and' | 'or' }>> & { id: number };\n\nexport type AnnotationScriptUi = {\n isCreated?: boolean;\n title: string;\n mode: AnnotationMode;\n steps: AnnotationStepUi[];\n};\n\nexport function compileFilter(ui: FilterUi): AnnotationFilter {\n if (ui.type === 'or') {\n return {\n type: 'or' as const,\n filters: compileFilters(ui.filters),\n };\n }\n\n if (ui.type === 'and') {\n return {\n type: 'and' as const,\n filters: compileFilters(ui.filters),\n };\n }\n\n if (ui.type === 'not') {\n return {\n type: 'not' as const,\n filter: compileFilter(ui.filter),\n };\n }\n\n if (ui.type === 'isNA') {\n return {\n type: 'isNA' as const,\n column: ui.column,\n };\n }\n\n if (ui.type === 'isNotNA') {\n const isNAFilter: IsNA = { type: 'isNA', column: ui.column };\n const notFilter: NotFilter = { type: 'not', filter: isNAFilter };\n return notFilter;\n }\n\n if (ui.type === 'patternEquals') {\n return {\n type: 'pattern' as const,\n column: ui.column,\n predicate: {\n type: 'equals' as const,\n value: ui.value,\n },\n };\n }\n\n if (ui.type === 'patternNotEquals') {\n const patternFilter: PatternFilter = {\n type: 'pattern',\n column: ui.column,\n predicate: { type: 'equals', value: ui.value },\n };\n const notFilter: NotFilter = { type: 'not', filter: patternFilter };\n return notFilter;\n }\n\n if (ui.type === 'patternContainSubsequence') {\n return {\n type: 'pattern' as const,\n column: ui.column,\n predicate: {\n type: 'containSubsequence' as const,\n value: ui.value,\n },\n };\n }\n\n if (ui.type === 'patternNotContainSubsequence') {\n const patternFilter: PatternFilter = {\n type: 'pattern',\n column: ui.column,\n predicate: { type: 'containSubsequence', value: ui.value },\n };\n const notFilter: NotFilter = { type: 'not', filter: patternFilter };\n return notFilter;\n }\n\n if (ui.type === 'topN') {\n const rankTransform: ValueRank = {\n transformer: 'rank',\n column: ui.column,\n descending: true,\n };\n const comparisonFilter: NumericalComparisonFilter = {\n type: 'numericalComparison',\n lhs: rankTransform,\n rhs: ui.n,\n allowEqual: true,\n };\n return comparisonFilter;\n }\n\n if (ui.type === 'bottomN') {\n const rankTransform: ValueRank = {\n transformer: 'rank',\n column: ui.column,\n };\n const comparisonFilter: NumericalComparisonFilter = {\n type: 'numericalComparison',\n lhs: rankTransform,\n rhs: ui.n,\n allowEqual: true,\n };\n return comparisonFilter;\n }\n\n if (ui.type === 'lessThan') {\n return {\n type: 'numericalComparison' as const,\n lhs: ui.column,\n rhs: ui.x,\n };\n }\n\n if (ui.type === 'greaterThan') {\n return {\n type: 'numericalComparison' as const,\n rhs: ui.column,\n lhs: ui.x,\n };\n }\n\n if (ui.type === 'greaterThanOrEqual') {\n return {\n type: 'numericalComparison' as const,\n rhs: ui.column,\n lhs: ui.x,\n allowEqual: true,\n };\n }\n\n if (ui.type === 'lessThanOrEqual') {\n return {\n type: 'numericalComparison' as const,\n lhs: ui.column,\n rhs: ui.x,\n allowEqual: true,\n };\n }\n\n if (ui.type === 'lessThanColumn') {\n return {\n type: 'numericalComparison' as const,\n lhs: ui.column,\n rhs: ui.rhs,\n minDiff: ui.minDiff,\n allowEqual: undefined,\n };\n }\n\n if (ui.type === 'lessThanColumnOrEqual') {\n return {\n type: 'numericalComparison' as const,\n lhs: ui.column,\n rhs: ui.rhs,\n minDiff: ui.minDiff,\n allowEqual: true,\n };\n }\n\n unreachable(ui);\n}\n\nexport function compileFilters(uiFilters: FilterUi[]): AnnotationFilter[] {\n return uiFilters.filter((f) => f.type !== undefined).map(compileFilter);\n}\n\nexport function compileAnnotationScript(uiScript: AnnotationScriptUi): AnnotationScript {\n return {\n title: uiScript.title,\n mode: uiScript.mode,\n steps: uiScript.steps\n .filter((step) => {\n // No need to compile empty steps\n if (step.filter.type == null) {\n return false;\n }\n\n if (step.filter.type === 'or') {\n return step.filter.filters.length > 0;\n }\n\n if (step.filter.type === 'and') {\n return step.filter.filters.length > 0;\n }\n\n return false;\n })\n .map((step) => ({\n label: step.label.trim(),\n filter: compileFilter(step.filter),\n })),\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"filters_ui.js","sources":["../../../src/components/PlAnnotations/filters_ui.ts"],"sourcesContent":["// @DEPRECATED - use sdk/model/src/filters + sdk/model/src/annotations\nimport type { SUniversalPColumnId } from '@milaboratories/pl-model-common';\nimport type { FilterSpecUi } from '../../annotations';\nimport type { FilterSpec, FilterSpecLeaf } from '../../filters';\nimport type { AnnotationFilter, AnnotationMode, AnnotationScript, IsNA, NotFilter, NumericalComparisonFilter, PatternFilter, PatternPredicate, ValueRank } from './filter';\n\nexport type FilterUi = FilterSpec<Extract<\n FilterSpecLeaf,\n // supported filters\n { type:\n | 'lessThan'\n | 'greaterThan'\n | 'lessThanOrEqual'\n | 'greaterThanOrEqual'\n | 'lessThanColumn'\n | 'lessThanColumnOrEqual'\n | 'patternContainSubsequence'\n | 'patternNotContainSubsequence'\n | 'patternEquals'\n | 'patternNotEquals'\n | 'topN'\n | 'bottomN'\n | 'isNA'\n | 'isNotNA';\n }\n>, { id: number; name?: string; isExpanded?: boolean }>;\n\nexport type FilterUiType = Exclude<FilterUi, { type: undefined }>['type'];\n\nexport type FilterUiOfType<T extends FilterUiType> = Extract<FilterUi, { type: T }>;\n\n// DEPRECATED - use lib/ui/uikit/src/composition/filters\nexport function unreachable(x: never): never {\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n throw new Error('Unexpected object: ' + x);\n}\n\nexport type TypeToLiteral<T> =\n [T] extends [FilterUiType] ? 'FilterUiType' :\n [T] extends [SUniversalPColumnId] ? 'SUniversalPColumnId' :\n [T] extends [PatternPredicate] ? 'PatternPredicate' :\n [T] extends [AnnotationFilter[]] ? 'AnnotationFilter[]' :\n [T] extends [AnnotationFilter] ? 'AnnotationFilter' :\n [T] extends [number] ? 'number' :\n [T] extends [number | undefined] ? 'number?' :\n [T] extends [string] ? 'string' :\n [T] extends [string | undefined] ? 'string?' :\n [T] extends [boolean] ? 'boolean' :\n [T] extends [boolean | undefined] ? 'boolean?' :\n [T] extends [unknown[]] ? 'unknown[]' :\n // this is special\n T extends number ? 'number' :\n T extends string ? 'string' :\n T extends boolean ? 'boolean' :\n T extends Record<string, unknown> ? 'form' :\n 'unknown';\n\n// @TODO: \"parse\" option\nexport type TypeField<V> = {\n fieldType: TypeToLiteral<V>;\n label: string;\n defaultValue: () => V | undefined;\n};\n\nexport type TypeFieldRecord<T extends FilterUi> = { [K in keyof T]: TypeField<T[K]>; };\n\nexport type TypeForm<T> = {\n [P in keyof T]: T[P] extends Record<string, unknown> ? {\n fieldType: 'form';\n label?: string;\n form?: T[P] extends Record<string, unknown> ? TypeForm<T[P]> : undefined;\n defaultValue: () => T[P];\n } : TypeField<T[P]>;\n};\n\nexport type FormField =\n {\n fieldType: 'form';\n form?: Record<string, FormField>;\n defaultValue: () => Record<string, unknown>;\n }\n | TypeField<FilterUiType>\n | TypeField<string>\n | TypeField<number>\n | TypeField<number | undefined>\n | TypeField<boolean>\n | TypeField<boolean | undefined>\n | TypeField<SUniversalPColumnId>;\n\nexport type AnyForm = Record<string, FormField>;\n\nexport type AnnotationStepUi = FilterSpecUi<Extract<FilterUi, { type: 'and' | 'or' }>> & { id: number };\n\nexport type AnnotationScriptUi = {\n isCreated?: boolean;\n title: string;\n mode: AnnotationMode;\n steps: AnnotationStepUi[];\n};\n\nexport function compileFilter(ui: FilterUi): AnnotationFilter {\n if (ui.type === 'or') {\n return {\n type: 'or' as const,\n filters: compileFilters(ui.filters),\n };\n }\n\n if (ui.type === 'and') {\n return {\n type: 'and' as const,\n filters: compileFilters(ui.filters),\n };\n }\n\n if (ui.type === 'not') {\n return {\n type: 'not' as const,\n filter: compileFilter(ui.filter),\n };\n }\n\n if (ui.type === 'isNA') {\n return {\n type: 'isNA' as const,\n column: ui.column,\n };\n }\n\n if (ui.type === 'isNotNA') {\n const isNAFilter: IsNA = { type: 'isNA', column: ui.column };\n const notFilter: NotFilter = { type: 'not', filter: isNAFilter };\n return notFilter;\n }\n\n if (ui.type === 'patternEquals') {\n return {\n type: 'pattern' as const,\n column: ui.column,\n predicate: {\n type: 'equals' as const,\n value: ui.value,\n },\n };\n }\n\n if (ui.type === 'patternNotEquals') {\n const patternFilter: PatternFilter = {\n type: 'pattern',\n column: ui.column,\n predicate: { type: 'equals', value: ui.value },\n };\n const notFilter: NotFilter = { type: 'not', filter: patternFilter };\n return notFilter;\n }\n\n if (ui.type === 'patternContainSubsequence') {\n return {\n type: 'pattern' as const,\n column: ui.column,\n predicate: {\n type: 'containSubsequence' as const,\n value: ui.value,\n },\n };\n }\n\n if (ui.type === 'patternNotContainSubsequence') {\n const patternFilter: PatternFilter = {\n type: 'pattern',\n column: ui.column,\n predicate: { type: 'containSubsequence', value: ui.value },\n };\n const notFilter: NotFilter = { type: 'not', filter: patternFilter };\n return notFilter;\n }\n\n if (ui.type === 'topN') {\n const rankTransform: ValueRank = {\n transformer: 'rank',\n column: ui.column,\n descending: true,\n };\n const comparisonFilter: NumericalComparisonFilter = {\n type: 'numericalComparison',\n lhs: rankTransform,\n rhs: ui.n,\n allowEqual: true,\n };\n return comparisonFilter;\n }\n\n if (ui.type === 'bottomN') {\n const rankTransform: ValueRank = {\n transformer: 'rank',\n column: ui.column,\n };\n const comparisonFilter: NumericalComparisonFilter = {\n type: 'numericalComparison',\n lhs: rankTransform,\n rhs: ui.n,\n allowEqual: true,\n };\n return comparisonFilter;\n }\n\n if (ui.type === 'lessThan') {\n return {\n type: 'numericalComparison' as const,\n lhs: ui.column,\n rhs: ui.x,\n };\n }\n\n if (ui.type === 'greaterThan') {\n return {\n type: 'numericalComparison' as const,\n rhs: ui.column,\n lhs: ui.x,\n };\n }\n\n if (ui.type === 'greaterThanOrEqual') {\n return {\n type: 'numericalComparison' as const,\n rhs: ui.column,\n lhs: ui.x,\n allowEqual: true,\n };\n }\n\n if (ui.type === 'lessThanOrEqual') {\n return {\n type: 'numericalComparison' as const,\n lhs: ui.column,\n rhs: ui.x,\n allowEqual: true,\n };\n }\n\n if (ui.type === 'lessThanColumn') {\n return {\n type: 'numericalComparison' as const,\n lhs: ui.column,\n rhs: ui.rhs,\n minDiff: ui.minDiff,\n allowEqual: undefined,\n };\n }\n\n if (ui.type === 'lessThanColumnOrEqual') {\n return {\n type: 'numericalComparison' as const,\n lhs: ui.column,\n rhs: ui.rhs,\n minDiff: ui.minDiff,\n allowEqual: true,\n };\n }\n\n unreachable(ui);\n}\n\nexport function compileFilters(uiFilters: FilterUi[]): AnnotationFilter[] {\n return uiFilters.filter((f) => f.type !== undefined).map(compileFilter);\n}\n\nexport function compileAnnotationScript(uiScript: AnnotationScriptUi): AnnotationScript {\n return {\n title: uiScript.title,\n mode: uiScript.mode,\n steps: uiScript.steps\n .filter((step) => {\n // No need to compile empty steps\n if (step.filter.type == null) {\n return false;\n }\n\n if (step.filter.type === 'or') {\n return step.filter.filters.length > 0;\n }\n\n if (step.filter.type === 'and') {\n return step.filter.filters.length > 0;\n }\n\n return false;\n })\n .map((step) => ({\n label: step.label.trim(),\n filter: compileFilter(step.filter),\n })),\n };\n}\n"],"names":[],"mappings":"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"}
package/dist/index.cjs CHANGED
@@ -40,6 +40,7 @@ exports.isConfigLambda = types.isConfigLambda;
40
40
  exports.createPFrameForGraphs = PFrameForGraphs.createPFrameForGraphs;
41
41
  exports.enrichCompatible = PFrameForGraphs.enrichCompatible;
42
42
  exports.getAvailableWithLinkersAxes = PFrameForGraphs.getAvailableWithLinkersAxes;
43
+ exports.isHiddenFromGraphColumn = PFrameForGraphs.isHiddenFromGraphColumn;
43
44
  exports.isLinkerColumn = PFrameForGraphs.isLinkerColumn;
44
45
  exports.compileAnnotationScript = filters_ui.compileAnnotationScript;
45
46
  exports.compileFilter = filters_ui.compileFilter;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ export { OutputError, readOutput, wrapOutputs } from './block_state_util.js';
2
2
  export { BlockModel } from './builder.js';
3
3
  export { downgradeCfgOrLambda, extractConfig } from './bconfig/normalization.js';
4
4
  export { isConfigLambda } from './bconfig/types.js';
5
- export { createPFrameForGraphs, enrichCompatible, getAvailableWithLinkersAxes, isLinkerColumn } from './components/PFrameForGraphs.js';
5
+ export { createPFrameForGraphs, enrichCompatible, getAvailableWithLinkersAxes, isHiddenFromGraphColumn, isLinkerColumn } from './components/PFrameForGraphs.js';
6
6
  export { compileAnnotationScript, compileFilter, compileFilters, unreachable } from './components/PlAnnotations/filters_ui.js';
7
7
  export { createPlDataTableSheet, createPlDataTableStateV2, createPlDataTableV2, getAllLabelColumns, getMatchingLabelColumns, isColumnHidden, isColumnOptional, isLabelColumn, makeDefaultPTableParams, upgradePlDataTableStateV2 } from './components/PlDataTable.js';
8
8
  export { createRowSelectionColumn } from './components/PlMultiSequenceAlignment.js';
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "1.45.23";
3
+ var version = "1.45.26";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.map
@@ -1,4 +1,4 @@
1
- var version = "1.45.23";
1
+ var version = "1.45.26";
2
2
 
3
3
  export { version };
4
4
  //# sourceMappingURL=package.json.js.map