@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/index.ts"],"sourcesContent":["import type { RenderCtxBase } from \"../../../render\";\nimport type { PlDataTableModel } from \"../
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/index.ts"],"sourcesContent":["import type { RenderCtxBase } from \"../../../render\";\nimport type { PlDataTableModel } from \"../typesV8\";\nimport { createPlDataTableOptionsV2, createPlDataTableV2 } from \"./createPlDataTableV2\";\nimport { createPlDataTableV3 } from \"./createPlDataTableV3\";\nimport type { createPlDataTableOptionsV3 } from \"./createPlDataTableV3\";\n\nexport function createPlDataTable<A, U>(\n ctx: RenderCtxBase<A, U>,\n options: { version: \"v2\" } & createPlDataTableOptionsV2,\n): ReturnType<typeof createPlDataTableV2>;\nexport function createPlDataTable<A, U>(\n ctx: RenderCtxBase<A, U>,\n options: { version?: \"v3\" } & createPlDataTableOptionsV3,\n): ReturnType<typeof createPlDataTableV3>;\nexport function createPlDataTable<A, U>(\n ctx: RenderCtxBase<A, U>,\n options:\n | ({ version: \"v2\" } & createPlDataTableOptionsV2)\n | ({ version?: \"v3\" } & createPlDataTableOptionsV3),\n): PlDataTableModel | undefined {\n if (options.version === \"v2\") {\n return createPlDataTableV2(ctx, options.columns, options.tableState, options.options);\n } else {\n // default version is last (v3 at the moment)\n return createPlDataTableV3(ctx, options);\n }\n}\n\nexport { discoverTableColumns as discoverTableColumnSnaphots } from \"./discoverColumns\";\n"],"mappings":";;;;AAcA,SAAgB,kBACd,KACA,SAG8B;CAC9B,IAAI,QAAQ,YAAY,MACtB,OAAO,oBAAoB,KAAK,QAAQ,SAAS,QAAQ,YAAY,QAAQ,OAAO;MAGpF,OAAO,oBAAoB,KAAK,OAAO;AAE3C"}
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
const require_derive_distinct_labels = require("../../../labels/derive_distinct_labels.cjs");
|
|
2
|
-
const
|
|
3
|
-
const
|
|
2
|
+
const require_columns_collection = require("../../../columns/columns_collection.cjs");
|
|
3
|
+
const require_utils = require("../../../columns/utils.cjs");
|
|
4
4
|
require("../../../columns/index.cjs");
|
|
5
|
-
|
|
5
|
+
require("../../../labels/derive_distinct_tooltips.cjs");
|
|
6
6
|
let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
|
|
7
|
-
|
|
7
|
+
require("@milaboratories/helpers");
|
|
8
8
|
let es_toolkit = require("es-toolkit");
|
|
9
9
|
//#region src/components/PlDataTable/createPlDataTable/utils.ts
|
|
10
|
+
/** Adapt a {@link ColumnRecipe} to the plain {@link RuleColumn} shape. */
|
|
11
|
+
function toRuleColumn(col) {
|
|
12
|
+
return {
|
|
13
|
+
id: (0, _milaboratories_pl_model_common.extractPObjectId)(col.id),
|
|
14
|
+
spec: col.getSpec()
|
|
15
|
+
};
|
|
16
|
+
}
|
|
10
17
|
/** Check if column should be omitted from the table */
|
|
11
18
|
function isColumnHidden(spec) {
|
|
12
19
|
return (0, _milaboratories_pl_model_common.readAnnotation)(spec, _milaboratories_pl_model_common.Annotation.Table.Visibility) === "hidden";
|
|
@@ -34,151 +41,58 @@ function getOrderPriority(col, orderByColId) {
|
|
|
34
41
|
* (first-match-wins, preserving original rule order).
|
|
35
42
|
*
|
|
36
43
|
* Predicate-based rules (`ColumnMatcher`) are evaluated directly on the spec.
|
|
37
|
-
* Selector-based rules (`ColumnSelector`) are matched via
|
|
38
|
-
*
|
|
44
|
+
* Selector-based rules (`ColumnSelector`) are matched via the
|
|
45
|
+
* `columnsCollection` service — the inline column ids must be resolvable in
|
|
46
|
+
* the active render ctx for the host to read their specs.
|
|
39
47
|
*/
|
|
40
|
-
function evaluateRules(rules, columns
|
|
48
|
+
function evaluateRules(rules, columns) {
|
|
41
49
|
const result = /* @__PURE__ */ new Map();
|
|
42
50
|
if (rules.length === 0 || columns.length === 0) return result;
|
|
43
|
-
const
|
|
51
|
+
const selectorRules = rules.filter((rule) => typeof rule.match !== "function");
|
|
44
52
|
const selectorHitsByRule = /* @__PURE__ */ new Map();
|
|
45
|
-
if (
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
for (const rule of rules) {
|
|
55
|
-
if (typeof rule.match === "function") continue;
|
|
56
|
-
const hits = collection.findColumns({ include: rule.match });
|
|
57
|
-
selectorHitsByRule.set(rule, new Set(hits.map((h) => h.id)));
|
|
58
|
-
}
|
|
59
|
-
} finally {
|
|
60
|
-
collection.dispose();
|
|
53
|
+
if (selectorRules.length > 0) {
|
|
54
|
+
const baseCollection = require_columns_collection.ColumnsCollection([{
|
|
55
|
+
columns: (0, es_toolkit.uniqBy)(columns, (col) => col.id),
|
|
56
|
+
isFinal: true
|
|
57
|
+
}]);
|
|
58
|
+
for (const rule of selectorRules) {
|
|
59
|
+
const hitIds = baseCollection.filter({ include: rule.match }).getColumnIds();
|
|
60
|
+
if (hitIds.length === 0) return result;
|
|
61
|
+
selectorHitsByRule.set(rule, new Set(hitIds.map((id) => (0, _milaboratories_pl_model_common.extractPObjectId)(id))));
|
|
61
62
|
}
|
|
62
63
|
}
|
|
63
|
-
for (const col of columns) for (const rule of rules) if (typeof rule.match === "function" ? rule.match(col.spec) : selectorHitsByRule.get(rule)?.has(col.id) ?? false) {
|
|
64
|
-
result.set(col.id, rule);
|
|
65
|
-
break;
|
|
66
|
-
}
|
|
67
|
-
return result;
|
|
68
|
-
}
|
|
69
|
-
function dedupeById(columns) {
|
|
70
|
-
const seen = /* @__PURE__ */ new Set();
|
|
71
|
-
const result = [];
|
|
72
64
|
for (const col of columns) {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
65
|
+
const colKey = (0, _milaboratories_pl_model_common.extractPObjectId)(col.id);
|
|
66
|
+
for (const rule of rules) if (selectorHitsByRule.get(rule)?.has(colKey) ?? false) {
|
|
67
|
+
result.set(colKey, rule);
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
76
70
|
}
|
|
77
71
|
return result;
|
|
78
72
|
}
|
|
79
73
|
/**
|
|
80
|
-
*
|
|
81
|
-
*
|
|
74
|
+
* Build a sidecar map `columnId → AnnotationDataStatus` derived from each
|
|
75
|
+
* recipe's own status. This is *rendering* metadata — kept out of the spec
|
|
76
|
+
* so it cannot perturb column identity (id-bearing spec overrides would
|
|
77
|
+
* diverge the visible PTable's column ids from the full table / pframe).
|
|
82
78
|
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
...col,
|
|
92
|
-
spec: {
|
|
93
|
-
...col.spec,
|
|
94
|
-
...(0, es_toolkit.isNil)(colLabel) ? {} : { annotations: {
|
|
95
|
-
...col.spec.annotations,
|
|
96
|
-
[_milaboratories_pl_model_common.Annotation.Label]: colLabel
|
|
97
|
-
} },
|
|
98
|
-
axesSpec: col.spec.axesSpec.map((axis) => {
|
|
99
|
-
const label = derivedLabels[(0, _milaboratories_pl_model_common.canonicalizeAxisId)(axis)];
|
|
100
|
-
return (0, es_toolkit.isNil)(label) ? axis : {
|
|
101
|
-
...axis,
|
|
102
|
-
annotations: {
|
|
103
|
-
...axis.annotations,
|
|
104
|
-
[_milaboratories_pl_model_common.Annotation.Label]: label
|
|
105
|
-
}
|
|
106
|
-
};
|
|
107
|
-
})
|
|
108
|
-
}
|
|
109
|
-
};
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
function withDataStatusAnnotations(columns) {
|
|
113
|
-
return columns.map((col) => {
|
|
114
|
-
return {
|
|
115
|
-
...col,
|
|
116
|
-
spec: {
|
|
117
|
-
...col.spec,
|
|
118
|
-
annotations: {
|
|
119
|
-
...col.spec.annotations,
|
|
120
|
-
[_milaboratories_pl_model_common.Annotation.DataStatus]: col.dataStatus
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
};
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Writes effective display properties (OrderPriority, Visibility) from precomputed rule maps
|
|
128
|
-
* into column annotations. Returns new column objects — originals are not mutated.
|
|
129
|
-
*/
|
|
130
|
-
function withTableVisualAnnotations(visibilityByColId, orderByColId, columns) {
|
|
131
|
-
if (visibilityByColId === void 0 && orderByColId === void 0) return columns;
|
|
132
|
-
return columns.map((col) => {
|
|
133
|
-
const annotations = { ...col.spec.annotations };
|
|
134
|
-
const visibility = getEffectiveVisibility(col, visibilityByColId);
|
|
135
|
-
if (!(0, es_toolkit.isNil)(visibility)) annotations[_milaboratories_pl_model_common.Annotation.Table.Visibility] = visibility;
|
|
136
|
-
const orderPriority = getOrderPriority(col, orderByColId);
|
|
137
|
-
if (!(0, es_toolkit.isNil)(orderPriority)) annotations[_milaboratories_pl_model_common.Annotation.Table.OrderPriority] = String(orderPriority);
|
|
138
|
-
return {
|
|
139
|
-
...col,
|
|
140
|
-
spec: {
|
|
141
|
-
...col.spec,
|
|
142
|
-
annotations
|
|
143
|
-
}
|
|
144
|
-
};
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Writes derived info annotations into column annotations.
|
|
149
|
-
* Columns without an info entry are passed through unchanged.
|
|
79
|
+
* Mapping `ColumnFieldStatus` × actual byte-presence → `AnnotationDataStatus`:
|
|
80
|
+
* - `absent` → `"absent"`
|
|
81
|
+
* - `resolving` → `"computing"`
|
|
82
|
+
* - `present` + `hasColumnData()` → `"ready"`
|
|
83
|
+
* - `present` + no bytes yet → `"computing"`
|
|
84
|
+
*
|
|
85
|
+
* Intentionally scoped to visible columns — the probe is meaningful only for
|
|
86
|
+
* what the user will actually see.
|
|
150
87
|
*/
|
|
151
|
-
function
|
|
152
|
-
|
|
153
|
-
return columns.map((col) => {
|
|
154
|
-
const info = infoById[col.id];
|
|
155
|
-
if ((0, es_toolkit.isNil)(info)) return col;
|
|
156
|
-
return {
|
|
157
|
-
...col,
|
|
158
|
-
spec: {
|
|
159
|
-
...col.spec,
|
|
160
|
-
annotations: {
|
|
161
|
-
...col.spec.annotations,
|
|
162
|
-
[_milaboratories_pl_model_common.Annotation.Table.Info]: info
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
};
|
|
166
|
-
});
|
|
88
|
+
function buildDataStatusMap(columns, opts = {}) {
|
|
89
|
+
return columns.reduce((acc, c) => (acc[c.id] = deriveDataStatus(c, opts), acc), {});
|
|
167
90
|
}
|
|
168
|
-
function
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
axesSpec: col.spec.axesSpec.map((axis) => ({
|
|
174
|
-
...axis,
|
|
175
|
-
annotations: {
|
|
176
|
-
...axis.annotations,
|
|
177
|
-
[_milaboratories_pl_model_common.Annotation.Table.Visibility]: "hidden"
|
|
178
|
-
}
|
|
179
|
-
}))
|
|
180
|
-
}
|
|
181
|
-
}));
|
|
91
|
+
function deriveDataStatus(column, opts) {
|
|
92
|
+
const field = column.getDataStatus();
|
|
93
|
+
if (field === "absent") return "absent";
|
|
94
|
+
if (field === "resolving") return "computing";
|
|
95
|
+
return require_utils.hasColumnData(column, opts) ? "ready" : "computing";
|
|
182
96
|
}
|
|
183
97
|
/** Derive labels for all table elements: columns via deriveDistinctLabels, axes from label columns. */
|
|
184
98
|
function deriveAllLabels(options) {
|
|
@@ -189,46 +103,14 @@ function deriveAllLabels(options) {
|
|
|
189
103
|
qualifications: c.qualifications
|
|
190
104
|
})), deriveLabelsOptions).reduce((acc, label, index) => (acc[columns[index].id] = label, acc), {});
|
|
191
105
|
}
|
|
192
|
-
/** Derive origin tooltips for columns whose qualifications or linker path carry info. */
|
|
193
|
-
function deriveAllTooltips(options) {
|
|
194
|
-
const { columns } = options;
|
|
195
|
-
const variantCountByOriginal = columns.reduce((acc, c) => {
|
|
196
|
-
return acc.set((0, _milaboratories_helpers.getField)(c, "originalId") ?? c.id, (acc.get(c.originalId ?? c.id) ?? 0) + 1);
|
|
197
|
-
}, /* @__PURE__ */ new Map());
|
|
198
|
-
const { entries } = columns.reduce(({ entries, variantSeen }, c) => {
|
|
199
|
-
const id = (0, _milaboratories_helpers.getField)(c, "originalId") ?? c.id;
|
|
200
|
-
const variantCount = variantCountByOriginal.get(id);
|
|
201
|
-
const variantIndex = (variantSeen.set(id, (variantSeen.get(id) ?? 0) + 1), variantSeen.get(id));
|
|
202
|
-
entries.push({
|
|
203
|
-
spec: c.spec,
|
|
204
|
-
linkerPath: c.linkerPath,
|
|
205
|
-
qualifications: c.qualifications,
|
|
206
|
-
variantIndex,
|
|
207
|
-
variantCount
|
|
208
|
-
});
|
|
209
|
-
return {
|
|
210
|
-
entries,
|
|
211
|
-
variantSeen
|
|
212
|
-
};
|
|
213
|
-
}, {
|
|
214
|
-
entries: [],
|
|
215
|
-
variantSeen: /* @__PURE__ */ new Map()
|
|
216
|
-
});
|
|
217
|
-
const tooltips = require_derive_distinct_tooltips.deriveDistinctTooltips(entries);
|
|
218
|
-
return Object.fromEntries(tooltips.flatMap((t, i) => (0, es_toolkit.isNil)(t) ? [] : [[columns[i].id, t]]));
|
|
219
|
-
}
|
|
220
106
|
//#endregion
|
|
107
|
+
exports.buildDataStatusMap = buildDataStatusMap;
|
|
221
108
|
exports.deriveAllLabels = deriveAllLabels;
|
|
222
|
-
exports.deriveAllTooltips = deriveAllTooltips;
|
|
223
109
|
exports.evaluateRules = evaluateRules;
|
|
224
110
|
exports.getEffectiveVisibility = getEffectiveVisibility;
|
|
225
111
|
exports.getOrderPriority = getOrderPriority;
|
|
226
112
|
exports.isColumnHidden = isColumnHidden;
|
|
227
113
|
exports.isColumnOptional = isColumnOptional;
|
|
228
|
-
exports.
|
|
229
|
-
exports.withHidenAxesAnnotations = withHidenAxesAnnotations;
|
|
230
|
-
exports.withInfoAnnotations = withInfoAnnotations;
|
|
231
|
-
exports.withLabelAnnotations = withLabelAnnotations;
|
|
232
|
-
exports.withTableVisualAnnotations = withTableVisualAnnotations;
|
|
114
|
+
exports.toRuleColumn = toRuleColumn;
|
|
233
115
|
|
|
234
116
|
//# sourceMappingURL=utils.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.cjs","names":["Annotation","ColumnCollectionBuilder","ArrayColumnProvider","deriveDistinctLabels","deriveDistinctTooltips"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/utils.ts"],"sourcesContent":["import {\n type PColumn,\n type PColumnSpec,\n type PFrameSpecDriver,\n type PObjectId,\n Annotation,\n canonicalizeAxisId,\n DiscoveredPColumnId,\n readAnnotation,\n} from \"@milaboratories/pl-model-common\";\nimport {\n deriveDistinctLabels,\n type DeriveLabelsOptions,\n} from \"../../../labels/derive_distinct_labels\";\nimport {\n deriveDistinctTooltips,\n type TooltipEntry,\n} from \"../../../labels/derive_distinct_tooltips\";\nimport type { ColumnDataStatus, MatchQualifications, MatchVariant } from \"../../../columns\";\nimport type { ColumnMatcher, ColumnOrderRule, ColumnVisibilityRule } from \"./createPlDataTableV3\";\nimport type { ColumnSelector } from \"../../../columns\";\nimport { ArrayColumnProvider, ColumnCollectionBuilder } from \"../../../columns\";\nimport { isNil } from \"es-toolkit\";\nimport { getField } from \"@milaboratories/helpers\";\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/** Column shape consumed by rule evaluation. */\nexport type RuleColumn = Pick<PColumn<PObjectId>, \"id\" | \"spec\">;\n\n/** Get effective visibility for a column. Rule map lookup first, then annotation fallback. */\nexport function getEffectiveVisibility(\n col: RuleColumn,\n visibilityByColId?: Map<PObjectId, ColumnVisibilityRule>,\n): undefined | \"default\" | \"optional\" | \"hidden\" {\n const rule = visibilityByColId?.get(col.id);\n if (rule !== undefined) return rule.visibility;\n if (isColumnHidden(col.spec)) return \"hidden\";\n if (isColumnOptional(col.spec)) return \"optional\";\n return undefined;\n}\n\n/** Get ordering priority for a column. Rule map lookup first, then annotation fallback. */\nexport function getOrderPriority(\n col: RuleColumn,\n orderByColId?: Map<PObjectId, ColumnOrderRule>,\n): undefined | number {\n const rule = orderByColId?.get(col.id);\n if (rule !== undefined) return rule.priority;\n const annotation = Number(readAnnotation(col.spec, Annotation.Table.OrderPriority));\n return isNaN(annotation) ? undefined : annotation;\n}\n\n/**\n * Evaluate display rules against a set of columns and return a map of `colId → winning rule`\n * (first-match-wins, preserving original rule order).\n *\n * Predicate-based rules (`ColumnMatcher`) are evaluated directly on the spec.\n * Selector-based rules (`ColumnSelector`) are matched via `PFrameSpecDriver.discoverColumns`\n * using the same engine as `ColumnCollection.findColumns` — no client-side matcher.\n */\nexport function evaluateRules<R extends { match: ColumnMatcher | ColumnSelector }>(\n rules: R[],\n columns: RuleColumn[],\n pframeSpec: PFrameSpecDriver,\n): Map<PObjectId, R> {\n const result = new Map<PObjectId, R>();\n if (rules.length === 0 || columns.length === 0) return result;\n\n const hasSelectorRules = rules.some((rule) => typeof rule.match !== \"function\");\n const selectorHitsByRule = new Map<R, Set<PObjectId>>();\n\n if (hasSelectorRules) {\n const dedupedColumns = dedupeById(columns);\n const pColumns = dedupedColumns.map((c) => ({ id: c.id, spec: c.spec, data: undefined }));\n const collection = new ColumnCollectionBuilder(pframeSpec)\n .addSource(new ArrayColumnProvider(pColumns))\n .build();\n if (collection === undefined) return result;\n\n try {\n for (const rule of rules) {\n if (typeof rule.match === \"function\") continue;\n const hits = collection.findColumns({ include: rule.match });\n selectorHitsByRule.set(rule, new Set(hits.map((h) => h.id)));\n }\n } finally {\n collection.dispose();\n }\n }\n\n for (const col of columns) {\n for (const rule of rules) {\n const matches =\n typeof rule.match === \"function\"\n ? rule.match(col.spec)\n : (selectorHitsByRule.get(rule)?.has(col.id) ?? false);\n if (matches) {\n result.set(col.id, rule);\n break;\n }\n }\n }\n return result;\n}\n\nfunction dedupeById(columns: RuleColumn[]): RuleColumn[] {\n const seen = new Set<PObjectId>();\n const result: RuleColumn[] = [];\n for (const col of columns) {\n if (seen.has(col.id)) continue;\n seen.add(col.id);\n result.push(col);\n }\n return result;\n}\n\n/**\n * Writes derived labels into column and axis annotations.\n * Returns new column objects with modified specs — original columns are not mutated.\n *\n * For each column: writes derived label into Annotation.Label (if present in derivedLabels).\n * For each axis in column specs: writes derived axis label into AxisSpec annotations.\n */\nexport function withLabelAnnotations<\n T extends {\n readonly id: PObjectId;\n readonly spec: PColumnSpec;\n },\n>(derivedLabels: undefined | Record<string, string>, columns: T[]): T[] {\n if (derivedLabels === undefined) return columns;\n return columns.map((col) => {\n const colLabel = derivedLabels[col.id];\n return {\n ...col,\n spec: {\n ...col.spec,\n ...(isNil(colLabel)\n ? {}\n : { annotations: { ...col.spec.annotations, [Annotation.Label]: colLabel } }),\n axesSpec: col.spec.axesSpec.map((axis) => {\n const label = derivedLabels[canonicalizeAxisId(axis)];\n return isNil(label)\n ? axis\n : { ...axis, annotations: { ...axis.annotations, [Annotation.Label]: label } };\n }),\n },\n } as T;\n });\n}\n\nexport function withDataStatusAnnotations<\n T extends {\n readonly spec: PColumnSpec;\n readonly dataStatus: ColumnDataStatus;\n },\n>(columns: T[]): T[] {\n return columns.map((col) => {\n return {\n ...col,\n spec: {\n ...col.spec,\n annotations: {\n ...col.spec.annotations,\n [Annotation.DataStatus]: col.dataStatus,\n },\n },\n } as T;\n });\n}\n\n/**\n * Writes effective display properties (OrderPriority, Visibility) from precomputed rule maps\n * into column annotations. Returns new column objects — originals are not mutated.\n */\nexport function withTableVisualAnnotations<\n T extends { readonly id: PObjectId; readonly spec: PColumnSpec },\n>(\n visibilityByColId: undefined | Map<PObjectId, ColumnVisibilityRule>,\n orderByColId: undefined | Map<PObjectId, ColumnOrderRule>,\n columns: T[],\n): T[] {\n if (visibilityByColId === undefined && orderByColId === undefined) return columns;\n return columns.map((col) => {\n const annotations = { ...col.spec.annotations };\n\n const visibility = getEffectiveVisibility(col, visibilityByColId);\n if (!isNil(visibility)) annotations[Annotation.Table.Visibility] = visibility;\n\n const orderPriority = getOrderPriority(col, orderByColId);\n if (!isNil(orderPriority)) annotations[Annotation.Table.OrderPriority] = String(orderPriority);\n\n return {\n ...col,\n spec: {\n ...col.spec,\n annotations: annotations,\n },\n } as T;\n });\n}\n\n/**\n * Writes derived info annotations into column annotations.\n * Columns without an info entry are passed through unchanged.\n */\nexport function withInfoAnnotations<\n T extends { readonly id: PObjectId; readonly spec: PColumnSpec },\n>(infoById: undefined | Record<string, string>, columns: T[]): T[] {\n if (isNil(infoById)) return columns;\n return columns.map((col) => {\n const info = infoById[col.id];\n if (isNil(info)) return col;\n return {\n ...col,\n spec: {\n ...col.spec,\n annotations: { ...col.spec.annotations, [Annotation.Table.Info]: info },\n },\n } as T;\n });\n}\n\nexport function withHidenAxesAnnotations<T extends { readonly spec: PColumnSpec }>(\n columns: T[],\n): T[] {\n return columns.map(\n (col) =>\n ({\n ...col,\n spec: {\n ...col.spec,\n axesSpec: col.spec.axesSpec.map((axis) => ({\n ...axis,\n annotations: { ...axis.annotations, [Annotation.Table.Visibility]: \"hidden\" },\n })),\n },\n }) as T,\n );\n}\n\n/** Column shape required by label derivation. */\nexport type LabelableColumn = {\n readonly id: PObjectId;\n readonly spec: PColumnSpec;\n readonly linkerPath?: MatchVariant[\"path\"];\n readonly qualifications?: MatchQualifications;\n};\n\n/** Derive labels for all table elements: columns via deriveDistinctLabels, axes from label columns. */\nexport function deriveAllLabels(options: {\n columns: LabelableColumn[];\n deriveLabelsOptions?: DeriveLabelsOptions;\n}): Record<string, string> {\n const { columns, deriveLabelsOptions } = options;\n const entries = columns.map((c) => ({\n spec: c.spec,\n linkerPath: c.linkerPath?.map((step) => ({\n spec: step.linker.spec,\n })),\n qualifications: c.qualifications,\n }));\n const columnLabels = deriveDistinctLabels(entries, deriveLabelsOptions).reduce(\n (acc, label, index) => ((acc[columns[index].id] = label), acc),\n {} as Record<string, string>,\n );\n return columnLabels;\n}\n\n/** Column shape required by tooltip derivation. */\nexport type TooltipableColumn = {\n readonly id: PObjectId | DiscoveredPColumnId;\n readonly spec: PColumnSpec;\n readonly originalId?: PObjectId;\n readonly linkerPath?: MatchVariant[\"path\"];\n readonly qualifications?: MatchQualifications;\n};\n\n/** Derive origin tooltips for columns whose qualifications or linker path carry info. */\nexport function deriveAllTooltips(options: {\n columns: TooltipableColumn[];\n}): Record<DiscoveredPColumnId, string> {\n const { columns } = options;\n\n const variantCountByOriginal = columns.reduce<Map<PObjectId, number>>((acc, c) => {\n return acc.set(getField(c, \"originalId\") ?? c.id, (acc.get(c.originalId ?? c.id) ?? 0) + 1);\n }, new Map());\n\n const { entries } = columns.reduce(\n ({ entries, variantSeen }, c) => {\n const id = getField(c, \"originalId\") ?? c.id;\n const variantCount = variantCountByOriginal.get(id);\n const variantIndex =\n (variantSeen.set(id, (variantSeen.get(id) ?? 0) + 1), variantSeen.get(id));\n\n entries.push({\n spec: c.spec,\n linkerPath: c.linkerPath,\n qualifications: c.qualifications,\n variantIndex,\n variantCount,\n });\n\n return { entries, variantSeen };\n },\n { entries: [] as TooltipEntry[], variantSeen: new Map<PObjectId, number>() },\n );\n\n const tooltips = deriveDistinctTooltips(entries);\n\n return Object.fromEntries(\n tooltips.flatMap((t, i) => (isNil(t) ? [] : [[columns[i].id, t] as const])),\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.cjs","names":["Annotation","ColumnsCollection","hasColumnData","deriveDistinctLabels"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/utils.ts"],"sourcesContent":["import {\n type AnnotationDataStatus,\n type ColumnUniversalId,\n type PColumn,\n type PColumnSpec,\n type PObjectId,\n Annotation,\n extractPObjectId,\n readAnnotation,\n} from \"@milaboratories/pl-model-common\";\nimport {\n deriveDistinctLabels,\n type DeriveLabelsOptions,\n} from \"../../../labels/derive_distinct_labels\";\nimport {\n deriveDistinctTooltips,\n type TooltipEntry,\n} from \"../../../labels/derive_distinct_tooltips\";\nimport type { ColumnOrderRule, ColumnVisibilityRule } from \"./createPlDataTableV3\";\nimport type { ColumnSelector, MatchQualifications } from \"@milaboratories/pl-model-common\";\nimport { ColumnsCollection, hasColumnData, type ColumnRecipe } from \"../../../columns\";\nimport type { GlobalCfgRenderCtx } from \"../../../render/internal\";\nimport { isNil, uniqBy } from \"es-toolkit\";\nimport { getField } from \"@milaboratories/helpers\";\n\n/** Adapt a {@link ColumnRecipe} to the plain {@link RuleColumn} shape. */\nexport function toRuleColumn(col: ColumnRecipe): RuleColumn {\n return { id: extractPObjectId(col.id), spec: col.getSpec() };\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/** Column shape consumed by rule evaluation. */\nexport type RuleColumn = Pick<PColumn<PObjectId>, \"id\" | \"spec\">;\n\n/** Get effective visibility for a column. Rule map lookup first, then annotation fallback. */\nexport function getEffectiveVisibility(\n col: RuleColumn,\n visibilityByColId?: Map<PObjectId, ColumnVisibilityRule>,\n): undefined | \"default\" | \"optional\" | \"hidden\" {\n const rule = visibilityByColId?.get(col.id);\n if (rule !== undefined) return rule.visibility;\n if (isColumnHidden(col.spec)) return \"hidden\";\n if (isColumnOptional(col.spec)) return \"optional\";\n return undefined;\n}\n\n/** Get ordering priority for a column. Rule map lookup first, then annotation fallback. */\nexport function getOrderPriority(\n col: RuleColumn,\n orderByColId?: Map<PObjectId, ColumnOrderRule>,\n): undefined | number {\n const rule = orderByColId?.get(col.id);\n if (rule !== undefined) return rule.priority;\n const annotation = Number(readAnnotation(col.spec, Annotation.Table.OrderPriority));\n return isNaN(annotation) ? undefined : annotation;\n}\n\n/**\n * Evaluate display rules against a set of columns and return a map of `colId → winning rule`\n * (first-match-wins, preserving original rule order).\n *\n * Predicate-based rules (`ColumnMatcher`) are evaluated directly on the spec.\n * Selector-based rules (`ColumnSelector`) are matched via the\n * `columnsCollection` service — the inline column ids must be resolvable in\n * the active render ctx for the host to read their specs.\n */\nexport function evaluateRules<R extends { match: ColumnSelector }>(\n rules: R[],\n columns: ColumnRecipe[],\n): Map<PObjectId, R> {\n const result = new Map<PObjectId, R>();\n if (rules.length === 0 || columns.length === 0) return result;\n\n const selectorRules = rules.filter((rule) => typeof rule.match !== \"function\");\n const selectorHitsByRule = new Map<R, Set<PObjectId>>();\n\n if (selectorRules.length > 0) {\n const baseColumns = uniqBy(columns, (col) => col.id);\n const baseCollection = ColumnsCollection([{ columns: baseColumns, isFinal: true }]);\n for (const rule of selectorRules) {\n const hitIds = baseCollection.filter({ include: rule.match }).getColumnIds();\n if (hitIds.length === 0) return result;\n selectorHitsByRule.set(rule, new Set(hitIds.map((id) => extractPObjectId(id))));\n }\n }\n\n for (const col of columns) {\n const colKey = extractPObjectId(col.id);\n for (const rule of rules) {\n const matches = selectorHitsByRule.get(rule)?.has(colKey) ?? false;\n if (matches) {\n result.set(colKey, rule);\n break;\n }\n }\n }\n return result;\n}\n\n/**\n * Build a sidecar map `columnId → AnnotationDataStatus` derived from each\n * recipe's own status. This is *rendering* metadata — kept out of the spec\n * so it cannot perturb column identity (id-bearing spec overrides would\n * diverge the visible PTable's column ids from the full table / pframe).\n *\n * Mapping `ColumnFieldStatus` × actual byte-presence → `AnnotationDataStatus`:\n * - `absent` → `\"absent\"`\n * - `resolving` → `\"computing\"`\n * - `present` + `hasColumnData()` → `\"ready\"`\n * - `present` + no bytes yet → `\"computing\"`\n *\n * Intentionally scoped to visible columns — the probe is meaningful only for\n * what the user will actually see.\n */\nexport function buildDataStatusMap(\n columns: ColumnRecipe[],\n opts: { ctx?: GlobalCfgRenderCtx } = {},\n): Record<ColumnUniversalId, AnnotationDataStatus> {\n return columns.reduce(\n (acc, c) => ((acc[c.id] = deriveDataStatus(c, opts)), acc),\n {} as Record<ColumnUniversalId, AnnotationDataStatus>,\n );\n}\n\nfunction deriveDataStatus(\n column: ColumnRecipe,\n opts: { ctx?: GlobalCfgRenderCtx },\n): AnnotationDataStatus {\n const field = column.getDataStatus();\n if (field === \"absent\") return \"absent\";\n if (field === \"resolving\") return \"computing\";\n return hasColumnData(column, opts) ? \"ready\" : \"computing\";\n}\n\n/** Column shape required by label derivation. */\nexport type LabelableColumn = {\n readonly id: ColumnUniversalId;\n readonly spec: PColumnSpec;\n readonly linkerPath?: ReadonlyArray<{ readonly linker: { readonly spec: PColumnSpec } }>;\n readonly qualifications?: MatchQualifications;\n};\n\n/** Derive labels for all table elements: columns via deriveDistinctLabels, axes from label columns. */\nexport function deriveAllLabels(options: {\n columns: LabelableColumn[];\n deriveLabelsOptions?: DeriveLabelsOptions;\n}): Record<string, string> {\n const { columns, deriveLabelsOptions } = options;\n const entries = columns.map((c) => ({\n spec: c.spec,\n linkerPath: c.linkerPath?.map((step) => ({ spec: step.linker.spec })),\n qualifications: c.qualifications,\n }));\n const columnLabels = deriveDistinctLabels(entries, deriveLabelsOptions).reduce(\n (acc, label, index) => ((acc[columns[index].id] = label), acc),\n {} as Record<string, string>,\n );\n return columnLabels;\n}\n\n/** Column shape required by tooltip derivation. */\nexport type TooltipableColumn = {\n readonly id: ColumnUniversalId;\n readonly spec: PColumnSpec;\n readonly originalId?: PObjectId;\n readonly linkerPath?: ReadonlyArray<{ readonly linker: { readonly spec: PColumnSpec } }>;\n readonly qualifications?: MatchQualifications;\n};\n\n/** Derive origin tooltips for columns whose qualifications or linker path carry info. */\nexport function deriveAllTooltips(options: {\n columns: TooltipableColumn[];\n}): Record<ColumnUniversalId, string> {\n const { columns } = options;\n\n const variantCountByOriginal = columns.reduce<Map<ColumnUniversalId, number>>((acc, c) => {\n return acc.set(getField(c, \"originalId\") ?? c.id, (acc.get(c.originalId ?? c.id) ?? 0) + 1);\n }, new Map());\n\n const { entries } = columns.reduce(\n ({ entries, variantSeen }, c) => {\n const id = getField(c, \"originalId\") ?? c.id;\n const variantCount = variantCountByOriginal.get(id);\n const variantIndex =\n (variantSeen.set(id, (variantSeen.get(id) ?? 0) + 1), variantSeen.get(id));\n\n entries.push({\n spec: c.spec,\n linkerPath: c.linkerPath,\n qualifications: c.qualifications,\n variantIndex,\n variantCount,\n });\n\n return { entries, variantSeen };\n },\n { entries: [] as TooltipEntry[], variantSeen: new Map<ColumnUniversalId, number>() },\n );\n\n const tooltips = deriveDistinctTooltips(entries);\n\n return Object.fromEntries(\n tooltips.flatMap((t, i) => (isNil(t) ? [] : [[columns[i].id, t] as const])),\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ColumnOrderRule, ColumnVisibilityRule } from "./createPlDataTableV3.js";
|
|
2
|
-
import { Annotation,
|
|
2
|
+
import { Annotation, AnnotationDataStatus, ColumnSelector, ColumnUniversalId, MatchQualifications, PColumn, PColumnSpec, PObjectId } from "@milaboratories/pl-model-common";
|
|
3
3
|
|
|
4
4
|
//#region src/components/PlDataTable/createPlDataTable/utils.d.ts
|
|
5
5
|
/** Check if column should be omitted from the table */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/utils.ts"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/utils.ts"],"mappings":";;;;;iBA+BgB,cAAA,CAAe,IAAA;EAAQ,WAAA,GAAc,UAAU;AAAA;;iBAK/C,gBAAA,CAAiB,IAAA;EAAQ,WAAA,GAAc,UAAU;AAAA;AAAjE;AAAA,KAKY,UAAA,GAAa,IAAA,CAAK,OAAA,CAAQ,SAAA;;iBAGtB,sBAAA,CACd,GAAA,EAAK,UAAA,EACL,iBAAA,GAAoB,GAAA,CAAI,SAAA,EAAW,oBAAA;;iBAUrB,gBAAA,CACd,GAAA,EAAK,UAAA,EACL,YAAA,GAAe,GAAA,CAAI,SAAA,EAAW,eAAA"}
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
import { deriveDistinctLabels } from "../../../labels/derive_distinct_labels.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { ColumnsCollection } from "../../../columns/columns_collection.js";
|
|
3
|
+
import { hasColumnData } from "../../../columns/utils.js";
|
|
4
4
|
import "../../../columns/index.js";
|
|
5
|
-
import
|
|
6
|
-
import { Annotation,
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
5
|
+
import "../../../labels/derive_distinct_tooltips.js";
|
|
6
|
+
import { Annotation, extractPObjectId, readAnnotation } from "@milaboratories/pl-model-common";
|
|
7
|
+
import "@milaboratories/helpers";
|
|
8
|
+
import { uniqBy } from "es-toolkit";
|
|
9
9
|
//#region src/components/PlDataTable/createPlDataTable/utils.ts
|
|
10
|
+
/** Adapt a {@link ColumnRecipe} to the plain {@link RuleColumn} shape. */
|
|
11
|
+
function toRuleColumn(col) {
|
|
12
|
+
return {
|
|
13
|
+
id: extractPObjectId(col.id),
|
|
14
|
+
spec: col.getSpec()
|
|
15
|
+
};
|
|
16
|
+
}
|
|
10
17
|
/** Check if column should be omitted from the table */
|
|
11
18
|
function isColumnHidden(spec) {
|
|
12
19
|
return readAnnotation(spec, Annotation.Table.Visibility) === "hidden";
|
|
@@ -34,151 +41,58 @@ function getOrderPriority(col, orderByColId) {
|
|
|
34
41
|
* (first-match-wins, preserving original rule order).
|
|
35
42
|
*
|
|
36
43
|
* Predicate-based rules (`ColumnMatcher`) are evaluated directly on the spec.
|
|
37
|
-
* Selector-based rules (`ColumnSelector`) are matched via
|
|
38
|
-
*
|
|
44
|
+
* Selector-based rules (`ColumnSelector`) are matched via the
|
|
45
|
+
* `columnsCollection` service — the inline column ids must be resolvable in
|
|
46
|
+
* the active render ctx for the host to read their specs.
|
|
39
47
|
*/
|
|
40
|
-
function evaluateRules(rules, columns
|
|
48
|
+
function evaluateRules(rules, columns) {
|
|
41
49
|
const result = /* @__PURE__ */ new Map();
|
|
42
50
|
if (rules.length === 0 || columns.length === 0) return result;
|
|
43
|
-
const
|
|
51
|
+
const selectorRules = rules.filter((rule) => typeof rule.match !== "function");
|
|
44
52
|
const selectorHitsByRule = /* @__PURE__ */ new Map();
|
|
45
|
-
if (
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
for (const rule of rules) {
|
|
55
|
-
if (typeof rule.match === "function") continue;
|
|
56
|
-
const hits = collection.findColumns({ include: rule.match });
|
|
57
|
-
selectorHitsByRule.set(rule, new Set(hits.map((h) => h.id)));
|
|
58
|
-
}
|
|
59
|
-
} finally {
|
|
60
|
-
collection.dispose();
|
|
53
|
+
if (selectorRules.length > 0) {
|
|
54
|
+
const baseCollection = ColumnsCollection([{
|
|
55
|
+
columns: uniqBy(columns, (col) => col.id),
|
|
56
|
+
isFinal: true
|
|
57
|
+
}]);
|
|
58
|
+
for (const rule of selectorRules) {
|
|
59
|
+
const hitIds = baseCollection.filter({ include: rule.match }).getColumnIds();
|
|
60
|
+
if (hitIds.length === 0) return result;
|
|
61
|
+
selectorHitsByRule.set(rule, new Set(hitIds.map((id) => extractPObjectId(id))));
|
|
61
62
|
}
|
|
62
63
|
}
|
|
63
|
-
for (const col of columns) for (const rule of rules) if (typeof rule.match === "function" ? rule.match(col.spec) : selectorHitsByRule.get(rule)?.has(col.id) ?? false) {
|
|
64
|
-
result.set(col.id, rule);
|
|
65
|
-
break;
|
|
66
|
-
}
|
|
67
|
-
return result;
|
|
68
|
-
}
|
|
69
|
-
function dedupeById(columns) {
|
|
70
|
-
const seen = /* @__PURE__ */ new Set();
|
|
71
|
-
const result = [];
|
|
72
64
|
for (const col of columns) {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
65
|
+
const colKey = extractPObjectId(col.id);
|
|
66
|
+
for (const rule of rules) if (selectorHitsByRule.get(rule)?.has(colKey) ?? false) {
|
|
67
|
+
result.set(colKey, rule);
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
76
70
|
}
|
|
77
71
|
return result;
|
|
78
72
|
}
|
|
79
73
|
/**
|
|
80
|
-
*
|
|
81
|
-
*
|
|
74
|
+
* Build a sidecar map `columnId → AnnotationDataStatus` derived from each
|
|
75
|
+
* recipe's own status. This is *rendering* metadata — kept out of the spec
|
|
76
|
+
* so it cannot perturb column identity (id-bearing spec overrides would
|
|
77
|
+
* diverge the visible PTable's column ids from the full table / pframe).
|
|
82
78
|
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
...col,
|
|
92
|
-
spec: {
|
|
93
|
-
...col.spec,
|
|
94
|
-
...isNil$1(colLabel) ? {} : { annotations: {
|
|
95
|
-
...col.spec.annotations,
|
|
96
|
-
[Annotation.Label]: colLabel
|
|
97
|
-
} },
|
|
98
|
-
axesSpec: col.spec.axesSpec.map((axis) => {
|
|
99
|
-
const label = derivedLabels[canonicalizeAxisId(axis)];
|
|
100
|
-
return isNil$1(label) ? axis : {
|
|
101
|
-
...axis,
|
|
102
|
-
annotations: {
|
|
103
|
-
...axis.annotations,
|
|
104
|
-
[Annotation.Label]: label
|
|
105
|
-
}
|
|
106
|
-
};
|
|
107
|
-
})
|
|
108
|
-
}
|
|
109
|
-
};
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
function withDataStatusAnnotations(columns) {
|
|
113
|
-
return columns.map((col) => {
|
|
114
|
-
return {
|
|
115
|
-
...col,
|
|
116
|
-
spec: {
|
|
117
|
-
...col.spec,
|
|
118
|
-
annotations: {
|
|
119
|
-
...col.spec.annotations,
|
|
120
|
-
[Annotation.DataStatus]: col.dataStatus
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
};
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Writes effective display properties (OrderPriority, Visibility) from precomputed rule maps
|
|
128
|
-
* into column annotations. Returns new column objects — originals are not mutated.
|
|
129
|
-
*/
|
|
130
|
-
function withTableVisualAnnotations(visibilityByColId, orderByColId, columns) {
|
|
131
|
-
if (visibilityByColId === void 0 && orderByColId === void 0) return columns;
|
|
132
|
-
return columns.map((col) => {
|
|
133
|
-
const annotations = { ...col.spec.annotations };
|
|
134
|
-
const visibility = getEffectiveVisibility(col, visibilityByColId);
|
|
135
|
-
if (!isNil$1(visibility)) annotations[Annotation.Table.Visibility] = visibility;
|
|
136
|
-
const orderPriority = getOrderPriority(col, orderByColId);
|
|
137
|
-
if (!isNil$1(orderPriority)) annotations[Annotation.Table.OrderPriority] = String(orderPriority);
|
|
138
|
-
return {
|
|
139
|
-
...col,
|
|
140
|
-
spec: {
|
|
141
|
-
...col.spec,
|
|
142
|
-
annotations
|
|
143
|
-
}
|
|
144
|
-
};
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Writes derived info annotations into column annotations.
|
|
149
|
-
* Columns without an info entry are passed through unchanged.
|
|
79
|
+
* Mapping `ColumnFieldStatus` × actual byte-presence → `AnnotationDataStatus`:
|
|
80
|
+
* - `absent` → `"absent"`
|
|
81
|
+
* - `resolving` → `"computing"`
|
|
82
|
+
* - `present` + `hasColumnData()` → `"ready"`
|
|
83
|
+
* - `present` + no bytes yet → `"computing"`
|
|
84
|
+
*
|
|
85
|
+
* Intentionally scoped to visible columns — the probe is meaningful only for
|
|
86
|
+
* what the user will actually see.
|
|
150
87
|
*/
|
|
151
|
-
function
|
|
152
|
-
|
|
153
|
-
return columns.map((col) => {
|
|
154
|
-
const info = infoById[col.id];
|
|
155
|
-
if (isNil$1(info)) return col;
|
|
156
|
-
return {
|
|
157
|
-
...col,
|
|
158
|
-
spec: {
|
|
159
|
-
...col.spec,
|
|
160
|
-
annotations: {
|
|
161
|
-
...col.spec.annotations,
|
|
162
|
-
[Annotation.Table.Info]: info
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
};
|
|
166
|
-
});
|
|
88
|
+
function buildDataStatusMap(columns, opts = {}) {
|
|
89
|
+
return columns.reduce((acc, c) => (acc[c.id] = deriveDataStatus(c, opts), acc), {});
|
|
167
90
|
}
|
|
168
|
-
function
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
axesSpec: col.spec.axesSpec.map((axis) => ({
|
|
174
|
-
...axis,
|
|
175
|
-
annotations: {
|
|
176
|
-
...axis.annotations,
|
|
177
|
-
[Annotation.Table.Visibility]: "hidden"
|
|
178
|
-
}
|
|
179
|
-
}))
|
|
180
|
-
}
|
|
181
|
-
}));
|
|
91
|
+
function deriveDataStatus(column, opts) {
|
|
92
|
+
const field = column.getDataStatus();
|
|
93
|
+
if (field === "absent") return "absent";
|
|
94
|
+
if (field === "resolving") return "computing";
|
|
95
|
+
return hasColumnData(column, opts) ? "ready" : "computing";
|
|
182
96
|
}
|
|
183
97
|
/** Derive labels for all table elements: columns via deriveDistinctLabels, axes from label columns. */
|
|
184
98
|
function deriveAllLabels(options) {
|
|
@@ -189,35 +103,7 @@ function deriveAllLabels(options) {
|
|
|
189
103
|
qualifications: c.qualifications
|
|
190
104
|
})), deriveLabelsOptions).reduce((acc, label, index) => (acc[columns[index].id] = label, acc), {});
|
|
191
105
|
}
|
|
192
|
-
/** Derive origin tooltips for columns whose qualifications or linker path carry info. */
|
|
193
|
-
function deriveAllTooltips(options) {
|
|
194
|
-
const { columns } = options;
|
|
195
|
-
const variantCountByOriginal = columns.reduce((acc, c) => {
|
|
196
|
-
return acc.set(getField(c, "originalId") ?? c.id, (acc.get(c.originalId ?? c.id) ?? 0) + 1);
|
|
197
|
-
}, /* @__PURE__ */ new Map());
|
|
198
|
-
const { entries } = columns.reduce(({ entries, variantSeen }, c) => {
|
|
199
|
-
const id = getField(c, "originalId") ?? c.id;
|
|
200
|
-
const variantCount = variantCountByOriginal.get(id);
|
|
201
|
-
const variantIndex = (variantSeen.set(id, (variantSeen.get(id) ?? 0) + 1), variantSeen.get(id));
|
|
202
|
-
entries.push({
|
|
203
|
-
spec: c.spec,
|
|
204
|
-
linkerPath: c.linkerPath,
|
|
205
|
-
qualifications: c.qualifications,
|
|
206
|
-
variantIndex,
|
|
207
|
-
variantCount
|
|
208
|
-
});
|
|
209
|
-
return {
|
|
210
|
-
entries,
|
|
211
|
-
variantSeen
|
|
212
|
-
};
|
|
213
|
-
}, {
|
|
214
|
-
entries: [],
|
|
215
|
-
variantSeen: /* @__PURE__ */ new Map()
|
|
216
|
-
});
|
|
217
|
-
const tooltips = deriveDistinctTooltips(entries);
|
|
218
|
-
return Object.fromEntries(tooltips.flatMap((t, i) => isNil$1(t) ? [] : [[columns[i].id, t]]));
|
|
219
|
-
}
|
|
220
106
|
//#endregion
|
|
221
|
-
export {
|
|
107
|
+
export { buildDataStatusMap, deriveAllLabels, evaluateRules, getEffectiveVisibility, getOrderPriority, isColumnHidden, isColumnOptional, toRuleColumn };
|
|
222
108
|
|
|
223
109
|
//# sourceMappingURL=utils.js.map
|