@platforma-sdk/model 1.79.27 → 1.80.2
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/block_model.d.ts +2 -0
- package/dist/block_model.d.ts.map +1 -1
- package/dist/columns/column.cjs +28 -0
- package/dist/columns/column.cjs.map +1 -0
- package/dist/columns/column.d.ts +30 -0
- package/dist/columns/column.d.ts.map +1 -0
- package/dist/columns/column.js +27 -0
- package/dist/columns/column.js.map +1 -0
- package/dist/columns/column_lazy.cjs +248 -0
- package/dist/columns/column_lazy.cjs.map +1 -0
- package/dist/columns/column_lazy.d.ts +137 -0
- package/dist/columns/column_lazy.d.ts.map +1 -0
- package/dist/columns/column_lazy.js +245 -0
- package/dist/columns/column_lazy.js.map +1 -0
- package/dist/columns/column_providers/index.cjs +62 -0
- package/dist/columns/column_providers/index.cjs.map +1 -0
- package/dist/columns/column_providers/index.d.ts +30 -0
- package/dist/columns/column_providers/index.d.ts.map +1 -0
- package/dist/columns/column_providers/index.js +53 -0
- package/dist/columns/column_providers/index.js.map +1 -0
- package/dist/columns/column_providers/providers.cjs +123 -0
- package/dist/columns/column_providers/providers.cjs.map +1 -0
- package/dist/columns/column_providers/providers.d.ts +75 -0
- package/dist/columns/column_providers/providers.d.ts.map +1 -0
- package/dist/columns/column_providers/providers.js +118 -0
- package/dist/columns/column_providers/providers.js.map +1 -0
- package/dist/columns/column_providers/types.d.ts +23 -0
- package/dist/columns/column_providers/types.d.ts.map +1 -0
- package/dist/columns/column_recipes/column_discovered_recipe.cjs +180 -0
- package/dist/columns/column_recipes/column_discovered_recipe.cjs.map +1 -0
- package/dist/columns/column_recipes/column_discovered_recipe.d.ts +120 -0
- package/dist/columns/column_recipes/column_discovered_recipe.d.ts.map +1 -0
- package/dist/columns/column_recipes/column_discovered_recipe.js +180 -0
- package/dist/columns/column_recipes/column_discovered_recipe.js.map +1 -0
- package/dist/columns/column_recipes/column_filtered_recipe.cjs +133 -0
- package/dist/columns/column_recipes/column_filtered_recipe.cjs.map +1 -0
- package/dist/columns/column_recipes/column_filtered_recipe.d.ts +75 -0
- package/dist/columns/column_recipes/column_filtered_recipe.d.ts.map +1 -0
- package/dist/columns/column_recipes/column_filtered_recipe.js +133 -0
- package/dist/columns/column_recipes/column_filtered_recipe.js.map +1 -0
- package/dist/columns/column_recipes/column_overrided_recipe.cjs +101 -0
- package/dist/columns/column_recipes/column_overrided_recipe.cjs.map +1 -0
- package/dist/columns/column_recipes/column_overrided_recipe.d.ts +73 -0
- package/dist/columns/column_recipes/column_overrided_recipe.d.ts.map +1 -0
- package/dist/columns/column_recipes/column_overrided_recipe.js +101 -0
- package/dist/columns/column_recipes/column_overrided_recipe.js.map +1 -0
- package/dist/columns/column_recipes/index.cjs +72 -0
- package/dist/columns/column_recipes/index.cjs.map +1 -0
- package/dist/columns/column_recipes/index.d.ts +52 -0
- package/dist/columns/column_recipes/index.d.ts.map +1 -0
- package/dist/columns/column_recipes/index.js +68 -0
- package/dist/columns/column_recipes/index.js.map +1 -0
- package/dist/columns/column_recipes/leaf_rebrand.cjs +22 -0
- package/dist/columns/column_recipes/leaf_rebrand.cjs.map +1 -0
- package/dist/columns/column_recipes/leaf_rebrand.js +22 -0
- package/dist/columns/column_recipes/leaf_rebrand.js.map +1 -0
- package/dist/columns/column_recipes/types.d.ts +101 -0
- package/dist/columns/column_recipes/types.d.ts.map +1 -0
- package/dist/columns/columns_collection.cjs +124 -0
- package/dist/columns/columns_collection.cjs.map +1 -0
- package/dist/columns/columns_collection.d.ts +64 -0
- package/dist/columns/columns_collection.d.ts.map +1 -0
- package/dist/columns/columns_collection.js +122 -0
- package/dist/columns/columns_collection.js.map +1 -0
- package/dist/columns/derive_axis_values_labels.cjs +76 -0
- package/dist/columns/derive_axis_values_labels.cjs.map +1 -0
- package/dist/columns/derive_axis_values_labels.d.ts +30 -0
- package/dist/columns/derive_axis_values_labels.d.ts.map +1 -0
- package/dist/columns/derive_axis_values_labels.js +76 -0
- package/dist/columns/derive_axis_values_labels.js.map +1 -0
- package/dist/columns/expand_by_partition.cjs +53 -56
- package/dist/columns/expand_by_partition.cjs.map +1 -1
- package/dist/columns/expand_by_partition.d.ts +22 -18
- package/dist/columns/expand_by_partition.d.ts.map +1 -1
- package/dist/columns/expand_by_partition.js +55 -58
- package/dist/columns/expand_by_partition.js.map +1 -1
- package/dist/columns/index.cjs +44 -18
- package/dist/columns/index.d.ts +15 -7
- package/dist/columns/index.js +12 -6
- package/dist/columns/utils.cjs +186 -0
- package/dist/columns/utils.cjs.map +1 -0
- package/dist/columns/utils.d.ts +96 -0
- package/dist/columns/utils.d.ts.map +1 -0
- package/dist/columns/utils.js +179 -0
- package/dist/columns/utils.js.map +1 -0
- package/dist/components/PFrameForGraphs.cjs +1 -0
- package/dist/components/PFrameForGraphs.cjs.map +1 -1
- package/dist/components/PFrameForGraphs.d.ts +1 -1
- package/dist/components/PFrameForGraphs.d.ts.map +1 -1
- package/dist/components/PFrameForGraphs.js +1 -0
- package/dist/components/PFrameForGraphs.js.map +1 -1
- package/dist/components/PlDataTable/columnResolver.cjs +28 -0
- package/dist/components/PlDataTable/columnResolver.cjs.map +1 -0
- package/dist/components/PlDataTable/columnResolver.js +28 -0
- package/dist/components/PlDataTable/columnResolver.js.map +1 -0
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.cjs +4 -2
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.js +4 -2
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.cjs +20 -25
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.js +20 -25
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs +58 -26
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.d.ts +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js +60 -28
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs +224 -194
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts +13 -16
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js +228 -198
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.cjs +40 -98
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.d.ts +17 -8
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.js +40 -98
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/index.cjs +1 -1
- package/dist/components/PlDataTable/createPlDataTable/index.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/index.d.ts +2 -2
- package/dist/components/PlDataTable/createPlDataTable/index.js +2 -2
- package/dist/components/PlDataTable/createPlDataTable/index.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/utils.cjs +51 -169
- package/dist/components/PlDataTable/createPlDataTable/utils.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/utils.d.ts +1 -1
- package/dist/components/PlDataTable/createPlDataTable/utils.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/utils.js +52 -166
- package/dist/components/PlDataTable/createPlDataTable/utils.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTableSheet.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTableSheet.d.ts +1 -1
- package/dist/components/PlDataTable/createPlDataTableSheet.js.map +1 -1
- package/dist/components/PlDataTable/index.cjs +1 -1
- package/dist/components/PlDataTable/index.d.ts +4 -4
- package/dist/components/PlDataTable/index.js +2 -2
- package/dist/components/PlDataTable/labels.cjs +0 -1
- package/dist/components/PlDataTable/labels.cjs.map +1 -1
- package/dist/components/PlDataTable/labels.js +0 -1
- package/dist/components/PlDataTable/labels.js.map +1 -1
- package/dist/components/PlDataTable/state-migration.cjs +107 -10
- package/dist/components/PlDataTable/state-migration.cjs.map +1 -1
- package/dist/components/PlDataTable/state-migration.d.ts +5 -4
- package/dist/components/PlDataTable/state-migration.d.ts.map +1 -1
- package/dist/components/PlDataTable/state-migration.js +107 -10
- package/dist/components/PlDataTable/state-migration.js.map +1 -1
- package/dist/components/PlDataTable/typesV7.d.ts +1 -36
- package/dist/components/PlDataTable/typesV7.d.ts.map +1 -1
- package/dist/components/PlDataTable/typesV8.d.ts +123 -0
- package/dist/components/PlDataTable/typesV8.d.ts.map +1 -0
- package/dist/components/PlDatasetSelector/build_dataset_options.cjs +27 -34
- package/dist/components/PlDatasetSelector/build_dataset_options.cjs.map +1 -1
- package/dist/components/PlDatasetSelector/build_dataset_options.d.ts.map +1 -1
- package/dist/components/PlDatasetSelector/build_dataset_options.js +27 -34
- package/dist/components/PlDatasetSelector/build_dataset_options.js.map +1 -1
- package/dist/components/PlDatasetSelector/enrichment_discovery.cjs +28 -33
- package/dist/components/PlDatasetSelector/enrichment_discovery.cjs.map +1 -1
- package/dist/components/PlDatasetSelector/enrichment_discovery.js +29 -34
- package/dist/components/PlDatasetSelector/enrichment_discovery.js.map +1 -1
- package/dist/components/PlDatasetSelector/filter_discovery.cjs +27 -17
- package/dist/components/PlDatasetSelector/filter_discovery.cjs.map +1 -1
- package/dist/components/PlDatasetSelector/filter_discovery.d.ts +24 -10
- package/dist/components/PlDatasetSelector/filter_discovery.d.ts.map +1 -1
- package/dist/components/PlDatasetSelector/filter_discovery.js +28 -18
- package/dist/components/PlDatasetSelector/filter_discovery.js.map +1 -1
- package/dist/components/PlDatasetSelector/index.d.ts +2 -2
- package/dist/components/index.cjs +1 -1
- package/dist/components/index.d.ts +5 -5
- package/dist/components/index.js +2 -2
- package/dist/filters/converters/filterToQuery.cjs +5 -6
- package/dist/filters/converters/filterToQuery.cjs.map +1 -1
- package/dist/filters/converters/filterToQuery.d.ts +12 -3
- package/dist/filters/converters/filterToQuery.d.ts.map +1 -1
- package/dist/filters/converters/filterToQuery.js +5 -6
- package/dist/filters/converters/filterToQuery.js.map +1 -1
- package/dist/filters/converters/index.d.ts +2 -2
- package/dist/filters/index.d.ts +2 -2
- package/dist/index.cjs +64 -35
- package/dist/index.d.ts +23 -15
- package/dist/index.js +15 -9
- package/dist/labels/derive_distinct_labels.cjs.map +1 -1
- package/dist/labels/derive_distinct_labels.d.ts +1 -2
- package/dist/labels/derive_distinct_labels.d.ts.map +1 -1
- package/dist/labels/derive_distinct_labels.js.map +1 -1
- package/dist/labels/derive_distinct_tooltips.cjs +1 -1
- package/dist/labels/derive_distinct_tooltips.cjs.map +1 -1
- package/dist/labels/derive_distinct_tooltips.d.ts +6 -3
- package/dist/labels/derive_distinct_tooltips.d.ts.map +1 -1
- package/dist/labels/derive_distinct_tooltips.js +1 -1
- package/dist/labels/derive_distinct_tooltips.js.map +1 -1
- package/dist/package.cjs +1 -1
- package/dist/package.js +1 -1
- package/dist/pframe_utils/axes.cjs.map +1 -1
- package/dist/pframe_utils/axes.d.ts +2 -2
- package/dist/pframe_utils/axes.d.ts.map +1 -1
- package/dist/pframe_utils/axes.js.map +1 -1
- package/dist/pframe_utils/columns.cjs +6 -10
- package/dist/pframe_utils/columns.cjs.map +1 -1
- package/dist/pframe_utils/columns.d.ts +4 -4
- package/dist/pframe_utils/columns.d.ts.map +1 -1
- package/dist/pframe_utils/columns.js +7 -11
- package/dist/pframe_utils/columns.js.map +1 -1
- package/dist/pframe_utils/index.cjs.map +1 -1
- package/dist/pframe_utils/index.d.ts +1 -1
- package/dist/pframe_utils/index.d.ts.map +1 -1
- package/dist/pframe_utils/index.js.map +1 -1
- package/dist/render/accessor.cjs +15 -16
- package/dist/render/accessor.cjs.map +1 -1
- package/dist/render/accessor.d.ts +7 -10
- package/dist/render/accessor.d.ts.map +1 -1
- package/dist/render/accessor.js +15 -16
- package/dist/render/accessor.js.map +1 -1
- package/dist/render/api.cjs +34 -36
- package/dist/render/api.cjs.map +1 -1
- package/dist/render/api.d.ts +30 -20
- package/dist/render/api.d.ts.map +1 -1
- package/dist/render/api.js +35 -38
- package/dist/render/api.js.map +1 -1
- package/dist/render/index.cjs +4 -0
- package/dist/render/index.d.ts +4 -4
- package/dist/render/index.js +3 -2
- package/dist/render/internal.cjs +3 -2
- package/dist/render/internal.cjs.map +1 -1
- package/dist/render/internal.d.ts +17 -9
- package/dist/render/internal.d.ts.map +1 -1
- package/dist/render/internal.js +3 -2
- package/dist/render/internal.js.map +1 -1
- package/dist/render/util/axis_filtering.cjs.map +1 -1
- package/dist/render/util/axis_filtering.js.map +1 -1
- package/dist/render/util/column_collection.cjs +6 -4
- package/dist/render/util/column_collection.cjs.map +1 -1
- package/dist/render/util/column_collection.d.ts +9 -9
- package/dist/render/util/column_collection.d.ts.map +1 -1
- package/dist/render/util/column_collection.js +6 -4
- package/dist/render/util/column_collection.js.map +1 -1
- package/dist/render/util/index.d.ts +2 -2
- package/dist/render/util/pcolumn_data.cjs +1 -1
- package/dist/render/util/pcolumn_data.cjs.map +1 -1
- package/dist/render/util/pcolumn_data.d.ts +3 -3
- package/dist/render/util/pcolumn_data.d.ts.map +1 -1
- package/dist/render/util/pcolumn_data.js +1 -1
- package/dist/render/util/pcolumn_data.js.map +1 -1
- package/dist/services/block_services.cjs +2 -1
- package/dist/services/block_services.cjs.map +1 -1
- package/dist/services/block_services.d.ts +1 -0
- package/dist/services/block_services.d.ts.map +1 -1
- package/dist/services/block_services.js +2 -1
- package/dist/services/block_services.js.map +1 -1
- package/dist/services/get_services.cjs +2 -2
- package/dist/services/get_services.cjs.map +1 -1
- package/dist/services/get_services.d.ts +4 -1
- package/dist/services/get_services.d.ts.map +1 -1
- package/dist/services/get_services.js +2 -2
- package/dist/services/get_services.js.map +1 -1
- package/package.json +10 -8
- package/src/columns/__test_helpers__/collection_driver.ts +197 -0
- package/src/columns/__test_helpers__/stub_registry.ts +134 -0
- package/src/columns/column.ts +46 -0
- package/src/columns/column_lazy.test.ts +201 -0
- package/src/columns/column_lazy.ts +311 -0
- package/src/columns/column_providers/index.ts +78 -0
- package/src/columns/column_providers/providers.ts +193 -0
- package/src/columns/column_providers/types.ts +24 -0
- package/src/columns/column_recipes/column_discovered_recipe.ts +231 -0
- package/src/columns/column_recipes/column_filtered_recipe.ts +184 -0
- package/src/columns/column_recipes/column_overrided_recipe.ts +146 -0
- package/src/columns/column_recipes/column_recipes.test.ts +681 -0
- package/src/columns/column_recipes/index.ts +127 -0
- package/src/columns/column_recipes/leaf_rebrand.ts +28 -0
- package/src/columns/column_recipes/types.ts +113 -0
- package/src/columns/columns_collection.test.ts +164 -0
- package/src/columns/columns_collection.ts +170 -0
- package/src/columns/derive_axis_values_labels.ts +98 -0
- package/src/columns/expand_by_partition.test.ts +146 -110
- package/src/columns/expand_by_partition.ts +72 -84
- package/src/columns/index.ts +7 -5
- package/src/columns/utils.test.ts +249 -0
- package/src/columns/utils.ts +226 -0
- package/src/components/PFrameForGraphs.ts +3 -1
- package/src/components/PlAnnotations/filters_ui.test.ts +46 -47
- package/src/components/PlDataTable/columnResolver.test.ts +122 -0
- package/src/components/PlDataTable/columnResolver.ts +57 -0
- package/src/components/PlDataTable/createPlDataTable/createPTableDefV2.ts +9 -9
- package/src/components/PlDataTable/createPlDataTable/createPTableDefV3.ts +31 -63
- package/src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts +85 -58
- package/src/components/PlDataTable/createPlDataTable/createPlDataTableV3.ts +316 -354
- package/src/components/PlDataTable/createPlDataTable/discoverColumns.ts +48 -144
- package/src/components/PlDataTable/createPlDataTable/index.ts +2 -2
- package/src/components/PlDataTable/createPlDataTable/utils.test.ts +60 -69
- package/src/components/PlDataTable/createPlDataTable/utils.ts +65 -173
- package/src/components/PlDataTable/createPlDataTableSheet.ts +1 -1
- package/src/components/PlDataTable/index.ts +4 -2
- package/src/components/PlDataTable/labels.ts +4 -33
- package/src/components/PlDataTable/state-migration.ts +151 -22
- package/src/components/PlDataTable/typesV8.ts +188 -0
- package/src/components/PlDatasetSelector/build_dataset_options.ts +35 -60
- package/src/components/PlDatasetSelector/enrichment_discovery.ts +65 -61
- package/src/components/PlDatasetSelector/filter_discovery.test.ts +110 -72
- package/src/components/PlDatasetSelector/filter_discovery.ts +51 -31
- package/src/filters/converters/filterToQuery.test.ts +15 -8
- package/src/filters/converters/filterToQuery.ts +22 -9
- package/src/filters/converters/filterUiToExpressionImpl.test.ts +35 -36
- package/src/labels/derive_distinct_labels.ts +1 -1
- package/src/labels/derive_distinct_tooltips.test.ts +7 -4
- package/src/labels/derive_distinct_tooltips.ts +3 -3
- package/src/pframe_utils/axes.ts +2 -2
- package/src/pframe_utils/columns.ts +14 -23
- package/src/pframe_utils/index.ts +1 -1
- package/src/render/accessor.ts +35 -38
- package/src/render/api.ts +45 -61
- package/src/render/index.ts +2 -1
- package/src/render/internal.ts +43 -10
- package/src/render/util/axis_filtering.ts +0 -1
- package/src/render/util/column_collection.ts +17 -17
- package/src/render/util/pcolumn_data.ts +5 -9
- package/src/services/block_services.ts +1 -0
- package/src/services/get_services.ts +5 -2
- package/dist/columns/column_collection_builder.cjs +0 -241
- package/dist/columns/column_collection_builder.cjs.map +0 -1
- package/dist/columns/column_collection_builder.d.ts +0 -119
- package/dist/columns/column_collection_builder.d.ts.map +0 -1
- package/dist/columns/column_collection_builder.js +0 -241
- package/dist/columns/column_collection_builder.js.map +0 -1
- package/dist/columns/column_selector.cjs +0 -49
- package/dist/columns/column_selector.cjs.map +0 -1
- package/dist/columns/column_selector.d.ts +0 -33
- package/dist/columns/column_selector.d.ts.map +0 -1
- package/dist/columns/column_selector.js +0 -47
- package/dist/columns/column_selector.js.map +0 -1
- package/dist/columns/column_snapshot.cjs +0 -19
- package/dist/columns/column_snapshot.cjs.map +0 -1
- package/dist/columns/column_snapshot.d.ts +0 -39
- package/dist/columns/column_snapshot.d.ts.map +0 -1
- package/dist/columns/column_snapshot.js +0 -18
- package/dist/columns/column_snapshot.js.map +0 -1
- package/dist/columns/column_snapshot_provider.cjs +0 -137
- package/dist/columns/column_snapshot_provider.cjs.map +0 -1
- package/dist/columns/column_snapshot_provider.d.ts +0 -74
- package/dist/columns/column_snapshot_provider.d.ts.map +0 -1
- package/dist/columns/column_snapshot_provider.js +0 -133
- package/dist/columns/column_snapshot_provider.js.map +0 -1
- package/dist/columns/ctx_column_sources.cjs +0 -80
- package/dist/columns/ctx_column_sources.cjs.map +0 -1
- package/dist/columns/ctx_column_sources.d.ts +0 -30
- package/dist/columns/ctx_column_sources.d.ts.map +0 -1
- package/dist/columns/ctx_column_sources.js +0 -79
- package/dist/columns/ctx_column_sources.js.map +0 -1
- package/src/columns/column_collection_builder.test.ts +0 -484
- package/src/columns/column_collection_builder.ts +0 -485
- package/src/columns/column_selector.test.ts +0 -90
- package/src/columns/column_selector.ts +0 -100
- package/src/columns/column_snapshot.ts +0 -58
- package/src/columns/column_snapshot_provider.ts +0 -194
- package/src/columns/ctx_column_sources.ts +0 -99
|
@@ -15,13 +15,21 @@ import {
|
|
|
15
15
|
import { distillFilterSpec } from "../../filters";
|
|
16
16
|
import type { PlDataTableFilterState, PlTableFilter } from "./typesV4";
|
|
17
17
|
import type {
|
|
18
|
+
PlDataTableFilters,
|
|
18
19
|
PlDataTableFiltersWithMeta,
|
|
19
|
-
PlDataTableGridStateCore,
|
|
20
20
|
PlDataTableSheetState,
|
|
21
21
|
PlDataTableStateV2CacheEntry,
|
|
22
22
|
PlDataTableStateV2Normalized,
|
|
23
|
-
PlTableColumnIdJson,
|
|
24
23
|
PTableParamsV2,
|
|
24
|
+
} from "./typesV8";
|
|
25
|
+
import type {
|
|
26
|
+
PlDataTableFilters as PlDataTableFiltersV7,
|
|
27
|
+
PlDataTableFiltersWithMeta as PlDataTableFiltersWithMetaV7,
|
|
28
|
+
PlDataTableGridStateCore as PlDataTableGridStateCoreV7,
|
|
29
|
+
PlDataTableStateV2CacheEntry as PlDataTableStateV2V7CacheEntry,
|
|
30
|
+
PlDataTableStateV2Normalized as PlDataTableStateV2V7,
|
|
31
|
+
PlTableColumnIdJson,
|
|
32
|
+
PTableParamsV2 as PTableParamsV2V7,
|
|
25
33
|
} from "./typesV7";
|
|
26
34
|
import type {
|
|
27
35
|
PlDataTableGridStateV6,
|
|
@@ -111,7 +119,7 @@ export type PlDataTableStateV2 =
|
|
|
111
119
|
sheetsState: PlDataTableSheetState[];
|
|
112
120
|
filtersState: PlDataTableFilterState[];
|
|
113
121
|
}[];
|
|
114
|
-
pTableParams:
|
|
122
|
+
pTableParams: PTableParamsV2V7;
|
|
115
123
|
}
|
|
116
124
|
| {
|
|
117
125
|
version: 4;
|
|
@@ -135,15 +143,18 @@ export type PlDataTableStateV2 =
|
|
|
135
143
|
sourceId: string;
|
|
136
144
|
gridState: PlDataTableGridStateV5;
|
|
137
145
|
sheetsState: PlDataTableSheetState[];
|
|
138
|
-
filtersState: null |
|
|
139
|
-
defaultFiltersState: null |
|
|
146
|
+
filtersState: null | PlDataTableFiltersWithMetaV7;
|
|
147
|
+
defaultFiltersState: null | PlDataTableFiltersWithMetaV7;
|
|
140
148
|
searchString?: string;
|
|
141
149
|
}[];
|
|
142
|
-
pTableParams:
|
|
150
|
+
pTableParams: PTableParamsV2V7;
|
|
143
151
|
}
|
|
144
152
|
// v6 stored colIds as canonicalized full `PTableColumnSpec` (including
|
|
145
153
|
// annotations + `pl7.app/trace`). v7 strips down to `PTableColumnId`.
|
|
146
154
|
| PlDataTableStateV2V6
|
|
155
|
+
// v7 still had filter leaves serialised as `CanonicalizedJson<PTableColumnId>`
|
|
156
|
+
// strings and `sorting: []` for the "untouched" case.
|
|
157
|
+
| PlDataTableStateV2V7
|
|
147
158
|
// Normalized state
|
|
148
159
|
| PlDataTableStateV2Normalized;
|
|
149
160
|
|
|
@@ -168,7 +179,7 @@ export function upgradePlDataTableStateV2(
|
|
|
168
179
|
...entry,
|
|
169
180
|
filtersState: [],
|
|
170
181
|
})),
|
|
171
|
-
pTableParams:
|
|
182
|
+
pTableParams: createDefaultPTableParamsV7(),
|
|
172
183
|
};
|
|
173
184
|
}
|
|
174
185
|
// v3 -> v4
|
|
@@ -182,7 +193,7 @@ export function upgradePlDataTableStateV2(
|
|
|
182
193
|
if (state.version === 4) {
|
|
183
194
|
state = migrateV4toV6(state);
|
|
184
195
|
}
|
|
185
|
-
// v5 -> v6: unwrap `{source, labeled}` colIds in gridState
|
|
196
|
+
// v5 -> v6: unwrap `{source, labeled}` colIds in gridState.
|
|
186
197
|
if (state.version === 5) {
|
|
187
198
|
state = migrateV5toV6(state);
|
|
188
199
|
}
|
|
@@ -190,12 +201,17 @@ export function upgradePlDataTableStateV2(
|
|
|
190
201
|
if (state.version === 6) {
|
|
191
202
|
state = migrateV6toV7(state);
|
|
192
203
|
}
|
|
204
|
+
// v7 -> v8: parse CanonicalizedJson<PTableColumnId> filter leaves into object
|
|
205
|
+
// form; translate `sorting: []` into `sorting: null`.
|
|
206
|
+
if (state.version === 7) {
|
|
207
|
+
state = migrateV7toV8(state);
|
|
208
|
+
}
|
|
193
209
|
return state;
|
|
194
210
|
}
|
|
195
211
|
|
|
196
212
|
/** Migrate v5 to v6: unwrap `{source, labeled}` colIds in gridState. */
|
|
197
213
|
function migrateV5toV6(state: Extract<PlDataTableStateV2, { version: 5 }>): PlDataTableStateV2V6 {
|
|
198
|
-
// pTableParams reset: v5 stored
|
|
214
|
+
// pTableParams reset: v5 stored ColumnDiscoveredId-based hiddenColIds with
|
|
199
215
|
// empty-array fields (e.g. `{column, path: [], columnQualifications: [], ...}`).
|
|
200
216
|
// v6 distills empty fields, so the same logical column serialises differently
|
|
201
217
|
// and lookups would silently miss every previously-hidden discovered column.
|
|
@@ -206,7 +222,7 @@ function migrateV5toV6(state: Extract<PlDataTableStateV2, { version: 5 }>): PlDa
|
|
|
206
222
|
...entry,
|
|
207
223
|
gridState: unwrapV5GridState(entry.gridState),
|
|
208
224
|
})),
|
|
209
|
-
pTableParams:
|
|
225
|
+
pTableParams: createDefaultPTableParamsV7(),
|
|
210
226
|
};
|
|
211
227
|
}
|
|
212
228
|
|
|
@@ -242,11 +258,11 @@ function unwrapV5GridState(gridState: PlDataTableGridStateV5): PlDataTableGridSt
|
|
|
242
258
|
|
|
243
259
|
/** Migrate v6 to v7: rewrite each colId from a full PTableColumnSpec to its
|
|
244
260
|
* compact PTableColumnId (drops annotations/spec body, ~16× smaller per column). */
|
|
245
|
-
function migrateV6toV7(state: PlDataTableStateV2V6):
|
|
261
|
+
function migrateV6toV7(state: PlDataTableStateV2V6): PlDataTableStateV2V7 {
|
|
246
262
|
return {
|
|
247
263
|
version: 7,
|
|
248
264
|
stateCache: state.stateCache.map(
|
|
249
|
-
(entry):
|
|
265
|
+
(entry): PlDataTableStateV2V7CacheEntry => ({
|
|
250
266
|
...entry,
|
|
251
267
|
gridState: shrinkV6GridState(entry.gridState),
|
|
252
268
|
}),
|
|
@@ -266,7 +282,7 @@ function shrinkV6ColId(json: PlDataTableV6ColIdJson): PlTableColumnIdJson {
|
|
|
266
282
|
return json as unknown as PlTableColumnIdJson;
|
|
267
283
|
}
|
|
268
284
|
|
|
269
|
-
function shrinkV6GridState(gridState: PlDataTableGridStateV6):
|
|
285
|
+
function shrinkV6GridState(gridState: PlDataTableGridStateV6): PlDataTableGridStateCoreV7 {
|
|
270
286
|
return {
|
|
271
287
|
columnOrder: gridState.columnOrder
|
|
272
288
|
? { orderedColIds: gridState.columnOrder.orderedColIds.map(shrinkV6ColId) }
|
|
@@ -291,14 +307,13 @@ function migrateV4toV6(state: Extract<PlDataTableStateV2, { version: 4 }>): PlDa
|
|
|
291
307
|
const nextId = () => ++idCounter;
|
|
292
308
|
|
|
293
309
|
const migratedCache: PlDataTableStateV2V6CacheEntry[] = state.stateCache.map((entry) => {
|
|
294
|
-
const leaves:
|
|
310
|
+
const leaves: PlDataTableFiltersWithMetaV7["filters"] = [];
|
|
295
311
|
for (const f of entry.filtersState) {
|
|
296
312
|
if (f.filter !== null && !f.filter.disabled) {
|
|
297
|
-
|
|
298
|
-
leaves.push(migrateTableFilter(column, f.filter.value, nextId));
|
|
313
|
+
leaves.push(migrateTableFilter(canonicalizeJson(f.id), f.filter.value, nextId));
|
|
299
314
|
}
|
|
300
315
|
}
|
|
301
|
-
const filtersState:
|
|
316
|
+
const filtersState: PlDataTableFiltersWithMetaV7 | null =
|
|
302
317
|
leaves.length > 0 ? { id: nextId(), type: "and", filters: leaves } : null;
|
|
303
318
|
|
|
304
319
|
return {
|
|
@@ -329,16 +344,17 @@ function migrateV4toV6(state: Extract<PlDataTableStateV2, { version: 4 }>): PlDa
|
|
|
329
344
|
defaultFilters: null,
|
|
330
345
|
sorting: state.pTableParams.sorting,
|
|
331
346
|
}
|
|
332
|
-
:
|
|
347
|
+
: createDefaultPTableParamsV7(),
|
|
333
348
|
};
|
|
334
349
|
}
|
|
335
350
|
|
|
336
|
-
/** Migrate a single per-column PlTableFilter to a
|
|
351
|
+
/** Migrate a single per-column PlTableFilter to a v7-form tree node (legacy
|
|
352
|
+
* string column ids). v7 → v8 later converts these to object form. */
|
|
337
353
|
function migrateTableFilter(
|
|
338
354
|
column: CanonicalizedJson<PTableColumnId>,
|
|
339
355
|
filter: PlTableFilter,
|
|
340
356
|
nextId: () => number,
|
|
341
|
-
):
|
|
357
|
+
): PlDataTableFiltersWithMetaV7["filters"][number] {
|
|
342
358
|
const id = nextId();
|
|
343
359
|
switch (filter.type) {
|
|
344
360
|
case "isNA":
|
|
@@ -404,7 +420,9 @@ function migrateTableFilter(
|
|
|
404
420
|
}
|
|
405
421
|
}
|
|
406
422
|
|
|
407
|
-
|
|
423
|
+
/** Default pTableParams in the v7 shape (sorting: []). Used by intermediate
|
|
424
|
+
* migration steps that produce v6/v7 state before the v7 → v8 conversion. */
|
|
425
|
+
function createDefaultPTableParamsV7(): PTableParamsV2V7 {
|
|
408
426
|
return {
|
|
409
427
|
sourceId: null,
|
|
410
428
|
hiddenColIds: null,
|
|
@@ -414,10 +432,121 @@ export function createDefaultPTableParams(): PTableParamsV2 {
|
|
|
414
432
|
};
|
|
415
433
|
}
|
|
416
434
|
|
|
435
|
+
export function createDefaultPTableParams(): PTableParamsV2 {
|
|
436
|
+
return {
|
|
437
|
+
sourceId: null,
|
|
438
|
+
hiddenColIds: null,
|
|
439
|
+
filters: null,
|
|
440
|
+
defaultFilters: null,
|
|
441
|
+
sorting: null,
|
|
442
|
+
};
|
|
443
|
+
}
|
|
444
|
+
|
|
417
445
|
export function createPlDataTableStateV2(): PlDataTableStateV2Normalized {
|
|
418
446
|
return {
|
|
419
|
-
version:
|
|
447
|
+
version: 8,
|
|
420
448
|
stateCache: [],
|
|
421
449
|
pTableParams: createDefaultPTableParams(),
|
|
422
450
|
};
|
|
423
451
|
}
|
|
452
|
+
|
|
453
|
+
// --- v7 -> v8 migration ----------------------------------------------------
|
|
454
|
+
// Parses CanonicalizedJson<PTableColumnId> filter leaves into the new object
|
|
455
|
+
// form. Malformed leaves are dropped; groups that become empty after pruning
|
|
456
|
+
// are dropped; cache entries whose tree fully prunes get filtersState: null.
|
|
457
|
+
// Also translates `sorting: []` (legacy "untouched") into `sorting: null`.
|
|
458
|
+
|
|
459
|
+
function migrateV7toV8(state: PlDataTableStateV2V7): PlDataTableStateV2Normalized {
|
|
460
|
+
const newCache: PlDataTableStateV2CacheEntry[] = state.stateCache.map((entry) => ({
|
|
461
|
+
sourceId: entry.sourceId,
|
|
462
|
+
gridState: entry.gridState,
|
|
463
|
+
sheetsState: entry.sheetsState,
|
|
464
|
+
filtersState: convertFiltersWithMeta(entry.filtersState),
|
|
465
|
+
defaultFiltersState: convertFiltersWithMeta(entry.defaultFiltersState),
|
|
466
|
+
searchString: entry.searchString,
|
|
467
|
+
}));
|
|
468
|
+
|
|
469
|
+
const params = state.pTableParams;
|
|
470
|
+
let pTableParams: PTableParamsV2;
|
|
471
|
+
if (params.sourceId === null) {
|
|
472
|
+
pTableParams = createDefaultPTableParams();
|
|
473
|
+
} else {
|
|
474
|
+
pTableParams = {
|
|
475
|
+
sourceId: params.sourceId,
|
|
476
|
+
hiddenColIds: params.hiddenColIds,
|
|
477
|
+
// Empty array in legacy state means "not touched" — translate to null so the
|
|
478
|
+
// model falls back to default sorting; non-empty stays as user's explicit value.
|
|
479
|
+
sorting: params.sorting.length === 0 ? null : params.sorting,
|
|
480
|
+
filters: convertFiltersPlain(params.filters),
|
|
481
|
+
defaultFilters: convertFiltersPlain(params.defaultFilters),
|
|
482
|
+
};
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
return { version: 8, stateCache: newCache, pTableParams };
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
function convertFiltersWithMeta(
|
|
489
|
+
node: null | PlDataTableFiltersWithMetaV7,
|
|
490
|
+
): null | PlDataTableFiltersWithMeta {
|
|
491
|
+
if (node === null) return null;
|
|
492
|
+
const result = pruneFilterNode(node as unknown);
|
|
493
|
+
if (result === undefined) return null;
|
|
494
|
+
return result as PlDataTableFiltersWithMeta;
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
function convertFiltersPlain(node: null | PlDataTableFiltersV7): null | PlDataTableFilters {
|
|
498
|
+
if (node === null) return null;
|
|
499
|
+
const result = pruneFilterNode(node as unknown);
|
|
500
|
+
if (result === undefined) return null;
|
|
501
|
+
return result as PlDataTableFilters;
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
/** Recursively converts and prunes a legacy v7 filter tree. Preserves meta
|
|
505
|
+
* fields (id/isExpanded/source/isSuppressed) on non-leaf nodes. Returns
|
|
506
|
+
* `undefined` when the subtree is empty after pruning. */
|
|
507
|
+
function pruneFilterNode(node: unknown): unknown | undefined {
|
|
508
|
+
if (!node || typeof node !== "object") return undefined;
|
|
509
|
+
const n = node as { type?: unknown };
|
|
510
|
+
if (n.type === "and" || n.type === "or") {
|
|
511
|
+
const filters = (n as { filters?: unknown[] }).filters ?? [];
|
|
512
|
+
const kept = filters.map((f) => pruneFilterNode(f)).filter((f): f is object => f !== undefined);
|
|
513
|
+
if (kept.length === 0) return undefined;
|
|
514
|
+
return { ...(n as object), type: n.type, filters: kept };
|
|
515
|
+
}
|
|
516
|
+
if (n.type === "not") {
|
|
517
|
+
const inner = pruneFilterNode((n as { filter?: unknown }).filter);
|
|
518
|
+
if (inner === undefined) return undefined;
|
|
519
|
+
return { ...(n as object), type: "not", filter: inner };
|
|
520
|
+
}
|
|
521
|
+
return convertLegacyLeaf(n);
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
function convertLegacyLeaf(leaf: {
|
|
525
|
+
type?: unknown;
|
|
526
|
+
column?: unknown;
|
|
527
|
+
rhs?: unknown;
|
|
528
|
+
}): unknown | undefined {
|
|
529
|
+
if (leaf.type === undefined) return leaf;
|
|
530
|
+
const result: Record<string, unknown> = { ...leaf };
|
|
531
|
+
if ("column" in result) {
|
|
532
|
+
const c = parseLegacyLeafColumn(result.column);
|
|
533
|
+
if (c === undefined) return undefined;
|
|
534
|
+
result.column = c;
|
|
535
|
+
}
|
|
536
|
+
if ("rhs" in result) {
|
|
537
|
+
const c = parseLegacyLeafColumn(result.rhs);
|
|
538
|
+
if (c === undefined) return undefined;
|
|
539
|
+
result.rhs = c;
|
|
540
|
+
}
|
|
541
|
+
return result;
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
function parseLegacyLeafColumn(s: unknown): PTableColumnId | undefined {
|
|
545
|
+
if (typeof s !== "string") return undefined;
|
|
546
|
+
const parsed = parseJsonSafely(s as CanonicalizedJson<PTableColumnId>);
|
|
547
|
+
if (!parsed || typeof parsed !== "object") return undefined;
|
|
548
|
+
if (!("type" in parsed) || !("id" in parsed)) return undefined;
|
|
549
|
+
const t = (parsed as { type: unknown }).type;
|
|
550
|
+
if (t !== "axis" && t !== "column") return undefined;
|
|
551
|
+
return parsed as PTableColumnId;
|
|
552
|
+
}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
AnnotationDataStatus,
|
|
3
|
+
AxisId,
|
|
4
|
+
AxisSpec,
|
|
5
|
+
CanonicalizedJson,
|
|
6
|
+
ColumnUniversalId,
|
|
7
|
+
ListOptionBase,
|
|
8
|
+
PTableSorting,
|
|
9
|
+
PColumnIdAndSpec,
|
|
10
|
+
PTableHandle,
|
|
11
|
+
RootFilterSpec,
|
|
12
|
+
PTableColumnId,
|
|
13
|
+
PFrameHandle,
|
|
14
|
+
} from "@milaboratories/pl-model-common";
|
|
15
|
+
import type { FilterSpecLeaf } from "../../filters";
|
|
16
|
+
import { Nil } from "@milaboratories/helpers";
|
|
17
|
+
|
|
18
|
+
export type PlTableColumnIdJson = CanonicalizedJson<PTableColumnId>;
|
|
19
|
+
|
|
20
|
+
export type PlDataTableGridStateCore = {
|
|
21
|
+
/** Includes column ordering */
|
|
22
|
+
columnOrder?: {
|
|
23
|
+
/** All colIds in order */
|
|
24
|
+
orderedColIds: PlTableColumnIdJson[];
|
|
25
|
+
};
|
|
26
|
+
/** Includes current sort columns and direction */
|
|
27
|
+
sort?: {
|
|
28
|
+
/** Sorted columns and directions in order */
|
|
29
|
+
sortModel: {
|
|
30
|
+
/** Column Id to apply the sort to. */
|
|
31
|
+
colId: PlTableColumnIdJson;
|
|
32
|
+
/** Sort direction */
|
|
33
|
+
sort: "asc" | "desc";
|
|
34
|
+
}[];
|
|
35
|
+
};
|
|
36
|
+
/** Includes column visibility */
|
|
37
|
+
columnVisibility?: {
|
|
38
|
+
/** All colIds which were hidden */
|
|
39
|
+
hiddenColIds: PlTableColumnIdJson[];
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export type PlDataTableSheet = {
|
|
44
|
+
/** spec of the axis to use */
|
|
45
|
+
axis: AxisSpec;
|
|
46
|
+
/** options to show in the filter dropdown */
|
|
47
|
+
options: ListOptionBase<string | number>[];
|
|
48
|
+
/** default (selected) value */
|
|
49
|
+
defaultValue?: string | number;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
export type PlDataTableSheetState = {
|
|
53
|
+
/** id of the axis */
|
|
54
|
+
axisId: AxisId;
|
|
55
|
+
/** selected value */
|
|
56
|
+
value: string | number;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
/** Tree-based filter state compatible with PlAdvancedFilter's RootFilter */
|
|
60
|
+
export type PlDataTableFilterMeta = {
|
|
61
|
+
id: number;
|
|
62
|
+
source?: "table-filter" | "table-search";
|
|
63
|
+
isExpanded?: boolean;
|
|
64
|
+
isSuppressed?: boolean;
|
|
65
|
+
};
|
|
66
|
+
export type PlDataTableFilterSpecLeaf = FilterSpecLeaf<PTableColumnId>;
|
|
67
|
+
export type PlDataTableFilters = RootFilterSpec<PlDataTableFilterSpecLeaf>;
|
|
68
|
+
export type PlDataTableFiltersWithMeta = RootFilterSpec<
|
|
69
|
+
PlDataTableFilterSpecLeaf,
|
|
70
|
+
PlDataTableFilterMeta
|
|
71
|
+
>;
|
|
72
|
+
|
|
73
|
+
export type PlDataTableStateV2CacheEntry = {
|
|
74
|
+
/** DataSource identifier for state management */
|
|
75
|
+
sourceId: string;
|
|
76
|
+
/** Internal ag-grid state */
|
|
77
|
+
gridState: PlDataTableGridStateCore;
|
|
78
|
+
/** Sheets state */
|
|
79
|
+
sheetsState: PlDataTableSheetState[];
|
|
80
|
+
/** User filters state (tree-based, compatible with PlAdvancedFilter) */
|
|
81
|
+
filtersState: null | PlDataTableFiltersWithMeta;
|
|
82
|
+
/** Default filters state from model (snapshot of defaults) */
|
|
83
|
+
defaultFiltersState: null | PlDataTableFiltersWithMeta;
|
|
84
|
+
/** Fast search string */
|
|
85
|
+
searchString?: string;
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
export type PTableParamsV2 =
|
|
89
|
+
| {
|
|
90
|
+
sourceId: null;
|
|
91
|
+
hiddenColIds: null;
|
|
92
|
+
sorting: null;
|
|
93
|
+
filters: null;
|
|
94
|
+
defaultFilters: null;
|
|
95
|
+
}
|
|
96
|
+
| {
|
|
97
|
+
sourceId: string;
|
|
98
|
+
hiddenColIds: null | PTableColumnId[];
|
|
99
|
+
sorting: null | PTableSorting[];
|
|
100
|
+
filters: null | PlDataTableFilters;
|
|
101
|
+
defaultFilters: null | PlDataTableFilters;
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
export type PlDataTableStateV2Normalized = {
|
|
105
|
+
/** Version for upgrades */
|
|
106
|
+
version: 8;
|
|
107
|
+
/** Internal states, LRU cache for 5 sourceId-s */
|
|
108
|
+
stateCache: PlDataTableStateV2CacheEntry[];
|
|
109
|
+
/** PTable params derived from the cache state for the current sourceId */
|
|
110
|
+
pTableParams: PTableParamsV2;
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
/** PlAgDataTable model */
|
|
114
|
+
export type PlDataTableModel = {
|
|
115
|
+
/** DataSource identifier for state management */
|
|
116
|
+
sourceId: null | string;
|
|
117
|
+
/** p-table including all columns, used to show the full specification of the table */
|
|
118
|
+
fullTableHandle?: PTableHandle;
|
|
119
|
+
/** p-frame handle */
|
|
120
|
+
fullPframeHandle?: PFrameHandle;
|
|
121
|
+
/** p-table including only visible columns, used to get the data */
|
|
122
|
+
visibleTableHandle?: PTableHandle;
|
|
123
|
+
/** Default filters from model options, surfaced for UI display */
|
|
124
|
+
defaultFilters?: Nil | PlDataTableFilters;
|
|
125
|
+
/**
|
|
126
|
+
* Sidecar rendering metadata kept out of the column specs: baking
|
|
127
|
+
* label/visibility/order/status into a spec via overrides changes the
|
|
128
|
+
* recipe's `ColumnUniversalId`, so the same physical column reached two ways
|
|
129
|
+
* (e.g. as a primary column and as a discovered axis label) would diverge
|
|
130
|
+
* into two ids and render twice. The UI overlays this onto the
|
|
131
|
+
* engine-emitted specs at render time.
|
|
132
|
+
*/
|
|
133
|
+
columnsMeta?: PlDataTableColumnsMeta;
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
/** Display metadata for one column, applied by the UI over the emitted spec. */
|
|
137
|
+
export type PlDataTableColumnMeta = {
|
|
138
|
+
/** Disambiguated label (overrides the spec's intrinsic `pl7.app/label`). */
|
|
139
|
+
label?: string;
|
|
140
|
+
/** Effective visibility from rules + intrinsic annotations. */
|
|
141
|
+
visibility?: "default" | "optional" | "hidden";
|
|
142
|
+
/** Effective order priority (higher = further left). */
|
|
143
|
+
order?: number;
|
|
144
|
+
/** Per-column data status (set for visible columns only). */
|
|
145
|
+
status?: AnnotationDataStatus;
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
/** Display metadata for one axis, applied by the UI over the emitted spec. */
|
|
149
|
+
export type PlDataTableAxisMeta = {
|
|
150
|
+
/** Whether the UI must hide this axis (axes introduced only by secondary columns). */
|
|
151
|
+
hidden: boolean;
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
/** Sidecar display metadata for a table, keyed by emitted column/axis identity. */
|
|
155
|
+
export type PlDataTableColumnsMeta = {
|
|
156
|
+
/** Per-column metadata keyed by the emitted `ColumnUniversalId`. */
|
|
157
|
+
columns: Record<ColumnUniversalId, PlDataTableColumnMeta>;
|
|
158
|
+
/** Per-axis metadata keyed by the canonicalized `AxisId`. */
|
|
159
|
+
axes: Record<CanonicalizedJson<AxisId>, PlDataTableAxisMeta>;
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
export type CreatePlDataTableOps = {
|
|
163
|
+
/** Filters for columns and non-partitioned axes */
|
|
164
|
+
filters?: PlDataTableFilters;
|
|
165
|
+
|
|
166
|
+
/** Sorting to columns hidden from user */
|
|
167
|
+
sorting?: PTableSorting[];
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Selects columns for which will be inner-joined to the table.
|
|
171
|
+
*
|
|
172
|
+
* Default behaviour: all columns are considered to be core
|
|
173
|
+
*/
|
|
174
|
+
coreColumnPredicate?: (spec: PColumnIdAndSpec) => boolean;
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Determines how core columns should be joined together:
|
|
178
|
+
* inner - so user will only see records present in all core columns
|
|
179
|
+
* full - so user will only see records present in any of the core columns
|
|
180
|
+
*
|
|
181
|
+
* All non-core columns will be left joined to the table produced by the core
|
|
182
|
+
* columns, in other words records form the pool of non-core columns will only
|
|
183
|
+
* make their way into the final table if core table contains corresponding key.
|
|
184
|
+
*
|
|
185
|
+
* Default: 'full'
|
|
186
|
+
*/
|
|
187
|
+
coreJoinType?: "inner" | "full";
|
|
188
|
+
};
|
|
@@ -2,15 +2,10 @@ import type { MultiColumnSelector, Option, PObjectSpec } from "@milaboratories/p
|
|
|
2
2
|
import { multiColumnSelectorsToPredicate } from "@milaboratories/pl-model-common";
|
|
3
3
|
import type { DeriveLabelsOptions } from "../../labels/derive_distinct_labels";
|
|
4
4
|
import type { RenderCtxBase } from "../../render";
|
|
5
|
-
import type { AnchoredColumnCollection } from "../../columns/column_collection_builder";
|
|
6
|
-
import { ColumnCollectionBuilder } from "../../columns/column_collection_builder";
|
|
7
|
-
import {
|
|
8
|
-
ResultPoolColumnSnapshotProvider,
|
|
9
|
-
collectCtxColumnSnapshotProviders,
|
|
10
|
-
} from "../../columns/ctx_column_sources";
|
|
11
5
|
import type { DatasetOption } from "./dataset_selection";
|
|
12
6
|
import { buildRefMap, filterMatchesToOptions, findFilterColumns } from "./filter_discovery";
|
|
13
7
|
import { enrichmentVariantsToRefs, findEnrichmentColumns } from "./enrichment_discovery";
|
|
8
|
+
import { ColumnsProvider, getCtxProviders } from "../../columns";
|
|
14
9
|
|
|
15
10
|
type SpecPredicateOption =
|
|
16
11
|
| MultiColumnSelector
|
|
@@ -63,70 +58,50 @@ export function buildDatasetOptions(
|
|
|
63
58
|
if (options.length === 0) return [];
|
|
64
59
|
|
|
65
60
|
const refMap = buildRefMap(ctx.resultPool.getSpecs().entries);
|
|
66
|
-
const pframeSpec = ctx.getService("pframeSpec");
|
|
67
61
|
|
|
68
62
|
const withEnrichments = opts?.withEnrichments ?? false;
|
|
69
|
-
const filterSource =
|
|
70
|
-
//
|
|
71
|
-
//
|
|
72
|
-
|
|
73
|
-
const enrichmentSources = withEnrichments ? collectCtxColumnSnapshotProviders(ctx) : undefined;
|
|
63
|
+
const filterSource = ColumnsProvider(ctx.ctx.getUpstreamBlockCtx());
|
|
64
|
+
// Hoist providers once: getCtxProviders walks the full output tree, so
|
|
65
|
+
// calling it per dataset option would be O(N × tree).
|
|
66
|
+
const enrichmentSources = withEnrichments ? getCtxProviders(ctx) : undefined;
|
|
74
67
|
|
|
75
68
|
return options.map((primary: Option): DatasetOption => {
|
|
76
69
|
const datasetSpec = ctx.resultPool.getPColumnSpecByRef(primary.ref);
|
|
77
70
|
if (!datasetSpec) return { primary };
|
|
78
71
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
try {
|
|
84
|
-
// ResultPoolColumnSnapshotProvider is always complete;
|
|
85
|
-
// allowPartialColumnList narrows the return type to non-undefined.
|
|
86
|
-
filterCollection = new ColumnCollectionBuilder(pframeSpec)
|
|
87
|
-
.addSource(filterSource)
|
|
88
|
-
.build({ anchors: { main: datasetSpec }, allowPartialColumnList: true });
|
|
72
|
+
const filterMatches = findFilterColumns({
|
|
73
|
+
sources: [filterSource],
|
|
74
|
+
anchorSpec: datasetSpec,
|
|
75
|
+
}).filter((m) => filterPredicate(m.getSpec()!));
|
|
89
76
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
77
|
+
const filters =
|
|
78
|
+
filterMatches.length === 0
|
|
79
|
+
? undefined
|
|
80
|
+
: filterMatchesToOptions(filterMatches, {
|
|
81
|
+
refsByObjectId: refMap,
|
|
82
|
+
datasetSpec,
|
|
83
|
+
labelOptions: opts?.labelOptions,
|
|
84
|
+
});
|
|
96
85
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
let enrichments;
|
|
110
|
-
if (enrichmentCollection && withEnrichments) {
|
|
111
|
-
const enrichmentVariants = findEnrichmentColumns(enrichmentCollection, {
|
|
112
|
-
maxHops: opts?.enrichmentMaxHops,
|
|
113
|
-
...(typeof withEnrichments === "function"
|
|
114
|
-
? { predicate: withEnrichments }
|
|
115
|
-
: { include: withEnrichments }),
|
|
116
|
-
});
|
|
117
|
-
if (enrichmentVariants.length > 0) {
|
|
118
|
-
enrichments = enrichmentVariantsToRefs(enrichmentVariants, opts?.labelOptions);
|
|
119
|
-
}
|
|
86
|
+
let enrichments;
|
|
87
|
+
if (enrichmentSources && withEnrichments) {
|
|
88
|
+
const enrichmentVariants = findEnrichmentColumns({
|
|
89
|
+
sources: enrichmentSources,
|
|
90
|
+
anchorSpec: datasetSpec,
|
|
91
|
+
maxHops: opts?.enrichmentMaxHops,
|
|
92
|
+
...(typeof withEnrichments === "function"
|
|
93
|
+
? { predicate: withEnrichments }
|
|
94
|
+
: { include: withEnrichments }),
|
|
95
|
+
});
|
|
96
|
+
if (enrichmentVariants.length > 0) {
|
|
97
|
+
enrichments = enrichmentVariantsToRefs(enrichmentVariants, opts?.labelOptions);
|
|
120
98
|
}
|
|
121
|
-
|
|
122
|
-
return {
|
|
123
|
-
primary,
|
|
124
|
-
...(filters !== undefined && filters.length > 0 ? { filters } : {}),
|
|
125
|
-
...(enrichments !== undefined && enrichments.length > 0 ? { enrichments } : {}),
|
|
126
|
-
};
|
|
127
|
-
} finally {
|
|
128
|
-
filterCollection?.dispose();
|
|
129
|
-
enrichmentCollection?.dispose();
|
|
130
99
|
}
|
|
100
|
+
|
|
101
|
+
return {
|
|
102
|
+
primary,
|
|
103
|
+
...(filters !== undefined && filters.length > 0 ? { filters } : {}),
|
|
104
|
+
...(enrichments !== undefined && enrichments.length > 0 ? { enrichments } : {}),
|
|
105
|
+
};
|
|
131
106
|
});
|
|
132
107
|
}
|