@platforma-sdk/model 1.63.0 → 1.63.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/_rolldown/runtime.cjs +12 -22
- package/dist/_virtual/_rolldown/runtime.js +6 -11
- package/dist/annotations/converter.cjs +4 -5
- package/dist/annotations/converter.cjs.map +1 -1
- package/dist/annotations/converter.d.ts.map +1 -0
- package/dist/annotations/converter.js +1 -2
- package/dist/annotations/converter.js.map +1 -1
- package/dist/annotations/index.cjs +1 -1
- package/dist/annotations/index.js +1 -1
- package/dist/annotations/types.d.ts +0 -1
- package/dist/annotations/types.d.ts.map +1 -0
- package/dist/bconfig/index.cjs +2 -2
- package/dist/bconfig/index.js +2 -2
- package/dist/bconfig/lambdas.d.ts +0 -1
- package/dist/bconfig/lambdas.d.ts.map +1 -0
- package/dist/bconfig/normalization.cjs +4 -5
- package/dist/bconfig/normalization.cjs.map +1 -1
- package/dist/bconfig/normalization.d.ts.map +1 -0
- package/dist/bconfig/normalization.js +1 -2
- package/dist/bconfig/normalization.js.map +1 -1
- package/dist/bconfig/types.cjs +1 -2
- package/dist/bconfig/types.cjs.map +1 -1
- package/dist/bconfig/types.d.ts +0 -1
- package/dist/bconfig/types.d.ts.map +1 -0
- package/dist/bconfig/types.js +1 -1
- package/dist/bconfig/util.d.ts.map +1 -0
- package/dist/bconfig/v3.d.ts.map +1 -0
- package/dist/block_api_v1.d.ts.map +1 -0
- package/dist/block_api_v2.d.ts.map +1 -0
- package/dist/block_api_v3.d.ts.map +1 -0
- package/dist/block_migrations.cjs +2 -3
- package/dist/block_migrations.cjs.map +1 -1
- package/dist/block_migrations.d.ts.map +1 -0
- package/dist/block_migrations.js +1 -2
- package/dist/block_migrations.js.map +1 -1
- package/dist/block_model.cjs +16 -17
- package/dist/block_model.cjs.map +1 -1
- package/dist/block_model.d.ts +0 -2
- package/dist/block_model.d.ts.map +1 -0
- package/dist/block_model.js +4 -5
- package/dist/block_model.js.map +1 -1
- package/dist/block_model_legacy.cjs +10 -11
- package/dist/block_model_legacy.cjs.map +1 -1
- package/dist/block_model_legacy.d.ts +0 -3
- package/dist/block_model_legacy.d.ts.map +1 -0
- package/dist/block_model_legacy.js +1 -2
- package/dist/block_model_legacy.js.map +1 -1
- package/dist/block_state_patch.d.ts.map +1 -0
- package/dist/block_state_util.cjs +1 -2
- package/dist/block_state_util.cjs.map +1 -1
- package/dist/block_state_util.d.ts.map +1 -0
- package/dist/block_state_util.js +1 -1
- package/dist/block_state_util.js.map +1 -1
- package/dist/block_storage.cjs +5 -12
- package/dist/block_storage.cjs.map +1 -1
- package/dist/block_storage.d.ts.map +1 -0
- package/dist/block_storage.js +5 -11
- package/dist/block_storage.js.map +1 -1
- package/dist/block_storage_callbacks.cjs +4 -5
- package/dist/block_storage_callbacks.cjs.map +1 -1
- package/dist/block_storage_callbacks.js +3 -4
- package/dist/block_storage_callbacks.js.map +1 -1
- package/dist/block_storage_facade.cjs +2 -3
- package/dist/block_storage_facade.cjs.map +1 -1
- package/dist/block_storage_facade.d.ts +0 -1
- package/dist/block_storage_facade.d.ts.map +1 -0
- package/dist/block_storage_facade.js +1 -2
- package/dist/block_storage_facade.js.map +1 -1
- package/dist/columns/column_collection_builder.cjs +6 -7
- package/dist/columns/column_collection_builder.cjs.map +1 -1
- package/dist/columns/column_collection_builder.d.ts.map +1 -0
- package/dist/columns/column_collection_builder.js +1 -2
- package/dist/columns/column_collection_builder.js.map +1 -1
- package/dist/columns/column_selector.cjs +1 -2
- package/dist/columns/column_selector.cjs.map +1 -1
- package/dist/columns/column_selector.d.ts.map +1 -0
- package/dist/columns/column_selector.js +1 -1
- package/dist/columns/column_selector.js.map +1 -1
- package/dist/columns/column_snapshot.cjs +1 -2
- package/dist/columns/column_snapshot.cjs.map +1 -1
- package/dist/columns/column_snapshot.d.ts.map +1 -0
- package/dist/columns/column_snapshot.js +1 -1
- package/dist/columns/column_snapshot_provider.cjs +1 -2
- package/dist/columns/column_snapshot_provider.cjs.map +1 -1
- package/dist/columns/column_snapshot_provider.d.ts.map +1 -0
- package/dist/columns/column_snapshot_provider.js +1 -1
- package/dist/columns/column_snapshot_provider.js.map +1 -1
- package/dist/columns/ctx_column_sources.cjs +3 -4
- package/dist/columns/ctx_column_sources.cjs.map +1 -1
- package/dist/columns/ctx_column_sources.d.ts +0 -1
- package/dist/columns/ctx_column_sources.d.ts.map +1 -0
- package/dist/columns/ctx_column_sources.js +1 -2
- package/dist/columns/ctx_column_sources.js.map +1 -1
- package/dist/columns/index.cjs +5 -5
- package/dist/columns/index.js +5 -5
- package/dist/components/PFrameForGraphs.cjs +4 -5
- package/dist/components/PFrameForGraphs.cjs.map +1 -1
- package/dist/components/PFrameForGraphs.d.ts +0 -1
- package/dist/components/PFrameForGraphs.d.ts.map +1 -0
- package/dist/components/PFrameForGraphs.js +2 -3
- package/dist/components/PFrameForGraphs.js.map +1 -1
- package/dist/components/PlAnnotations/filter.d.ts.map +1 -0
- package/dist/components/PlAnnotations/filters_ui.cjs +1 -2
- package/dist/components/PlAnnotations/filters_ui.cjs.map +1 -1
- package/dist/components/PlAnnotations/filters_ui.d.ts +0 -2
- package/dist/components/PlAnnotations/filters_ui.d.ts.map +1 -0
- package/dist/components/PlAnnotations/filters_ui.js +1 -1
- package/dist/components/PlAnnotations/filters_ui.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs +9 -10
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.d.ts +0 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.d.ts.map +1 -0
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js +1 -2
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs +14 -15
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts +0 -2
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts.map +1 -0
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js +1 -2
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/index.cjs +3 -4
- package/dist/components/PlDataTable/createPlDataTable/index.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/index.d.ts +0 -1
- package/dist/components/PlDataTable/createPlDataTable/index.d.ts.map +1 -0
- package/dist/components/PlDataTable/createPlDataTable/index.js +1 -2
- package/dist/components/PlDataTable/createPlDataTable/index.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTableSheet.cjs +1 -2
- package/dist/components/PlDataTable/createPlDataTableSheet.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTableSheet.d.ts +0 -1
- package/dist/components/PlDataTable/createPlDataTableSheet.d.ts.map +1 -0
- package/dist/components/PlDataTable/createPlDataTableSheet.js +1 -1
- package/dist/components/PlDataTable/index.cjs +5 -5
- package/dist/components/PlDataTable/index.js +5 -5
- package/dist/components/PlDataTable/labels.cjs +4 -5
- package/dist/components/PlDataTable/labels.cjs.map +1 -1
- package/dist/components/PlDataTable/labels.js +1 -2
- package/dist/components/PlDataTable/labels.js.map +1 -1
- package/dist/components/PlDataTable/state-migration.cjs +4 -5
- package/dist/components/PlDataTable/state-migration.cjs.map +1 -1
- package/dist/components/PlDataTable/state-migration.d.ts.map +1 -0
- package/dist/components/PlDataTable/state-migration.js +1 -2
- package/dist/components/PlDataTable/state-migration.js.map +1 -1
- package/dist/components/PlDataTable/typesV4.d.ts.map +1 -0
- package/dist/components/PlDataTable/typesV5.d.ts +0 -1
- package/dist/components/PlDataTable/typesV5.d.ts.map +1 -0
- package/dist/components/PlMultiSequenceAlignment.cjs +2 -3
- package/dist/components/PlMultiSequenceAlignment.cjs.map +1 -1
- package/dist/components/PlMultiSequenceAlignment.d.ts.map +1 -0
- package/dist/components/PlMultiSequenceAlignment.js +1 -2
- package/dist/components/PlMultiSequenceAlignment.js.map +1 -1
- package/dist/components/PlSelectionModel.cjs +1 -2
- package/dist/components/PlSelectionModel.cjs.map +1 -1
- package/dist/components/PlSelectionModel.d.ts.map +1 -0
- package/dist/components/PlSelectionModel.js +1 -1
- package/dist/components/index.cjs +11 -11
- package/dist/components/index.d.ts +0 -2
- package/dist/components/index.js +10 -10
- package/dist/config/actions.cjs +1 -2
- package/dist/config/actions.cjs.map +1 -1
- package/dist/config/actions.d.ts.map +1 -0
- package/dist/config/actions.js +1 -1
- package/dist/config/actions_kinds.d.ts.map +1 -0
- package/dist/config/index.cjs +1 -1
- package/dist/config/index.js +1 -1
- package/dist/config/model.d.ts.map +1 -0
- package/dist/config/model_meta.d.ts.map +1 -0
- package/dist/config/type_engine.d.ts.map +1 -0
- package/dist/config/type_util.d.ts.map +1 -0
- package/dist/env_value.cjs +1 -2
- package/dist/env_value.cjs.map +1 -1
- package/dist/env_value.d.ts.map +1 -0
- package/dist/env_value.js +1 -1
- package/dist/env_value.js.map +1 -1
- package/dist/filters/converters/filterToQuery.cjs +3 -4
- package/dist/filters/converters/filterToQuery.cjs.map +1 -1
- package/dist/filters/converters/filterToQuery.d.ts.map +1 -0
- package/dist/filters/converters/filterToQuery.js +1 -2
- package/dist/filters/converters/filterToQuery.js.map +1 -1
- package/dist/filters/converters/filterUiToExpressionImpl.cjs +3 -4
- package/dist/filters/converters/filterUiToExpressionImpl.cjs.map +1 -1
- package/dist/filters/converters/filterUiToExpressionImpl.d.ts.map +1 -0
- package/dist/filters/converters/filterUiToExpressionImpl.js +1 -2
- package/dist/filters/converters/filterUiToExpressionImpl.js.map +1 -1
- package/dist/filters/converters/index.cjs +2 -2
- package/dist/filters/converters/index.js +2 -2
- package/dist/filters/distill.cjs +3 -4
- package/dist/filters/distill.cjs.map +1 -1
- package/dist/filters/distill.d.ts.map +1 -0
- package/dist/filters/distill.js +1 -2
- package/dist/filters/distill.js.map +1 -1
- package/dist/filters/index.cjs +4 -4
- package/dist/filters/index.d.ts +0 -1
- package/dist/filters/index.js +3 -3
- package/dist/filters/traverse.cjs +1 -2
- package/dist/filters/traverse.cjs.map +1 -1
- package/dist/filters/traverse.js +1 -1
- package/dist/filters/traverse.js.map +1 -1
- package/dist/filters/types.d.ts.map +1 -0
- package/dist/index.cjs +78 -76
- package/dist/index.d.ts +0 -9
- package/dist/index.js +3 -6
- package/dist/internal.cjs +1 -2
- package/dist/internal.cjs.map +1 -1
- package/dist/internal.js +1 -1
- package/dist/internal.js.map +1 -1
- package/dist/labels/derive_distinct_labels.cjs +2 -3
- package/dist/labels/derive_distinct_labels.cjs.map +1 -1
- package/dist/labels/derive_distinct_labels.d.ts.map +1 -0
- package/dist/labels/derive_distinct_labels.js +1 -2
- package/dist/labels/derive_distinct_labels.js.map +1 -1
- package/dist/labels/index.cjs +2 -2
- package/dist/labels/index.js +2 -2
- package/dist/labels/write_labels_to_specs.cjs +2 -3
- package/dist/labels/write_labels_to_specs.cjs.map +1 -1
- package/dist/labels/write_labels_to_specs.d.ts +0 -2
- package/dist/labels/write_labels_to_specs.d.ts.map +1 -0
- package/dist/labels/write_labels_to_specs.js +1 -2
- package/dist/labels/write_labels_to_specs.js.map +1 -1
- package/dist/package.cjs +7 -8
- package/dist/package.js +2 -2
- package/dist/pframe.cjs +2 -3
- package/dist/pframe.cjs.map +1 -1
- package/dist/pframe.d.ts.map +1 -0
- package/dist/pframe.js +1 -2
- package/dist/pframe.js.map +1 -1
- package/dist/pframe_utils/axes.cjs +2 -3
- package/dist/pframe_utils/axes.cjs.map +1 -1
- package/dist/pframe_utils/axes.d.ts +0 -1
- package/dist/pframe_utils/axes.d.ts.map +1 -0
- package/dist/pframe_utils/axes.js +1 -2
- package/dist/pframe_utils/axes.js.map +1 -1
- package/dist/pframe_utils/columns.cjs +5 -6
- package/dist/pframe_utils/columns.cjs.map +1 -1
- package/dist/pframe_utils/columns.d.ts +0 -1
- package/dist/pframe_utils/columns.d.ts.map +1 -0
- package/dist/pframe_utils/columns.js +1 -2
- package/dist/pframe_utils/columns.js.map +1 -1
- package/dist/pframe_utils/index.cjs +3 -4
- package/dist/pframe_utils/index.cjs.map +1 -1
- package/dist/pframe_utils/index.d.ts.map +1 -0
- package/dist/pframe_utils/index.js +2 -3
- package/dist/pframe_utils/index.js.map +1 -1
- package/dist/platforma.d.ts.map +1 -0
- package/dist/plugin_handle.cjs +1 -2
- package/dist/plugin_handle.cjs.map +1 -1
- package/dist/plugin_handle.d.ts.map +1 -0
- package/dist/plugin_handle.js +1 -1
- package/dist/plugin_model.cjs +3 -4
- package/dist/plugin_model.cjs.map +1 -1
- package/dist/plugin_model.d.ts +0 -1
- package/dist/plugin_model.d.ts.map +1 -0
- package/dist/plugin_model.js +1 -2
- package/dist/plugin_model.js.map +1 -1
- package/dist/raw_globals.cjs +3 -4
- package/dist/raw_globals.cjs.map +1 -1
- package/dist/raw_globals.d.ts.map +1 -0
- package/dist/raw_globals.js +1 -2
- package/dist/raw_globals.js.map +1 -1
- package/dist/ref_util.cjs +3 -4
- package/dist/ref_util.cjs.map +1 -1
- package/dist/ref_util.d.ts +0 -2
- package/dist/ref_util.d.ts.map +1 -0
- package/dist/ref_util.js +1 -2
- package/dist/ref_util.js.map +1 -1
- package/dist/render/accessor.cjs +4 -5
- package/dist/render/accessor.cjs.map +1 -1
- package/dist/render/accessor.d.ts.map +1 -0
- package/dist/render/accessor.js +1 -2
- package/dist/render/accessor.js.map +1 -1
- package/dist/render/api.cjs +10 -11
- package/dist/render/api.cjs.map +1 -1
- package/dist/render/api.d.ts +0 -1
- package/dist/render/api.d.ts.map +1 -0
- package/dist/render/api.js +1 -2
- package/dist/render/api.js.map +1 -1
- package/dist/render/future.cjs +2 -3
- package/dist/render/future.cjs.map +1 -1
- package/dist/render/future.d.ts.map +1 -0
- package/dist/render/future.js +1 -2
- package/dist/render/future.js.map +1 -1
- package/dist/render/index.cjs +8 -8
- package/dist/render/index.d.ts +1 -2
- package/dist/render/index.js +7 -7
- package/dist/render/internal.cjs +7 -9
- package/dist/render/internal.cjs.map +1 -1
- package/dist/render/internal.d.ts.map +1 -0
- package/dist/render/internal.js +1 -2
- package/dist/render/internal.js.map +1 -1
- package/dist/render/traversal_ops.d.ts.map +1 -0
- package/dist/render/util/axis_filtering.cjs +1 -2
- package/dist/render/util/axis_filtering.cjs.map +1 -1
- package/dist/render/util/axis_filtering.d.ts.map +1 -0
- package/dist/render/util/axis_filtering.js +1 -1
- package/dist/render/util/column_collection.cjs +5 -6
- package/dist/render/util/column_collection.cjs.map +1 -1
- package/dist/render/util/column_collection.d.ts +0 -1
- package/dist/render/util/column_collection.d.ts.map +1 -0
- package/dist/render/util/column_collection.js +1 -2
- package/dist/render/util/column_collection.js.map +1 -1
- package/dist/render/util/index.cjs +4 -4
- package/dist/render/util/index.js +4 -4
- package/dist/render/util/label.cjs +2 -3
- package/dist/render/util/label.cjs.map +1 -1
- package/dist/render/util/label.d.ts.map +1 -0
- package/dist/render/util/label.js +1 -2
- package/dist/render/util/label.js.map +1 -1
- package/dist/render/util/pcolumn_data.cjs +9 -10
- package/dist/render/util/pcolumn_data.cjs.map +1 -1
- package/dist/render/util/pcolumn_data.d.ts.map +1 -0
- package/dist/render/util/pcolumn_data.js +7 -8
- package/dist/render/util/pcolumn_data.js.map +1 -1
- package/dist/render/util/pframe_upgraders.cjs +1 -2
- package/dist/render/util/pframe_upgraders.cjs.map +1 -1
- package/dist/render/util/pframe_upgraders.js +1 -1
- package/dist/render/util/split_selectors.d.ts.map +1 -0
- package/dist/services/block_services.cjs +2 -3
- package/dist/services/block_services.cjs.map +1 -1
- package/dist/services/block_services.d.ts +2 -2
- package/dist/services/block_services.d.ts.map +1 -0
- package/dist/services/block_services.js +1 -2
- package/dist/services/block_services.js.map +1 -1
- package/dist/services/index.cjs +2 -2
- package/dist/services/index.js +2 -2
- package/dist/services/service_bridge.cjs +1 -2
- package/dist/services/service_bridge.cjs.map +1 -1
- package/dist/services/service_bridge.d.ts.map +1 -0
- package/dist/services/service_bridge.js +1 -1
- package/dist/services/service_resolve.d.ts.map +1 -0
- package/dist/version.cjs +2 -4
- package/dist/version.cjs.map +1 -1
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +1 -2
- package/dist/version.js.map +1 -1
- package/package.json +13 -13
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PFrameForGraphs.d.ts","names":[],"sources":["../../src/components/PFrameForGraphs.ts"],"mappings":";;;;;;iBAOgB,uBAAA,CAAwB,MAAA,EAAQ,WAAA;AAAA,iBAIhC,oBAAA,CAAqB,MAAA,EAAQ,WAAA;;AAJ7C;;;;;AAIA;;;;;AAgBA;iBAAgB,qBAAA,MAAA,CACd,GAAA,EAAK,aAAA,CAAc,CAAA,EAAG,CAAA,GACtB,YAAA,GAAe,OAAA,CAAQ,oBAAA,MACtB,YAAA"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import "../pframe_utils/axes.js";
|
|
2
2
|
import { getAllRelatedColumns, getRelatedColumns } from "../pframe_utils/columns.js";
|
|
3
3
|
import { Annotation, readAnnotationJson } from "@milaboratories/pl-model-common";
|
|
4
|
-
|
|
5
4
|
//#region src/components/PFrameForGraphs.ts
|
|
6
5
|
function isHiddenFromGraphColumn(column) {
|
|
7
6
|
return !!readAnnotationJson(column, Annotation.HideDataFromGraphs);
|
|
@@ -29,7 +28,7 @@ function createPFrameForGraphs(ctx, blockColumns) {
|
|
|
29
28
|
predicate: suitableSpec
|
|
30
29
|
}));
|
|
31
30
|
}
|
|
32
|
-
|
|
33
31
|
//#endregion
|
|
34
32
|
export { createPFrameForGraphs, isHiddenFromGraphColumn, isHiddenFromUIColumn };
|
|
33
|
+
|
|
35
34
|
//# sourceMappingURL=PFrameForGraphs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PFrameForGraphs.js","names":[],"sources":["../../src/components/PFrameForGraphs.ts"],"sourcesContent":["import type { PColumn, PColumnSpec, PFrameHandle } from \"@milaboratories/pl-model-common\";\nimport { Annotation, readAnnotationJson } from \"@milaboratories/pl-model-common\";\nimport type { PColumnDataUniversal, RenderCtxBase } from \"../render\";\nimport { getAllRelatedColumns, getRelatedColumns } from \"../pframe_utils/columns\";\nexport type { AxesVault } from \"../pframe_utils/axes\";\nexport { enrichCompatible, getAvailableWithLinkersAxes } from \"../pframe_utils/axes\";\n\nexport function isHiddenFromGraphColumn(column: PColumnSpec): boolean {\n return !!readAnnotationJson(column, Annotation.HideDataFromGraphs);\n}\n\nexport function isHiddenFromUIColumn(column: PColumnSpec): boolean {\n return !!readAnnotationJson(column, Annotation.HideDataFromUi);\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: RenderCtxBase<A, U>,\n blockColumns?: PColumn<PColumnDataUniversal>[],\n): PFrameHandle | undefined {\n const suitableSpec = (spec: PColumnSpec) =>\n !isHiddenFromUIColumn(spec) && !isHiddenFromGraphColumn(spec);\n // if current block doesn't produce own columns then use all columns from result pool\n if (!blockColumns) {\n return ctx.createPFrame(getAllRelatedColumns(ctx, suitableSpec));\n }\n\n return ctx.createPFrame(\n getRelatedColumns(ctx, { columns: blockColumns, predicate: suitableSpec }),\n );\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"PFrameForGraphs.js","names":[],"sources":["../../src/components/PFrameForGraphs.ts"],"sourcesContent":["import type { PColumn, PColumnSpec, PFrameHandle } from \"@milaboratories/pl-model-common\";\nimport { Annotation, readAnnotationJson } from \"@milaboratories/pl-model-common\";\nimport type { PColumnDataUniversal, RenderCtxBase } from \"../render\";\nimport { getAllRelatedColumns, getRelatedColumns } from \"../pframe_utils/columns\";\nexport type { AxesVault } from \"../pframe_utils/axes\";\nexport { enrichCompatible, getAvailableWithLinkersAxes } from \"../pframe_utils/axes\";\n\nexport function isHiddenFromGraphColumn(column: PColumnSpec): boolean {\n return !!readAnnotationJson(column, Annotation.HideDataFromGraphs);\n}\n\nexport function isHiddenFromUIColumn(column: PColumnSpec): boolean {\n return !!readAnnotationJson(column, Annotation.HideDataFromUi);\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: RenderCtxBase<A, U>,\n blockColumns?: PColumn<PColumnDataUniversal>[],\n): PFrameHandle | undefined {\n const suitableSpec = (spec: PColumnSpec) =>\n !isHiddenFromUIColumn(spec) && !isHiddenFromGraphColumn(spec);\n // if current block doesn't produce own columns then use all columns from result pool\n if (!blockColumns) {\n return ctx.createPFrame(getAllRelatedColumns(ctx, suitableSpec));\n }\n\n return ctx.createPFrame(\n getRelatedColumns(ctx, { columns: blockColumns, predicate: suitableSpec }),\n );\n}\n"],"mappings":";;;;AAOA,SAAgB,wBAAwB,QAA8B;AACpE,QAAO,CAAC,CAAC,mBAAmB,QAAQ,WAAW,mBAAmB;;AAGpE,SAAgB,qBAAqB,QAA8B;AACjE,QAAO,CAAC,CAAC,mBAAmB,QAAQ,WAAW,eAAe;;;;;;;;;;;;;;AAehE,SAAgB,sBACd,KACA,cAC0B;CAC1B,MAAM,gBAAgB,SACpB,CAAC,qBAAqB,KAAK,IAAI,CAAC,wBAAwB,KAAK;AAE/D,KAAI,CAAC,aACH,QAAO,IAAI,aAAa,qBAAqB,KAAK,aAAa,CAAC;AAGlE,QAAO,IAAI,aACT,kBAAkB,KAAK;EAAE,SAAS;EAAc,WAAW;EAAc,CAAC,CAC3E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter.d.ts","names":[],"sources":["../../../src/components/PlAnnotations/filter.ts"],"mappings":";;;;;AAWA;;;KAAY,sBAAA;EACV,IAAA,YAUU;EARV,KAAA;AAAA;;;AAiBF;;;KATY,kCAAA;EACV,IAAA,wBAcU;EAZV,KAAA;AAAA;;;;KAMU,gBAAA,GAAmB,sBAAA,GAAyB,kCAAA;;;;;KAM5C,aAAA;EACV,IAAA;EAEA,MAAA,EAAQ,mBAAA,EAqBR;EAnBA,SAAA,EAAW,gBAAA;AAAA;;;;AAoCb;;;;;;;;KAlBY,SAAA;EACV,WAAA,UAkCU;EAhCV,MAAA,EAAQ,mBAAA;EAER,UAAA;AAAA;;;;;AA0CF;;;;;;KA7BY,mBAAA;EACV,WAAA,yBA4B8B;EA1B9B,MAAA,EAAQ,mBAAA,EA0BwD;EAxBhE,UAAA;AAAA;AA2CF;;;;;;;;;AAAA,KA/BY,KAAA;EACV,WAAA,WAiCK;EA/BL,MAAA,EAAQ,mBAAA;AAAA;;;;;;;KASE,iBAAA,GAAoB,SAAA,GAAY,mBAAA,GAAsB,KAAA;;;;;;;;;AAiDlE;;;;;;;;;KA9BY,yBAAA;EACV,IAAA;EAEA,GAAA,EAAK,mBAAA,GAAsB,iBAAA,WAsC3B;EApCA,GAAA,EAAK,mBAAA,GAAsB,iBAAA,WAsClB;EApCT,OAAA,WAoCyB;EAlCzB,UAAA;AAAA;;;;;KAOU,IAAA;EACV,IAAA,UAoCwB;EAlCxB,MAAA,EAAQ,mBAAA;AAAA;;;;;UAWO,QAAA;EACf,IAAA;EAkCE;EAhCF,OAAA,EAAS,gBAAA;AAAA;;;;;UAOM,SAAA;EACf,IAAA;EAwBW;EAtBX,OAAA,EAAS,gBAAA;AAAA;;;;;UAOM,SAAA;EACf,IAAA;EA4BK;EA1BL,MAAA,EAAQ,gBAAA;AAAA;;;;KAME,gBAAA,GACR,IAAA,GACA,aAAA,GACA,yBAAA,GACA,QAAA,GACA,SAAA,GACA,SAAA;AA8CJ;;;;AAAA,KApCY,cAAA;EAwCV,gDAtCA,MAAA,EAAQ,gBAAA,EAwCR;EAtCA,KAAA;AAAA;;AAyCF;;;KAlCY,cAAA;;;;;;;;;;;;;;;;;;;;;;;;KAyBA,gBAAA;oCAEV,KAAA;EAEA,IAAA,EAAM,cAAA;EAEN,KAAA,EAAO,cAAA;AAAA;AAAA,KAGG,iBAAA,WAA4B,cAAA;wCAEtC,IAAA,EAAM,cAAA;EAEN,KAAA,EAAO,CAAA;AAAA"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
|
|
2
1
|
//#region src/components/PlAnnotations/filters_ui.ts
|
|
3
2
|
function unreachable(x) {
|
|
4
3
|
throw new Error("Unexpected object: " + x);
|
|
@@ -140,10 +139,10 @@ function compileAnnotationScript(uiScript) {
|
|
|
140
139
|
}))
|
|
141
140
|
};
|
|
142
141
|
}
|
|
143
|
-
|
|
144
142
|
//#endregion
|
|
145
143
|
exports.compileAnnotationScript = compileAnnotationScript;
|
|
146
144
|
exports.compileFilter = compileFilter;
|
|
147
145
|
exports.compileFilters = compileFilters;
|
|
148
146
|
exports.unreachable = unreachable;
|
|
147
|
+
|
|
149
148
|
//# sourceMappingURL=filters_ui.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filters_ui.cjs","names":[],"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 {\n AnnotationFilter,\n AnnotationMode,\n AnnotationScript,\n IsNA,\n NotFilter,\n NumericalComparisonFilter,\n PatternFilter,\n PatternPredicate,\n ValueRank,\n} from \"./filter\";\n\nexport type FilterUi = FilterSpec<\n Extract<\n FilterSpecLeaf,\n // supported filters\n {\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 >,\n { id: number; name?: string; isExpanded?: boolean }\n>;\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> = [T] extends [FilterUiType]\n ? \"FilterUiType\"\n : [T] extends [SUniversalPColumnId]\n ? \"SUniversalPColumnId\"\n : [T] extends [PatternPredicate]\n ? \"PatternPredicate\"\n : [T] extends [AnnotationFilter[]]\n ? \"AnnotationFilter[]\"\n : [T] extends [AnnotationFilter]\n ? \"AnnotationFilter\"\n : [T] extends [number]\n ? \"number\"\n : [T] extends [number | undefined]\n ? \"number?\"\n : [T] extends [string]\n ? \"string\"\n : [T] extends [string | undefined]\n ? \"string?\"\n : [T] extends [boolean]\n ? \"boolean\"\n : [T] extends [boolean | undefined]\n ? \"boolean?\"\n : [T] extends [unknown[]]\n ? \"unknown[]\"\n : // this is special\n T extends number\n ? \"number\"\n : T extends string\n ? \"string\"\n : T extends boolean\n ? \"boolean\"\n : T extends Record<string, unknown>\n ? \"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 ? {\n fieldType: \"form\";\n label?: string;\n form?: T[P] extends Record<string, unknown> ? TypeForm<T[P]> : undefined;\n defaultValue: () => T[P];\n }\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\" }>> & {\n id: number;\n};\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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"filters_ui.cjs","names":[],"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 {\n AnnotationFilter,\n AnnotationMode,\n AnnotationScript,\n IsNA,\n NotFilter,\n NumericalComparisonFilter,\n PatternFilter,\n PatternPredicate,\n ValueRank,\n} from \"./filter\";\n\nexport type FilterUi = FilterSpec<\n Extract<\n FilterSpecLeaf,\n // supported filters\n {\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 >,\n { id: number; name?: string; isExpanded?: boolean }\n>;\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> = [T] extends [FilterUiType]\n ? \"FilterUiType\"\n : [T] extends [SUniversalPColumnId]\n ? \"SUniversalPColumnId\"\n : [T] extends [PatternPredicate]\n ? \"PatternPredicate\"\n : [T] extends [AnnotationFilter[]]\n ? \"AnnotationFilter[]\"\n : [T] extends [AnnotationFilter]\n ? \"AnnotationFilter\"\n : [T] extends [number]\n ? \"number\"\n : [T] extends [number | undefined]\n ? \"number?\"\n : [T] extends [string]\n ? \"string\"\n : [T] extends [string | undefined]\n ? \"string?\"\n : [T] extends [boolean]\n ? \"boolean\"\n : [T] extends [boolean | undefined]\n ? \"boolean?\"\n : [T] extends [unknown[]]\n ? \"unknown[]\"\n : // this is special\n T extends number\n ? \"number\"\n : T extends string\n ? \"string\"\n : T extends boolean\n ? \"boolean\"\n : T extends Record<string, unknown>\n ? \"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 ? {\n fieldType: \"form\";\n label?: string;\n form?: T[P] extends Record<string, unknown> ? TypeForm<T[P]> : undefined;\n defaultValue: () => T[P];\n }\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\" }>> & {\n id: number;\n};\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"],"mappings":"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"}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { AnnotationFilter, AnnotationMode, AnnotationScript, PatternPredicate } from "./filter.js";
|
|
2
2
|
import { FilterSpec as FilterSpec$1, FilterSpecLeaf as FilterSpecLeaf$1 } from "../../filters/types.js";
|
|
3
|
-
import "../../filters/index.js";
|
|
4
3
|
import { FilterSpecUi } from "../../annotations/types.js";
|
|
5
|
-
import "../../annotations/index.js";
|
|
6
4
|
import { SUniversalPColumnId } from "@milaboratories/pl-model-common";
|
|
7
5
|
|
|
8
6
|
//#region src/components/PlAnnotations/filters_ui.d.ts
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filters_ui.d.ts","names":[],"sources":["../../../src/components/PlAnnotations/filters_ui.ts"],"mappings":";;;;;;KAgBY,QAAA,GAAW,YAAA,CACrB,OAAA,CACE,gBAAA;EAGE,IAAA;AAAA;EAiBF,EAAA;EAAY,IAAA;EAAe,UAAA;AAAA;AAAA,KAGnB,YAAA,GAAe,OAAA,CAAQ,QAAA;EAAY,IAAA;AAAA;AAAA,KAEnC,cAAA,WAAyB,YAAA,IAAgB,OAAA,CAAQ,QAAA;EAAY,IAAA,EAAM,CAAA;AAAA;AAAA,iBAG/D,WAAA,CAAY,CAAA;AAAA,KAKhB,aAAA,OAAoB,CAAA,WAAY,YAAA,sBAEvC,CAAA,WAAY,mBAAA,6BAEV,CAAA,WAAY,gBAAA,0BAEV,CAAA,WAAY,gBAAA,8BAEV,CAAA,WAAY,gBAAA,0BAEV,CAAA,iCAEE,CAAA,8CAEE,CAAA,iCAEE,CAAA,8CAEE,CAAA,mCAEE,CAAA,gDAEE,CAAA,sCAGC,CAAA,6BAEE,CAAA,6BAEE,CAAA,+BAEE,CAAA,SAAU,MAAA;AAAA,KAK9B,SAAA;EACV,SAAA,EAAW,aAAA,CAAc,CAAA;EACzB,KAAA;EACA,YAAA,QAAoB,CAAA;AAAA;AAAA,KAGV,eAAA,WAA0B,QAAA,kBAA0B,CAAA,GAAI,SAAA,CAAU,CAAA,CAAE,CAAA;AAAA,KAEpE,QAAA,oBACE,CAAA,GAAI,CAAA,CAAE,CAAA,UAAW,MAAA;EAEvB,SAAA;EACA,KAAA;EACA,IAAA,GAAO,CAAA,CAAE,CAAA,UAAW,MAAA,oBAA0B,QAAA,CAAS,CAAA,CAAE,CAAA;EACzD,YAAA,QAAoB,CAAA,CAAE,CAAA;AAAA,IAExB,SAAA,CAAU,CAAA,CAAE,CAAA;AAAA,KAGN,SAAA;EAEN,SAAA;EACA,IAAA,GAAO,MAAA,SAAe,SAAA;EACtB,YAAA,QAAoB,MAAA;AAAA,IAEtB,SAAA,CAAU,YAAA,IACV,SAAA,WACA,SAAA,WACA,SAAA,uBACA,SAAA,YACA,SAAA,wBACA,SAAA,CAAU,mBAAA;AAAA,KAEF,OAAA,GAAU,MAAA,SAAe,SAAA;AAAA,KAEzB,gBAAA,GAAmB,YAAA,CAAa,OAAA,CAAQ,QAAA;EAAY,IAAA;AAAA;EAC9D,EAAA;AAAA;AAAA,KAGU,kBAAA;EACV,SAAA;EACA,KAAA;EACA,IAAA,EAAM,cAAA;EACN,KAAA,EAAO,gBAAA;AAAA;AAAA,iBAGO,aAAA,CAAc,EAAA,EAAI,QAAA,GAAW,gBAAA;AAAA,iBAmK7B,cAAA,CAAe,SAAA,EAAW,QAAA,KAAa,gBAAA;AAAA,iBAIvC,uBAAA,CAAwB,QAAA,EAAU,kBAAA,GAAqB,gBAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filters_ui.js","names":[],"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 {\n AnnotationFilter,\n AnnotationMode,\n AnnotationScript,\n IsNA,\n NotFilter,\n NumericalComparisonFilter,\n PatternFilter,\n PatternPredicate,\n ValueRank,\n} from \"./filter\";\n\nexport type FilterUi = FilterSpec<\n Extract<\n FilterSpecLeaf,\n // supported filters\n {\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 >,\n { id: number; name?: string; isExpanded?: boolean }\n>;\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> = [T] extends [FilterUiType]\n ? \"FilterUiType\"\n : [T] extends [SUniversalPColumnId]\n ? \"SUniversalPColumnId\"\n : [T] extends [PatternPredicate]\n ? \"PatternPredicate\"\n : [T] extends [AnnotationFilter[]]\n ? \"AnnotationFilter[]\"\n : [T] extends [AnnotationFilter]\n ? \"AnnotationFilter\"\n : [T] extends [number]\n ? \"number\"\n : [T] extends [number | undefined]\n ? \"number?\"\n : [T] extends [string]\n ? \"string\"\n : [T] extends [string | undefined]\n ? \"string?\"\n : [T] extends [boolean]\n ? \"boolean\"\n : [T] extends [boolean | undefined]\n ? \"boolean?\"\n : [T] extends [unknown[]]\n ? \"unknown[]\"\n : // this is special\n T extends number\n ? \"number\"\n : T extends string\n ? \"string\"\n : T extends boolean\n ? \"boolean\"\n : T extends Record<string, unknown>\n ? \"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 ? {\n fieldType: \"form\";\n label?: string;\n form?: T[P] extends Record<string, unknown> ? TypeForm<T[P]> : undefined;\n defaultValue: () => T[P];\n }\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\" }>> & {\n id: number;\n};\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"],"mappings":";AA8CA,SAAgB,YAAY,GAAiB;AAE3C,OAAM,IAAI,MAAM,wBAAwB,EAAE;;AAqF5C,SAAgB,cAAc,IAAgC;AAC5D,KAAI,GAAG,SAAS,KACd,QAAO;EACL,MAAM;EACN,SAAS,eAAe,GAAG,QAAQ;EACpC;AAGH,KAAI,GAAG,SAAS,MACd,QAAO;EACL,MAAM;EACN,SAAS,eAAe,GAAG,QAAQ;EACpC;AAGH,KAAI,GAAG,SAAS,MACd,QAAO;EACL,MAAM;EACN,QAAQ,cAAc,GAAG,OAAO;EACjC;AAGH,KAAI,GAAG,SAAS,OACd,QAAO;EACL,MAAM;EACN,QAAQ,GAAG;EACZ;AAGH,KAAI,GAAG,SAAS,UAGd,QAD6B;EAAE,MAAM;EAAO,QADnB;GAAE,MAAM;GAAQ,QAAQ,GAAG;GAAQ;EACI;AAIlE,KAAI,GAAG,SAAS,gBACd,QAAO;EACL,MAAM;EACN,QAAQ,GAAG;EACX,WAAW;GACT,MAAM;GACN,OAAO,GAAG;GACX;EACF;AAGH,KAAI,GAAG,SAAS,mBAOd,QAD6B;EAAE,MAAM;EAAO,QALP;GACnC,MAAM;GACN,QAAQ,GAAG;GACX,WAAW;IAAE,MAAM;IAAU,OAAO,GAAG;IAAO;GAC/C;EACkE;AAIrE,KAAI,GAAG,SAAS,4BACd,QAAO;EACL,MAAM;EACN,QAAQ,GAAG;EACX,WAAW;GACT,MAAM;GACN,OAAO,GAAG;GACX;EACF;AAGH,KAAI,GAAG,SAAS,+BAOd,QAD6B;EAAE,MAAM;EAAO,QALP;GACnC,MAAM;GACN,QAAQ,GAAG;GACX,WAAW;IAAE,MAAM;IAAsB,OAAO,GAAG;IAAO;GAC3D;EACkE;AAIrE,KAAI,GAAG,SAAS,OAYd,QANoD;EAClD,MAAM;EACN,KAP+B;GAC/B,aAAa;GACb,QAAQ,GAAG;GACX,YAAY;GACb;EAIC,KAAK,GAAG;EACR,YAAY;EACb;AAIH,KAAI,GAAG,SAAS,UAWd,QANoD;EAClD,MAAM;EACN,KAN+B;GAC/B,aAAa;GACb,QAAQ,GAAG;GACZ;EAIC,KAAK,GAAG;EACR,YAAY;EACb;AAIH,KAAI,GAAG,SAAS,WACd,QAAO;EACL,MAAM;EACN,KAAK,GAAG;EACR,KAAK,GAAG;EACT;AAGH,KAAI,GAAG,SAAS,cACd,QAAO;EACL,MAAM;EACN,KAAK,GAAG;EACR,KAAK,GAAG;EACT;AAGH,KAAI,GAAG,SAAS,qBACd,QAAO;EACL,MAAM;EACN,KAAK,GAAG;EACR,KAAK,GAAG;EACR,YAAY;EACb;AAGH,KAAI,GAAG,SAAS,kBACd,QAAO;EACL,MAAM;EACN,KAAK,GAAG;EACR,KAAK,GAAG;EACR,YAAY;EACb;AAGH,KAAI,GAAG,SAAS,iBACd,QAAO;EACL,MAAM;EACN,KAAK,GAAG;EACR,KAAK,GAAG;EACR,SAAS,GAAG;EACZ,YAAY;EACb;AAGH,KAAI,GAAG,SAAS,wBACd,QAAO;EACL,MAAM;EACN,KAAK,GAAG;EACR,KAAK,GAAG;EACR,SAAS,GAAG;EACZ,YAAY;EACb;AAGH,aAAY,GAAG;;AAGjB,SAAgB,eAAe,WAA2C;AACxE,QAAO,UAAU,QAAQ,MAAM,EAAE,SAAS,OAAU,CAAC,IAAI,cAAc;;AAGzE,SAAgB,wBAAwB,UAAgD;AACtF,QAAO;EACL,OAAO,SAAS;EAChB,MAAM,SAAS;EACf,OAAO,SAAS,MACb,QAAQ,SAAS;AAEhB,OAAI,KAAK,OAAO,QAAQ,KACtB,QAAO;AAGT,OAAI,KAAK,OAAO,SAAS,KACvB,QAAO,KAAK,OAAO,QAAQ,SAAS;AAGtC,OAAI,KAAK,OAAO,SAAS,MACvB,QAAO,KAAK,OAAO,QAAQ,SAAS;AAGtC,UAAO;IACP,CACD,KAAK,UAAU;GACd,OAAO,KAAK,MAAM,MAAM;GACxB,QAAQ,cAAc,KAAK,OAAO;GACnC,EAAE;EACN"}
|
|
1
|
+
{"version":3,"file":"filters_ui.js","names":[],"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 {\n AnnotationFilter,\n AnnotationMode,\n AnnotationScript,\n IsNA,\n NotFilter,\n NumericalComparisonFilter,\n PatternFilter,\n PatternPredicate,\n ValueRank,\n} from \"./filter\";\n\nexport type FilterUi = FilterSpec<\n Extract<\n FilterSpecLeaf,\n // supported filters\n {\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 >,\n { id: number; name?: string; isExpanded?: boolean }\n>;\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> = [T] extends [FilterUiType]\n ? \"FilterUiType\"\n : [T] extends [SUniversalPColumnId]\n ? \"SUniversalPColumnId\"\n : [T] extends [PatternPredicate]\n ? \"PatternPredicate\"\n : [T] extends [AnnotationFilter[]]\n ? \"AnnotationFilter[]\"\n : [T] extends [AnnotationFilter]\n ? \"AnnotationFilter\"\n : [T] extends [number]\n ? \"number\"\n : [T] extends [number | undefined]\n ? \"number?\"\n : [T] extends [string]\n ? \"string\"\n : [T] extends [string | undefined]\n ? \"string?\"\n : [T] extends [boolean]\n ? \"boolean\"\n : [T] extends [boolean | undefined]\n ? \"boolean?\"\n : [T] extends [unknown[]]\n ? \"unknown[]\"\n : // this is special\n T extends number\n ? \"number\"\n : T extends string\n ? \"string\"\n : T extends boolean\n ? \"boolean\"\n : T extends Record<string, unknown>\n ? \"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 ? {\n fieldType: \"form\";\n label?: string;\n form?: T[P] extends Record<string, unknown> ? TypeForm<T[P]> : undefined;\n defaultValue: () => T[P];\n }\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\" }>> & {\n id: number;\n};\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"],"mappings":";AA8CA,SAAgB,YAAY,GAAiB;AAE3C,OAAM,IAAI,MAAM,wBAAwB,EAAE;;AAqF5C,SAAgB,cAAc,IAAgC;AAC5D,KAAI,GAAG,SAAS,KACd,QAAO;EACL,MAAM;EACN,SAAS,eAAe,GAAG,QAAQ;EACpC;AAGH,KAAI,GAAG,SAAS,MACd,QAAO;EACL,MAAM;EACN,SAAS,eAAe,GAAG,QAAQ;EACpC;AAGH,KAAI,GAAG,SAAS,MACd,QAAO;EACL,MAAM;EACN,QAAQ,cAAc,GAAG,OAAO;EACjC;AAGH,KAAI,GAAG,SAAS,OACd,QAAO;EACL,MAAM;EACN,QAAQ,GAAG;EACZ;AAGH,KAAI,GAAG,SAAS,UAGd,QAD6B;EAAE,MAAM;EAAO,QADnB;GAAE,MAAM;GAAQ,QAAQ,GAAG;GAAQ;EACI;AAIlE,KAAI,GAAG,SAAS,gBACd,QAAO;EACL,MAAM;EACN,QAAQ,GAAG;EACX,WAAW;GACT,MAAM;GACN,OAAO,GAAG;GACX;EACF;AAGH,KAAI,GAAG,SAAS,mBAOd,QAD6B;EAAE,MAAM;EAAO,QALP;GACnC,MAAM;GACN,QAAQ,GAAG;GACX,WAAW;IAAE,MAAM;IAAU,OAAO,GAAG;IAAO;GAC/C;EACkE;AAIrE,KAAI,GAAG,SAAS,4BACd,QAAO;EACL,MAAM;EACN,QAAQ,GAAG;EACX,WAAW;GACT,MAAM;GACN,OAAO,GAAG;GACX;EACF;AAGH,KAAI,GAAG,SAAS,+BAOd,QAD6B;EAAE,MAAM;EAAO,QALP;GACnC,MAAM;GACN,QAAQ,GAAG;GACX,WAAW;IAAE,MAAM;IAAsB,OAAO,GAAG;IAAO;GAC3D;EACkE;AAIrE,KAAI,GAAG,SAAS,OAYd,QANoD;EAClD,MAAM;EACN,KAP+B;GAC/B,aAAa;GACb,QAAQ,GAAG;GACX,YAAY;GACb;EAIC,KAAK,GAAG;EACR,YAAY;EACb;AAIH,KAAI,GAAG,SAAS,UAWd,QANoD;EAClD,MAAM;EACN,KAN+B;GAC/B,aAAa;GACb,QAAQ,GAAG;GACZ;EAIC,KAAK,GAAG;EACR,YAAY;EACb;AAIH,KAAI,GAAG,SAAS,WACd,QAAO;EACL,MAAM;EACN,KAAK,GAAG;EACR,KAAK,GAAG;EACT;AAGH,KAAI,GAAG,SAAS,cACd,QAAO;EACL,MAAM;EACN,KAAK,GAAG;EACR,KAAK,GAAG;EACT;AAGH,KAAI,GAAG,SAAS,qBACd,QAAO;EACL,MAAM;EACN,KAAK,GAAG;EACR,KAAK,GAAG;EACR,YAAY;EACb;AAGH,KAAI,GAAG,SAAS,kBACd,QAAO;EACL,MAAM;EACN,KAAK,GAAG;EACR,KAAK,GAAG;EACR,YAAY;EACb;AAGH,KAAI,GAAG,SAAS,iBACd,QAAO;EACL,MAAM;EACN,KAAK,GAAG;EACR,KAAK,GAAG;EACR,SAAS,GAAG;EACZ,YAAY,KAAA;EACb;AAGH,KAAI,GAAG,SAAS,wBACd,QAAO;EACL,MAAM;EACN,KAAK,GAAG;EACR,KAAK,GAAG;EACR,SAAS,GAAG;EACZ,YAAY;EACb;AAGH,aAAY,GAAG;;AAGjB,SAAgB,eAAe,WAA2C;AACxE,QAAO,UAAU,QAAQ,MAAM,EAAE,SAAS,KAAA,EAAU,CAAC,IAAI,cAAc;;AAGzE,SAAgB,wBAAwB,UAAgD;AACtF,QAAO;EACL,OAAO,SAAS;EAChB,MAAM,SAAS;EACf,OAAO,SAAS,MACb,QAAQ,SAAS;AAEhB,OAAI,KAAK,OAAO,QAAQ,KACtB,QAAO;AAGT,OAAI,KAAK,OAAO,SAAS,KACvB,QAAO,KAAK,OAAO,QAAQ,SAAS;AAGtC,OAAI,KAAK,OAAO,SAAS,MACvB,QAAO,KAAK,OAAO,QAAQ,SAAS;AAGtC,UAAO;IACP,CACD,KAAK,UAAU;GACd,OAAO,KAAK,MAAM,MAAM;GACxB,QAAQ,cAAc,KAAK,OAAO;GACnC,EAAE;EACN"}
|
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
const require_label = require(
|
|
3
|
-
const require_pcolumn_data = require(
|
|
4
|
-
require(
|
|
5
|
-
const require_traverse = require(
|
|
6
|
-
const require_state_migration = require(
|
|
7
|
-
const require_labels = require(
|
|
8
|
-
const require_createPlDataTableV3 = require(
|
|
1
|
+
require("../../../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_label = require("../../../render/util/label.cjs");
|
|
3
|
+
const require_pcolumn_data = require("../../../render/util/pcolumn_data.cjs");
|
|
4
|
+
require("../../../render/index.cjs");
|
|
5
|
+
const require_traverse = require("../../../filters/traverse.cjs");
|
|
6
|
+
const require_state_migration = require("../state-migration.cjs");
|
|
7
|
+
const require_labels = require("../labels.cjs");
|
|
8
|
+
const require_createPlDataTableV3 = require("./createPlDataTableV3.cjs");
|
|
9
9
|
let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
|
|
10
10
|
let es_toolkit_compat = require("es-toolkit/compat");
|
|
11
11
|
let es_toolkit = require("es-toolkit");
|
|
12
|
-
|
|
13
12
|
//#region src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts
|
|
14
13
|
/**
|
|
15
14
|
* Create p-table spec and handle given ui table state
|
|
@@ -105,7 +104,7 @@ function createPlDataTableV2(ctx, columns, tableState, options) {
|
|
|
105
104
|
visibleTableHandle: visibleHandle
|
|
106
105
|
};
|
|
107
106
|
}
|
|
108
|
-
|
|
109
107
|
//#endregion
|
|
110
108
|
exports.createPlDataTableV2 = createPlDataTableV2;
|
|
109
|
+
|
|
111
110
|
//# sourceMappingURL=createPlDataTableV2.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createPlDataTableV2.cjs","names":["upgradePlDataTableStateV2","getAllLabelColumns","getMatchingLabelColumns","getColumnIdAndSpec","deriveLabels","identity","Annotation","collectFilterSpecColumns","createPTableDef","isColumnOptional","allPColumnsReady"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts"],"sourcesContent":["import type {\n AxisId,\n PColumn,\n PObjectId,\n PTableColumnId,\n PTableColumnIdAxis,\n PTableColumnIdColumn,\n CanonicalizedJson,\n} from \"@milaboratories/pl-model-common\";\nimport {\n Annotation,\n canonicalizeJson,\n getAxisId,\n getColumnIdAndSpec,\n isLinkerColumn,\n uniqueBy,\n parseJson,\n} from \"@milaboratories/pl-model-common\";\nimport type { PColumnDataUniversal, RenderCtxBase } from \"../../../render\";\nimport { allPColumnsReady, deriveLabels } from \"../../../render\";\nimport { identity } from \"es-toolkit\";\nimport type { CreatePlDataTableOps, PlDataTableFilters, PlDataTableModel } from \"../typesV5\";\nimport { upgradePlDataTableStateV2 } from \"../state-migration\";\nimport type { PlDataTableStateV2 } from \"../state-migration\";\nimport { getAllLabelColumns, getMatchingLabelColumns } from \"../labels\";\nimport { collectFilterSpecColumns } from \"../../../filters/traverse\";\nimport { isEmpty } from \"es-toolkit/compat\";\nimport { createPTableDef, isColumnOptional } from \"./createPlDataTableV3\";\n\nexport type createPlDataTableOptionsV2 = {\n columns: PColumn<PColumnDataUniversal>[];\n tableState?: PlDataTableStateV2;\n options?: CreatePlDataTableOps;\n};\n\n/**\n * Create p-table spec and handle given ui table state\n *\n * @param ctx context\n * @param columns column list\n * @param tableState table ui state\n * @returns PlAgDataTableV2 table source\n */\nexport function createPlDataTableV2<A, U>(\n ctx: RenderCtxBase<A, U>,\n columns: createPlDataTableOptionsV2[\"columns\"],\n tableState?: createPlDataTableOptionsV2[\"tableState\"],\n options?: createPlDataTableOptionsV2[\"options\"],\n): PlDataTableModel | undefined {\n if (columns.length === 0) return undefined;\n\n const tableStateNormalized = upgradePlDataTableStateV2(tableState);\n\n const allLabelColumns = getAllLabelColumns(ctx.resultPool);\n if (!allLabelColumns) return undefined;\n\n let fullLabelColumns = getMatchingLabelColumns(columns.map(getColumnIdAndSpec), allLabelColumns);\n fullLabelColumns = deriveLabels(fullLabelColumns, identity, { includeNativeLabel: true }).map(\n (v) => {\n return {\n ...v.value,\n spec: {\n ...v.value.spec,\n annotations: {\n ...v.value.spec.annotations,\n [Annotation.Label]: v.label,\n },\n },\n };\n },\n );\n\n const fullColumns = [...columns, ...fullLabelColumns];\n\n const fullColumnsAxes = uniqueBy(\n fullColumns.flatMap((c) => c.spec.axesSpec.map((a) => getAxisId(a))),\n (a) => canonicalizeJson<AxisId>(a),\n );\n const fullColumnsIds: PTableColumnId[] = [\n ...fullColumnsAxes.map((a) => ({ type: \"axis\", id: a }) satisfies PTableColumnIdAxis),\n ...fullColumns.map((c) => ({ type: \"column\", id: c.id }) satisfies PTableColumnIdColumn),\n ];\n const fullColumnsIdsSet = new Set(fullColumnsIds.map((c) => canonicalizeJson<PTableColumnId>(c)));\n const isValidColumnId = (id: string): boolean =>\n fullColumnsIdsSet.has(id as CanonicalizedJson<PTableColumnId>);\n\n // -- Filtering validation --\n const stateFilters = tableStateNormalized.pTableParams.filters;\n const opsFilters = options?.filters ?? null;\n const filters: null | PlDataTableFilters =\n stateFilters != null && opsFilters != null\n ? { type: \"and\", filters: [stateFilters, opsFilters] }\n : (stateFilters ?? opsFilters);\n const filterColumns = filters ? collectFilterSpecColumns(filters) : [];\n const firstInvalidFilterColumn = filterColumns.find((col) => !isValidColumnId(col));\n if (firstInvalidFilterColumn)\n throw new Error(\n `Invalid filter column ${firstInvalidFilterColumn}: column reference does not match the table columns`,\n );\n\n // -- Sorting validation --\n const userSorting = tableStateNormalized.pTableParams.sorting;\n const sorting = (isEmpty(userSorting) ? options?.sorting : userSorting) ?? [];\n const firstInvalidSortingColumn = sorting.find(\n (s) => !isValidColumnId(canonicalizeJson<PTableColumnId>(s.column)),\n );\n if (firstInvalidSortingColumn)\n throw new Error(\n `Invalid sorting column ${JSON.stringify(firstInvalidSortingColumn.column)}: column reference does not match the table columns`,\n );\n\n const coreJoinType = options?.coreJoinType ?? \"full\";\n const fullDef = createPTableDef({\n columns,\n labelColumns: fullLabelColumns,\n coreJoinType,\n filters,\n sorting,\n coreColumnPredicate: options?.coreColumnPredicate,\n });\n\n const fullHandle = ctx.createPTableV2(fullDef);\n const pframeHandle = ctx.createPFrame(fullColumns);\n if (!fullHandle || !pframeHandle) return undefined;\n\n const hiddenColumns = new Set<PObjectId>(\n ((): PObjectId[] => {\n // Inner join works as a filter - all columns must be present\n if (coreJoinType === \"inner\") return [];\n\n const hiddenColIds = tableStateNormalized.pTableParams.hiddenColIds;\n if (hiddenColIds) return hiddenColIds;\n\n return columns.filter((c) => isColumnOptional(c.spec)).map((c) => c.id);\n })(),\n );\n\n // Preserve linker columns\n columns.filter((c) => isLinkerColumn(c.spec)).forEach((c) => hiddenColumns.delete(c.id));\n\n // Preserve core columns as they change the shape of join.\n const coreColumnPredicate = options?.coreColumnPredicate;\n if (coreColumnPredicate) {\n const coreColumns = columns.flatMap((c) =>\n coreColumnPredicate(getColumnIdAndSpec(c)) ? [c.id] : [],\n );\n coreColumns.forEach((c) => hiddenColumns.delete(c));\n }\n\n // Preserve sorted columns from being hidden\n sorting\n .map((s) => s.column)\n .filter((c): c is PTableColumnIdColumn => c.type === \"column\")\n .forEach((c) => hiddenColumns.delete(c.id));\n\n // Preserve filter columns from being hidden\n if (filters) {\n collectFilterSpecColumns(filters)\n .flatMap((c) => {\n const obj = parseJson(c);\n return obj.type === \"column\" ? [obj.id] : [];\n })\n .forEach((c) => hiddenColumns.delete(c));\n }\n\n const visibleColumns = columns.filter((c) => !hiddenColumns.has(c.id));\n const visibleLabelColumns = getMatchingLabelColumns(\n visibleColumns.map(getColumnIdAndSpec),\n allLabelColumns,\n );\n\n // if at least one column is not yet computed, we can't show the table\n if (!allPColumnsReady([...visibleColumns, ...visibleLabelColumns])) return undefined;\n\n const visibleDef = createPTableDef({\n columns: visibleColumns,\n labelColumns: visibleLabelColumns,\n coreJoinType,\n filters,\n sorting,\n coreColumnPredicate,\n });\n const visibleHandle = ctx.createPTableV2(visibleDef);\n\n if (!visibleHandle) return undefined;\n\n return {\n sourceId: tableStateNormalized.pTableParams.sourceId,\n fullTableHandle: fullHandle,\n fullPframeHandle: pframeHandle,\n visibleTableHandle: visibleHandle,\n } satisfies PlDataTableModel;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA2CA,SAAgB,oBACd,KACA,SACA,YACA,SAC8B;AAC9B,KAAI,QAAQ,WAAW,EAAG,QAAO;CAEjC,MAAM,uBAAuBA,kDAA0B,WAAW;CAElE,MAAM,kBAAkBC,kCAAmB,IAAI,WAAW;AAC1D,KAAI,CAAC,gBAAiB,QAAO;CAE7B,IAAI,mBAAmBC,uCAAwB,QAAQ,IAAIC,mDAAmB,EAAE,gBAAgB;AAChG,oBAAmBC,2BAAa,kBAAkBC,qBAAU,EAAE,oBAAoB,MAAM,CAAC,CAAC,KACvF,MAAM;AACL,SAAO;GACL,GAAG,EAAE;GACL,MAAM;IACJ,GAAG,EAAE,MAAM;IACX,aAAa;KACX,GAAG,EAAE,MAAM,KAAK;MACfC,2CAAW,QAAQ,EAAE;KACvB;IACF;GACF;GAEJ;CAED,MAAM,cAAc,CAAC,GAAG,SAAS,GAAG,iBAAiB;CAMrD,MAAM,iBAAmC,CACvC,iDAJA,YAAY,SAAS,MAAM,EAAE,KAAK,SAAS,KAAK,qDAAgB,EAAE,CAAC,CAAC,GACnE,4DAA+B,EAAE,CACnC,CAEoB,KAAK,OAAO;EAAE,MAAM;EAAQ,IAAI;EAAG,EAA+B,EACrF,GAAG,YAAY,KAAK,OAAO;EAAE,MAAM;EAAU,IAAI,EAAE;EAAI,EAAiC,CACzF;CACD,MAAM,oBAAoB,IAAI,IAAI,eAAe,KAAK,4DAAuC,EAAE,CAAC,CAAC;CACjG,MAAM,mBAAmB,OACvB,kBAAkB,IAAI,GAAwC;CAGhE,MAAM,eAAe,qBAAqB,aAAa;CACvD,MAAM,aAAa,SAAS,WAAW;CACvC,MAAM,UACJ,gBAAgB,QAAQ,cAAc,OAClC;EAAE,MAAM;EAAO,SAAS,CAAC,cAAc,WAAW;EAAE,GACnD,gBAAgB;CAEvB,MAAM,4BADgB,UAAUC,0CAAyB,QAAQ,GAAG,EAAE,EACvB,MAAM,QAAQ,CAAC,gBAAgB,IAAI,CAAC;AACnF,KAAI,yBACF,OAAM,IAAI,MACR,yBAAyB,yBAAyB,qDACnD;CAGH,MAAM,cAAc,qBAAqB,aAAa;CACtD,MAAM,0CAAmB,YAAY,GAAG,SAAS,UAAU,gBAAgB,EAAE;CAC7E,MAAM,4BAA4B,QAAQ,MACvC,MAAM,CAAC,sEAAiD,EAAE,OAAO,CAAC,CACpE;AACD,KAAI,0BACF,OAAM,IAAI,MACR,0BAA0B,KAAK,UAAU,0BAA0B,OAAO,CAAC,qDAC5E;CAEH,MAAM,eAAe,SAAS,gBAAgB;CAC9C,MAAM,UAAUC,4CAAgB;EAC9B;EACA,cAAc;EACd;EACA;EACA;EACA,qBAAqB,SAAS;EAC/B,CAAC;CAEF,MAAM,aAAa,IAAI,eAAe,QAAQ;CAC9C,MAAM,eAAe,IAAI,aAAa,YAAY;AAClD,KAAI,CAAC,cAAc,CAAC,aAAc,QAAO;CAEzC,MAAM,gBAAgB,IAAI,WACJ;AAElB,MAAI,iBAAiB,QAAS,QAAO,EAAE;EAEvC,MAAM,eAAe,qBAAqB,aAAa;AACvD,MAAI,aAAc,QAAO;AAEzB,SAAO,QAAQ,QAAQ,MAAMC,6CAAiB,EAAE,KAAK,CAAC,CAAC,KAAK,MAAM,EAAE,GAAG;KACrE,CACL;AAGD,SAAQ,QAAQ,0DAAqB,EAAE,KAAK,CAAC,CAAC,SAAS,MAAM,cAAc,OAAO,EAAE,GAAG,CAAC;CAGxF,MAAM,sBAAsB,SAAS;AACrC,KAAI,oBAIF,CAHoB,QAAQ,SAAS,MACnC,4EAAuC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,CACzD,CACW,SAAS,MAAM,cAAc,OAAO,EAAE,CAAC;AAIrD,SACG,KAAK,MAAM,EAAE,OAAO,CACpB,QAAQ,MAAiC,EAAE,SAAS,SAAS,CAC7D,SAAS,MAAM,cAAc,OAAO,EAAE,GAAG,CAAC;AAG7C,KAAI,QACF,2CAAyB,QAAQ,CAC9B,SAAS,MAAM;EACd,MAAM,qDAAgB,EAAE;AACxB,SAAO,IAAI,SAAS,WAAW,CAAC,IAAI,GAAG,GAAG,EAAE;GAC5C,CACD,SAAS,MAAM,cAAc,OAAO,EAAE,CAAC;CAG5C,MAAM,iBAAiB,QAAQ,QAAQ,MAAM,CAAC,cAAc,IAAI,EAAE,GAAG,CAAC;CACtE,MAAM,sBAAsBP,uCAC1B,eAAe,IAAIC,mDAAmB,EACtC,gBACD;AAGD,KAAI,CAACO,sCAAiB,CAAC,GAAG,gBAAgB,GAAG,oBAAoB,CAAC,CAAE,QAAO;CAE3E,MAAM,aAAaF,4CAAgB;EACjC,SAAS;EACT,cAAc;EACd;EACA;EACA;EACA;EACD,CAAC;CACF,MAAM,gBAAgB,IAAI,eAAe,WAAW;AAEpD,KAAI,CAAC,cAAe,QAAO;AAE3B,QAAO;EACL,UAAU,qBAAqB,aAAa;EAC5C,iBAAiB;EACjB,kBAAkB;EAClB,oBAAoB;EACrB"}
|
|
1
|
+
{"version":3,"file":"createPlDataTableV2.cjs","names":["upgradePlDataTableStateV2","getAllLabelColumns","getMatchingLabelColumns","getColumnIdAndSpec","deriveLabels","identity","Annotation","collectFilterSpecColumns","createPTableDef","isColumnOptional","allPColumnsReady"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts"],"sourcesContent":["import type {\n AxisId,\n PColumn,\n PObjectId,\n PTableColumnId,\n PTableColumnIdAxis,\n PTableColumnIdColumn,\n CanonicalizedJson,\n} from \"@milaboratories/pl-model-common\";\nimport {\n Annotation,\n canonicalizeJson,\n getAxisId,\n getColumnIdAndSpec,\n isLinkerColumn,\n uniqueBy,\n parseJson,\n} from \"@milaboratories/pl-model-common\";\nimport type { PColumnDataUniversal, RenderCtxBase } from \"../../../render\";\nimport { allPColumnsReady, deriveLabels } from \"../../../render\";\nimport { identity } from \"es-toolkit\";\nimport type { CreatePlDataTableOps, PlDataTableFilters, PlDataTableModel } from \"../typesV5\";\nimport { upgradePlDataTableStateV2 } from \"../state-migration\";\nimport type { PlDataTableStateV2 } from \"../state-migration\";\nimport { getAllLabelColumns, getMatchingLabelColumns } from \"../labels\";\nimport { collectFilterSpecColumns } from \"../../../filters/traverse\";\nimport { isEmpty } from \"es-toolkit/compat\";\nimport { createPTableDef, isColumnOptional } from \"./createPlDataTableV3\";\n\nexport type createPlDataTableOptionsV2 = {\n columns: PColumn<PColumnDataUniversal>[];\n tableState?: PlDataTableStateV2;\n options?: CreatePlDataTableOps;\n};\n\n/**\n * Create p-table spec and handle given ui table state\n *\n * @param ctx context\n * @param columns column list\n * @param tableState table ui state\n * @returns PlAgDataTableV2 table source\n */\nexport function createPlDataTableV2<A, U>(\n ctx: RenderCtxBase<A, U>,\n columns: createPlDataTableOptionsV2[\"columns\"],\n tableState?: createPlDataTableOptionsV2[\"tableState\"],\n options?: createPlDataTableOptionsV2[\"options\"],\n): PlDataTableModel | undefined {\n if (columns.length === 0) return undefined;\n\n const tableStateNormalized = upgradePlDataTableStateV2(tableState);\n\n const allLabelColumns = getAllLabelColumns(ctx.resultPool);\n if (!allLabelColumns) return undefined;\n\n let fullLabelColumns = getMatchingLabelColumns(columns.map(getColumnIdAndSpec), allLabelColumns);\n fullLabelColumns = deriveLabels(fullLabelColumns, identity, { includeNativeLabel: true }).map(\n (v) => {\n return {\n ...v.value,\n spec: {\n ...v.value.spec,\n annotations: {\n ...v.value.spec.annotations,\n [Annotation.Label]: v.label,\n },\n },\n };\n },\n );\n\n const fullColumns = [...columns, ...fullLabelColumns];\n\n const fullColumnsAxes = uniqueBy(\n fullColumns.flatMap((c) => c.spec.axesSpec.map((a) => getAxisId(a))),\n (a) => canonicalizeJson<AxisId>(a),\n );\n const fullColumnsIds: PTableColumnId[] = [\n ...fullColumnsAxes.map((a) => ({ type: \"axis\", id: a }) satisfies PTableColumnIdAxis),\n ...fullColumns.map((c) => ({ type: \"column\", id: c.id }) satisfies PTableColumnIdColumn),\n ];\n const fullColumnsIdsSet = new Set(fullColumnsIds.map((c) => canonicalizeJson<PTableColumnId>(c)));\n const isValidColumnId = (id: string): boolean =>\n fullColumnsIdsSet.has(id as CanonicalizedJson<PTableColumnId>);\n\n // -- Filtering validation --\n const stateFilters = tableStateNormalized.pTableParams.filters;\n const opsFilters = options?.filters ?? null;\n const filters: null | PlDataTableFilters =\n stateFilters != null && opsFilters != null\n ? { type: \"and\", filters: [stateFilters, opsFilters] }\n : (stateFilters ?? opsFilters);\n const filterColumns = filters ? collectFilterSpecColumns(filters) : [];\n const firstInvalidFilterColumn = filterColumns.find((col) => !isValidColumnId(col));\n if (firstInvalidFilterColumn)\n throw new Error(\n `Invalid filter column ${firstInvalidFilterColumn}: column reference does not match the table columns`,\n );\n\n // -- Sorting validation --\n const userSorting = tableStateNormalized.pTableParams.sorting;\n const sorting = (isEmpty(userSorting) ? options?.sorting : userSorting) ?? [];\n const firstInvalidSortingColumn = sorting.find(\n (s) => !isValidColumnId(canonicalizeJson<PTableColumnId>(s.column)),\n );\n if (firstInvalidSortingColumn)\n throw new Error(\n `Invalid sorting column ${JSON.stringify(firstInvalidSortingColumn.column)}: column reference does not match the table columns`,\n );\n\n const coreJoinType = options?.coreJoinType ?? \"full\";\n const fullDef = createPTableDef({\n columns,\n labelColumns: fullLabelColumns,\n coreJoinType,\n filters,\n sorting,\n coreColumnPredicate: options?.coreColumnPredicate,\n });\n\n const fullHandle = ctx.createPTableV2(fullDef);\n const pframeHandle = ctx.createPFrame(fullColumns);\n if (!fullHandle || !pframeHandle) return undefined;\n\n const hiddenColumns = new Set<PObjectId>(\n ((): PObjectId[] => {\n // Inner join works as a filter - all columns must be present\n if (coreJoinType === \"inner\") return [];\n\n const hiddenColIds = tableStateNormalized.pTableParams.hiddenColIds;\n if (hiddenColIds) return hiddenColIds;\n\n return columns.filter((c) => isColumnOptional(c.spec)).map((c) => c.id);\n })(),\n );\n\n // Preserve linker columns\n columns.filter((c) => isLinkerColumn(c.spec)).forEach((c) => hiddenColumns.delete(c.id));\n\n // Preserve core columns as they change the shape of join.\n const coreColumnPredicate = options?.coreColumnPredicate;\n if (coreColumnPredicate) {\n const coreColumns = columns.flatMap((c) =>\n coreColumnPredicate(getColumnIdAndSpec(c)) ? [c.id] : [],\n );\n coreColumns.forEach((c) => hiddenColumns.delete(c));\n }\n\n // Preserve sorted columns from being hidden\n sorting\n .map((s) => s.column)\n .filter((c): c is PTableColumnIdColumn => c.type === \"column\")\n .forEach((c) => hiddenColumns.delete(c.id));\n\n // Preserve filter columns from being hidden\n if (filters) {\n collectFilterSpecColumns(filters)\n .flatMap((c) => {\n const obj = parseJson(c);\n return obj.type === \"column\" ? [obj.id] : [];\n })\n .forEach((c) => hiddenColumns.delete(c));\n }\n\n const visibleColumns = columns.filter((c) => !hiddenColumns.has(c.id));\n const visibleLabelColumns = getMatchingLabelColumns(\n visibleColumns.map(getColumnIdAndSpec),\n allLabelColumns,\n );\n\n // if at least one column is not yet computed, we can't show the table\n if (!allPColumnsReady([...visibleColumns, ...visibleLabelColumns])) return undefined;\n\n const visibleDef = createPTableDef({\n columns: visibleColumns,\n labelColumns: visibleLabelColumns,\n coreJoinType,\n filters,\n sorting,\n coreColumnPredicate,\n });\n const visibleHandle = ctx.createPTableV2(visibleDef);\n\n if (!visibleHandle) return undefined;\n\n return {\n sourceId: tableStateNormalized.pTableParams.sourceId,\n fullTableHandle: fullHandle,\n fullPframeHandle: pframeHandle,\n visibleTableHandle: visibleHandle,\n } satisfies PlDataTableModel;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA2CA,SAAgB,oBACd,KACA,SACA,YACA,SAC8B;AAC9B,KAAI,QAAQ,WAAW,EAAG,QAAO,KAAA;CAEjC,MAAM,uBAAuBA,wBAAAA,0BAA0B,WAAW;CAElE,MAAM,kBAAkBC,eAAAA,mBAAmB,IAAI,WAAW;AAC1D,KAAI,CAAC,gBAAiB,QAAO,KAAA;CAE7B,IAAI,mBAAmBC,eAAAA,wBAAwB,QAAQ,IAAIC,gCAAAA,mBAAmB,EAAE,gBAAgB;AAChG,oBAAmBC,cAAAA,aAAa,kBAAkBC,WAAAA,UAAU,EAAE,oBAAoB,MAAM,CAAC,CAAC,KACvF,MAAM;AACL,SAAO;GACL,GAAG,EAAE;GACL,MAAM;IACJ,GAAG,EAAE,MAAM;IACX,aAAa;KACX,GAAG,EAAE,MAAM,KAAK;MACfC,gCAAAA,WAAW,QAAQ,EAAE;KACvB;IACF;GACF;GAEJ;CAED,MAAM,cAAc,CAAC,GAAG,SAAS,GAAG,iBAAiB;CAMrD,MAAM,iBAAmC,CACvC,IAAA,GAAA,gCAAA,UAJA,YAAY,SAAS,MAAM,EAAE,KAAK,SAAS,KAAK,OAAA,GAAA,gCAAA,WAAgB,EAAE,CAAC,CAAC,GACnE,OAAA,GAAA,gCAAA,kBAA+B,EAAE,CACnC,CAEoB,KAAK,OAAO;EAAE,MAAM;EAAQ,IAAI;EAAG,EAA+B,EACrF,GAAG,YAAY,KAAK,OAAO;EAAE,MAAM;EAAU,IAAI,EAAE;EAAI,EAAiC,CACzF;CACD,MAAM,oBAAoB,IAAI,IAAI,eAAe,KAAK,OAAA,GAAA,gCAAA,kBAAuC,EAAE,CAAC,CAAC;CACjG,MAAM,mBAAmB,OACvB,kBAAkB,IAAI,GAAwC;CAGhE,MAAM,eAAe,qBAAqB,aAAa;CACvD,MAAM,aAAa,SAAS,WAAW;CACvC,MAAM,UACJ,gBAAgB,QAAQ,cAAc,OAClC;EAAE,MAAM;EAAO,SAAS,CAAC,cAAc,WAAW;EAAE,GACnD,gBAAgB;CAEvB,MAAM,4BADgB,UAAUC,iBAAAA,yBAAyB,QAAQ,GAAG,EAAE,EACvB,MAAM,QAAQ,CAAC,gBAAgB,IAAI,CAAC;AACnF,KAAI,yBACF,OAAM,IAAI,MACR,yBAAyB,yBAAyB,qDACnD;CAGH,MAAM,cAAc,qBAAqB,aAAa;CACtD,MAAM,YAAA,GAAA,kBAAA,SAAmB,YAAY,GAAG,SAAS,UAAU,gBAAgB,EAAE;CAC7E,MAAM,4BAA4B,QAAQ,MACvC,MAAM,CAAC,iBAAA,GAAA,gCAAA,kBAAiD,EAAE,OAAO,CAAC,CACpE;AACD,KAAI,0BACF,OAAM,IAAI,MACR,0BAA0B,KAAK,UAAU,0BAA0B,OAAO,CAAC,qDAC5E;CAEH,MAAM,eAAe,SAAS,gBAAgB;CAC9C,MAAM,UAAUC,4BAAAA,gBAAgB;EAC9B;EACA,cAAc;EACd;EACA;EACA;EACA,qBAAqB,SAAS;EAC/B,CAAC;CAEF,MAAM,aAAa,IAAI,eAAe,QAAQ;CAC9C,MAAM,eAAe,IAAI,aAAa,YAAY;AAClD,KAAI,CAAC,cAAc,CAAC,aAAc,QAAO,KAAA;CAEzC,MAAM,gBAAgB,IAAI,WACJ;AAElB,MAAI,iBAAiB,QAAS,QAAO,EAAE;EAEvC,MAAM,eAAe,qBAAqB,aAAa;AACvD,MAAI,aAAc,QAAO;AAEzB,SAAO,QAAQ,QAAQ,MAAMC,4BAAAA,iBAAiB,EAAE,KAAK,CAAC,CAAC,KAAK,MAAM,EAAE,GAAG;KACrE,CACL;AAGD,SAAQ,QAAQ,OAAA,GAAA,gCAAA,gBAAqB,EAAE,KAAK,CAAC,CAAC,SAAS,MAAM,cAAc,OAAO,EAAE,GAAG,CAAC;CAGxF,MAAM,sBAAsB,SAAS;AACrC,KAAI,oBACkB,SAAQ,SAAS,MACnC,qBAAA,GAAA,gCAAA,oBAAuC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,CACzD,CACW,SAAS,MAAM,cAAc,OAAO,EAAE,CAAC;AAIrD,SACG,KAAK,MAAM,EAAE,OAAO,CACpB,QAAQ,MAAiC,EAAE,SAAS,SAAS,CAC7D,SAAS,MAAM,cAAc,OAAO,EAAE,GAAG,CAAC;AAG7C,KAAI,QACF,kBAAA,yBAAyB,QAAQ,CAC9B,SAAS,MAAM;EACd,MAAM,OAAA,GAAA,gCAAA,WAAgB,EAAE;AACxB,SAAO,IAAI,SAAS,WAAW,CAAC,IAAI,GAAG,GAAG,EAAE;GAC5C,CACD,SAAS,MAAM,cAAc,OAAO,EAAE,CAAC;CAG5C,MAAM,iBAAiB,QAAQ,QAAQ,MAAM,CAAC,cAAc,IAAI,EAAE,GAAG,CAAC;CACtE,MAAM,sBAAsBP,eAAAA,wBAC1B,eAAe,IAAIC,gCAAAA,mBAAmB,EACtC,gBACD;AAGD,KAAI,CAACO,qBAAAA,iBAAiB,CAAC,GAAG,gBAAgB,GAAG,oBAAoB,CAAC,CAAE,QAAO,KAAA;CAE3E,MAAM,aAAaF,4BAAAA,gBAAgB;EACjC,SAAS;EACT,cAAc;EACd;EACA;EACA;EACA;EACD,CAAC;CACF,MAAM,gBAAgB,IAAI,eAAe,WAAW;AAEpD,KAAI,CAAC,cAAe,QAAO,KAAA;AAE3B,QAAO;EACL,UAAU,qBAAqB,aAAa;EAC5C,iBAAiB;EACjB,kBAAkB;EAClB,oBAAoB;EACrB"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { PColumnDataUniversal } from "../../../render/internal.js";
|
|
2
2
|
import { RenderCtxBase } from "../../../render/api.js";
|
|
3
|
-
import "../../../render/index.js";
|
|
4
3
|
import { CreatePlDataTableOps, PlDataTableModel } from "../typesV5.js";
|
|
5
4
|
import { PlDataTableStateV2 } from "../state-migration.js";
|
|
6
5
|
import { PColumn } from "@milaboratories/pl-model-common";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createPlDataTableV2.d.ts","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts"],"mappings":";;;;;;;KA6BY,0BAAA;EACV,OAAA,EAAS,OAAA,CAAQ,oBAAA;EACjB,UAAA,GAAa,kBAAA;EACb,OAAA,GAAU,oBAAA;AAAA;;;;;;;;;iBAWI,mBAAA,MAAA,CACd,GAAA,EAAK,aAAA,CAAc,CAAA,EAAG,CAAA,GACtB,OAAA,EAAS,0BAAA,aACT,UAAA,GAAa,0BAAA,gBACb,OAAA,GAAU,0BAAA,cACT,gBAAA"}
|
|
@@ -8,7 +8,6 @@ import { createPTableDef, isColumnOptional } from "./createPlDataTableV3.js";
|
|
|
8
8
|
import { Annotation, canonicalizeJson, getAxisId, getColumnIdAndSpec, isLinkerColumn, parseJson, uniqueBy } from "@milaboratories/pl-model-common";
|
|
9
9
|
import { isEmpty } from "es-toolkit/compat";
|
|
10
10
|
import { identity } from "es-toolkit";
|
|
11
|
-
|
|
12
11
|
//#region src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts
|
|
13
12
|
/**
|
|
14
13
|
* Create p-table spec and handle given ui table state
|
|
@@ -104,7 +103,7 @@ function createPlDataTableV2(ctx, columns, tableState, options) {
|
|
|
104
103
|
visibleTableHandle: visibleHandle
|
|
105
104
|
};
|
|
106
105
|
}
|
|
107
|
-
|
|
108
106
|
//#endregion
|
|
109
107
|
export { createPlDataTableV2 };
|
|
108
|
+
|
|
110
109
|
//# sourceMappingURL=createPlDataTableV2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createPlDataTableV2.js","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts"],"sourcesContent":["import type {\n AxisId,\n PColumn,\n PObjectId,\n PTableColumnId,\n PTableColumnIdAxis,\n PTableColumnIdColumn,\n CanonicalizedJson,\n} from \"@milaboratories/pl-model-common\";\nimport {\n Annotation,\n canonicalizeJson,\n getAxisId,\n getColumnIdAndSpec,\n isLinkerColumn,\n uniqueBy,\n parseJson,\n} from \"@milaboratories/pl-model-common\";\nimport type { PColumnDataUniversal, RenderCtxBase } from \"../../../render\";\nimport { allPColumnsReady, deriveLabels } from \"../../../render\";\nimport { identity } from \"es-toolkit\";\nimport type { CreatePlDataTableOps, PlDataTableFilters, PlDataTableModel } from \"../typesV5\";\nimport { upgradePlDataTableStateV2 } from \"../state-migration\";\nimport type { PlDataTableStateV2 } from \"../state-migration\";\nimport { getAllLabelColumns, getMatchingLabelColumns } from \"../labels\";\nimport { collectFilterSpecColumns } from \"../../../filters/traverse\";\nimport { isEmpty } from \"es-toolkit/compat\";\nimport { createPTableDef, isColumnOptional } from \"./createPlDataTableV3\";\n\nexport type createPlDataTableOptionsV2 = {\n columns: PColumn<PColumnDataUniversal>[];\n tableState?: PlDataTableStateV2;\n options?: CreatePlDataTableOps;\n};\n\n/**\n * Create p-table spec and handle given ui table state\n *\n * @param ctx context\n * @param columns column list\n * @param tableState table ui state\n * @returns PlAgDataTableV2 table source\n */\nexport function createPlDataTableV2<A, U>(\n ctx: RenderCtxBase<A, U>,\n columns: createPlDataTableOptionsV2[\"columns\"],\n tableState?: createPlDataTableOptionsV2[\"tableState\"],\n options?: createPlDataTableOptionsV2[\"options\"],\n): PlDataTableModel | undefined {\n if (columns.length === 0) return undefined;\n\n const tableStateNormalized = upgradePlDataTableStateV2(tableState);\n\n const allLabelColumns = getAllLabelColumns(ctx.resultPool);\n if (!allLabelColumns) return undefined;\n\n let fullLabelColumns = getMatchingLabelColumns(columns.map(getColumnIdAndSpec), allLabelColumns);\n fullLabelColumns = deriveLabels(fullLabelColumns, identity, { includeNativeLabel: true }).map(\n (v) => {\n return {\n ...v.value,\n spec: {\n ...v.value.spec,\n annotations: {\n ...v.value.spec.annotations,\n [Annotation.Label]: v.label,\n },\n },\n };\n },\n );\n\n const fullColumns = [...columns, ...fullLabelColumns];\n\n const fullColumnsAxes = uniqueBy(\n fullColumns.flatMap((c) => c.spec.axesSpec.map((a) => getAxisId(a))),\n (a) => canonicalizeJson<AxisId>(a),\n );\n const fullColumnsIds: PTableColumnId[] = [\n ...fullColumnsAxes.map((a) => ({ type: \"axis\", id: a }) satisfies PTableColumnIdAxis),\n ...fullColumns.map((c) => ({ type: \"column\", id: c.id }) satisfies PTableColumnIdColumn),\n ];\n const fullColumnsIdsSet = new Set(fullColumnsIds.map((c) => canonicalizeJson<PTableColumnId>(c)));\n const isValidColumnId = (id: string): boolean =>\n fullColumnsIdsSet.has(id as CanonicalizedJson<PTableColumnId>);\n\n // -- Filtering validation --\n const stateFilters = tableStateNormalized.pTableParams.filters;\n const opsFilters = options?.filters ?? null;\n const filters: null | PlDataTableFilters =\n stateFilters != null && opsFilters != null\n ? { type: \"and\", filters: [stateFilters, opsFilters] }\n : (stateFilters ?? opsFilters);\n const filterColumns = filters ? collectFilterSpecColumns(filters) : [];\n const firstInvalidFilterColumn = filterColumns.find((col) => !isValidColumnId(col));\n if (firstInvalidFilterColumn)\n throw new Error(\n `Invalid filter column ${firstInvalidFilterColumn}: column reference does not match the table columns`,\n );\n\n // -- Sorting validation --\n const userSorting = tableStateNormalized.pTableParams.sorting;\n const sorting = (isEmpty(userSorting) ? options?.sorting : userSorting) ?? [];\n const firstInvalidSortingColumn = sorting.find(\n (s) => !isValidColumnId(canonicalizeJson<PTableColumnId>(s.column)),\n );\n if (firstInvalidSortingColumn)\n throw new Error(\n `Invalid sorting column ${JSON.stringify(firstInvalidSortingColumn.column)}: column reference does not match the table columns`,\n );\n\n const coreJoinType = options?.coreJoinType ?? \"full\";\n const fullDef = createPTableDef({\n columns,\n labelColumns: fullLabelColumns,\n coreJoinType,\n filters,\n sorting,\n coreColumnPredicate: options?.coreColumnPredicate,\n });\n\n const fullHandle = ctx.createPTableV2(fullDef);\n const pframeHandle = ctx.createPFrame(fullColumns);\n if (!fullHandle || !pframeHandle) return undefined;\n\n const hiddenColumns = new Set<PObjectId>(\n ((): PObjectId[] => {\n // Inner join works as a filter - all columns must be present\n if (coreJoinType === \"inner\") return [];\n\n const hiddenColIds = tableStateNormalized.pTableParams.hiddenColIds;\n if (hiddenColIds) return hiddenColIds;\n\n return columns.filter((c) => isColumnOptional(c.spec)).map((c) => c.id);\n })(),\n );\n\n // Preserve linker columns\n columns.filter((c) => isLinkerColumn(c.spec)).forEach((c) => hiddenColumns.delete(c.id));\n\n // Preserve core columns as they change the shape of join.\n const coreColumnPredicate = options?.coreColumnPredicate;\n if (coreColumnPredicate) {\n const coreColumns = columns.flatMap((c) =>\n coreColumnPredicate(getColumnIdAndSpec(c)) ? [c.id] : [],\n );\n coreColumns.forEach((c) => hiddenColumns.delete(c));\n }\n\n // Preserve sorted columns from being hidden\n sorting\n .map((s) => s.column)\n .filter((c): c is PTableColumnIdColumn => c.type === \"column\")\n .forEach((c) => hiddenColumns.delete(c.id));\n\n // Preserve filter columns from being hidden\n if (filters) {\n collectFilterSpecColumns(filters)\n .flatMap((c) => {\n const obj = parseJson(c);\n return obj.type === \"column\" ? [obj.id] : [];\n })\n .forEach((c) => hiddenColumns.delete(c));\n }\n\n const visibleColumns = columns.filter((c) => !hiddenColumns.has(c.id));\n const visibleLabelColumns = getMatchingLabelColumns(\n visibleColumns.map(getColumnIdAndSpec),\n allLabelColumns,\n );\n\n // if at least one column is not yet computed, we can't show the table\n if (!allPColumnsReady([...visibleColumns, ...visibleLabelColumns])) return undefined;\n\n const visibleDef = createPTableDef({\n columns: visibleColumns,\n labelColumns: visibleLabelColumns,\n coreJoinType,\n filters,\n sorting,\n coreColumnPredicate,\n });\n const visibleHandle = ctx.createPTableV2(visibleDef);\n\n if (!visibleHandle) return undefined;\n\n return {\n sourceId: tableStateNormalized.pTableParams.sourceId,\n fullTableHandle: fullHandle,\n fullPframeHandle: pframeHandle,\n visibleTableHandle: visibleHandle,\n } satisfies PlDataTableModel;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"createPlDataTableV2.js","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts"],"sourcesContent":["import type {\n AxisId,\n PColumn,\n PObjectId,\n PTableColumnId,\n PTableColumnIdAxis,\n PTableColumnIdColumn,\n CanonicalizedJson,\n} from \"@milaboratories/pl-model-common\";\nimport {\n Annotation,\n canonicalizeJson,\n getAxisId,\n getColumnIdAndSpec,\n isLinkerColumn,\n uniqueBy,\n parseJson,\n} from \"@milaboratories/pl-model-common\";\nimport type { PColumnDataUniversal, RenderCtxBase } from \"../../../render\";\nimport { allPColumnsReady, deriveLabels } from \"../../../render\";\nimport { identity } from \"es-toolkit\";\nimport type { CreatePlDataTableOps, PlDataTableFilters, PlDataTableModel } from \"../typesV5\";\nimport { upgradePlDataTableStateV2 } from \"../state-migration\";\nimport type { PlDataTableStateV2 } from \"../state-migration\";\nimport { getAllLabelColumns, getMatchingLabelColumns } from \"../labels\";\nimport { collectFilterSpecColumns } from \"../../../filters/traverse\";\nimport { isEmpty } from \"es-toolkit/compat\";\nimport { createPTableDef, isColumnOptional } from \"./createPlDataTableV3\";\n\nexport type createPlDataTableOptionsV2 = {\n columns: PColumn<PColumnDataUniversal>[];\n tableState?: PlDataTableStateV2;\n options?: CreatePlDataTableOps;\n};\n\n/**\n * Create p-table spec and handle given ui table state\n *\n * @param ctx context\n * @param columns column list\n * @param tableState table ui state\n * @returns PlAgDataTableV2 table source\n */\nexport function createPlDataTableV2<A, U>(\n ctx: RenderCtxBase<A, U>,\n columns: createPlDataTableOptionsV2[\"columns\"],\n tableState?: createPlDataTableOptionsV2[\"tableState\"],\n options?: createPlDataTableOptionsV2[\"options\"],\n): PlDataTableModel | undefined {\n if (columns.length === 0) return undefined;\n\n const tableStateNormalized = upgradePlDataTableStateV2(tableState);\n\n const allLabelColumns = getAllLabelColumns(ctx.resultPool);\n if (!allLabelColumns) return undefined;\n\n let fullLabelColumns = getMatchingLabelColumns(columns.map(getColumnIdAndSpec), allLabelColumns);\n fullLabelColumns = deriveLabels(fullLabelColumns, identity, { includeNativeLabel: true }).map(\n (v) => {\n return {\n ...v.value,\n spec: {\n ...v.value.spec,\n annotations: {\n ...v.value.spec.annotations,\n [Annotation.Label]: v.label,\n },\n },\n };\n },\n );\n\n const fullColumns = [...columns, ...fullLabelColumns];\n\n const fullColumnsAxes = uniqueBy(\n fullColumns.flatMap((c) => c.spec.axesSpec.map((a) => getAxisId(a))),\n (a) => canonicalizeJson<AxisId>(a),\n );\n const fullColumnsIds: PTableColumnId[] = [\n ...fullColumnsAxes.map((a) => ({ type: \"axis\", id: a }) satisfies PTableColumnIdAxis),\n ...fullColumns.map((c) => ({ type: \"column\", id: c.id }) satisfies PTableColumnIdColumn),\n ];\n const fullColumnsIdsSet = new Set(fullColumnsIds.map((c) => canonicalizeJson<PTableColumnId>(c)));\n const isValidColumnId = (id: string): boolean =>\n fullColumnsIdsSet.has(id as CanonicalizedJson<PTableColumnId>);\n\n // -- Filtering validation --\n const stateFilters = tableStateNormalized.pTableParams.filters;\n const opsFilters = options?.filters ?? null;\n const filters: null | PlDataTableFilters =\n stateFilters != null && opsFilters != null\n ? { type: \"and\", filters: [stateFilters, opsFilters] }\n : (stateFilters ?? opsFilters);\n const filterColumns = filters ? collectFilterSpecColumns(filters) : [];\n const firstInvalidFilterColumn = filterColumns.find((col) => !isValidColumnId(col));\n if (firstInvalidFilterColumn)\n throw new Error(\n `Invalid filter column ${firstInvalidFilterColumn}: column reference does not match the table columns`,\n );\n\n // -- Sorting validation --\n const userSorting = tableStateNormalized.pTableParams.sorting;\n const sorting = (isEmpty(userSorting) ? options?.sorting : userSorting) ?? [];\n const firstInvalidSortingColumn = sorting.find(\n (s) => !isValidColumnId(canonicalizeJson<PTableColumnId>(s.column)),\n );\n if (firstInvalidSortingColumn)\n throw new Error(\n `Invalid sorting column ${JSON.stringify(firstInvalidSortingColumn.column)}: column reference does not match the table columns`,\n );\n\n const coreJoinType = options?.coreJoinType ?? \"full\";\n const fullDef = createPTableDef({\n columns,\n labelColumns: fullLabelColumns,\n coreJoinType,\n filters,\n sorting,\n coreColumnPredicate: options?.coreColumnPredicate,\n });\n\n const fullHandle = ctx.createPTableV2(fullDef);\n const pframeHandle = ctx.createPFrame(fullColumns);\n if (!fullHandle || !pframeHandle) return undefined;\n\n const hiddenColumns = new Set<PObjectId>(\n ((): PObjectId[] => {\n // Inner join works as a filter - all columns must be present\n if (coreJoinType === \"inner\") return [];\n\n const hiddenColIds = tableStateNormalized.pTableParams.hiddenColIds;\n if (hiddenColIds) return hiddenColIds;\n\n return columns.filter((c) => isColumnOptional(c.spec)).map((c) => c.id);\n })(),\n );\n\n // Preserve linker columns\n columns.filter((c) => isLinkerColumn(c.spec)).forEach((c) => hiddenColumns.delete(c.id));\n\n // Preserve core columns as they change the shape of join.\n const coreColumnPredicate = options?.coreColumnPredicate;\n if (coreColumnPredicate) {\n const coreColumns = columns.flatMap((c) =>\n coreColumnPredicate(getColumnIdAndSpec(c)) ? [c.id] : [],\n );\n coreColumns.forEach((c) => hiddenColumns.delete(c));\n }\n\n // Preserve sorted columns from being hidden\n sorting\n .map((s) => s.column)\n .filter((c): c is PTableColumnIdColumn => c.type === \"column\")\n .forEach((c) => hiddenColumns.delete(c.id));\n\n // Preserve filter columns from being hidden\n if (filters) {\n collectFilterSpecColumns(filters)\n .flatMap((c) => {\n const obj = parseJson(c);\n return obj.type === \"column\" ? [obj.id] : [];\n })\n .forEach((c) => hiddenColumns.delete(c));\n }\n\n const visibleColumns = columns.filter((c) => !hiddenColumns.has(c.id));\n const visibleLabelColumns = getMatchingLabelColumns(\n visibleColumns.map(getColumnIdAndSpec),\n allLabelColumns,\n );\n\n // if at least one column is not yet computed, we can't show the table\n if (!allPColumnsReady([...visibleColumns, ...visibleLabelColumns])) return undefined;\n\n const visibleDef = createPTableDef({\n columns: visibleColumns,\n labelColumns: visibleLabelColumns,\n coreJoinType,\n filters,\n sorting,\n coreColumnPredicate,\n });\n const visibleHandle = ctx.createPTableV2(visibleDef);\n\n if (!visibleHandle) return undefined;\n\n return {\n sourceId: tableStateNormalized.pTableParams.sourceId,\n fullTableHandle: fullHandle,\n fullPframeHandle: pframeHandle,\n visibleTableHandle: visibleHandle,\n } satisfies PlDataTableModel;\n}\n"],"mappings":"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"}
|
|
@@ -1,20 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
const require_pcolumn_data = require(
|
|
3
|
-
require(
|
|
4
|
-
const require_traverse = require(
|
|
5
|
-
const require_filterToQuery = require(
|
|
6
|
-
const require_distill = require(
|
|
7
|
-
require(
|
|
8
|
-
const require_state_migration = require(
|
|
9
|
-
const require_labels = require(
|
|
10
|
-
const require_column_snapshot_provider = require(
|
|
11
|
-
const require_column_collection_builder = require(
|
|
12
|
-
const require_ctx_column_sources = require(
|
|
13
|
-
require(
|
|
1
|
+
require("../../../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_pcolumn_data = require("../../../render/util/pcolumn_data.cjs");
|
|
3
|
+
require("../../../render/index.cjs");
|
|
4
|
+
const require_traverse = require("../../../filters/traverse.cjs");
|
|
5
|
+
const require_filterToQuery = require("../../../filters/converters/filterToQuery.cjs");
|
|
6
|
+
const require_distill = require("../../../filters/distill.cjs");
|
|
7
|
+
require("../../../filters/index.cjs");
|
|
8
|
+
const require_state_migration = require("../state-migration.cjs");
|
|
9
|
+
const require_labels = require("../labels.cjs");
|
|
10
|
+
const require_column_snapshot_provider = require("../../../columns/column_snapshot_provider.cjs");
|
|
11
|
+
const require_column_collection_builder = require("../../../columns/column_collection_builder.cjs");
|
|
12
|
+
const require_ctx_column_sources = require("../../../columns/ctx_column_sources.cjs");
|
|
13
|
+
require("../../../columns/index.cjs");
|
|
14
14
|
let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
|
|
15
15
|
let es_toolkit_compat = require("es-toolkit/compat");
|
|
16
16
|
let es_toolkit = require("es-toolkit");
|
|
17
|
-
|
|
18
17
|
//#region src/components/PlDataTable/createPlDataTable/createPlDataTableV3.ts
|
|
19
18
|
/** Convert a PTableColumnId to a SpecQueryExpression reference. */
|
|
20
19
|
function columnIdToExpr(col) {
|
|
@@ -195,10 +194,10 @@ function normalizeSourceList(source) {
|
|
|
195
194
|
if (Array.isArray(source) && source.length > 0 && (Array.isArray(source[0]) || require_column_snapshot_provider.isColumnSnapshotProvider(source[0]))) return source;
|
|
196
195
|
return [source];
|
|
197
196
|
}
|
|
198
|
-
|
|
199
197
|
//#endregion
|
|
200
198
|
exports.createPTableDef = createPTableDef;
|
|
201
199
|
exports.createPlDataTableV3 = createPlDataTableV3;
|
|
202
200
|
exports.isColumnHidden = isColumnHidden;
|
|
203
201
|
exports.isColumnOptional = isColumnOptional;
|
|
202
|
+
|
|
204
203
|
//# sourceMappingURL=createPlDataTableV3.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createPlDataTableV3.cjs","names":["distillFilterSpec","filterSpecToSpecQueryExpr","Annotation","isColumnSnapshotProvider","collectCtxColumnSnapshotProviders","ColumnCollectionBuilder","upgradePlDataTableStateV2","getAllLabelColumns","getMatchingLabelColumns","getColumnIdAndSpec","collectFilterSpecColumns","allPColumnsReady"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPlDataTableV3.ts"],"sourcesContent":["import type {\n AxisId,\n CanonicalizedJson,\n DataInfo,\n PColumn,\n PColumnIdAndSpec,\n PColumnValues,\n PObjectId,\n PTableColumnId,\n PTableColumnIdAxis,\n PTableColumnIdColumn,\n PTableDefV2,\n PTableSorting,\n SpecQuery,\n SingleAxisSelector,\n SpecQueryExpression,\n SpecQueryJoinEntry,\n PColumnSpec,\n PlRef,\n MultiColumnSelector,\n} from \"@milaboratories/pl-model-common\";\nimport {\n Annotation,\n canonicalizeJson,\n getAxisId,\n getColumnIdAndSpec,\n isLinkerColumn,\n readAnnotation,\n isBooleanExpression,\n parseJson,\n uniqueBy,\n} from \"@milaboratories/pl-model-common\";\nimport { filterSpecToSpecQueryExpr } from \"../../../filters\";\nimport { collectFilterSpecColumns } from \"../../../filters/traverse\";\nimport type { RenderCtxBase, TreeNodeAccessor, PColumnDataUniversal } from \"../../../render\";\nimport { allPColumnsReady } from \"../../../render\";\nimport { isFunction, isNil } from \"es-toolkit\";\nimport { isEmpty } from \"es-toolkit/compat\";\nimport { distillFilterSpec } from \"../../../filters/distill\";\nimport type { PlDataTableFilters, PlDataTableModel } from \"../typesV5\";\nimport { upgradePlDataTableStateV2 } from \"../state-migration\";\nimport type { PlDataTableStateV2 } from \"../state-migration\";\nimport type { ColumnSource, MatchingMode } from \"../../../columns\";\nimport { Services, type RequireServices } from \"@milaboratories/pl-model-common\";\nimport { ColumnCollectionBuilder } from \"../../../columns\";\nimport { isColumnSnapshotProvider } from \"../../../columns/column_snapshot_provider\";\nimport { collectCtxColumnSnapshotProviders } from \"../../../columns/ctx_column_sources\";\nimport { getAllLabelColumns, getMatchingLabelColumns } from \"../labels\";\n\n/** Convert a PTableColumnId to a SpecQueryExpression reference. */\nexport function columnIdToExpr(col: PTableColumnId): SpecQueryExpression {\n if (col.type === \"axis\") {\n return { type: \"axisRef\", value: col.id as SingleAxisSelector };\n }\n return { type: \"columnRef\", value: col.id };\n}\n\n/** Wrap a SpecQuery as a SpecQueryJoinEntry with empty qualifications. */\nexport function joinEntry<C>(input: SpecQuery<C>): SpecQueryJoinEntry<C> {\n return { entry: input, qualifications: [] };\n}\n\nexport function createPTableDef(params: {\n columns: PColumn<PColumnDataUniversal>[];\n labelColumns: PColumn<PColumnDataUniversal>[];\n coreJoinType: \"inner\" | \"full\";\n filters: null | PlDataTableFilters;\n sorting: PTableSorting[];\n coreColumnPredicate?: (spec: PColumnIdAndSpec) => boolean;\n}): PTableDefV2<PColumn<TreeNodeAccessor | PColumnValues | DataInfo<TreeNodeAccessor>>> {\n let coreColumns = params.columns;\n const secondaryColumns: typeof params.columns = [];\n\n if (isFunction(params.coreColumnPredicate)) {\n coreColumns = [];\n for (const c of params.columns)\n if (params.coreColumnPredicate(getColumnIdAndSpec(c))) coreColumns.push(c);\n else secondaryColumns.push(c);\n }\n\n secondaryColumns.push(...params.labelColumns);\n\n // Build SpecQuery directly from columns\n const coreJoinQuery: SpecQuery<\n PColumn<TreeNodeAccessor | PColumnValues | DataInfo<TreeNodeAccessor>>\n > = {\n type: params.coreJoinType === \"inner\" ? \"innerJoin\" : \"fullJoin\",\n entries: coreColumns.map((c) => joinEntry({ type: \"column\", column: c })),\n };\n\n let query: SpecQuery<PColumn<TreeNodeAccessor | PColumnValues | DataInfo<TreeNodeAccessor>>> = {\n type: \"outerJoin\",\n primary: joinEntry(coreJoinQuery),\n secondary: secondaryColumns.map((c) => joinEntry({ type: \"column\", column: c })),\n };\n\n // Apply filters\n if (params.filters !== null) {\n const nonEmpty = distillFilterSpec(params.filters);\n\n if (!isNil(nonEmpty)) {\n const pridicate = filterSpecToSpecQueryExpr(nonEmpty);\n if (!isBooleanExpression(pridicate)) {\n throw new Error(\n `Filter conversion produced a non-boolean expression (got type \"${pridicate.type}\"), expected a boolean predicate for query filtering`,\n );\n }\n query = {\n type: \"filter\",\n input: query,\n predicate: pridicate,\n };\n }\n }\n\n // Apply sorting\n if (params.sorting.length > 0) {\n query = {\n type: \"sort\",\n input: query,\n sortBy: params.sorting.map((s) => ({\n expression: columnIdToExpr(s.column),\n ascending: s.ascending,\n nullsFirst: !s.naAndAbsentAreLeastValues,\n })),\n };\n }\n\n return { query };\n}\n\n/** Check if column should be omitted from the table */\nexport function isColumnHidden(spec: { annotations?: Annotation }): boolean {\n return readAnnotation(spec, Annotation.Table.Visibility) === \"hidden\";\n}\n\n/** Check if column is hidden by default */\nexport function isColumnOptional(spec: { annotations?: Annotation }): boolean {\n return readAnnotation(spec, Annotation.Table.Visibility) === \"optional\";\n}\n\n/** Structured source config — selectors/anchors instead of raw ColumnSource. */\ntype ColumnsSelectorConfig = {\n include?: MultiColumnSelector | MultiColumnSelector[];\n exclude?: MultiColumnSelector | MultiColumnSelector[];\n anchors?: Record<string, PlRef | PObjectId | PColumnSpec>;\n mode?: MatchingMode;\n maxHops?: number;\n};\n\nexport type createPlDataTableOptionsV3 = {\n source?: ColumnSource | ColumnSource[];\n columns: ColumnsSelectorConfig;\n\n // Existing from V2\n filters?: PlDataTableFilters;\n sorting?: PTableSorting[];\n coreJoinType?: \"inner\" | \"full\";\n coreColumnPredicate?: (spec: PColumnIdAndSpec) => boolean;\n\n state?: PlDataTableStateV2;\n};\n\n// interface ColumnDisplayConfig {\n// /** Column ordering rules. Higher priority = further left. First matching rule wins. */\n// ordering?: ColumnOrderRule[];\n// /** Column visibility rules. First matching rule wins. Unmatched columns use default visibility. */\n// visibility?: ColumnVisibilityRule[];\n// }\n\n// interface ColumnOrderRule {\n// match: ColumnMatcher;\n// /** Higher number = further left in table */\n// priority: number;\n// }\n\n// interface ColumnVisibilityRule {\n// match: ColumnMatcher;\n// visibility: \"default\" | \"optional\" | \"hidden\";\n// }\n\n// type ColumnMatcher =\n// | ((spec: PColumnSpec) => boolean)\n// | { name: string | string[] }\n// | { annotation: Record<string, string> }\n// | { ids: Set<string> };\n\nexport function createPlDataTableV3<A, U, S extends RequireServices<typeof Services.PFrameSpec>>(\n ctx: RenderCtxBase<A, U, S>,\n options: createPlDataTableOptionsV3,\n): PlDataTableModel | undefined {\n const providers = options.source\n ? normalizeSourceList(options.source).filter(isColumnSnapshotProvider)\n : collectCtxColumnSnapshotProviders(ctx);\n\n if (providers.length === 0) return undefined;\n\n // Step 1: Build collection from sources\n const builder = new ColumnCollectionBuilder(ctx.services.pframeSpec).addSources(providers);\n const anchors = options.columns.anchors;\n const collection = isNil(anchors) ? builder.build() : builder.build({ anchors });\n\n if (!collection) return undefined;\n try {\n // Step 2: Get data columns, excluding annotation-hidden ones\n const findOptions = options.columns\n ? {\n include: options.columns.include,\n exclude: options.columns.exclude,\n mode: options.columns.mode,\n maxHops: options.columns.maxHops,\n }\n : undefined;\n const findResult = collection.findColumns(findOptions);\n const snapshots = findResult.map((v) => (\"column\" in v ? v.column : v));\n const dataSnapshots = snapshots.filter((s) => !isColumnHidden(s.spec));\n if (dataSnapshots.length === 0) return undefined;\n\n // Convert snapshots to PColumn<PColumnDataUniversal>[]\n const columns: PColumn<PColumnDataUniversal>[] = [];\n for (const snap of dataSnapshots) {\n if (!snap.data) return undefined;\n const data = snap.data.get();\n if (data === undefined) return undefined;\n columns.push({ id: snap.id, spec: snap.spec, data });\n }\n\n // Step 3: Normalize table state\n const tableStateNormalized = upgradePlDataTableStateV2(options.state);\n\n // Step 4: Get label columns from result pool and match to data columns\n const allLabelColumns = getAllLabelColumns(ctx.resultPool);\n if (!allLabelColumns) return undefined;\n\n const fullLabelColumns = getMatchingLabelColumns(\n columns.map(getColumnIdAndSpec),\n allLabelColumns,\n );\n\n const fullColumns = [...columns, ...fullLabelColumns];\n\n // Step 5: Build column ID set for filter/sorting validation\n const fullColumnsAxes = uniqueBy(\n fullColumns.flatMap((c) => c.spec.axesSpec.map((a) => getAxisId(a))),\n (a) => canonicalizeJson<AxisId>(a),\n );\n const fullColumnsIds: PTableColumnId[] = [\n ...fullColumnsAxes.map((a) => ({ type: \"axis\", id: a }) satisfies PTableColumnIdAxis),\n ...fullColumns.map((c) => ({ type: \"column\", id: c.id }) satisfies PTableColumnIdColumn),\n ];\n const fullColumnsIdsSet = new Set(\n fullColumnsIds.map((c) => canonicalizeJson<PTableColumnId>(c)),\n );\n const isValidColumnId = (id: string): boolean =>\n fullColumnsIdsSet.has(id as CanonicalizedJson<PTableColumnId>);\n\n // Step 6: Filtering validation\n const stateFilters = tableStateNormalized.pTableParams.filters;\n const opsFilters = options?.filters ?? null;\n const filters: null | PlDataTableFilters =\n stateFilters != null && opsFilters != null\n ? { type: \"and\", filters: [stateFilters, opsFilters] }\n : (stateFilters ?? opsFilters);\n const filterColumns = filters ? collectFilterSpecColumns(filters) : [];\n const firstInvalidFilterColumn = filterColumns.find((col) => !isValidColumnId(col));\n if (firstInvalidFilterColumn)\n throw new Error(\n `Invalid filter column ${firstInvalidFilterColumn}: column reference does not match the table columns`,\n );\n\n // Step 7: Sorting validation\n const userSorting = tableStateNormalized.pTableParams.sorting;\n const sorting = (isEmpty(userSorting) ? options?.sorting : userSorting) ?? [];\n const firstInvalidSortingColumn = sorting.find(\n (s) => !isValidColumnId(canonicalizeJson<PTableColumnId>(s.column)),\n );\n if (firstInvalidSortingColumn)\n throw new Error(\n `Invalid sorting column ${JSON.stringify(firstInvalidSortingColumn.column)}: column reference does not match the table columns`,\n );\n\n // Step 8: Build full table definition and handles\n const coreJoinType = options?.coreJoinType ?? \"full\";\n const fullDef = createPTableDef({\n columns,\n labelColumns: fullLabelColumns,\n coreJoinType,\n filters,\n sorting,\n coreColumnPredicate: options?.coreColumnPredicate,\n });\n\n const fullHandle = ctx.createPTableV2(fullDef);\n const pframeHandle = ctx.createPFrame(fullColumns);\n if (!fullHandle || !pframeHandle) return undefined;\n\n // Step 9: Determine hidden columns\n const hiddenColumns = new Set<PObjectId>(\n ((): PObjectId[] => {\n // Inner join works as a filter — all columns must be present\n if (coreJoinType === \"inner\") return [];\n\n const hiddenColIds = tableStateNormalized.pTableParams.hiddenColIds;\n if (hiddenColIds) return hiddenColIds;\n\n return columns.filter((c) => isColumnOptional(c.spec)).map((c) => c.id);\n })(),\n );\n\n // Preserve linker columns\n columns.filter((c) => isLinkerColumn(c.spec)).forEach((c) => hiddenColumns.delete(c.id));\n\n // Preserve core columns as they change the shape of join\n const coreColumnPredicate = options?.coreColumnPredicate;\n if (coreColumnPredicate) {\n const coreColumns = columns.flatMap((c) =>\n coreColumnPredicate(getColumnIdAndSpec(c)) ? [c.id] : [],\n );\n coreColumns.forEach((c) => hiddenColumns.delete(c));\n }\n\n // Preserve sorted columns from being hidden\n sorting\n .map((s) => s.column)\n .filter((c): c is PTableColumnIdColumn => c.type === \"column\")\n .forEach((c) => hiddenColumns.delete(c.id));\n\n // Preserve filter columns from being hidden\n if (filters) {\n collectFilterSpecColumns(filters)\n .flatMap((c) => {\n const obj = parseJson(c);\n return obj.type === \"column\" ? [obj.id] : [];\n })\n .forEach((c) => hiddenColumns.delete(c));\n }\n\n // Step 10: Build visible table definition\n const visibleColumns = columns.filter((c) => !hiddenColumns.has(c.id));\n const visibleLabelColumns = getMatchingLabelColumns(\n visibleColumns.map(getColumnIdAndSpec),\n allLabelColumns,\n );\n\n if (!allPColumnsReady([...visibleColumns, ...visibleLabelColumns])) return undefined;\n\n const visibleDef = createPTableDef({\n columns: visibleColumns,\n labelColumns: visibleLabelColumns,\n coreJoinType,\n filters,\n sorting,\n coreColumnPredicate,\n });\n const visibleHandle = ctx.createPTableV2(visibleDef);\n\n if (!visibleHandle) return undefined;\n\n return {\n sourceId: tableStateNormalized.pTableParams.sourceId,\n fullTableHandle: fullHandle,\n fullPframeHandle: pframeHandle,\n visibleTableHandle: visibleHandle,\n } satisfies PlDataTableModel;\n } finally {\n collection.dispose();\n }\n}\n\n/** Normalize raw ColumnSource | ColumnSource[] into a flat list of sources. */\nfunction normalizeSourceList(source: ColumnSource | ColumnSource[]): ColumnSource[] {\n if (\n Array.isArray(source) &&\n source.length > 0 &&\n (Array.isArray(source[0]) || isColumnSnapshotProvider(source[0]))\n ) {\n return source as ColumnSource[];\n }\n return [source as ColumnSource];\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"createPlDataTableV3.cjs","names":["distillFilterSpec","filterSpecToSpecQueryExpr","Annotation","isColumnSnapshotProvider","collectCtxColumnSnapshotProviders","ColumnCollectionBuilder","upgradePlDataTableStateV2","getAllLabelColumns","getMatchingLabelColumns","getColumnIdAndSpec","collectFilterSpecColumns","allPColumnsReady"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPlDataTableV3.ts"],"sourcesContent":["import type {\n AxisId,\n CanonicalizedJson,\n DataInfo,\n PColumn,\n PColumnIdAndSpec,\n PColumnValues,\n PObjectId,\n PTableColumnId,\n PTableColumnIdAxis,\n PTableColumnIdColumn,\n PTableDefV2,\n PTableSorting,\n SpecQuery,\n SingleAxisSelector,\n SpecQueryExpression,\n SpecQueryJoinEntry,\n PColumnSpec,\n PlRef,\n MultiColumnSelector,\n} from \"@milaboratories/pl-model-common\";\nimport {\n Annotation,\n canonicalizeJson,\n getAxisId,\n getColumnIdAndSpec,\n isLinkerColumn,\n readAnnotation,\n isBooleanExpression,\n parseJson,\n uniqueBy,\n} from \"@milaboratories/pl-model-common\";\nimport { filterSpecToSpecQueryExpr } from \"../../../filters\";\nimport { collectFilterSpecColumns } from \"../../../filters/traverse\";\nimport type { RenderCtxBase, TreeNodeAccessor, PColumnDataUniversal } from \"../../../render\";\nimport { allPColumnsReady } from \"../../../render\";\nimport { isFunction, isNil } from \"es-toolkit\";\nimport { isEmpty } from \"es-toolkit/compat\";\nimport { distillFilterSpec } from \"../../../filters/distill\";\nimport type { PlDataTableFilters, PlDataTableModel } from \"../typesV5\";\nimport { upgradePlDataTableStateV2 } from \"../state-migration\";\nimport type { PlDataTableStateV2 } from \"../state-migration\";\nimport type { ColumnSource, MatchingMode } from \"../../../columns\";\nimport { Services, type RequireServices } from \"@milaboratories/pl-model-common\";\nimport { ColumnCollectionBuilder } from \"../../../columns\";\nimport { isColumnSnapshotProvider } from \"../../../columns/column_snapshot_provider\";\nimport { collectCtxColumnSnapshotProviders } from \"../../../columns/ctx_column_sources\";\nimport { getAllLabelColumns, getMatchingLabelColumns } from \"../labels\";\n\n/** Convert a PTableColumnId to a SpecQueryExpression reference. */\nexport function columnIdToExpr(col: PTableColumnId): SpecQueryExpression {\n if (col.type === \"axis\") {\n return { type: \"axisRef\", value: col.id as SingleAxisSelector };\n }\n return { type: \"columnRef\", value: col.id };\n}\n\n/** Wrap a SpecQuery as a SpecQueryJoinEntry with empty qualifications. */\nexport function joinEntry<C>(input: SpecQuery<C>): SpecQueryJoinEntry<C> {\n return { entry: input, qualifications: [] };\n}\n\nexport function createPTableDef(params: {\n columns: PColumn<PColumnDataUniversal>[];\n labelColumns: PColumn<PColumnDataUniversal>[];\n coreJoinType: \"inner\" | \"full\";\n filters: null | PlDataTableFilters;\n sorting: PTableSorting[];\n coreColumnPredicate?: (spec: PColumnIdAndSpec) => boolean;\n}): PTableDefV2<PColumn<TreeNodeAccessor | PColumnValues | DataInfo<TreeNodeAccessor>>> {\n let coreColumns = params.columns;\n const secondaryColumns: typeof params.columns = [];\n\n if (isFunction(params.coreColumnPredicate)) {\n coreColumns = [];\n for (const c of params.columns)\n if (params.coreColumnPredicate(getColumnIdAndSpec(c))) coreColumns.push(c);\n else secondaryColumns.push(c);\n }\n\n secondaryColumns.push(...params.labelColumns);\n\n // Build SpecQuery directly from columns\n const coreJoinQuery: SpecQuery<\n PColumn<TreeNodeAccessor | PColumnValues | DataInfo<TreeNodeAccessor>>\n > = {\n type: params.coreJoinType === \"inner\" ? \"innerJoin\" : \"fullJoin\",\n entries: coreColumns.map((c) => joinEntry({ type: \"column\", column: c })),\n };\n\n let query: SpecQuery<PColumn<TreeNodeAccessor | PColumnValues | DataInfo<TreeNodeAccessor>>> = {\n type: \"outerJoin\",\n primary: joinEntry(coreJoinQuery),\n secondary: secondaryColumns.map((c) => joinEntry({ type: \"column\", column: c })),\n };\n\n // Apply filters\n if (params.filters !== null) {\n const nonEmpty = distillFilterSpec(params.filters);\n\n if (!isNil(nonEmpty)) {\n const pridicate = filterSpecToSpecQueryExpr(nonEmpty);\n if (!isBooleanExpression(pridicate)) {\n throw new Error(\n `Filter conversion produced a non-boolean expression (got type \"${pridicate.type}\"), expected a boolean predicate for query filtering`,\n );\n }\n query = {\n type: \"filter\",\n input: query,\n predicate: pridicate,\n };\n }\n }\n\n // Apply sorting\n if (params.sorting.length > 0) {\n query = {\n type: \"sort\",\n input: query,\n sortBy: params.sorting.map((s) => ({\n expression: columnIdToExpr(s.column),\n ascending: s.ascending,\n nullsFirst: !s.naAndAbsentAreLeastValues,\n })),\n };\n }\n\n return { query };\n}\n\n/** Check if column should be omitted from the table */\nexport function isColumnHidden(spec: { annotations?: Annotation }): boolean {\n return readAnnotation(spec, Annotation.Table.Visibility) === \"hidden\";\n}\n\n/** Check if column is hidden by default */\nexport function isColumnOptional(spec: { annotations?: Annotation }): boolean {\n return readAnnotation(spec, Annotation.Table.Visibility) === \"optional\";\n}\n\n/** Structured source config — selectors/anchors instead of raw ColumnSource. */\ntype ColumnsSelectorConfig = {\n include?: MultiColumnSelector | MultiColumnSelector[];\n exclude?: MultiColumnSelector | MultiColumnSelector[];\n anchors?: Record<string, PlRef | PObjectId | PColumnSpec>;\n mode?: MatchingMode;\n maxHops?: number;\n};\n\nexport type createPlDataTableOptionsV3 = {\n source?: ColumnSource | ColumnSource[];\n columns: ColumnsSelectorConfig;\n\n // Existing from V2\n filters?: PlDataTableFilters;\n sorting?: PTableSorting[];\n coreJoinType?: \"inner\" | \"full\";\n coreColumnPredicate?: (spec: PColumnIdAndSpec) => boolean;\n\n state?: PlDataTableStateV2;\n};\n\n// interface ColumnDisplayConfig {\n// /** Column ordering rules. Higher priority = further left. First matching rule wins. */\n// ordering?: ColumnOrderRule[];\n// /** Column visibility rules. First matching rule wins. Unmatched columns use default visibility. */\n// visibility?: ColumnVisibilityRule[];\n// }\n\n// interface ColumnOrderRule {\n// match: ColumnMatcher;\n// /** Higher number = further left in table */\n// priority: number;\n// }\n\n// interface ColumnVisibilityRule {\n// match: ColumnMatcher;\n// visibility: \"default\" | \"optional\" | \"hidden\";\n// }\n\n// type ColumnMatcher =\n// | ((spec: PColumnSpec) => boolean)\n// | { name: string | string[] }\n// | { annotation: Record<string, string> }\n// | { ids: Set<string> };\n\nexport function createPlDataTableV3<A, U, S extends RequireServices<typeof Services.PFrameSpec>>(\n ctx: RenderCtxBase<A, U, S>,\n options: createPlDataTableOptionsV3,\n): PlDataTableModel | undefined {\n const providers = options.source\n ? normalizeSourceList(options.source).filter(isColumnSnapshotProvider)\n : collectCtxColumnSnapshotProviders(ctx);\n\n if (providers.length === 0) return undefined;\n\n // Step 1: Build collection from sources\n const builder = new ColumnCollectionBuilder(ctx.services.pframeSpec).addSources(providers);\n const anchors = options.columns.anchors;\n const collection = isNil(anchors) ? builder.build() : builder.build({ anchors });\n\n if (!collection) return undefined;\n try {\n // Step 2: Get data columns, excluding annotation-hidden ones\n const findOptions = options.columns\n ? {\n include: options.columns.include,\n exclude: options.columns.exclude,\n mode: options.columns.mode,\n maxHops: options.columns.maxHops,\n }\n : undefined;\n const findResult = collection.findColumns(findOptions);\n const snapshots = findResult.map((v) => (\"column\" in v ? v.column : v));\n const dataSnapshots = snapshots.filter((s) => !isColumnHidden(s.spec));\n if (dataSnapshots.length === 0) return undefined;\n\n // Convert snapshots to PColumn<PColumnDataUniversal>[]\n const columns: PColumn<PColumnDataUniversal>[] = [];\n for (const snap of dataSnapshots) {\n if (!snap.data) return undefined;\n const data = snap.data.get();\n if (data === undefined) return undefined;\n columns.push({ id: snap.id, spec: snap.spec, data });\n }\n\n // Step 3: Normalize table state\n const tableStateNormalized = upgradePlDataTableStateV2(options.state);\n\n // Step 4: Get label columns from result pool and match to data columns\n const allLabelColumns = getAllLabelColumns(ctx.resultPool);\n if (!allLabelColumns) return undefined;\n\n const fullLabelColumns = getMatchingLabelColumns(\n columns.map(getColumnIdAndSpec),\n allLabelColumns,\n );\n\n const fullColumns = [...columns, ...fullLabelColumns];\n\n // Step 5: Build column ID set for filter/sorting validation\n const fullColumnsAxes = uniqueBy(\n fullColumns.flatMap((c) => c.spec.axesSpec.map((a) => getAxisId(a))),\n (a) => canonicalizeJson<AxisId>(a),\n );\n const fullColumnsIds: PTableColumnId[] = [\n ...fullColumnsAxes.map((a) => ({ type: \"axis\", id: a }) satisfies PTableColumnIdAxis),\n ...fullColumns.map((c) => ({ type: \"column\", id: c.id }) satisfies PTableColumnIdColumn),\n ];\n const fullColumnsIdsSet = new Set(\n fullColumnsIds.map((c) => canonicalizeJson<PTableColumnId>(c)),\n );\n const isValidColumnId = (id: string): boolean =>\n fullColumnsIdsSet.has(id as CanonicalizedJson<PTableColumnId>);\n\n // Step 6: Filtering validation\n const stateFilters = tableStateNormalized.pTableParams.filters;\n const opsFilters = options?.filters ?? null;\n const filters: null | PlDataTableFilters =\n stateFilters != null && opsFilters != null\n ? { type: \"and\", filters: [stateFilters, opsFilters] }\n : (stateFilters ?? opsFilters);\n const filterColumns = filters ? collectFilterSpecColumns(filters) : [];\n const firstInvalidFilterColumn = filterColumns.find((col) => !isValidColumnId(col));\n if (firstInvalidFilterColumn)\n throw new Error(\n `Invalid filter column ${firstInvalidFilterColumn}: column reference does not match the table columns`,\n );\n\n // Step 7: Sorting validation\n const userSorting = tableStateNormalized.pTableParams.sorting;\n const sorting = (isEmpty(userSorting) ? options?.sorting : userSorting) ?? [];\n const firstInvalidSortingColumn = sorting.find(\n (s) => !isValidColumnId(canonicalizeJson<PTableColumnId>(s.column)),\n );\n if (firstInvalidSortingColumn)\n throw new Error(\n `Invalid sorting column ${JSON.stringify(firstInvalidSortingColumn.column)}: column reference does not match the table columns`,\n );\n\n // Step 8: Build full table definition and handles\n const coreJoinType = options?.coreJoinType ?? \"full\";\n const fullDef = createPTableDef({\n columns,\n labelColumns: fullLabelColumns,\n coreJoinType,\n filters,\n sorting,\n coreColumnPredicate: options?.coreColumnPredicate,\n });\n\n const fullHandle = ctx.createPTableV2(fullDef);\n const pframeHandle = ctx.createPFrame(fullColumns);\n if (!fullHandle || !pframeHandle) return undefined;\n\n // Step 9: Determine hidden columns\n const hiddenColumns = new Set<PObjectId>(\n ((): PObjectId[] => {\n // Inner join works as a filter — all columns must be present\n if (coreJoinType === \"inner\") return [];\n\n const hiddenColIds = tableStateNormalized.pTableParams.hiddenColIds;\n if (hiddenColIds) return hiddenColIds;\n\n return columns.filter((c) => isColumnOptional(c.spec)).map((c) => c.id);\n })(),\n );\n\n // Preserve linker columns\n columns.filter((c) => isLinkerColumn(c.spec)).forEach((c) => hiddenColumns.delete(c.id));\n\n // Preserve core columns as they change the shape of join\n const coreColumnPredicate = options?.coreColumnPredicate;\n if (coreColumnPredicate) {\n const coreColumns = columns.flatMap((c) =>\n coreColumnPredicate(getColumnIdAndSpec(c)) ? [c.id] : [],\n );\n coreColumns.forEach((c) => hiddenColumns.delete(c));\n }\n\n // Preserve sorted columns from being hidden\n sorting\n .map((s) => s.column)\n .filter((c): c is PTableColumnIdColumn => c.type === \"column\")\n .forEach((c) => hiddenColumns.delete(c.id));\n\n // Preserve filter columns from being hidden\n if (filters) {\n collectFilterSpecColumns(filters)\n .flatMap((c) => {\n const obj = parseJson(c);\n return obj.type === \"column\" ? [obj.id] : [];\n })\n .forEach((c) => hiddenColumns.delete(c));\n }\n\n // Step 10: Build visible table definition\n const visibleColumns = columns.filter((c) => !hiddenColumns.has(c.id));\n const visibleLabelColumns = getMatchingLabelColumns(\n visibleColumns.map(getColumnIdAndSpec),\n allLabelColumns,\n );\n\n if (!allPColumnsReady([...visibleColumns, ...visibleLabelColumns])) return undefined;\n\n const visibleDef = createPTableDef({\n columns: visibleColumns,\n labelColumns: visibleLabelColumns,\n coreJoinType,\n filters,\n sorting,\n coreColumnPredicate,\n });\n const visibleHandle = ctx.createPTableV2(visibleDef);\n\n if (!visibleHandle) return undefined;\n\n return {\n sourceId: tableStateNormalized.pTableParams.sourceId,\n fullTableHandle: fullHandle,\n fullPframeHandle: pframeHandle,\n visibleTableHandle: visibleHandle,\n } satisfies PlDataTableModel;\n } finally {\n collection.dispose();\n }\n}\n\n/** Normalize raw ColumnSource | ColumnSource[] into a flat list of sources. */\nfunction normalizeSourceList(source: ColumnSource | ColumnSource[]): ColumnSource[] {\n if (\n Array.isArray(source) &&\n source.length > 0 &&\n (Array.isArray(source[0]) || isColumnSnapshotProvider(source[0]))\n ) {\n return source as ColumnSource[];\n }\n return [source as ColumnSource];\n}\n"],"mappings":"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"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { RenderCtxBase } from "../../../render/api.js";
|
|
2
|
-
import "../../../render/index.js";
|
|
3
2
|
import { PlDataTableFilters, PlDataTableModel } from "../typesV5.js";
|
|
4
3
|
import { PlDataTableStateV2 } from "../state-migration.js";
|
|
5
4
|
import { ColumnSource } from "../../../columns/column_snapshot_provider.js";
|
|
6
5
|
import { MatchingMode } from "../../../columns/column_collection_builder.js";
|
|
7
|
-
import "../../../columns/index.js";
|
|
8
6
|
import { Annotation, DataInfo, MultiColumnSelector, PColumn, PColumnIdAndSpec, PColumnSpec, PColumnValues, PObjectId, PTableColumnId, PTableDefV2, PTableSorting, PlRef, RequireServices, Services, SpecQueryExpression } from "@milaboratories/pl-model-common";
|
|
9
7
|
|
|
10
8
|
//#region src/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createPlDataTableV3.d.ts","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPlDataTableV3.ts"],"mappings":";;;;;;;;AAyIA;AAAA,iBALgB,cAAA,CAAe,IAAA;EAAQ,WAAA,GAAc,UAAA;AAAA;;iBAKrC,gBAAA,CAAiB,IAAA;EAAQ,WAAA,GAAc,UAAA;AAAA;;KAKlD,qBAAA;EACH,OAAA,GAAU,mBAAA,GAAsB,mBAAA;EAChC,OAAA,GAAU,mBAAA,GAAsB,mBAAA;EAChC,OAAA,GAAU,MAAA,SAAe,KAAA,GAAQ,SAAA,GAAY,WAAA;EAC7C,IAAA,GAAO,YAAA;EACP,OAAA;AAAA;AAAA,KAGU,0BAAA;EACV,MAAA,GAAS,YAAA,GAAe,YAAA;EACxB,OAAA,EAAS,qBAAA;EAGT,OAAA,GAAU,kBAAA;EACV,OAAA,GAAU,aAAA;EACV,YAAA;EACA,mBAAA,IAAuB,IAAA,EAAM,gBAAA;EAE7B,KAAA,GAAQ,kBAAA;AAAA;AAAA,iBA2BM,mBAAA,iBAAoC,eAAA,QAAuB,QAAA,CAAS,UAAA,EAAA,CAClF,GAAA,EAAK,aAAA,CAAc,CAAA,EAAG,CAAA,EAAG,CAAA,GACzB,OAAA,EAAS,0BAAA,GACR,gBAAA"}
|
|
@@ -13,7 +13,6 @@ import "../../../columns/index.js";
|
|
|
13
13
|
import { Annotation, canonicalizeJson, getAxisId, getColumnIdAndSpec, isBooleanExpression, isLinkerColumn, parseJson, readAnnotation, uniqueBy } from "@milaboratories/pl-model-common";
|
|
14
14
|
import { isEmpty } from "es-toolkit/compat";
|
|
15
15
|
import { isFunction, isNil } from "es-toolkit";
|
|
16
|
-
|
|
17
16
|
//#region src/components/PlDataTable/createPlDataTable/createPlDataTableV3.ts
|
|
18
17
|
/** Convert a PTableColumnId to a SpecQueryExpression reference. */
|
|
19
18
|
function columnIdToExpr(col) {
|
|
@@ -194,7 +193,7 @@ function normalizeSourceList(source) {
|
|
|
194
193
|
if (Array.isArray(source) && source.length > 0 && (Array.isArray(source[0]) || isColumnSnapshotProvider(source[0]))) return source;
|
|
195
194
|
return [source];
|
|
196
195
|
}
|
|
197
|
-
|
|
198
196
|
//#endregion
|
|
199
197
|
export { createPTableDef, createPlDataTableV3, isColumnHidden, isColumnOptional };
|
|
198
|
+
|
|
200
199
|
//# sourceMappingURL=createPlDataTableV3.js.map
|