@platforma-sdk/model 1.79.17 → 1.79.24
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/annotations/converter.cjs +0 -1
- package/dist/annotations/converter.cjs.map +1 -1
- package/dist/annotations/converter.d.ts.map +1 -1
- package/dist/annotations/converter.js.map +1 -1
- package/dist/annotations/index.cjs +2 -1
- package/dist/annotations/index.d.ts +2 -1
- package/dist/annotations/index.js +2 -1
- package/dist/bconfig/index.cjs +5 -2
- package/dist/bconfig/index.d.ts +2 -1
- package/dist/bconfig/index.js +3 -2
- package/dist/bconfig/lambdas.d.ts.map +1 -1
- package/dist/bconfig/normalization.cjs +0 -1
- package/dist/bconfig/normalization.cjs.map +1 -1
- package/dist/bconfig/normalization.d.ts.map +1 -1
- package/dist/bconfig/normalization.js.map +1 -1
- package/dist/bconfig/types.cjs.map +1 -1
- package/dist/bconfig/types.d.ts.map +1 -1
- package/dist/bconfig/types.js.map +1 -1
- package/dist/bconfig/util.d.ts.map +1 -1
- package/dist/bconfig/v3.d.ts.map +1 -1
- package/dist/block_api_v1.d.ts.map +1 -1
- package/dist/block_migrations.cjs +3 -0
- package/dist/block_migrations.cjs.map +1 -1
- package/dist/block_migrations.d.ts +1 -1
- package/dist/block_migrations.d.ts.map +1 -1
- package/dist/block_migrations.js +1 -1
- package/dist/block_migrations.js.map +1 -1
- package/dist/block_model.cjs +1 -1
- package/dist/block_model.cjs.map +1 -1
- package/dist/block_model.d.ts.map +1 -1
- package/dist/block_model.js +1 -0
- package/dist/block_model.js.map +1 -1
- package/dist/block_model_legacy.cjs +1 -1
- package/dist/block_model_legacy.cjs.map +1 -1
- package/dist/block_model_legacy.d.ts.map +1 -1
- package/dist/block_model_legacy.js +1 -0
- package/dist/block_model_legacy.js.map +1 -1
- package/dist/block_state_patch.d.ts.map +1 -1
- package/dist/block_state_util.cjs +2 -0
- package/dist/block_state_util.cjs.map +1 -1
- package/dist/block_state_util.d.ts.map +1 -1
- package/dist/block_state_util.js +2 -0
- package/dist/block_state_util.js.map +1 -1
- package/dist/block_storage.cjs.map +1 -1
- package/dist/block_storage.d.ts +1 -1
- package/dist/block_storage.d.ts.map +1 -1
- package/dist/block_storage.js.map +1 -1
- package/dist/block_storage_callbacks.cjs +1 -1
- package/dist/block_storage_callbacks.cjs.map +1 -1
- package/dist/block_storage_callbacks.js +1 -1
- package/dist/block_storage_callbacks.js.map +1 -1
- package/dist/block_storage_facade.cjs.map +1 -1
- package/dist/block_storage_facade.d.ts.map +1 -1
- package/dist/block_storage_facade.js.map +1 -1
- package/dist/columns/column_collection_builder.cjs +3 -1
- package/dist/columns/column_collection_builder.cjs.map +1 -1
- package/dist/columns/column_collection_builder.d.ts.map +1 -1
- package/dist/columns/column_collection_builder.js +3 -0
- package/dist/columns/column_collection_builder.js.map +1 -1
- package/dist/columns/column_selector.cjs.map +1 -1
- package/dist/columns/column_selector.d.ts.map +1 -1
- package/dist/columns/column_selector.js.map +1 -1
- package/dist/columns/column_snapshot.cjs.map +1 -1
- package/dist/columns/column_snapshot.d.ts.map +1 -1
- package/dist/columns/column_snapshot.js.map +1 -1
- package/dist/columns/column_snapshot_provider.cjs +3 -1
- package/dist/columns/column_snapshot_provider.cjs.map +1 -1
- package/dist/columns/column_snapshot_provider.d.ts.map +1 -1
- package/dist/columns/column_snapshot_provider.js +3 -0
- package/dist/columns/column_snapshot_provider.js.map +1 -1
- package/dist/columns/ctx_column_sources.cjs +1 -1
- package/dist/columns/ctx_column_sources.cjs.map +1 -1
- package/dist/columns/ctx_column_sources.d.ts.map +1 -1
- package/dist/columns/ctx_column_sources.js +1 -0
- package/dist/columns/ctx_column_sources.js.map +1 -1
- package/dist/columns/expand_by_partition.cjs +0 -1
- package/dist/columns/expand_by_partition.cjs.map +1 -1
- package/dist/columns/expand_by_partition.d.ts.map +1 -1
- package/dist/columns/expand_by_partition.js.map +1 -1
- package/dist/columns/index.cjs +20 -6
- package/dist/columns/index.d.ts +2 -1
- package/dist/columns/index.js +7 -6
- package/dist/components/PFrameForGraphs.cjs +3 -2
- 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 +2 -2
- package/dist/components/PFrameForGraphs.js.map +1 -1
- package/dist/components/PlAnnotations/filter.d.ts.map +1 -1
- package/dist/components/PlAnnotations/filters_ui.cjs.map +1 -1
- package/dist/components/PlAnnotations/filters_ui.d.ts.map +1 -1
- package/dist/components/PlAnnotations/filters_ui.js.map +1 -1
- package/dist/components/PlAnnotations/index.d.ts +2 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.cjs +0 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV2.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.cjs +0 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPTableDefV3.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs +0 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV2.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs +1 -2
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js +1 -1
- package/dist/components/PlDataTable/createPlDataTable/createPlDataTableV3.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.cjs +0 -1
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/discoverColumns.js.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/index.cjs +2 -1
- package/dist/components/PlDataTable/createPlDataTable/index.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTable/index.d.ts +1 -1
- package/dist/components/PlDataTable/createPlDataTable/index.d.ts.map +1 -1
- 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 +0 -1
- 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.map +1 -1
- package/dist/components/PlDataTable/createPlDataTableSheet.cjs.map +1 -1
- package/dist/components/PlDataTable/createPlDataTableSheet.d.ts.map +1 -1
- package/dist/components/PlDataTable/createPlDataTableSheet.js.map +1 -1
- package/dist/components/PlDataTable/index.cjs +19 -7
- package/dist/components/PlDataTable/index.d.ts +2 -1
- package/dist/components/PlDataTable/index.js +8 -7
- package/dist/components/PlDataTable/labels.cjs +0 -1
- package/dist/components/PlDataTable/labels.cjs.map +1 -1
- package/dist/components/PlDataTable/labels.js.map +1 -1
- package/dist/components/PlDataTable/state-migration.cjs +0 -1
- package/dist/components/PlDataTable/state-migration.cjs.map +1 -1
- package/dist/components/PlDataTable/state-migration.d.ts.map +1 -1
- package/dist/components/PlDataTable/state-migration.js.map +1 -1
- package/dist/components/PlDataTable/typesV4.d.ts +1 -1
- package/dist/components/PlDataTable/typesV4.d.ts.map +1 -1
- package/dist/components/PlDataTable/typesV5.d.ts +1 -1
- package/dist/components/PlDataTable/typesV5.d.ts.map +1 -1
- package/dist/components/PlDataTable/typesV6.d.ts +1 -1
- package/dist/components/PlDataTable/typesV6.d.ts.map +1 -1
- package/dist/components/PlDataTable/typesV7.d.ts.map +1 -1
- package/dist/components/PlDatasetSelector/build_dataset_options.cjs +0 -1
- package/dist/components/PlDatasetSelector/build_dataset_options.cjs.map +1 -1
- package/dist/components/PlDatasetSelector/build_dataset_options.js.map +1 -1
- package/dist/components/PlDatasetSelector/dataset_selection.cjs.map +1 -1
- package/dist/components/PlDatasetSelector/dataset_selection.d.ts.map +1 -1
- package/dist/components/PlDatasetSelector/dataset_selection.js.map +1 -1
- package/dist/components/PlDatasetSelector/enrichment_discovery.cjs +0 -1
- package/dist/components/PlDatasetSelector/enrichment_discovery.cjs.map +1 -1
- package/dist/components/PlDatasetSelector/enrichment_discovery.js.map +1 -1
- package/dist/components/PlDatasetSelector/filter_discovery.cjs +1 -1
- package/dist/components/PlDatasetSelector/filter_discovery.cjs.map +1 -1
- package/dist/components/PlDatasetSelector/filter_discovery.d.ts.map +1 -1
- package/dist/components/PlDatasetSelector/filter_discovery.js.map +1 -1
- package/dist/components/PlDatasetSelector/index.cjs +9 -3
- package/dist/components/PlDatasetSelector/index.d.ts +2 -1
- package/dist/components/PlDatasetSelector/index.js +4 -3
- package/dist/components/PlMultiSequenceAlignment.cjs +0 -1
- package/dist/components/PlMultiSequenceAlignment.cjs.map +1 -1
- package/dist/components/PlMultiSequenceAlignment.d.ts.map +1 -1
- package/dist/components/PlMultiSequenceAlignment.js.map +1 -1
- package/dist/components/PlSelectionModel.cjs.map +1 -1
- package/dist/components/PlSelectionModel.d.ts.map +1 -1
- package/dist/components/PlSelectionModel.js.map +1 -1
- package/dist/components/index.cjs +44 -15
- package/dist/components/index.d.ts +2 -1
- package/dist/components/index.js +16 -15
- package/dist/config/actions.cjs.map +1 -1
- package/dist/config/actions.d.ts.map +1 -1
- package/dist/config/actions.js.map +1 -1
- package/dist/config/actions_kinds.d.ts.map +1 -1
- package/dist/config/index.cjs +33 -1
- package/dist/config/index.d.ts +2 -1
- package/dist/config/index.js +2 -1
- package/dist/config/model.d.ts.map +1 -1
- package/dist/config/type_engine.d.ts.map +1 -1
- package/dist/config/type_util.d.ts +1 -1
- package/dist/config/type_util.d.ts.map +1 -1
- package/dist/env_value.cjs.map +1 -1
- package/dist/env_value.d.ts.map +1 -1
- package/dist/env_value.js.map +1 -1
- package/dist/filters/converters/filterToQuery.cjs +0 -1
- package/dist/filters/converters/filterToQuery.cjs.map +1 -1
- package/dist/filters/converters/filterToQuery.d.ts.map +1 -1
- package/dist/filters/converters/filterToQuery.js.map +1 -1
- package/dist/filters/converters/filterUiToExpressionImpl.cjs +0 -1
- package/dist/filters/converters/filterUiToExpressionImpl.cjs.map +1 -1
- package/dist/filters/converters/filterUiToExpressionImpl.d.ts.map +1 -1
- package/dist/filters/converters/filterUiToExpressionImpl.js.map +1 -1
- package/dist/filters/converters/index.cjs +5 -2
- package/dist/filters/converters/index.d.ts +2 -1
- package/dist/filters/converters/index.js +3 -2
- package/dist/filters/distill.cjs +1 -2
- package/dist/filters/distill.cjs.map +1 -1
- package/dist/filters/distill.d.ts.map +1 -1
- package/dist/filters/distill.js +1 -1
- package/dist/filters/distill.js.map +1 -1
- package/dist/filters/index.cjs +7 -3
- package/dist/filters/index.d.ts +2 -1
- package/dist/filters/index.js +4 -3
- package/dist/filters/traverse.cjs.map +1 -1
- package/dist/filters/traverse.js.map +1 -1
- package/dist/filters/types.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/internal.cjs +2 -0
- package/dist/internal.cjs.map +1 -1
- package/dist/internal.js +1 -1
- package/dist/internal.js.map +1 -1
- package/dist/labels/derive_distinct_labels.cjs +2 -3
- package/dist/labels/derive_distinct_labels.cjs.map +1 -1
- package/dist/labels/derive_distinct_labels.d.ts.map +1 -1
- package/dist/labels/derive_distinct_labels.js +2 -2
- package/dist/labels/derive_distinct_labels.js.map +1 -1
- package/dist/labels/derive_distinct_tooltips.cjs +0 -1
- package/dist/labels/derive_distinct_tooltips.cjs.map +1 -1
- package/dist/labels/derive_distinct_tooltips.d.ts.map +1 -1
- package/dist/labels/derive_distinct_tooltips.js.map +1 -1
- package/dist/labels/index.cjs +4 -2
- package/dist/labels/index.d.ts +2 -1
- package/dist/labels/index.js +3 -2
- package/dist/package.cjs +1 -1
- package/dist/package.js +1 -1
- package/dist/pframe.cjs +1 -0
- package/dist/pframe.cjs.map +1 -1
- package/dist/pframe.d.ts.map +1 -1
- package/dist/pframe.js +1 -0
- package/dist/pframe.js.map +1 -1
- package/dist/pframe_utils/axes.cjs +0 -1
- package/dist/pframe_utils/axes.cjs.map +1 -1
- 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 +0 -1
- package/dist/pframe_utils/columns.cjs.map +1 -1
- package/dist/pframe_utils/columns.d.ts.map +1 -1
- package/dist/pframe_utils/columns.js.map +1 -1
- package/dist/pframe_utils/index.cjs +3 -2
- 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 +2 -2
- package/dist/pframe_utils/index.js.map +1 -1
- package/dist/platforma.d.ts.map +1 -1
- package/dist/plugin_handle.cjs.map +1 -1
- package/dist/plugin_handle.d.ts.map +1 -1
- package/dist/plugin_handle.js.map +1 -1
- package/dist/plugin_model.cjs +5 -0
- package/dist/plugin_model.cjs.map +1 -1
- package/dist/plugin_model.d.ts +1 -1
- package/dist/plugin_model.d.ts.map +1 -1
- package/dist/plugin_model.js +3 -1
- package/dist/plugin_model.js.map +1 -1
- package/dist/raw_globals.cjs.map +1 -1
- package/dist/raw_globals.d.ts.map +1 -1
- package/dist/raw_globals.js.map +1 -1
- package/dist/ref_util.cjs.map +1 -1
- package/dist/ref_util.d.ts.map +1 -1
- package/dist/ref_util.js.map +1 -1
- package/dist/render/accessor.cjs +2 -1
- package/dist/render/accessor.cjs.map +1 -1
- package/dist/render/accessor.d.ts.map +1 -1
- package/dist/render/accessor.js +2 -0
- package/dist/render/accessor.js.map +1 -1
- package/dist/render/api.cjs +5 -2
- package/dist/render/api.cjs.map +1 -1
- package/dist/render/api.d.ts.map +1 -1
- package/dist/render/api.js +4 -1
- package/dist/render/api.js.map +1 -1
- package/dist/render/future.cjs +2 -0
- package/dist/render/future.cjs.map +1 -1
- package/dist/render/future.d.ts.map +1 -1
- package/dist/render/future.js +2 -0
- package/dist/render/future.js.map +1 -1
- package/dist/render/index.cjs +34 -7
- package/dist/render/index.d.ts +2 -1
- package/dist/render/index.js +8 -7
- package/dist/render/internal.cjs +3 -0
- package/dist/render/internal.cjs.map +1 -1
- package/dist/render/internal.d.ts +1 -1
- package/dist/render/internal.d.ts.map +1 -1
- package/dist/render/internal.js +1 -1
- package/dist/render/internal.js.map +1 -1
- package/dist/render/traversal_ops.d.ts.map +1 -1
- package/dist/render/util/axis_filtering.cjs.map +1 -1
- package/dist/render/util/axis_filtering.d.ts.map +1 -1
- package/dist/render/util/axis_filtering.js.map +1 -1
- package/dist/render/util/column_collection.cjs +2 -1
- package/dist/render/util/column_collection.cjs.map +1 -1
- package/dist/render/util/column_collection.d.ts.map +1 -1
- package/dist/render/util/column_collection.js +1 -0
- package/dist/render/util/column_collection.js.map +1 -1
- package/dist/render/util/index.cjs +23 -4
- package/dist/render/util/index.d.ts +2 -1
- package/dist/render/util/index.js +5 -4
- package/dist/render/util/label.cjs.map +1 -1
- package/dist/render/util/label.d.ts +1 -1
- package/dist/render/util/label.d.ts.map +1 -1
- package/dist/render/util/label.js.map +1 -1
- package/dist/render/util/pcolumn_data.cjs +8 -11
- package/dist/render/util/pcolumn_data.cjs.map +1 -1
- package/dist/render/util/pcolumn_data.d.ts.map +1 -1
- package/dist/render/util/pcolumn_data.js +8 -10
- package/dist/render/util/pcolumn_data.js.map +1 -1
- package/dist/render/util/pframe_upgraders.cjs.map +1 -1
- package/dist/render/util/pframe_upgraders.js.map +1 -1
- package/dist/render/util/split_selectors.d.ts +1 -1
- package/dist/render/util/split_selectors.d.ts.map +1 -1
- package/dist/services/block_services.cjs +0 -1
- package/dist/services/block_services.cjs.map +1 -1
- package/dist/services/block_services.d.ts +1 -3
- package/dist/services/block_services.d.ts.map +1 -1
- package/dist/services/block_services.js.map +1 -1
- package/dist/services/get_services.cjs.map +1 -1
- package/dist/services/get_services.d.ts.map +1 -1
- package/dist/services/get_services.js.map +1 -1
- package/dist/services/index.cjs +8 -3
- package/dist/services/index.d.ts +2 -1
- package/dist/services/index.js +4 -3
- package/dist/services/service_bridge.cjs.map +1 -1
- package/dist/services/service_bridge.d.ts.map +1 -1
- package/dist/services/service_bridge.js.map +1 -1
- package/dist/services/service_resolve.d.ts.map +1 -1
- package/dist/version.cjs.map +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createPTableDefV2.js","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPTableDefV2.ts"],"sourcesContent":["import type {\n PColumn,\n PColumnIdAndSpec,\n PTableSorting,\n PTableDefV2,\n DataInfo,\n PColumnValues,\n} from \"@milaboratories/pl-model-common\";\nimport { getColumnIdAndSpec } from \"@milaboratories/pl-model-common\";\nimport type { PColumnDataUniversal, TreeNodeAccessor } from \"../../../render\";\nimport { isFunction } from \"es-toolkit\";\nimport type { PlDataTableFilters } from \"../typesV7\";\nimport { createPTableDefV3 } from \"./createPTableDefV3\";\n\nexport function createPTableDefV2(params: {\n columns: PColumn<PColumnDataUniversal>[];\n labelColumns: PColumn<PColumnDataUniversal>[];\n coreJoinType: \"inner\" | \"full\";\n filters: null | PlDataTableFilters;\n sorting: PTableSorting[];\n coreColumnPredicate?: (spec: PColumnIdAndSpec) => boolean;\n}): PTableDefV2<PColumn<TreeNodeAccessor | PColumnValues | DataInfo<TreeNodeAccessor>>> {\n let coreColumns = params.columns;\n const secondaryColumns: typeof params.columns = [];\n\n if (isFunction(params.coreColumnPredicate)) {\n coreColumns = [];\n for (const c of params.columns)\n if (params.coreColumnPredicate(getColumnIdAndSpec(c))) coreColumns.push(c);\n else secondaryColumns.push(c);\n }\n\n secondaryColumns.push(...params.labelColumns);\n\n return createPTableDefV3({\n primary: coreColumns.map((column) => ({ column })),\n secondary: secondaryColumns.map((column) => ({ entries: [{ column }] })),\n primaryJoinType: params.coreJoinType,\n filters: params.filters,\n sorting: params.sorting,\n });\n}\n"],"mappings":";;;;AAcA,SAAgB,kBAAkB,QAOsD;CACtF,IAAI,cAAc,OAAO;CACzB,MAAM,mBAA0C,
|
|
1
|
+
{"version":3,"file":"createPTableDefV2.js","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPTableDefV2.ts"],"sourcesContent":["import type {\n PColumn,\n PColumnIdAndSpec,\n PTableSorting,\n PTableDefV2,\n DataInfo,\n PColumnValues,\n} from \"@milaboratories/pl-model-common\";\nimport { getColumnIdAndSpec } from \"@milaboratories/pl-model-common\";\nimport type { PColumnDataUniversal, TreeNodeAccessor } from \"../../../render\";\nimport { isFunction } from \"es-toolkit\";\nimport type { PlDataTableFilters } from \"../typesV7\";\nimport { createPTableDefV3 } from \"./createPTableDefV3\";\n\nexport function createPTableDefV2(params: {\n columns: PColumn<PColumnDataUniversal>[];\n labelColumns: PColumn<PColumnDataUniversal>[];\n coreJoinType: \"inner\" | \"full\";\n filters: null | PlDataTableFilters;\n sorting: PTableSorting[];\n coreColumnPredicate?: (spec: PColumnIdAndSpec) => boolean;\n}): PTableDefV2<PColumn<TreeNodeAccessor | PColumnValues | DataInfo<TreeNodeAccessor>>> {\n let coreColumns = params.columns;\n const secondaryColumns: typeof params.columns = [];\n\n if (isFunction(params.coreColumnPredicate)) {\n coreColumns = [];\n for (const c of params.columns)\n if (params.coreColumnPredicate(getColumnIdAndSpec(c))) coreColumns.push(c);\n else secondaryColumns.push(c);\n }\n\n secondaryColumns.push(...params.labelColumns);\n\n return createPTableDefV3({\n primary: coreColumns.map((column) => ({ column })),\n secondary: secondaryColumns.map((column) => ({ entries: [{ column }] })),\n primaryJoinType: params.coreJoinType,\n filters: params.filters,\n sorting: params.sorting,\n });\n}\n"],"mappings":";;;;AAcA,SAAgB,kBAAkB,QAOsD;CACtF,IAAI,cAAc,OAAO;CACzB,MAAM,mBAA0C,CAAC;CAEjD,IAAI,WAAW,OAAO,mBAAmB,GAAG;EAC1C,cAAc,CAAC;EACf,KAAK,MAAM,KAAK,OAAO,SACrB,IAAI,OAAO,oBAAoB,mBAAmB,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;OACpE,iBAAiB,KAAK,CAAC;CAChC;CAEA,iBAAiB,KAAK,GAAG,OAAO,YAAY;CAE5C,OAAO,kBAAkB;EACvB,SAAS,YAAY,KAAK,YAAY,EAAE,OAAO,EAAE;EACjD,WAAW,iBAAiB,KAAK,YAAY,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE;EACvE,iBAAiB,OAAO;EACxB,SAAS,OAAO;EAChB,SAAS,OAAO;CAClB,CAAC;AACH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createPTableDefV3.cjs","names":["distillFilterSpec","filterSpecToSpecQueryExpr"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPTableDefV3.ts"],"sourcesContent":["import type {\n AxisQualification,\n PColumn,\n PTableColumnId,\n PTableSorting,\n PTableDefV2,\n SingleAxisSelector,\n SpecQuery,\n SpecQueryExpression,\n SpecQueryJoinEntry,\n PObjectId,\n} from \"@milaboratories/pl-model-common\";\nimport { isBooleanExpression } from \"@milaboratories/pl-model-common\";\nimport type { PColumnDataUniversal } from \"../../../render\";\nimport { isNil } from \"es-toolkit\";\nimport type { PlDataTableFilters } from \"../typesV7\";\nimport { distillFilterSpec, filterSpecToSpecQueryExpr } from \"../../../filters\";\nimport type { Nil } from \"@milaboratories/helpers\";\n\n/** Primary side — base row grid. */\nexport type PrimaryEntry<Data> = {\n column: PColumn<Data>;\n};\n\n/** Secondary side leaf — the hit column or a label column, optionally reached via a linker chain. */\nexport type SecondaryEntry<Data> = {\n column: PColumn<Data>;\n /** For hit: `forHit`. For label/direct: omit. Applied to the outermost emitted join entry. */\n qualifications?: AxisQualification[];\n /**\n * Linker chain leading to `column`, ordered from outermost to innermost.\n * When present, the entry is emitted as nested `linkerJoin` operators —\n * one per linker — wrapping the hit column. Binds this hit to this exact\n * chain so the engine cannot reuse a sibling chain that happens to share\n * axis name + domain.\n */\n linkers?: PColumn<Data>[];\n};\n\n/** Secondary group — one join subtree outer-joined onto primary. */\nexport type SecondaryGroup<Data> = {\n entries: SecondaryEntry<Data>[];\n /** Per-variant qualifications applied to the cloned primary anchors on this group's side.\n * Keyed by `PrimaryEntry.column.id`. Omit → base primary used unqualified (labels, non-variant columns). */\n primaryQualifications?: Record<PObjectId, AxisQualification[]>;\n};\n\nexport function createPTableDefV3<Data = PColumnDataUniversal>(params: {\n primaryJoinType: \"inner\" | \"full\";\n primary: PrimaryEntry<Data>[];\n secondary: SecondaryGroup<Data>[];\n filters?: Nil | PlDataTableFilters;\n sorting?: Nil | PTableSorting[];\n}): PTableDefV2<PColumn<Data>> {\n let query: SpecQuery<PColumn<Data>> = {\n type: params.primaryJoinType === \"inner\" ? \"innerJoin\" : \"fullJoin\",\n entries: params.primary.map((a) => toLeaf(a.column, [])),\n };\n\n if (params.secondary.length > 0) {\n query = {\n type: \"outerJoin\",\n primary: {\n entry: query,\n qualifications: params.secondary.flatMap((g) =>\n params.primary.flatMap((p) => g.primaryQualifications?.[p.column.id] ?? []),\n ),\n },\n secondary: params.secondary.flatMap((g) => g.entries.map((e) => toJoinEntry(e))),\n };\n }\n\n if (!isNil(params.filters)) {\n const nonEmpty = distillFilterSpec(params.filters);\n\n if (!isNil(nonEmpty)) {\n const pridicate = filterSpecToSpecQueryExpr(nonEmpty);\n if (!isBooleanExpression(pridicate)) {\n throw new Error(\n `Filter conversion produced a non-boolean expression (got type \"${pridicate.type}\"), expected a boolean predicate for query filtering`,\n );\n }\n query = {\n type: \"filter\",\n input: query,\n predicate: pridicate,\n };\n }\n }\n\n if (!isNil(params.sorting) && params.sorting.length > 0) {\n query = {\n type: \"sort\",\n input: query,\n sortBy: params.sorting.map((s) => ({\n expression: columnIdToExpr(s.column),\n ascending: s.ascending,\n nullsFirst: !s.naAndAbsentAreLeastValues,\n })),\n };\n }\n\n return { query };\n}\n\nfunction columnIdToExpr(col: PTableColumnId): SpecQueryExpression {\n return col.type === \"axis\"\n ? { type: \"axisRef\", value: col.id as SingleAxisSelector }\n : { type: \"columnRef\", value: col.id };\n}\n\nfunction toLeaf<Data>(\n col: PColumn<Data>,\n qs: AxisQualification[],\n): SpecQueryJoinEntry<PColumn<Data>> {\n return {\n entry: { type: \"column\", column: col },\n qualifications: qs,\n };\n}\n\nfunction toJoinEntry<Data>(e: SecondaryEntry<Data>): SpecQueryJoinEntry<PColumn<Data>> {\n const qs = e.qualifications ?? [];\n if (isNil(e.linkers) || e.linkers.length === 0) return toLeaf(e.column, qs);\n\n const folded = e.linkers.reduceRight<SpecQueryJoinEntry<PColumn<Data>>>(\n (inner, linker) => ({\n entry: { type: \"linkerJoin\", linker: { column: linker }, secondary: [inner] },\n qualifications: [],\n }),\n toLeaf(e.column, []),\n );\n return { ...folded, qualifications: qs };\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"createPTableDefV3.cjs","names":["distillFilterSpec","filterSpecToSpecQueryExpr"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPTableDefV3.ts"],"sourcesContent":["import type {\n AxisQualification,\n PColumn,\n PTableColumnId,\n PTableSorting,\n PTableDefV2,\n SingleAxisSelector,\n SpecQuery,\n SpecQueryExpression,\n SpecQueryJoinEntry,\n PObjectId,\n} from \"@milaboratories/pl-model-common\";\nimport { isBooleanExpression } from \"@milaboratories/pl-model-common\";\nimport type { PColumnDataUniversal } from \"../../../render\";\nimport { isNil } from \"es-toolkit\";\nimport type { PlDataTableFilters } from \"../typesV7\";\nimport { distillFilterSpec, filterSpecToSpecQueryExpr } from \"../../../filters\";\nimport type { Nil } from \"@milaboratories/helpers\";\n\n/** Primary side — base row grid. */\nexport type PrimaryEntry<Data> = {\n column: PColumn<Data>;\n};\n\n/** Secondary side leaf — the hit column or a label column, optionally reached via a linker chain. */\nexport type SecondaryEntry<Data> = {\n column: PColumn<Data>;\n /** For hit: `forHit`. For label/direct: omit. Applied to the outermost emitted join entry. */\n qualifications?: AxisQualification[];\n /**\n * Linker chain leading to `column`, ordered from outermost to innermost.\n * When present, the entry is emitted as nested `linkerJoin` operators —\n * one per linker — wrapping the hit column. Binds this hit to this exact\n * chain so the engine cannot reuse a sibling chain that happens to share\n * axis name + domain.\n */\n linkers?: PColumn<Data>[];\n};\n\n/** Secondary group — one join subtree outer-joined onto primary. */\nexport type SecondaryGroup<Data> = {\n entries: SecondaryEntry<Data>[];\n /** Per-variant qualifications applied to the cloned primary anchors on this group's side.\n * Keyed by `PrimaryEntry.column.id`. Omit → base primary used unqualified (labels, non-variant columns). */\n primaryQualifications?: Record<PObjectId, AxisQualification[]>;\n};\n\nexport function createPTableDefV3<Data = PColumnDataUniversal>(params: {\n primaryJoinType: \"inner\" | \"full\";\n primary: PrimaryEntry<Data>[];\n secondary: SecondaryGroup<Data>[];\n filters?: Nil | PlDataTableFilters;\n sorting?: Nil | PTableSorting[];\n}): PTableDefV2<PColumn<Data>> {\n let query: SpecQuery<PColumn<Data>> = {\n type: params.primaryJoinType === \"inner\" ? \"innerJoin\" : \"fullJoin\",\n entries: params.primary.map((a) => toLeaf(a.column, [])),\n };\n\n if (params.secondary.length > 0) {\n query = {\n type: \"outerJoin\",\n primary: {\n entry: query,\n qualifications: params.secondary.flatMap((g) =>\n params.primary.flatMap((p) => g.primaryQualifications?.[p.column.id] ?? []),\n ),\n },\n secondary: params.secondary.flatMap((g) => g.entries.map((e) => toJoinEntry(e))),\n };\n }\n\n if (!isNil(params.filters)) {\n const nonEmpty = distillFilterSpec(params.filters);\n\n if (!isNil(nonEmpty)) {\n const pridicate = filterSpecToSpecQueryExpr(nonEmpty);\n if (!isBooleanExpression(pridicate)) {\n throw new Error(\n `Filter conversion produced a non-boolean expression (got type \"${pridicate.type}\"), expected a boolean predicate for query filtering`,\n );\n }\n query = {\n type: \"filter\",\n input: query,\n predicate: pridicate,\n };\n }\n }\n\n if (!isNil(params.sorting) && params.sorting.length > 0) {\n query = {\n type: \"sort\",\n input: query,\n sortBy: params.sorting.map((s) => ({\n expression: columnIdToExpr(s.column),\n ascending: s.ascending,\n nullsFirst: !s.naAndAbsentAreLeastValues,\n })),\n };\n }\n\n return { query };\n}\n\nfunction columnIdToExpr(col: PTableColumnId): SpecQueryExpression {\n return col.type === \"axis\"\n ? { type: \"axisRef\", value: col.id as SingleAxisSelector }\n : { type: \"columnRef\", value: col.id };\n}\n\nfunction toLeaf<Data>(\n col: PColumn<Data>,\n qs: AxisQualification[],\n): SpecQueryJoinEntry<PColumn<Data>> {\n return {\n entry: { type: \"column\", column: col },\n qualifications: qs,\n };\n}\n\nfunction toJoinEntry<Data>(e: SecondaryEntry<Data>): SpecQueryJoinEntry<PColumn<Data>> {\n const qs = e.qualifications ?? [];\n if (isNil(e.linkers) || e.linkers.length === 0) return toLeaf(e.column, qs);\n\n const folded = e.linkers.reduceRight<SpecQueryJoinEntry<PColumn<Data>>>(\n (inner, linker) => ({\n entry: { type: \"linkerJoin\", linker: { column: linker }, secondary: [inner] },\n qualifications: [],\n }),\n toLeaf(e.column, []),\n );\n return { ...folded, qualifications: qs };\n}\n"],"mappings":";;;;;;AA+CA,SAAgB,kBAA+C,QAMhC;CAC7B,IAAI,QAAkC;EACpC,MAAM,OAAO,oBAAoB,UAAU,cAAc;EACzD,SAAS,OAAO,QAAQ,KAAK,MAAM,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;CACzD;CAEA,IAAI,OAAO,UAAU,SAAS,GAC5B,QAAQ;EACN,MAAM;EACN,SAAS;GACP,OAAO;GACP,gBAAgB,OAAO,UAAU,SAAS,MACxC,OAAO,QAAQ,SAAS,MAAM,EAAE,wBAAwB,EAAE,OAAO,OAAO,CAAC,CAAC,CAC5E;EACF;EACA,WAAW,OAAO,UAAU,SAAS,MAAM,EAAE,QAAQ,KAAK,MAAM,YAAY,CAAC,CAAC,CAAC;CACjF;CAGF,IAAI,EAAA,GAAA,WAAA,MAAA,CAAO,OAAO,OAAO,GAAG;EAC1B,MAAM,WAAWA,gBAAAA,kBAAkB,OAAO,OAAO;EAEjD,IAAI,EAAA,GAAA,WAAA,MAAA,CAAO,QAAQ,GAAG;GACpB,MAAM,YAAYC,sBAAAA,0BAA0B,QAAQ;GACpD,IAAI,EAAA,GAAA,gCAAA,oBAAA,CAAqB,SAAS,GAChC,MAAM,IAAI,MACR,kEAAkE,UAAU,KAAK,qDACnF;GAEF,QAAQ;IACN,MAAM;IACN,OAAO;IACP,WAAW;GACb;EACF;CACF;CAEA,IAAI,EAAA,GAAA,WAAA,MAAA,CAAO,OAAO,OAAO,KAAK,OAAO,QAAQ,SAAS,GACpD,QAAQ;EACN,MAAM;EACN,OAAO;EACP,QAAQ,OAAO,QAAQ,KAAK,OAAO;GACjC,YAAY,eAAe,EAAE,MAAM;GACnC,WAAW,EAAE;GACb,YAAY,CAAC,EAAE;EACjB,EAAE;CACJ;CAGF,OAAO,EAAE,MAAM;AACjB;AAEA,SAAS,eAAe,KAA0C;CAChE,OAAO,IAAI,SAAS,SAChB;EAAE,MAAM;EAAW,OAAO,IAAI;CAAyB,IACvD;EAAE,MAAM;EAAa,OAAO,IAAI;CAAG;AACzC;AAEA,SAAS,OACP,KACA,IACmC;CACnC,OAAO;EACL,OAAO;GAAE,MAAM;GAAU,QAAQ;EAAI;EACrC,gBAAgB;CAClB;AACF;AAEA,SAAS,YAAkB,GAA4D;CACrF,MAAM,KAAK,EAAE,kBAAkB,CAAC;CAChC,KAAA,GAAA,WAAA,MAAA,CAAU,EAAE,OAAO,KAAK,EAAE,QAAQ,WAAW,GAAG,OAAO,OAAO,EAAE,QAAQ,EAAE;CAS1E,OAAO;EAAE,GAPM,EAAE,QAAQ,aACtB,OAAO,YAAY;GAClB,OAAO;IAAE,MAAM;IAAc,QAAQ,EAAE,QAAQ,OAAO;IAAG,WAAW,CAAC,KAAK;GAAE;GAC5E,gBAAgB,CAAC;EACnB,IACA,OAAO,EAAE,QAAQ,CAAC,CAAC,CAEJ;EAAG,gBAAgB;CAAG;AACzC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createPTableDefV3.js","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPTableDefV3.ts"],"sourcesContent":["import type {\n AxisQualification,\n PColumn,\n PTableColumnId,\n PTableSorting,\n PTableDefV2,\n SingleAxisSelector,\n SpecQuery,\n SpecQueryExpression,\n SpecQueryJoinEntry,\n PObjectId,\n} from \"@milaboratories/pl-model-common\";\nimport { isBooleanExpression } from \"@milaboratories/pl-model-common\";\nimport type { PColumnDataUniversal } from \"../../../render\";\nimport { isNil } from \"es-toolkit\";\nimport type { PlDataTableFilters } from \"../typesV7\";\nimport { distillFilterSpec, filterSpecToSpecQueryExpr } from \"../../../filters\";\nimport type { Nil } from \"@milaboratories/helpers\";\n\n/** Primary side — base row grid. */\nexport type PrimaryEntry<Data> = {\n column: PColumn<Data>;\n};\n\n/** Secondary side leaf — the hit column or a label column, optionally reached via a linker chain. */\nexport type SecondaryEntry<Data> = {\n column: PColumn<Data>;\n /** For hit: `forHit`. For label/direct: omit. Applied to the outermost emitted join entry. */\n qualifications?: AxisQualification[];\n /**\n * Linker chain leading to `column`, ordered from outermost to innermost.\n * When present, the entry is emitted as nested `linkerJoin` operators —\n * one per linker — wrapping the hit column. Binds this hit to this exact\n * chain so the engine cannot reuse a sibling chain that happens to share\n * axis name + domain.\n */\n linkers?: PColumn<Data>[];\n};\n\n/** Secondary group — one join subtree outer-joined onto primary. */\nexport type SecondaryGroup<Data> = {\n entries: SecondaryEntry<Data>[];\n /** Per-variant qualifications applied to the cloned primary anchors on this group's side.\n * Keyed by `PrimaryEntry.column.id`. Omit → base primary used unqualified (labels, non-variant columns). */\n primaryQualifications?: Record<PObjectId, AxisQualification[]>;\n};\n\nexport function createPTableDefV3<Data = PColumnDataUniversal>(params: {\n primaryJoinType: \"inner\" | \"full\";\n primary: PrimaryEntry<Data>[];\n secondary: SecondaryGroup<Data>[];\n filters?: Nil | PlDataTableFilters;\n sorting?: Nil | PTableSorting[];\n}): PTableDefV2<PColumn<Data>> {\n let query: SpecQuery<PColumn<Data>> = {\n type: params.primaryJoinType === \"inner\" ? \"innerJoin\" : \"fullJoin\",\n entries: params.primary.map((a) => toLeaf(a.column, [])),\n };\n\n if (params.secondary.length > 0) {\n query = {\n type: \"outerJoin\",\n primary: {\n entry: query,\n qualifications: params.secondary.flatMap((g) =>\n params.primary.flatMap((p) => g.primaryQualifications?.[p.column.id] ?? []),\n ),\n },\n secondary: params.secondary.flatMap((g) => g.entries.map((e) => toJoinEntry(e))),\n };\n }\n\n if (!isNil(params.filters)) {\n const nonEmpty = distillFilterSpec(params.filters);\n\n if (!isNil(nonEmpty)) {\n const pridicate = filterSpecToSpecQueryExpr(nonEmpty);\n if (!isBooleanExpression(pridicate)) {\n throw new Error(\n `Filter conversion produced a non-boolean expression (got type \"${pridicate.type}\"), expected a boolean predicate for query filtering`,\n );\n }\n query = {\n type: \"filter\",\n input: query,\n predicate: pridicate,\n };\n }\n }\n\n if (!isNil(params.sorting) && params.sorting.length > 0) {\n query = {\n type: \"sort\",\n input: query,\n sortBy: params.sorting.map((s) => ({\n expression: columnIdToExpr(s.column),\n ascending: s.ascending,\n nullsFirst: !s.naAndAbsentAreLeastValues,\n })),\n };\n }\n\n return { query };\n}\n\nfunction columnIdToExpr(col: PTableColumnId): SpecQueryExpression {\n return col.type === \"axis\"\n ? { type: \"axisRef\", value: col.id as SingleAxisSelector }\n : { type: \"columnRef\", value: col.id };\n}\n\nfunction toLeaf<Data>(\n col: PColumn<Data>,\n qs: AxisQualification[],\n): SpecQueryJoinEntry<PColumn<Data>> {\n return {\n entry: { type: \"column\", column: col },\n qualifications: qs,\n };\n}\n\nfunction toJoinEntry<Data>(e: SecondaryEntry<Data>): SpecQueryJoinEntry<PColumn<Data>> {\n const qs = e.qualifications ?? [];\n if (isNil(e.linkers) || e.linkers.length === 0) return toLeaf(e.column, qs);\n\n const folded = e.linkers.reduceRight<SpecQueryJoinEntry<PColumn<Data>>>(\n (inner, linker) => ({\n entry: { type: \"linkerJoin\", linker: { column: linker }, secondary: [inner] },\n qualifications: [],\n }),\n toLeaf(e.column, []),\n );\n return { ...folded, qualifications: qs };\n}\n"],"mappings":";;;;;;AA+CA,SAAgB,kBAA+C,QAMhC;CAC7B,IAAI,QAAkC;EACpC,MAAM,OAAO,oBAAoB,UAAU,cAAc;EACzD,SAAS,OAAO,QAAQ,KAAK,MAAM,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"createPTableDefV3.js","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPTableDefV3.ts"],"sourcesContent":["import type {\n AxisQualification,\n PColumn,\n PTableColumnId,\n PTableSorting,\n PTableDefV2,\n SingleAxisSelector,\n SpecQuery,\n SpecQueryExpression,\n SpecQueryJoinEntry,\n PObjectId,\n} from \"@milaboratories/pl-model-common\";\nimport { isBooleanExpression } from \"@milaboratories/pl-model-common\";\nimport type { PColumnDataUniversal } from \"../../../render\";\nimport { isNil } from \"es-toolkit\";\nimport type { PlDataTableFilters } from \"../typesV7\";\nimport { distillFilterSpec, filterSpecToSpecQueryExpr } from \"../../../filters\";\nimport type { Nil } from \"@milaboratories/helpers\";\n\n/** Primary side — base row grid. */\nexport type PrimaryEntry<Data> = {\n column: PColumn<Data>;\n};\n\n/** Secondary side leaf — the hit column or a label column, optionally reached via a linker chain. */\nexport type SecondaryEntry<Data> = {\n column: PColumn<Data>;\n /** For hit: `forHit`. For label/direct: omit. Applied to the outermost emitted join entry. */\n qualifications?: AxisQualification[];\n /**\n * Linker chain leading to `column`, ordered from outermost to innermost.\n * When present, the entry is emitted as nested `linkerJoin` operators —\n * one per linker — wrapping the hit column. Binds this hit to this exact\n * chain so the engine cannot reuse a sibling chain that happens to share\n * axis name + domain.\n */\n linkers?: PColumn<Data>[];\n};\n\n/** Secondary group — one join subtree outer-joined onto primary. */\nexport type SecondaryGroup<Data> = {\n entries: SecondaryEntry<Data>[];\n /** Per-variant qualifications applied to the cloned primary anchors on this group's side.\n * Keyed by `PrimaryEntry.column.id`. Omit → base primary used unqualified (labels, non-variant columns). */\n primaryQualifications?: Record<PObjectId, AxisQualification[]>;\n};\n\nexport function createPTableDefV3<Data = PColumnDataUniversal>(params: {\n primaryJoinType: \"inner\" | \"full\";\n primary: PrimaryEntry<Data>[];\n secondary: SecondaryGroup<Data>[];\n filters?: Nil | PlDataTableFilters;\n sorting?: Nil | PTableSorting[];\n}): PTableDefV2<PColumn<Data>> {\n let query: SpecQuery<PColumn<Data>> = {\n type: params.primaryJoinType === \"inner\" ? \"innerJoin\" : \"fullJoin\",\n entries: params.primary.map((a) => toLeaf(a.column, [])),\n };\n\n if (params.secondary.length > 0) {\n query = {\n type: \"outerJoin\",\n primary: {\n entry: query,\n qualifications: params.secondary.flatMap((g) =>\n params.primary.flatMap((p) => g.primaryQualifications?.[p.column.id] ?? []),\n ),\n },\n secondary: params.secondary.flatMap((g) => g.entries.map((e) => toJoinEntry(e))),\n };\n }\n\n if (!isNil(params.filters)) {\n const nonEmpty = distillFilterSpec(params.filters);\n\n if (!isNil(nonEmpty)) {\n const pridicate = filterSpecToSpecQueryExpr(nonEmpty);\n if (!isBooleanExpression(pridicate)) {\n throw new Error(\n `Filter conversion produced a non-boolean expression (got type \"${pridicate.type}\"), expected a boolean predicate for query filtering`,\n );\n }\n query = {\n type: \"filter\",\n input: query,\n predicate: pridicate,\n };\n }\n }\n\n if (!isNil(params.sorting) && params.sorting.length > 0) {\n query = {\n type: \"sort\",\n input: query,\n sortBy: params.sorting.map((s) => ({\n expression: columnIdToExpr(s.column),\n ascending: s.ascending,\n nullsFirst: !s.naAndAbsentAreLeastValues,\n })),\n };\n }\n\n return { query };\n}\n\nfunction columnIdToExpr(col: PTableColumnId): SpecQueryExpression {\n return col.type === \"axis\"\n ? { type: \"axisRef\", value: col.id as SingleAxisSelector }\n : { type: \"columnRef\", value: col.id };\n}\n\nfunction toLeaf<Data>(\n col: PColumn<Data>,\n qs: AxisQualification[],\n): SpecQueryJoinEntry<PColumn<Data>> {\n return {\n entry: { type: \"column\", column: col },\n qualifications: qs,\n };\n}\n\nfunction toJoinEntry<Data>(e: SecondaryEntry<Data>): SpecQueryJoinEntry<PColumn<Data>> {\n const qs = e.qualifications ?? [];\n if (isNil(e.linkers) || e.linkers.length === 0) return toLeaf(e.column, qs);\n\n const folded = e.linkers.reduceRight<SpecQueryJoinEntry<PColumn<Data>>>(\n (inner, linker) => ({\n entry: { type: \"linkerJoin\", linker: { column: linker }, secondary: [inner] },\n qualifications: [],\n }),\n toLeaf(e.column, []),\n );\n return { ...folded, qualifications: qs };\n}\n"],"mappings":";;;;;;AA+CA,SAAgB,kBAA+C,QAMhC;CAC7B,IAAI,QAAkC;EACpC,MAAM,OAAO,oBAAoB,UAAU,cAAc;EACzD,SAAS,OAAO,QAAQ,KAAK,MAAM,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;CACzD;CAEA,IAAI,OAAO,UAAU,SAAS,GAC5B,QAAQ;EACN,MAAM;EACN,SAAS;GACP,OAAO;GACP,gBAAgB,OAAO,UAAU,SAAS,MACxC,OAAO,QAAQ,SAAS,MAAM,EAAE,wBAAwB,EAAE,OAAO,OAAO,CAAC,CAAC,CAC5E;EACF;EACA,WAAW,OAAO,UAAU,SAAS,MAAM,EAAE,QAAQ,KAAK,MAAM,YAAY,CAAC,CAAC,CAAC;CACjF;CAGF,IAAI,CAAC,MAAM,OAAO,OAAO,GAAG;EAC1B,MAAM,WAAW,kBAAkB,OAAO,OAAO;EAEjD,IAAI,CAAC,MAAM,QAAQ,GAAG;GACpB,MAAM,YAAY,0BAA0B,QAAQ;GACpD,IAAI,CAAC,oBAAoB,SAAS,GAChC,MAAM,IAAI,MACR,kEAAkE,UAAU,KAAK,qDACnF;GAEF,QAAQ;IACN,MAAM;IACN,OAAO;IACP,WAAW;GACb;EACF;CACF;CAEA,IAAI,CAAC,MAAM,OAAO,OAAO,KAAK,OAAO,QAAQ,SAAS,GACpD,QAAQ;EACN,MAAM;EACN,OAAO;EACP,QAAQ,OAAO,QAAQ,KAAK,OAAO;GACjC,YAAY,eAAe,EAAE,MAAM;GACnC,WAAW,EAAE;GACb,YAAY,CAAC,EAAE;EACjB,EAAE;CACJ;CAGF,OAAO,EAAE,MAAM;AACjB;AAEA,SAAS,eAAe,KAA0C;CAChE,OAAO,IAAI,SAAS,SAChB;EAAE,MAAM;EAAW,OAAO,IAAI;CAAyB,IACvD;EAAE,MAAM;EAAa,OAAO,IAAI;CAAG;AACzC;AAEA,SAAS,OACP,KACA,IACmC;CACnC,OAAO;EACL,OAAO;GAAE,MAAM;GAAU,QAAQ;EAAI;EACrC,gBAAgB;CAClB;AACF;AAEA,SAAS,YAAkB,GAA4D;CACrF,MAAM,KAAK,EAAE,kBAAkB,CAAC;CAChC,IAAI,MAAM,EAAE,OAAO,KAAK,EAAE,QAAQ,WAAW,GAAG,OAAO,OAAO,EAAE,QAAQ,EAAE;CAS1E,OAAO;EAAE,GAPM,EAAE,QAAQ,aACtB,OAAO,YAAY;GAClB,OAAO;IAAE,MAAM;IAAc,QAAQ,EAAE,QAAQ,OAAO;IAAG,WAAW,CAAC,KAAK;GAAE;GAC5E,gBAAgB,CAAC;EACnB,IACA,OAAO,EAAE,QAAQ,CAAC,CAAC,CAEJ;EAAG,gBAAgB;CAAG;AACzC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
require("../../../_virtual/_rolldown/runtime.cjs");
|
|
2
1
|
const require_label = require("../../../render/util/label.cjs");
|
|
3
2
|
const require_pcolumn_data = require("../../../render/util/pcolumn_data.cjs");
|
|
4
3
|
const require_column_collection = require("../../../render/util/column_collection.cjs");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createPlDataTableV2.cjs","names":["upgradePlDataTableStateV2","getMatchingLabelColumns","deriveLabels","identity","Annotation","collectFilterSpecColumns","createPTableDefV2","isColumnOptional","getColumnIdAndSpec","allPColumnsReady","PColumnCollection","PColumnName"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts"],"sourcesContent":["import type {\n AxisId,\n PColumn,\n PObjectId,\n PTableColumnId,\n PTableColumnIdAxis,\n PTableColumnIdColumn,\n CanonicalizedJson,\n} from \"@milaboratories/pl-model-common\";\nimport {\n Annotation,\n canonicalizeJson,\n getAxisId,\n getColumnIdAndSpec,\n isLinkerColumn,\n uniqueBy,\n parseJson,\n PColumnName,\n} from \"@milaboratories/pl-model-common\";\nimport type {\n AxisLabelProvider,\n ColumnProvider,\n PColumnDataUniversal,\n RenderCtxBase,\n} from \"../../../render\";\nimport { allPColumnsReady, deriveLabels, PColumnCollection } from \"../../../render\";\nimport { identity } from \"es-toolkit\";\nimport type { CreatePlDataTableOps, PlDataTableModel } from \"../typesV7\";\nimport { upgradePlDataTableStateV2 } from \"../state-migration\";\nimport type { PlDataTableStateV2 } from \"../state-migration\";\nimport { getMatchingLabelColumns } from \"../labels\";\nimport { collectFilterSpecColumns } from \"../../../filters/traverse\";\nimport { isEmpty } from \"es-toolkit/compat\";\nimport { createPTableDefV2 } from \"./createPTableDefV2\";\nimport { isColumnOptional } from \"./utils\";\n\n/**\n * @deprecated This function is deprecated and will be removed in future. Please migrate to createPlDataTable with v3 options for improved column discovery and display configuration. See createPlDataTableOptionsV3 for details on the new options format and migration guidance.\n */\nexport type createPlDataTableOptionsV2 = {\n columns: PColumn<PColumnDataUniversal>[];\n tableState?: PlDataTableStateV2;\n options?: CreatePlDataTableOps;\n};\n\n/**\n * Create p-table spec and handle given ui table state\n *\n * @deprecated This version of createPlDataTable is deprecated and will be removed in future. Please migrate to v3 by switching to the new options format and providing necessary information for column discovery and display configuration. See createPlDataTableOptionsV3 for details.\n * @param ctx context\n * @param columns column list\n * @param tableState table ui state\n * @returns PlAgDataTableV2 table source\n */\nexport function createPlDataTableV2<A, U>(\n ctx: RenderCtxBase<A, U>,\n columns: createPlDataTableOptionsV2[\"columns\"],\n tableState?: createPlDataTableOptionsV2[\"tableState\"],\n options?: createPlDataTableOptionsV2[\"options\"],\n): PlDataTableModel | undefined {\n if (columns.length === 0) return undefined;\n\n const tableStateNormalized = upgradePlDataTableStateV2(tableState);\n const allLabelColumns = getAllLabelColumns(ctx.resultPool) ?? [];\n\n let fullLabelColumns = getMatchingLabelColumns(columns, allLabelColumns);\n fullLabelColumns = deriveLabels(fullLabelColumns, identity, { includeNativeLabel: true }).map(\n (v) => {\n return {\n ...v.value,\n spec: {\n ...v.value.spec,\n annotations: {\n ...v.value.spec.annotations,\n [Annotation.Label]: v.label,\n },\n },\n };\n },\n );\n\n const fullColumns = [...columns, ...fullLabelColumns];\n\n const fullColumnsAxes = uniqueBy(\n fullColumns.flatMap((c) => c.spec.axesSpec.map((a) => getAxisId(a))),\n (a) => canonicalizeJson<AxisId>(a),\n );\n const fullColumnsIds: PTableColumnId[] = [\n ...fullColumnsAxes.map((a) => ({ type: \"axis\", id: a }) satisfies PTableColumnIdAxis),\n ...fullColumns.map((c) => ({ type: \"column\", id: c.id }) satisfies PTableColumnIdColumn),\n ];\n const fullColumnsIdsSet = new Set(fullColumnsIds.map((c) => canonicalizeJson<PTableColumnId>(c)));\n const isValidColumnId = (id: string): boolean =>\n fullColumnsIdsSet.has(id as CanonicalizedJson<PTableColumnId>);\n\n // -- Filtering validation --\n const filters = tableStateNormalized.pTableParams.filters;\n const defaultFilters = options?.filters ?? undefined;\n const filterColumns = filters !== null ? collectFilterSpecColumns(filters) : [];\n const firstInvalidFilterColumn = filterColumns.find((col) => !isValidColumnId(col));\n if (firstInvalidFilterColumn)\n throw new Error(\n `Invalid filter column ${firstInvalidFilterColumn}: column reference does not match the table columns`,\n );\n const defaultFilterColumns =\n defaultFilters !== undefined ? collectFilterSpecColumns(defaultFilters) : [];\n const firstInvalidDefaultFilterColumn = defaultFilterColumns.find((col) => !isValidColumnId(col));\n if (firstInvalidDefaultFilterColumn)\n throw new Error(\n `Invalid default filter column ${firstInvalidDefaultFilterColumn}: column reference does not match the table columns`,\n );\n\n // -- Sorting validation --\n const userSorting = tableStateNormalized.pTableParams.sorting;\n const sorting = (isEmpty(userSorting) ? options?.sorting : userSorting) ?? [];\n const firstInvalidSortingColumn = sorting.find(\n (s) => !isValidColumnId(canonicalizeJson<PTableColumnId>(s.column)),\n );\n if (firstInvalidSortingColumn)\n throw new Error(\n `Invalid sorting column ${JSON.stringify(firstInvalidSortingColumn.column)}: column reference does not match the table columns`,\n );\n\n const coreJoinType = options?.coreJoinType ?? \"full\";\n const fullDef = createPTableDefV2({\n columns,\n labelColumns: fullLabelColumns,\n coreJoinType,\n filters,\n sorting,\n coreColumnPredicate: options?.coreColumnPredicate,\n });\n\n const fullHandle = ctx.createPTableV2(fullDef);\n const pframeHandle = ctx.createPFrame(fullColumns);\n if (!fullHandle || !pframeHandle) return undefined;\n\n const hiddenColumns = new Set<PObjectId>(\n ((): PObjectId[] => {\n // Inner join works as a filter - all columns must be present\n if (coreJoinType === \"inner\") return [];\n\n const hiddenColIds = tableStateNormalized.pTableParams.hiddenColIds;\n if (hiddenColIds !== null) {\n return hiddenColIds\n .filter((s): s is PTableColumnIdColumn => s.type === \"column\")\n .map((s) => s.id);\n }\n\n return columns.filter((c) => isColumnOptional(c.spec)).map((c) => c.id);\n })(),\n );\n\n // Preserve linker columns\n columns.filter((c) => isLinkerColumn(c.spec)).forEach((c) => hiddenColumns.delete(c.id));\n\n // Preserve core columns as they change the shape of join.\n const coreColumnPredicate = options?.coreColumnPredicate;\n if (coreColumnPredicate) {\n const coreColumns = columns.flatMap((c) =>\n coreColumnPredicate(getColumnIdAndSpec(c)) ? [c.id] : [],\n );\n coreColumns.forEach((c) => hiddenColumns.delete(c));\n }\n\n // Preserve sorted columns from being hidden\n sorting\n .map((s) => s.column)\n .filter((c): c is PTableColumnIdColumn => c.type === \"column\")\n .forEach((c) => hiddenColumns.delete(c.id));\n\n // Preserve filter columns from being hidden\n if (filters) {\n collectFilterSpecColumns(filters)\n .flatMap((c) => {\n const obj = parseJson(c);\n return obj.type === \"column\" ? [obj.id] : [];\n })\n .forEach((c) => hiddenColumns.delete(c));\n }\n\n const visibleColumns = columns.filter((c) => !hiddenColumns.has(c.id));\n const visibleLabelColumns = getMatchingLabelColumns(\n visibleColumns.map(getColumnIdAndSpec),\n allLabelColumns,\n );\n\n // if at least one column is not yet computed, we can't show the table\n if (!allPColumnsReady([...visibleColumns, ...visibleLabelColumns])) return undefined;\n\n const visibleDef = createPTableDefV2({\n columns: visibleColumns,\n labelColumns: visibleLabelColumns,\n coreJoinType,\n filters,\n sorting,\n coreColumnPredicate,\n });\n const visibleHandle = ctx.createPTableV2(visibleDef);\n\n if (!visibleHandle) return undefined;\n\n return {\n sourceId: tableStateNormalized.pTableParams.sourceId,\n fullTableHandle: fullHandle,\n fullPframeHandle: pframeHandle,\n visibleTableHandle: visibleHandle,\n defaultFilters,\n } satisfies PlDataTableModel;\n}\n\nfunction getAllLabelColumns(\n resultPool: AxisLabelProvider & ColumnProvider,\n): PColumn<PColumnDataUniversal>[] | undefined {\n return new PColumnCollection()\n .addAxisLabelProvider(resultPool)\n .addColumnProvider(resultPool)\n .getColumns(\n {\n name: PColumnName.Label,\n axes: [{}], // exactly one axis\n },\n { dontWaitAllData: true, overrideLabelAnnotation: false },\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"createPlDataTableV2.cjs","names":["upgradePlDataTableStateV2","getMatchingLabelColumns","deriveLabels","identity","Annotation","collectFilterSpecColumns","createPTableDefV2","isColumnOptional","getColumnIdAndSpec","allPColumnsReady","PColumnCollection","PColumnName"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts"],"sourcesContent":["import type {\n AxisId,\n PColumn,\n PObjectId,\n PTableColumnId,\n PTableColumnIdAxis,\n PTableColumnIdColumn,\n CanonicalizedJson,\n} from \"@milaboratories/pl-model-common\";\nimport {\n Annotation,\n canonicalizeJson,\n getAxisId,\n getColumnIdAndSpec,\n isLinkerColumn,\n uniqueBy,\n parseJson,\n PColumnName,\n} from \"@milaboratories/pl-model-common\";\nimport type {\n AxisLabelProvider,\n ColumnProvider,\n PColumnDataUniversal,\n RenderCtxBase,\n} from \"../../../render\";\nimport { allPColumnsReady, deriveLabels, PColumnCollection } from \"../../../render\";\nimport { identity } from \"es-toolkit\";\nimport type { CreatePlDataTableOps, PlDataTableModel } from \"../typesV7\";\nimport { upgradePlDataTableStateV2 } from \"../state-migration\";\nimport type { PlDataTableStateV2 } from \"../state-migration\";\nimport { getMatchingLabelColumns } from \"../labels\";\nimport { collectFilterSpecColumns } from \"../../../filters/traverse\";\nimport { isEmpty } from \"es-toolkit/compat\";\nimport { createPTableDefV2 } from \"./createPTableDefV2\";\nimport { isColumnOptional } from \"./utils\";\n\n/**\n * @deprecated This function is deprecated and will be removed in future. Please migrate to createPlDataTable with v3 options for improved column discovery and display configuration. See createPlDataTableOptionsV3 for details on the new options format and migration guidance.\n */\nexport type createPlDataTableOptionsV2 = {\n columns: PColumn<PColumnDataUniversal>[];\n tableState?: PlDataTableStateV2;\n options?: CreatePlDataTableOps;\n};\n\n/**\n * Create p-table spec and handle given ui table state\n *\n * @deprecated This version of createPlDataTable is deprecated and will be removed in future. Please migrate to v3 by switching to the new options format and providing necessary information for column discovery and display configuration. See createPlDataTableOptionsV3 for details.\n * @param ctx context\n * @param columns column list\n * @param tableState table ui state\n * @returns PlAgDataTableV2 table source\n */\nexport function createPlDataTableV2<A, U>(\n ctx: RenderCtxBase<A, U>,\n columns: createPlDataTableOptionsV2[\"columns\"],\n tableState?: createPlDataTableOptionsV2[\"tableState\"],\n options?: createPlDataTableOptionsV2[\"options\"],\n): PlDataTableModel | undefined {\n if (columns.length === 0) return undefined;\n\n const tableStateNormalized = upgradePlDataTableStateV2(tableState);\n const allLabelColumns = getAllLabelColumns(ctx.resultPool) ?? [];\n\n let fullLabelColumns = getMatchingLabelColumns(columns, allLabelColumns);\n fullLabelColumns = deriveLabels(fullLabelColumns, identity, { includeNativeLabel: true }).map(\n (v) => {\n return {\n ...v.value,\n spec: {\n ...v.value.spec,\n annotations: {\n ...v.value.spec.annotations,\n [Annotation.Label]: v.label,\n },\n },\n };\n },\n );\n\n const fullColumns = [...columns, ...fullLabelColumns];\n\n const fullColumnsAxes = uniqueBy(\n fullColumns.flatMap((c) => c.spec.axesSpec.map((a) => getAxisId(a))),\n (a) => canonicalizeJson<AxisId>(a),\n );\n const fullColumnsIds: PTableColumnId[] = [\n ...fullColumnsAxes.map((a) => ({ type: \"axis\", id: a }) satisfies PTableColumnIdAxis),\n ...fullColumns.map((c) => ({ type: \"column\", id: c.id }) satisfies PTableColumnIdColumn),\n ];\n const fullColumnsIdsSet = new Set(fullColumnsIds.map((c) => canonicalizeJson<PTableColumnId>(c)));\n const isValidColumnId = (id: string): boolean =>\n fullColumnsIdsSet.has(id as CanonicalizedJson<PTableColumnId>);\n\n // -- Filtering validation --\n const filters = tableStateNormalized.pTableParams.filters;\n const defaultFilters = options?.filters ?? undefined;\n const filterColumns = filters !== null ? collectFilterSpecColumns(filters) : [];\n const firstInvalidFilterColumn = filterColumns.find((col) => !isValidColumnId(col));\n if (firstInvalidFilterColumn)\n throw new Error(\n `Invalid filter column ${firstInvalidFilterColumn}: column reference does not match the table columns`,\n );\n const defaultFilterColumns =\n defaultFilters !== undefined ? collectFilterSpecColumns(defaultFilters) : [];\n const firstInvalidDefaultFilterColumn = defaultFilterColumns.find((col) => !isValidColumnId(col));\n if (firstInvalidDefaultFilterColumn)\n throw new Error(\n `Invalid default filter column ${firstInvalidDefaultFilterColumn}: column reference does not match the table columns`,\n );\n\n // -- Sorting validation --\n const userSorting = tableStateNormalized.pTableParams.sorting;\n const sorting = (isEmpty(userSorting) ? options?.sorting : userSorting) ?? [];\n const firstInvalidSortingColumn = sorting.find(\n (s) => !isValidColumnId(canonicalizeJson<PTableColumnId>(s.column)),\n );\n if (firstInvalidSortingColumn)\n throw new Error(\n `Invalid sorting column ${JSON.stringify(firstInvalidSortingColumn.column)}: column reference does not match the table columns`,\n );\n\n const coreJoinType = options?.coreJoinType ?? \"full\";\n const fullDef = createPTableDefV2({\n columns,\n labelColumns: fullLabelColumns,\n coreJoinType,\n filters,\n sorting,\n coreColumnPredicate: options?.coreColumnPredicate,\n });\n\n const fullHandle = ctx.createPTableV2(fullDef);\n const pframeHandle = ctx.createPFrame(fullColumns);\n if (!fullHandle || !pframeHandle) return undefined;\n\n const hiddenColumns = new Set<PObjectId>(\n ((): PObjectId[] => {\n // Inner join works as a filter - all columns must be present\n if (coreJoinType === \"inner\") return [];\n\n const hiddenColIds = tableStateNormalized.pTableParams.hiddenColIds;\n if (hiddenColIds !== null) {\n return hiddenColIds\n .filter((s): s is PTableColumnIdColumn => s.type === \"column\")\n .map((s) => s.id);\n }\n\n return columns.filter((c) => isColumnOptional(c.spec)).map((c) => c.id);\n })(),\n );\n\n // Preserve linker columns\n columns.filter((c) => isLinkerColumn(c.spec)).forEach((c) => hiddenColumns.delete(c.id));\n\n // Preserve core columns as they change the shape of join.\n const coreColumnPredicate = options?.coreColumnPredicate;\n if (coreColumnPredicate) {\n const coreColumns = columns.flatMap((c) =>\n coreColumnPredicate(getColumnIdAndSpec(c)) ? [c.id] : [],\n );\n coreColumns.forEach((c) => hiddenColumns.delete(c));\n }\n\n // Preserve sorted columns from being hidden\n sorting\n .map((s) => s.column)\n .filter((c): c is PTableColumnIdColumn => c.type === \"column\")\n .forEach((c) => hiddenColumns.delete(c.id));\n\n // Preserve filter columns from being hidden\n if (filters) {\n collectFilterSpecColumns(filters)\n .flatMap((c) => {\n const obj = parseJson(c);\n return obj.type === \"column\" ? [obj.id] : [];\n })\n .forEach((c) => hiddenColumns.delete(c));\n }\n\n const visibleColumns = columns.filter((c) => !hiddenColumns.has(c.id));\n const visibleLabelColumns = getMatchingLabelColumns(\n visibleColumns.map(getColumnIdAndSpec),\n allLabelColumns,\n );\n\n // if at least one column is not yet computed, we can't show the table\n if (!allPColumnsReady([...visibleColumns, ...visibleLabelColumns])) return undefined;\n\n const visibleDef = createPTableDefV2({\n columns: visibleColumns,\n labelColumns: visibleLabelColumns,\n coreJoinType,\n filters,\n sorting,\n coreColumnPredicate,\n });\n const visibleHandle = ctx.createPTableV2(visibleDef);\n\n if (!visibleHandle) return undefined;\n\n return {\n sourceId: tableStateNormalized.pTableParams.sourceId,\n fullTableHandle: fullHandle,\n fullPframeHandle: pframeHandle,\n visibleTableHandle: visibleHandle,\n defaultFilters,\n } satisfies PlDataTableModel;\n}\n\nfunction getAllLabelColumns(\n resultPool: AxisLabelProvider & ColumnProvider,\n): PColumn<PColumnDataUniversal>[] | undefined {\n return new PColumnCollection()\n .addAxisLabelProvider(resultPool)\n .addColumnProvider(resultPool)\n .getColumns(\n {\n name: PColumnName.Label,\n axes: [{}], // exactly one axis\n },\n { dontWaitAllData: true, overrideLabelAnnotation: false },\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createPlDataTableV2.d.ts","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts"],"mappings":";;;;;;;;;;KAuCY,0BAAA;EACV,OAAA,EAAS,OAAA,CAAQ,oBAAA;EACjB,UAAA,GAAa,kBAAA;EACb,OAAA,GAAU,oBAAA;AAAA;;;;;;;;;;iBAYI,mBAAA,
|
|
1
|
+
{"version":3,"file":"createPlDataTableV2.d.ts","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts"],"mappings":";;;;;;;;;;KAuCY,0BAAA;EACV,OAAA,EAAS,OAAA,CAAQ,oBAAA;EACjB,UAAA,GAAa,kBAAA;EACb,OAAA,GAAU,oBAAA;AAAA;;;;;;;;;;iBAYI,mBAAA,OACd,GAAA,EAAK,aAAA,CAAc,CAAA,EAAG,CAAA,GACtB,OAAA,EAAS,0BAAA,aACT,UAAA,GAAa,0BAAA,gBACb,OAAA,GAAU,0BAAA,cACT,gBAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createPlDataTableV2.js","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts"],"sourcesContent":["import type {\n AxisId,\n PColumn,\n PObjectId,\n PTableColumnId,\n PTableColumnIdAxis,\n PTableColumnIdColumn,\n CanonicalizedJson,\n} from \"@milaboratories/pl-model-common\";\nimport {\n Annotation,\n canonicalizeJson,\n getAxisId,\n getColumnIdAndSpec,\n isLinkerColumn,\n uniqueBy,\n parseJson,\n PColumnName,\n} from \"@milaboratories/pl-model-common\";\nimport type {\n AxisLabelProvider,\n ColumnProvider,\n PColumnDataUniversal,\n RenderCtxBase,\n} from \"../../../render\";\nimport { allPColumnsReady, deriveLabels, PColumnCollection } from \"../../../render\";\nimport { identity } from \"es-toolkit\";\nimport type { CreatePlDataTableOps, PlDataTableModel } from \"../typesV7\";\nimport { upgradePlDataTableStateV2 } from \"../state-migration\";\nimport type { PlDataTableStateV2 } from \"../state-migration\";\nimport { getMatchingLabelColumns } from \"../labels\";\nimport { collectFilterSpecColumns } from \"../../../filters/traverse\";\nimport { isEmpty } from \"es-toolkit/compat\";\nimport { createPTableDefV2 } from \"./createPTableDefV2\";\nimport { isColumnOptional } from \"./utils\";\n\n/**\n * @deprecated This function is deprecated and will be removed in future. Please migrate to createPlDataTable with v3 options for improved column discovery and display configuration. See createPlDataTableOptionsV3 for details on the new options format and migration guidance.\n */\nexport type createPlDataTableOptionsV2 = {\n columns: PColumn<PColumnDataUniversal>[];\n tableState?: PlDataTableStateV2;\n options?: CreatePlDataTableOps;\n};\n\n/**\n * Create p-table spec and handle given ui table state\n *\n * @deprecated This version of createPlDataTable is deprecated and will be removed in future. Please migrate to v3 by switching to the new options format and providing necessary information for column discovery and display configuration. See createPlDataTableOptionsV3 for details.\n * @param ctx context\n * @param columns column list\n * @param tableState table ui state\n * @returns PlAgDataTableV2 table source\n */\nexport function createPlDataTableV2<A, U>(\n ctx: RenderCtxBase<A, U>,\n columns: createPlDataTableOptionsV2[\"columns\"],\n tableState?: createPlDataTableOptionsV2[\"tableState\"],\n options?: createPlDataTableOptionsV2[\"options\"],\n): PlDataTableModel | undefined {\n if (columns.length === 0) return undefined;\n\n const tableStateNormalized = upgradePlDataTableStateV2(tableState);\n const allLabelColumns = getAllLabelColumns(ctx.resultPool) ?? [];\n\n let fullLabelColumns = getMatchingLabelColumns(columns, allLabelColumns);\n fullLabelColumns = deriveLabels(fullLabelColumns, identity, { includeNativeLabel: true }).map(\n (v) => {\n return {\n ...v.value,\n spec: {\n ...v.value.spec,\n annotations: {\n ...v.value.spec.annotations,\n [Annotation.Label]: v.label,\n },\n },\n };\n },\n );\n\n const fullColumns = [...columns, ...fullLabelColumns];\n\n const fullColumnsAxes = uniqueBy(\n fullColumns.flatMap((c) => c.spec.axesSpec.map((a) => getAxisId(a))),\n (a) => canonicalizeJson<AxisId>(a),\n );\n const fullColumnsIds: PTableColumnId[] = [\n ...fullColumnsAxes.map((a) => ({ type: \"axis\", id: a }) satisfies PTableColumnIdAxis),\n ...fullColumns.map((c) => ({ type: \"column\", id: c.id }) satisfies PTableColumnIdColumn),\n ];\n const fullColumnsIdsSet = new Set(fullColumnsIds.map((c) => canonicalizeJson<PTableColumnId>(c)));\n const isValidColumnId = (id: string): boolean =>\n fullColumnsIdsSet.has(id as CanonicalizedJson<PTableColumnId>);\n\n // -- Filtering validation --\n const filters = tableStateNormalized.pTableParams.filters;\n const defaultFilters = options?.filters ?? undefined;\n const filterColumns = filters !== null ? collectFilterSpecColumns(filters) : [];\n const firstInvalidFilterColumn = filterColumns.find((col) => !isValidColumnId(col));\n if (firstInvalidFilterColumn)\n throw new Error(\n `Invalid filter column ${firstInvalidFilterColumn}: column reference does not match the table columns`,\n );\n const defaultFilterColumns =\n defaultFilters !== undefined ? collectFilterSpecColumns(defaultFilters) : [];\n const firstInvalidDefaultFilterColumn = defaultFilterColumns.find((col) => !isValidColumnId(col));\n if (firstInvalidDefaultFilterColumn)\n throw new Error(\n `Invalid default filter column ${firstInvalidDefaultFilterColumn}: column reference does not match the table columns`,\n );\n\n // -- Sorting validation --\n const userSorting = tableStateNormalized.pTableParams.sorting;\n const sorting = (isEmpty(userSorting) ? options?.sorting : userSorting) ?? [];\n const firstInvalidSortingColumn = sorting.find(\n (s) => !isValidColumnId(canonicalizeJson<PTableColumnId>(s.column)),\n );\n if (firstInvalidSortingColumn)\n throw new Error(\n `Invalid sorting column ${JSON.stringify(firstInvalidSortingColumn.column)}: column reference does not match the table columns`,\n );\n\n const coreJoinType = options?.coreJoinType ?? \"full\";\n const fullDef = createPTableDefV2({\n columns,\n labelColumns: fullLabelColumns,\n coreJoinType,\n filters,\n sorting,\n coreColumnPredicate: options?.coreColumnPredicate,\n });\n\n const fullHandle = ctx.createPTableV2(fullDef);\n const pframeHandle = ctx.createPFrame(fullColumns);\n if (!fullHandle || !pframeHandle) return undefined;\n\n const hiddenColumns = new Set<PObjectId>(\n ((): PObjectId[] => {\n // Inner join works as a filter - all columns must be present\n if (coreJoinType === \"inner\") return [];\n\n const hiddenColIds = tableStateNormalized.pTableParams.hiddenColIds;\n if (hiddenColIds !== null) {\n return hiddenColIds\n .filter((s): s is PTableColumnIdColumn => s.type === \"column\")\n .map((s) => s.id);\n }\n\n return columns.filter((c) => isColumnOptional(c.spec)).map((c) => c.id);\n })(),\n );\n\n // Preserve linker columns\n columns.filter((c) => isLinkerColumn(c.spec)).forEach((c) => hiddenColumns.delete(c.id));\n\n // Preserve core columns as they change the shape of join.\n const coreColumnPredicate = options?.coreColumnPredicate;\n if (coreColumnPredicate) {\n const coreColumns = columns.flatMap((c) =>\n coreColumnPredicate(getColumnIdAndSpec(c)) ? [c.id] : [],\n );\n coreColumns.forEach((c) => hiddenColumns.delete(c));\n }\n\n // Preserve sorted columns from being hidden\n sorting\n .map((s) => s.column)\n .filter((c): c is PTableColumnIdColumn => c.type === \"column\")\n .forEach((c) => hiddenColumns.delete(c.id));\n\n // Preserve filter columns from being hidden\n if (filters) {\n collectFilterSpecColumns(filters)\n .flatMap((c) => {\n const obj = parseJson(c);\n return obj.type === \"column\" ? [obj.id] : [];\n })\n .forEach((c) => hiddenColumns.delete(c));\n }\n\n const visibleColumns = columns.filter((c) => !hiddenColumns.has(c.id));\n const visibleLabelColumns = getMatchingLabelColumns(\n visibleColumns.map(getColumnIdAndSpec),\n allLabelColumns,\n );\n\n // if at least one column is not yet computed, we can't show the table\n if (!allPColumnsReady([...visibleColumns, ...visibleLabelColumns])) return undefined;\n\n const visibleDef = createPTableDefV2({\n columns: visibleColumns,\n labelColumns: visibleLabelColumns,\n coreJoinType,\n filters,\n sorting,\n coreColumnPredicate,\n });\n const visibleHandle = ctx.createPTableV2(visibleDef);\n\n if (!visibleHandle) return undefined;\n\n return {\n sourceId: tableStateNormalized.pTableParams.sourceId,\n fullTableHandle: fullHandle,\n fullPframeHandle: pframeHandle,\n visibleTableHandle: visibleHandle,\n defaultFilters,\n } satisfies PlDataTableModel;\n}\n\nfunction getAllLabelColumns(\n resultPool: AxisLabelProvider & ColumnProvider,\n): PColumn<PColumnDataUniversal>[] | undefined {\n return new PColumnCollection()\n .addAxisLabelProvider(resultPool)\n .addColumnProvider(resultPool)\n .getColumns(\n {\n name: PColumnName.Label,\n axes: [{}], // exactly one axis\n },\n { dontWaitAllData: true, overrideLabelAnnotation: false },\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"createPlDataTableV2.js","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPlDataTableV2.ts"],"sourcesContent":["import type {\n AxisId,\n PColumn,\n PObjectId,\n PTableColumnId,\n PTableColumnIdAxis,\n PTableColumnIdColumn,\n CanonicalizedJson,\n} from \"@milaboratories/pl-model-common\";\nimport {\n Annotation,\n canonicalizeJson,\n getAxisId,\n getColumnIdAndSpec,\n isLinkerColumn,\n uniqueBy,\n parseJson,\n PColumnName,\n} from \"@milaboratories/pl-model-common\";\nimport type {\n AxisLabelProvider,\n ColumnProvider,\n PColumnDataUniversal,\n RenderCtxBase,\n} from \"../../../render\";\nimport { allPColumnsReady, deriveLabels, PColumnCollection } from \"../../../render\";\nimport { identity } from \"es-toolkit\";\nimport type { CreatePlDataTableOps, PlDataTableModel } from \"../typesV7\";\nimport { upgradePlDataTableStateV2 } from \"../state-migration\";\nimport type { PlDataTableStateV2 } from \"../state-migration\";\nimport { getMatchingLabelColumns } from \"../labels\";\nimport { collectFilterSpecColumns } from \"../../../filters/traverse\";\nimport { isEmpty } from \"es-toolkit/compat\";\nimport { createPTableDefV2 } from \"./createPTableDefV2\";\nimport { isColumnOptional } from \"./utils\";\n\n/**\n * @deprecated This function is deprecated and will be removed in future. Please migrate to createPlDataTable with v3 options for improved column discovery and display configuration. See createPlDataTableOptionsV3 for details on the new options format and migration guidance.\n */\nexport type createPlDataTableOptionsV2 = {\n columns: PColumn<PColumnDataUniversal>[];\n tableState?: PlDataTableStateV2;\n options?: CreatePlDataTableOps;\n};\n\n/**\n * Create p-table spec and handle given ui table state\n *\n * @deprecated This version of createPlDataTable is deprecated and will be removed in future. Please migrate to v3 by switching to the new options format and providing necessary information for column discovery and display configuration. See createPlDataTableOptionsV3 for details.\n * @param ctx context\n * @param columns column list\n * @param tableState table ui state\n * @returns PlAgDataTableV2 table source\n */\nexport function createPlDataTableV2<A, U>(\n ctx: RenderCtxBase<A, U>,\n columns: createPlDataTableOptionsV2[\"columns\"],\n tableState?: createPlDataTableOptionsV2[\"tableState\"],\n options?: createPlDataTableOptionsV2[\"options\"],\n): PlDataTableModel | undefined {\n if (columns.length === 0) return undefined;\n\n const tableStateNormalized = upgradePlDataTableStateV2(tableState);\n const allLabelColumns = getAllLabelColumns(ctx.resultPool) ?? [];\n\n let fullLabelColumns = getMatchingLabelColumns(columns, allLabelColumns);\n fullLabelColumns = deriveLabels(fullLabelColumns, identity, { includeNativeLabel: true }).map(\n (v) => {\n return {\n ...v.value,\n spec: {\n ...v.value.spec,\n annotations: {\n ...v.value.spec.annotations,\n [Annotation.Label]: v.label,\n },\n },\n };\n },\n );\n\n const fullColumns = [...columns, ...fullLabelColumns];\n\n const fullColumnsAxes = uniqueBy(\n fullColumns.flatMap((c) => c.spec.axesSpec.map((a) => getAxisId(a))),\n (a) => canonicalizeJson<AxisId>(a),\n );\n const fullColumnsIds: PTableColumnId[] = [\n ...fullColumnsAxes.map((a) => ({ type: \"axis\", id: a }) satisfies PTableColumnIdAxis),\n ...fullColumns.map((c) => ({ type: \"column\", id: c.id }) satisfies PTableColumnIdColumn),\n ];\n const fullColumnsIdsSet = new Set(fullColumnsIds.map((c) => canonicalizeJson<PTableColumnId>(c)));\n const isValidColumnId = (id: string): boolean =>\n fullColumnsIdsSet.has(id as CanonicalizedJson<PTableColumnId>);\n\n // -- Filtering validation --\n const filters = tableStateNormalized.pTableParams.filters;\n const defaultFilters = options?.filters ?? undefined;\n const filterColumns = filters !== null ? collectFilterSpecColumns(filters) : [];\n const firstInvalidFilterColumn = filterColumns.find((col) => !isValidColumnId(col));\n if (firstInvalidFilterColumn)\n throw new Error(\n `Invalid filter column ${firstInvalidFilterColumn}: column reference does not match the table columns`,\n );\n const defaultFilterColumns =\n defaultFilters !== undefined ? collectFilterSpecColumns(defaultFilters) : [];\n const firstInvalidDefaultFilterColumn = defaultFilterColumns.find((col) => !isValidColumnId(col));\n if (firstInvalidDefaultFilterColumn)\n throw new Error(\n `Invalid default filter column ${firstInvalidDefaultFilterColumn}: column reference does not match the table columns`,\n );\n\n // -- Sorting validation --\n const userSorting = tableStateNormalized.pTableParams.sorting;\n const sorting = (isEmpty(userSorting) ? options?.sorting : userSorting) ?? [];\n const firstInvalidSortingColumn = sorting.find(\n (s) => !isValidColumnId(canonicalizeJson<PTableColumnId>(s.column)),\n );\n if (firstInvalidSortingColumn)\n throw new Error(\n `Invalid sorting column ${JSON.stringify(firstInvalidSortingColumn.column)}: column reference does not match the table columns`,\n );\n\n const coreJoinType = options?.coreJoinType ?? \"full\";\n const fullDef = createPTableDefV2({\n columns,\n labelColumns: fullLabelColumns,\n coreJoinType,\n filters,\n sorting,\n coreColumnPredicate: options?.coreColumnPredicate,\n });\n\n const fullHandle = ctx.createPTableV2(fullDef);\n const pframeHandle = ctx.createPFrame(fullColumns);\n if (!fullHandle || !pframeHandle) return undefined;\n\n const hiddenColumns = new Set<PObjectId>(\n ((): PObjectId[] => {\n // Inner join works as a filter - all columns must be present\n if (coreJoinType === \"inner\") return [];\n\n const hiddenColIds = tableStateNormalized.pTableParams.hiddenColIds;\n if (hiddenColIds !== null) {\n return hiddenColIds\n .filter((s): s is PTableColumnIdColumn => s.type === \"column\")\n .map((s) => s.id);\n }\n\n return columns.filter((c) => isColumnOptional(c.spec)).map((c) => c.id);\n })(),\n );\n\n // Preserve linker columns\n columns.filter((c) => isLinkerColumn(c.spec)).forEach((c) => hiddenColumns.delete(c.id));\n\n // Preserve core columns as they change the shape of join.\n const coreColumnPredicate = options?.coreColumnPredicate;\n if (coreColumnPredicate) {\n const coreColumns = columns.flatMap((c) =>\n coreColumnPredicate(getColumnIdAndSpec(c)) ? [c.id] : [],\n );\n coreColumns.forEach((c) => hiddenColumns.delete(c));\n }\n\n // Preserve sorted columns from being hidden\n sorting\n .map((s) => s.column)\n .filter((c): c is PTableColumnIdColumn => c.type === \"column\")\n .forEach((c) => hiddenColumns.delete(c.id));\n\n // Preserve filter columns from being hidden\n if (filters) {\n collectFilterSpecColumns(filters)\n .flatMap((c) => {\n const obj = parseJson(c);\n return obj.type === \"column\" ? [obj.id] : [];\n })\n .forEach((c) => hiddenColumns.delete(c));\n }\n\n const visibleColumns = columns.filter((c) => !hiddenColumns.has(c.id));\n const visibleLabelColumns = getMatchingLabelColumns(\n visibleColumns.map(getColumnIdAndSpec),\n allLabelColumns,\n );\n\n // if at least one column is not yet computed, we can't show the table\n if (!allPColumnsReady([...visibleColumns, ...visibleLabelColumns])) return undefined;\n\n const visibleDef = createPTableDefV2({\n columns: visibleColumns,\n labelColumns: visibleLabelColumns,\n coreJoinType,\n filters,\n sorting,\n coreColumnPredicate,\n });\n const visibleHandle = ctx.createPTableV2(visibleDef);\n\n if (!visibleHandle) return undefined;\n\n return {\n sourceId: tableStateNormalized.pTableParams.sourceId,\n fullTableHandle: fullHandle,\n fullPframeHandle: pframeHandle,\n visibleTableHandle: visibleHandle,\n defaultFilters,\n } satisfies PlDataTableModel;\n}\n\nfunction getAllLabelColumns(\n resultPool: AxisLabelProvider & ColumnProvider,\n): PColumn<PColumnDataUniversal>[] | undefined {\n return new PColumnCollection()\n .addAxisLabelProvider(resultPool)\n .addColumnProvider(resultPool)\n .getColumns(\n {\n name: PColumnName.Label,\n axes: [{}], // exactly one axis\n },\n { dontWaitAllData: true, overrideLabelAnnotation: false },\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
require("../../../_virtual/_rolldown/runtime.cjs");
|
|
2
1
|
const require_traverse = require("../../../filters/traverse.cjs");
|
|
3
2
|
const require_state_migration = require("../state-migration.cjs");
|
|
4
3
|
const require_createPTableDefV3 = require("./createPTableDefV3.cjs");
|
|
@@ -222,7 +221,7 @@ function collectPreservedColumnIds(sorting, filters) {
|
|
|
222
221
|
const obj = (0, _milaboratories_pl_model_common.parseJson)(c);
|
|
223
222
|
return obj.type === "column" ? [obj.id] : [];
|
|
224
223
|
}) : [];
|
|
225
|
-
return new Set([...sortedIds, ...filterIds]);
|
|
224
|
+
return /* @__PURE__ */ new Set([...sortedIds, ...filterIds]);
|
|
226
225
|
}
|
|
227
226
|
/** Filter annotated columns to only visible ones, re-matching label columns for the visible subset. */
|
|
228
227
|
function buildVisibleColumns(annotated, hiddenColumns) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createPlDataTableV3.cjs","names":["upgradePlDataTableStateV2","discoverTableColumnSnaphots","discoverLabelColumnVariants","deriveAllLabels","isColumnHidden","deriveAllTooltips","createPTableDefV3","evaluateRules","withDataStatusAnnotations","withLabelAnnotations","withInfoAnnotations","withTableVisualAnnotations","withHidenAxesAnnotations","getAxisId","isColumnOptional","collectFilterSpecColumns","traverseFilterSpec"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPlDataTableV3.ts"],"sourcesContent":["import type {\n AxisId,\n CanonicalizedJson,\n FilterSpecNode,\n PColumn,\n PObjectId,\n PTableColumnId,\n PTableColumnIdAxis,\n PTableColumnIdColumn,\n PTableSorting,\n PColumnSpec,\n MultiColumnSelector,\n PFrameSpecDriver,\n DiscoveredPColumnId,\n} from \"@milaboratories/pl-model-common\";\nimport { canonicalizeJson, getAxisId, parseJson, uniqueBy } from \"@milaboratories/pl-model-common\";\nimport { collectFilterSpecColumns, traverseFilterSpec } from \"../../../filters/traverse\";\nimport type { RenderCtxBase, PColumnDataUniversal } from \"../../../render\";\nimport { isEmpty } from \"es-toolkit/compat\";\nimport type { PlDataTableFilters, PlDataTableFilterSpecLeaf, PlDataTableModel } from \"../typesV7\";\nimport { upgradePlDataTableStateV2 } from \"../state-migration\";\nimport type { PlDataTableStateV2 } from \"../state-migration\";\nimport type { ColumnSelector, ColumnSnapshot, ColumnVariant, MatchingMode } from \"../../../columns\";\nimport type { DeriveLabelsOptions } from \"../../../labels/derive_distinct_labels\";\nimport {\n deriveAllLabels,\n deriveAllTooltips,\n evaluateRules,\n isColumnHidden,\n isColumnOptional,\n withHidenAxesAnnotations,\n withLabelAnnotations,\n withTableVisualAnnotations,\n withInfoAnnotations,\n withDataStatusAnnotations,\n} from \"./utils\";\nimport type { PrimaryEntry, SecondaryGroup } from \"./createPTableDefV3\";\nimport { createPTableDefV3 } from \"./createPTableDefV3\";\nimport {\n discoverLabelColumnVariants,\n discoverTableColumnSnaphots,\n type DiscoverTableColumnOptions,\n} from \"./discoverColumns\";\nimport { getField, isNil, isPlainObject, throwError, type Nil } from \"@milaboratories/helpers\";\nimport { flow } from \"es-toolkit\";\n\nexport type createPlDataTableOptionsV3 = {\n tableState?: PlDataTableStateV2;\n\n columns: Nil | DiscoverTableColumnOptions | TableColumnVariant[];\n filters?: PlDataTableFilters;\n sorting?: PTableSorting[];\n primaryJoinType?: \"inner\" | \"full\";\n\n labelsOptions?: DeriveLabelsOptions;\n displayOptions?: ColumnsDisplayOptions;\n};\n\n/** Structured source config — selectors/anchors instead of raw ColumnSource. */\nexport type ColumnsSelectorConfig = {\n include?: MultiColumnSelector | MultiColumnSelector[];\n exclude?: MultiColumnSelector | MultiColumnSelector[];\n mode?: MatchingMode;\n maxHops?: number;\n};\n\nexport type ColumnsDisplayOptions = {\n /** Column ordering rules. Higher priority = further left. First matching rule wins. */\n ordering?: ColumnOrderRule[];\n /** Column visibility rules. First matching rule wins. Unmatched columns use default visibility. */\n visibility?: ColumnVisibilityRule[];\n};\n\nexport type ColumnOrderRule = {\n match: ColumnMatcher | ColumnSelector;\n /** Higher number = further left in table */\n priority: number;\n};\n\nexport type ColumnVisibilityRule = {\n match: ColumnMatcher | ColumnSelector;\n visibility: \"default\" | \"optional\" | \"hidden\";\n};\n\nexport type ColumnMatcher = (spec: PColumnSpec) => boolean;\n\nexport function createPlDataTableV3<A, U>(\n ctx: RenderCtxBase<A, U>,\n options: createPlDataTableOptionsV3,\n): PlDataTableModel | undefined {\n const pframeSpec = ctx.getService(\"pframeSpec\");\n const state = upgradePlDataTableStateV2(options.tableState);\n const primaryJoinType = options.primaryJoinType ?? \"full\";\n\n const discovered = isPlainObject(options.columns)\n ? discoverTableColumnSnaphots(ctx, options.columns)\n : isNil(options.columns)\n ? options.columns\n : uniqueBy(\n [...options.columns, ...discoverLabelColumnVariants(ctx, options.columns)],\n (c) => c.column.id,\n );\n if (isNil(discovered) || discovered.length === 0) return undefined;\n\n const splited = splitDiscoveredColumns(discovered);\n\n const derivedLabels = deriveAllLabels({\n columns: discovered\n .map((dc) => ({\n id: dc.column.id,\n spec: dc.column.spec,\n linkerPath: dc.path,\n qualifications: dc.qualifications,\n }))\n .filter((v) => !isColumnHidden(v.spec)),\n deriveLabelsOptions: {\n includeNativeLabel: true,\n ...options.labelsOptions,\n },\n });\n\n const derivedTooltips = deriveAllTooltips({\n columns: discovered.map((dc) => ({\n id: dc.column.id,\n originalId: getField(dc, \"originalId\"),\n spec: dc.column.spec,\n linkerPath: dc.path,\n qualifications: dc.qualifications,\n })),\n });\n\n const annotated = annotateColumnGroups({\n pframeSpec,\n ...splited,\n derivedLabels,\n derivedTooltips,\n displayOptions: options.displayOptions,\n });\n\n const primarySnapshots = annotated.direct.filter((c) => c.isPrimary);\n const secondarySnapshots = annotated.direct.filter((c) => !c.isPrimary);\n\n if (primarySnapshots.length === 0) return undefined;\n\n const columnIsAvailable = createColumnValidationById([\n ...annotated.direct.map((v) => v.column),\n ...annotated.linked.flatMap((lc) => [...(lc.path ?? []).map((s) => s.linker), lc.column]),\n ]);\n\n const remapedDefaultFilters = remapFilterColumnIds(options.filters, discovered);\n const filters = filterFilters(\n concatFilters(\n state.pTableParams.filters,\n state.pTableParams.defaultFilters ?? remapedDefaultFilters,\n ),\n columnIsAvailable,\n );\n\n const sorting = filterSorting(\n resolveSorting(state.pTableParams.sorting, remapSortingColumnIds(options.sorting, discovered)),\n columnIsAvailable,\n );\n\n const primaryEntries: PrimaryEntry<undefined | PColumnDataUniversal>[] = primarySnapshots.map(\n (v) => ({ column: resolveSnapshot(v.column) }),\n );\n const secondaryGroups: SecondaryGroup<undefined | PColumnDataUniversal>[] = buildSecondaryGroups(\n secondarySnapshots,\n annotated.linked,\n );\n const fullDef = createPTableDefV3({\n primaryJoinType,\n primary: primaryEntries,\n secondary: secondaryGroups,\n filters,\n sorting,\n });\n\n const fullHandle = ctx.createPTableV2(fullDef);\n // TODO: is workaround for dropdown suggestions.\n // Pframe have not equivalent data for columns relativly to Ptable\n const pframeHandle = ctx.createPFrame([\n ...annotated.direct.map((v) => resolveSnapshot(v.column)),\n ...annotated.linked.map((v) => resolveSnapshot(v.column)),\n ...collectLinkerSnapshots(annotated.linked).map(resolveSnapshot),\n ]);\n\n const hiddenSpecs = state.pTableParams.hiddenColIds;\n const hiddenColumnIds = computeHiddenColumns(\n [...annotated.direct, ...annotated.linked].map((v) => v.column),\n sorting,\n filters,\n hiddenSpecs,\n );\n\n const visible = buildVisibleColumns(annotated, hiddenColumnIds);\n const visibleDef = createPTableDefV3({\n primaryJoinType,\n primary: primaryEntries,\n secondary: buildSecondaryGroups(\n visible.direct.filter((c) => !c.isPrimary),\n visible.linked,\n ),\n filters,\n sorting,\n });\n const visibleHandle = ctx.createPTableV2(visibleDef);\n\n return {\n sourceId: state.pTableParams.sourceId,\n fullTableHandle: fullHandle,\n fullPframeHandle: pframeHandle,\n visibleTableHandle: visibleHandle,\n defaultFilters: remapedDefaultFilters,\n } satisfies PlDataTableModel;\n}\n\nexport type TableColumnVariant = (\n | ColumnVariant<PObjectId>\n | (ColumnVariant<DiscoveredPColumnId> & { readonly originalId: PObjectId })\n) & {\n readonly isPrimary?: boolean;\n};\n\ntype SplitDiscoveredColumns = {\n readonly direct: TableColumnVariant[];\n readonly linked: TableColumnVariant[];\n};\n\ntype AnnotatedColumnGroups = {\n readonly direct: TableColumnVariant[];\n readonly linked: TableColumnVariant[];\n};\n\ntype VisibleColumns = {\n readonly direct: TableColumnVariant[];\n readonly linked: TableColumnVariant[];\n};\n\n/** Split discovered columns into direct (no linker path) and linked (with linker path). */\nfunction splitDiscoveredColumns(columns: TableColumnVariant[]): SplitDiscoveredColumns {\n const direct = columns.filter((dc) => (dc.path?.length ?? 0) === 0);\n const linked = columns.filter((dc) => (dc.path?.length ?? 0) > 0);\n return { direct, linked };\n}\n\n/** All linker snapshots across the given linked columns, deduped by id. */\nfunction collectLinkerSnapshots(linked: TableColumnVariant[]): ColumnSnapshot<PObjectId>[] {\n return uniqueBy(\n linked.flatMap((lc) => (lc.path ?? []).map((s) => s.linker)),\n (c) => c.id,\n );\n}\n\n/**\n * Annotate all column groups with derived labels and display-rule annotations.\n * Evaluates `displayOptions` rules against all discovered columns (direct,\n * linked, labels, linkers) and writes the winning visibility/priority into\n * column annotations via `withTableVisualAnnotations`.\n */\nfunction annotateColumnGroups(params: {\n direct: TableColumnVariant[];\n linked: TableColumnVariant[];\n derivedLabels: Record<string, string>;\n derivedTooltips: Record<string, string>;\n displayOptions?: ColumnsDisplayOptions;\n pframeSpec: PFrameSpecDriver;\n}): AnnotatedColumnGroups {\n const { direct, linked, derivedLabels, derivedTooltips, displayOptions, pframeSpec } = params;\n\n const allColumnsForRules = [\n ...direct.map((v) => v.column),\n ...linked.map((v) => v.column),\n ...collectLinkerSnapshots(linked),\n ];\n const visibilityByColId = evaluateRules(\n displayOptions?.visibility ?? [],\n allColumnsForRules,\n pframeSpec,\n );\n const orderByColId = evaluateRules(\n displayOptions?.ordering ?? [],\n allColumnsForRules,\n pframeSpec,\n );\n\n const directAnnotated = liftToVariantColumns(\n direct,\n flow(\n (cols) => withDataStatusAnnotations(cols),\n (cols) => withLabelAnnotations(derivedLabels, cols),\n (cols) => withInfoAnnotations(derivedTooltips, cols),\n (cols) => withTableVisualAnnotations(visibilityByColId, orderByColId, cols),\n ),\n );\n\n const linkedAnnotated = liftToVariantColumns(\n linked,\n flow(\n (cols) => withDataStatusAnnotations(cols),\n (cols) => withHidenAxesAnnotations(cols),\n (cols) => withLabelAnnotations(derivedLabels, cols),\n (cols) => withInfoAnnotations(derivedTooltips, cols),\n (cols) => withTableVisualAnnotations(visibilityByColId, orderByColId, cols),\n ),\n ).map((lc) => ({ ...lc, path: annotateLinkerPath(derivedLabels, lc.path) }));\n\n return {\n direct: directAnnotated,\n linked: linkedAnnotated,\n };\n}\n\n/** Lift a snapshot-array transform so it runs on the inner `column` of each variant. */\nfunction liftToVariantColumns<\n V extends { readonly column: ColumnSnapshot<PObjectId | DiscoveredPColumnId> },\n>(\n variants: V[],\n fn: (\n cols: ColumnSnapshot<PObjectId | DiscoveredPColumnId>[],\n ) => ColumnSnapshot<PObjectId | DiscoveredPColumnId>[],\n): V[] {\n const cols = fn(variants.map((v) => v.column));\n if (cols.length !== variants.length)\n throw new Error(\n `liftToVariantColumns: fn must preserve array length (got ${cols.length}, expected ${variants.length})`,\n );\n return variants.map((v, i) => ({ ...v, column: cols[i] }));\n}\n\nfunction annotateLinkerPath(\n derivedLabels: Record<string, string>,\n path: TableColumnVariant[\"path\"],\n): TableColumnVariant[\"path\"] {\n if (isNil(path) || path.length === 0) return path;\n const annotatedLinkers = withHidenAxesAnnotations(\n withLabelAnnotations(\n derivedLabels,\n path.map((s) => s.linker),\n ),\n );\n return path.map((s, i) => ({ ...s, linker: annotatedLinkers[i] }));\n}\n\n/** Build an index of all valid column IDs (axes + columns) for filter/sorting validation. */\nfunction createColumnValidationById(\n fullColumns: { readonly id: PObjectId; readonly spec: PColumnSpec }[],\n) {\n const axisIds = uniqueBy(\n fullColumns.flatMap((c) => c.spec.axesSpec.map(getAxisId)),\n (a) => canonicalizeJson<AxisId>(a),\n );\n\n const allIds: PTableColumnId[] = [\n ...axisIds.map((a) => ({ type: \"axis\", id: a }) satisfies PTableColumnIdAxis),\n ...fullColumns.map((c) => ({ type: \"column\", id: c.id }) satisfies PTableColumnIdColumn),\n ];\n\n const validIdSet = new Set(allIds.map((c) => canonicalizeJson<PTableColumnId>(c)));\n\n return (id: string): boolean => {\n return validIdSet.has(id as CanonicalizedJson<PTableColumnId>);\n };\n}\n\n/** Drop filter leaves whose column references are not available in the table. */\nfunction filterFilters(\n filters: Nil | PlDataTableFilters,\n isValidColumnId: (id: string) => boolean,\n): Nil | PlDataTableFilters {\n if (isNil(filters)) return filters;\n\n const isLeafValid = (leaf: PlDataTableFilterSpecLeaf): boolean => {\n if (leaf.type === undefined) return true;\n if (\"column\" in leaf && !isValidColumnId(leaf.column)) return false;\n if (\"rhs\" in leaf && !isValidColumnId(leaf.rhs)) return false;\n return true;\n };\n\n const prune = (node: PlDataTableFilterNode): Nil | PlDataTableFilterNode => {\n if (node.type === \"and\" || node.type === \"or\") {\n const kept = node.filters\n .map((f) => prune(f))\n .filter((f): f is PlDataTableFilterNode => !isNil(f));\n return { type: node.type, filters: kept };\n }\n if (node.type === \"not\") {\n const inner = prune(node.filter);\n return isNil(inner) ? undefined : { type: \"not\", filter: inner };\n }\n return isLeafValid(node) ? node : undefined;\n };\n\n return prune(filters) as Nil | PlDataTableFilters;\n}\n\n/** Merge two filter trees into one AND-combined tree. Returns the non-nil one if the other is nil. */\nfunction concatFilters(\n a: Nil | PlDataTableFilters,\n b: Nil | PlDataTableFilters,\n): Nil | PlDataTableFilters {\n if (isNil(a)) return b;\n if (isNil(b)) return a;\n return { ...a, filters: [...a.filters, ...b.filters] };\n}\n\n/** Pick user sorting from state if non-empty, otherwise fall back to options default. */\nfunction resolveSorting(\n userSorting: PTableSorting[],\n defaultSorting: Nil | PTableSorting[],\n): PTableSorting[] {\n return (isEmpty(userSorting) ? defaultSorting : userSorting) ?? [];\n}\n\n/** Drop sorting entries whose column is not available in the table. */\nfunction filterSorting(\n sorting: PTableSorting[],\n isValidColumnId: (id: string) => boolean,\n): PTableSorting[] {\n return sorting.filter((s) => isValidColumnId(canonicalizeJson<PTableColumnId>(s.column)));\n}\n\nfunction buildSecondaryGroups(\n direct: TableColumnVariant[],\n linked: TableColumnVariant[],\n): SecondaryGroup<undefined | PColumnDataUniversal>[] {\n return [\n ...direct.map(\n (c): SecondaryGroup<undefined | PColumnDataUniversal> => ({\n entries: [{ column: resolveSnapshot(c.column), qualifications: c.qualifications?.forHit }],\n primaryQualifications: c.qualifications?.forQueries,\n }),\n ),\n ...linked.map(\n (lc): SecondaryGroup<undefined | PColumnDataUniversal> => ({\n entries: [\n {\n column: resolveSnapshot(lc.column),\n linkers: lc.path?.map((s) => resolveSnapshot(s.linker)),\n qualifications: lc.qualifications?.forHit,\n },\n ],\n primaryQualifications: lc.qualifications?.forQueries,\n }),\n ),\n ];\n}\n\n/** Determine which columns should be hidden based on state or optional-column defaults. */\nfunction computeHiddenColumns(\n columns: { readonly id: PObjectId; readonly spec: PColumnSpec }[],\n sorting: Nil | PTableSorting[],\n filters: Nil | PlDataTableFilters,\n hiddenSpecs: Nil | PTableColumnId[],\n): Set<PObjectId> {\n const alwaysHidden = columns.filter((c) => isColumnHidden(c.spec)).map((c) => c.id);\n const optionalHidden = !isNil(hiddenSpecs)\n ? hiddenSpecs.filter((s): s is PTableColumnIdColumn => s.type === \"column\").map((s) => s.id)\n : columns.filter((c) => isColumnOptional(c.spec)).map((c) => c.id);\n const initial = [...alwaysHidden, ...optionalHidden];\n const preserved = collectPreservedColumnIds(sorting, filters);\n\n return new Set(initial.filter((id) => !preserved.has(id)));\n}\n\n/** Collect IDs of columns that must remain visible (sorted, filtered). */\nfunction collectPreservedColumnIds(\n sorting: Nil | PTableSorting[],\n filters: Nil | PlDataTableFilters,\n): Set<PObjectId> {\n const sortedIds = (sorting ?? [])\n .map((s) => s.column)\n .filter((c): c is PTableColumnIdColumn => c.type === \"column\")\n .map((c) => c.id);\n\n const filterIds = !isNil(filters)\n ? collectFilterSpecColumns(filters).flatMap((c) => {\n const obj = parseJson(c);\n return obj.type === \"column\" ? [obj.id] : [];\n })\n : [];\n\n return new Set<PObjectId>([...sortedIds, ...filterIds]);\n}\n\n/** Filter annotated columns to only visible ones, re-matching label columns for the visible subset. */\nfunction buildVisibleColumns(\n annotated: AnnotatedColumnGroups,\n hiddenColumns: Set<PObjectId>,\n): VisibleColumns {\n const direct = annotated.direct.filter((c) => !hiddenColumns.has(c.column.id));\n const linked = annotated.linked.filter((c) => !hiddenColumns.has(c.column.id));\n return { direct, linked };\n}\n\n/** Resolve a ColumnSnapshot to a PColumn with lazily-evaluated data. */\nfunction resolveSnapshot(\n snap: ColumnSnapshot<PObjectId>,\n): PColumn<undefined | PColumnDataUniversal> {\n return { id: snap.id, spec: snap.spec, data: snap.data?.get() };\n}\n\n/** Remap column references in sorting entries. */\nfunction remapSortingColumnIds(\n sorting: Nil | PTableSorting[],\n columns: TableColumnVariant[],\n): Nil | PTableSorting[] {\n return sorting?.flatMap((s) => {\n if (s.column.type === \"axis\") return [s]; // Axis references are unaffected by column ID remapping\n\n const id = s.column.id;\n const column = columns.find((c) => (getField(c, \"originalId\") ?? c.column.id) === id);\n if (column === undefined) return [];\n\n return [\n {\n ...s,\n column: {\n type: \"column\" as const,\n id: column.column.id,\n },\n },\n ];\n });\n}\n\ntype PlDataTableFilterNode = FilterSpecNode<PlDataTableFilterSpecLeaf>;\n\n/** Remap column references in a filter tree. */\nfunction remapFilterColumnIds(\n filters: Nil | PlDataTableFilters,\n columns: TableColumnVariant[],\n): Nil | PlDataTableFilters {\n if (isNil(filters)) return filters;\n\n const map = (\n tableColumnId: CanonicalizedJson<PTableColumnId>,\n ): CanonicalizedJson<PTableColumnId> => {\n const parsed = parseJson<PTableColumnId>(tableColumnId);\n if (parsed.type === \"axis\") return tableColumnId; // Axis references are unaffected by column ID remapping\n\n const originalId = parsed.id;\n const column =\n columns.find((c) => (getField(c, \"originalId\") ?? c.column.id) === originalId) ??\n throwError(`Column ID \"${parsed.id}\" in filters does not match any discovered column`);\n\n return canonicalizeJson<PTableColumnId>({\n type: \"column\",\n id: column.column.id,\n });\n };\n\n return traverseFilterSpec(filters, {\n leaf: (leaf): PlDataTableFilterNode => {\n if (leaf.type === undefined) return leaf;\n const result = { ...leaf };\n if (\"column\" in result) result.column = map(result.column);\n if (\"rhs\" in result) result.rhs = map(result.rhs);\n return result;\n },\n and: (results): PlDataTableFilterNode => ({ type: \"and\", filters: results }),\n or: (results): PlDataTableFilterNode => ({ type: \"or\", filters: results }),\n not: (result): PlDataTableFilterNode => ({ type: \"not\", filter: result }),\n }) as PlDataTableFilters;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"createPlDataTableV3.cjs","names":["upgradePlDataTableStateV2","discoverTableColumnSnaphots","discoverLabelColumnVariants","deriveAllLabels","isColumnHidden","deriveAllTooltips","createPTableDefV3","evaluateRules","withDataStatusAnnotations","withLabelAnnotations","withInfoAnnotations","withTableVisualAnnotations","withHidenAxesAnnotations","getAxisId","isColumnOptional","collectFilterSpecColumns","traverseFilterSpec"],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPlDataTableV3.ts"],"sourcesContent":["import type {\n AxisId,\n CanonicalizedJson,\n FilterSpecNode,\n PColumn,\n PObjectId,\n PTableColumnId,\n PTableColumnIdAxis,\n PTableColumnIdColumn,\n PTableSorting,\n PColumnSpec,\n MultiColumnSelector,\n PFrameSpecDriver,\n DiscoveredPColumnId,\n} from \"@milaboratories/pl-model-common\";\nimport { canonicalizeJson, getAxisId, parseJson, uniqueBy } from \"@milaboratories/pl-model-common\";\nimport { collectFilterSpecColumns, traverseFilterSpec } from \"../../../filters/traverse\";\nimport type { RenderCtxBase, PColumnDataUniversal } from \"../../../render\";\nimport { isEmpty } from \"es-toolkit/compat\";\nimport type { PlDataTableFilters, PlDataTableFilterSpecLeaf, PlDataTableModel } from \"../typesV7\";\nimport { upgradePlDataTableStateV2 } from \"../state-migration\";\nimport type { PlDataTableStateV2 } from \"../state-migration\";\nimport type { ColumnSelector, ColumnSnapshot, ColumnVariant, MatchingMode } from \"../../../columns\";\nimport type { DeriveLabelsOptions } from \"../../../labels/derive_distinct_labels\";\nimport {\n deriveAllLabels,\n deriveAllTooltips,\n evaluateRules,\n isColumnHidden,\n isColumnOptional,\n withHidenAxesAnnotations,\n withLabelAnnotations,\n withTableVisualAnnotations,\n withInfoAnnotations,\n withDataStatusAnnotations,\n} from \"./utils\";\nimport type { PrimaryEntry, SecondaryGroup } from \"./createPTableDefV3\";\nimport { createPTableDefV3 } from \"./createPTableDefV3\";\nimport {\n discoverLabelColumnVariants,\n discoverTableColumnSnaphots,\n type DiscoverTableColumnOptions,\n} from \"./discoverColumns\";\nimport { getField, isNil, isPlainObject, throwError, type Nil } from \"@milaboratories/helpers\";\nimport { flow } from \"es-toolkit\";\n\nexport type createPlDataTableOptionsV3 = {\n tableState?: PlDataTableStateV2;\n\n columns: Nil | DiscoverTableColumnOptions | TableColumnVariant[];\n filters?: PlDataTableFilters;\n sorting?: PTableSorting[];\n primaryJoinType?: \"inner\" | \"full\";\n\n labelsOptions?: DeriveLabelsOptions;\n displayOptions?: ColumnsDisplayOptions;\n};\n\n/** Structured source config — selectors/anchors instead of raw ColumnSource. */\nexport type ColumnsSelectorConfig = {\n include?: MultiColumnSelector | MultiColumnSelector[];\n exclude?: MultiColumnSelector | MultiColumnSelector[];\n mode?: MatchingMode;\n maxHops?: number;\n};\n\nexport type ColumnsDisplayOptions = {\n /** Column ordering rules. Higher priority = further left. First matching rule wins. */\n ordering?: ColumnOrderRule[];\n /** Column visibility rules. First matching rule wins. Unmatched columns use default visibility. */\n visibility?: ColumnVisibilityRule[];\n};\n\nexport type ColumnOrderRule = {\n match: ColumnMatcher | ColumnSelector;\n /** Higher number = further left in table */\n priority: number;\n};\n\nexport type ColumnVisibilityRule = {\n match: ColumnMatcher | ColumnSelector;\n visibility: \"default\" | \"optional\" | \"hidden\";\n};\n\nexport type ColumnMatcher = (spec: PColumnSpec) => boolean;\n\nexport function createPlDataTableV3<A, U>(\n ctx: RenderCtxBase<A, U>,\n options: createPlDataTableOptionsV3,\n): PlDataTableModel | undefined {\n const pframeSpec = ctx.getService(\"pframeSpec\");\n const state = upgradePlDataTableStateV2(options.tableState);\n const primaryJoinType = options.primaryJoinType ?? \"full\";\n\n const discovered = isPlainObject(options.columns)\n ? discoverTableColumnSnaphots(ctx, options.columns)\n : isNil(options.columns)\n ? options.columns\n : uniqueBy(\n [...options.columns, ...discoverLabelColumnVariants(ctx, options.columns)],\n (c) => c.column.id,\n );\n if (isNil(discovered) || discovered.length === 0) return undefined;\n\n const splited = splitDiscoveredColumns(discovered);\n\n const derivedLabels = deriveAllLabels({\n columns: discovered\n .map((dc) => ({\n id: dc.column.id,\n spec: dc.column.spec,\n linkerPath: dc.path,\n qualifications: dc.qualifications,\n }))\n .filter((v) => !isColumnHidden(v.spec)),\n deriveLabelsOptions: {\n includeNativeLabel: true,\n ...options.labelsOptions,\n },\n });\n\n const derivedTooltips = deriveAllTooltips({\n columns: discovered.map((dc) => ({\n id: dc.column.id,\n originalId: getField(dc, \"originalId\"),\n spec: dc.column.spec,\n linkerPath: dc.path,\n qualifications: dc.qualifications,\n })),\n });\n\n const annotated = annotateColumnGroups({\n pframeSpec,\n ...splited,\n derivedLabels,\n derivedTooltips,\n displayOptions: options.displayOptions,\n });\n\n const primarySnapshots = annotated.direct.filter((c) => c.isPrimary);\n const secondarySnapshots = annotated.direct.filter((c) => !c.isPrimary);\n\n if (primarySnapshots.length === 0) return undefined;\n\n const columnIsAvailable = createColumnValidationById([\n ...annotated.direct.map((v) => v.column),\n ...annotated.linked.flatMap((lc) => [...(lc.path ?? []).map((s) => s.linker), lc.column]),\n ]);\n\n const remapedDefaultFilters = remapFilterColumnIds(options.filters, discovered);\n const filters = filterFilters(\n concatFilters(\n state.pTableParams.filters,\n state.pTableParams.defaultFilters ?? remapedDefaultFilters,\n ),\n columnIsAvailable,\n );\n\n const sorting = filterSorting(\n resolveSorting(state.pTableParams.sorting, remapSortingColumnIds(options.sorting, discovered)),\n columnIsAvailable,\n );\n\n const primaryEntries: PrimaryEntry<undefined | PColumnDataUniversal>[] = primarySnapshots.map(\n (v) => ({ column: resolveSnapshot(v.column) }),\n );\n const secondaryGroups: SecondaryGroup<undefined | PColumnDataUniversal>[] = buildSecondaryGroups(\n secondarySnapshots,\n annotated.linked,\n );\n const fullDef = createPTableDefV3({\n primaryJoinType,\n primary: primaryEntries,\n secondary: secondaryGroups,\n filters,\n sorting,\n });\n\n const fullHandle = ctx.createPTableV2(fullDef);\n // TODO: is workaround for dropdown suggestions.\n // Pframe have not equivalent data for columns relativly to Ptable\n const pframeHandle = ctx.createPFrame([\n ...annotated.direct.map((v) => resolveSnapshot(v.column)),\n ...annotated.linked.map((v) => resolveSnapshot(v.column)),\n ...collectLinkerSnapshots(annotated.linked).map(resolveSnapshot),\n ]);\n\n const hiddenSpecs = state.pTableParams.hiddenColIds;\n const hiddenColumnIds = computeHiddenColumns(\n [...annotated.direct, ...annotated.linked].map((v) => v.column),\n sorting,\n filters,\n hiddenSpecs,\n );\n\n const visible = buildVisibleColumns(annotated, hiddenColumnIds);\n const visibleDef = createPTableDefV3({\n primaryJoinType,\n primary: primaryEntries,\n secondary: buildSecondaryGroups(\n visible.direct.filter((c) => !c.isPrimary),\n visible.linked,\n ),\n filters,\n sorting,\n });\n const visibleHandle = ctx.createPTableV2(visibleDef);\n\n return {\n sourceId: state.pTableParams.sourceId,\n fullTableHandle: fullHandle,\n fullPframeHandle: pframeHandle,\n visibleTableHandle: visibleHandle,\n defaultFilters: remapedDefaultFilters,\n } satisfies PlDataTableModel;\n}\n\nexport type TableColumnVariant = (\n | ColumnVariant<PObjectId>\n | (ColumnVariant<DiscoveredPColumnId> & { readonly originalId: PObjectId })\n) & {\n readonly isPrimary?: boolean;\n};\n\ntype SplitDiscoveredColumns = {\n readonly direct: TableColumnVariant[];\n readonly linked: TableColumnVariant[];\n};\n\ntype AnnotatedColumnGroups = {\n readonly direct: TableColumnVariant[];\n readonly linked: TableColumnVariant[];\n};\n\ntype VisibleColumns = {\n readonly direct: TableColumnVariant[];\n readonly linked: TableColumnVariant[];\n};\n\n/** Split discovered columns into direct (no linker path) and linked (with linker path). */\nfunction splitDiscoveredColumns(columns: TableColumnVariant[]): SplitDiscoveredColumns {\n const direct = columns.filter((dc) => (dc.path?.length ?? 0) === 0);\n const linked = columns.filter((dc) => (dc.path?.length ?? 0) > 0);\n return { direct, linked };\n}\n\n/** All linker snapshots across the given linked columns, deduped by id. */\nfunction collectLinkerSnapshots(linked: TableColumnVariant[]): ColumnSnapshot<PObjectId>[] {\n return uniqueBy(\n linked.flatMap((lc) => (lc.path ?? []).map((s) => s.linker)),\n (c) => c.id,\n );\n}\n\n/**\n * Annotate all column groups with derived labels and display-rule annotations.\n * Evaluates `displayOptions` rules against all discovered columns (direct,\n * linked, labels, linkers) and writes the winning visibility/priority into\n * column annotations via `withTableVisualAnnotations`.\n */\nfunction annotateColumnGroups(params: {\n direct: TableColumnVariant[];\n linked: TableColumnVariant[];\n derivedLabels: Record<string, string>;\n derivedTooltips: Record<string, string>;\n displayOptions?: ColumnsDisplayOptions;\n pframeSpec: PFrameSpecDriver;\n}): AnnotatedColumnGroups {\n const { direct, linked, derivedLabels, derivedTooltips, displayOptions, pframeSpec } = params;\n\n const allColumnsForRules = [\n ...direct.map((v) => v.column),\n ...linked.map((v) => v.column),\n ...collectLinkerSnapshots(linked),\n ];\n const visibilityByColId = evaluateRules(\n displayOptions?.visibility ?? [],\n allColumnsForRules,\n pframeSpec,\n );\n const orderByColId = evaluateRules(\n displayOptions?.ordering ?? [],\n allColumnsForRules,\n pframeSpec,\n );\n\n const directAnnotated = liftToVariantColumns(\n direct,\n flow(\n (cols) => withDataStatusAnnotations(cols),\n (cols) => withLabelAnnotations(derivedLabels, cols),\n (cols) => withInfoAnnotations(derivedTooltips, cols),\n (cols) => withTableVisualAnnotations(visibilityByColId, orderByColId, cols),\n ),\n );\n\n const linkedAnnotated = liftToVariantColumns(\n linked,\n flow(\n (cols) => withDataStatusAnnotations(cols),\n (cols) => withHidenAxesAnnotations(cols),\n (cols) => withLabelAnnotations(derivedLabels, cols),\n (cols) => withInfoAnnotations(derivedTooltips, cols),\n (cols) => withTableVisualAnnotations(visibilityByColId, orderByColId, cols),\n ),\n ).map((lc) => ({ ...lc, path: annotateLinkerPath(derivedLabels, lc.path) }));\n\n return {\n direct: directAnnotated,\n linked: linkedAnnotated,\n };\n}\n\n/** Lift a snapshot-array transform so it runs on the inner `column` of each variant. */\nfunction liftToVariantColumns<\n V extends { readonly column: ColumnSnapshot<PObjectId | DiscoveredPColumnId> },\n>(\n variants: V[],\n fn: (\n cols: ColumnSnapshot<PObjectId | DiscoveredPColumnId>[],\n ) => ColumnSnapshot<PObjectId | DiscoveredPColumnId>[],\n): V[] {\n const cols = fn(variants.map((v) => v.column));\n if (cols.length !== variants.length)\n throw new Error(\n `liftToVariantColumns: fn must preserve array length (got ${cols.length}, expected ${variants.length})`,\n );\n return variants.map((v, i) => ({ ...v, column: cols[i] }));\n}\n\nfunction annotateLinkerPath(\n derivedLabels: Record<string, string>,\n path: TableColumnVariant[\"path\"],\n): TableColumnVariant[\"path\"] {\n if (isNil(path) || path.length === 0) return path;\n const annotatedLinkers = withHidenAxesAnnotations(\n withLabelAnnotations(\n derivedLabels,\n path.map((s) => s.linker),\n ),\n );\n return path.map((s, i) => ({ ...s, linker: annotatedLinkers[i] }));\n}\n\n/** Build an index of all valid column IDs (axes + columns) for filter/sorting validation. */\nfunction createColumnValidationById(\n fullColumns: { readonly id: PObjectId; readonly spec: PColumnSpec }[],\n) {\n const axisIds = uniqueBy(\n fullColumns.flatMap((c) => c.spec.axesSpec.map(getAxisId)),\n (a) => canonicalizeJson<AxisId>(a),\n );\n\n const allIds: PTableColumnId[] = [\n ...axisIds.map((a) => ({ type: \"axis\", id: a }) satisfies PTableColumnIdAxis),\n ...fullColumns.map((c) => ({ type: \"column\", id: c.id }) satisfies PTableColumnIdColumn),\n ];\n\n const validIdSet = new Set(allIds.map((c) => canonicalizeJson<PTableColumnId>(c)));\n\n return (id: string): boolean => {\n return validIdSet.has(id as CanonicalizedJson<PTableColumnId>);\n };\n}\n\n/** Drop filter leaves whose column references are not available in the table. */\nfunction filterFilters(\n filters: Nil | PlDataTableFilters,\n isValidColumnId: (id: string) => boolean,\n): Nil | PlDataTableFilters {\n if (isNil(filters)) return filters;\n\n const isLeafValid = (leaf: PlDataTableFilterSpecLeaf): boolean => {\n if (leaf.type === undefined) return true;\n if (\"column\" in leaf && !isValidColumnId(leaf.column)) return false;\n if (\"rhs\" in leaf && !isValidColumnId(leaf.rhs)) return false;\n return true;\n };\n\n const prune = (node: PlDataTableFilterNode): Nil | PlDataTableFilterNode => {\n if (node.type === \"and\" || node.type === \"or\") {\n const kept = node.filters\n .map((f) => prune(f))\n .filter((f): f is PlDataTableFilterNode => !isNil(f));\n return { type: node.type, filters: kept };\n }\n if (node.type === \"not\") {\n const inner = prune(node.filter);\n return isNil(inner) ? undefined : { type: \"not\", filter: inner };\n }\n return isLeafValid(node) ? node : undefined;\n };\n\n return prune(filters) as Nil | PlDataTableFilters;\n}\n\n/** Merge two filter trees into one AND-combined tree. Returns the non-nil one if the other is nil. */\nfunction concatFilters(\n a: Nil | PlDataTableFilters,\n b: Nil | PlDataTableFilters,\n): Nil | PlDataTableFilters {\n if (isNil(a)) return b;\n if (isNil(b)) return a;\n return { ...a, filters: [...a.filters, ...b.filters] };\n}\n\n/** Pick user sorting from state if non-empty, otherwise fall back to options default. */\nfunction resolveSorting(\n userSorting: PTableSorting[],\n defaultSorting: Nil | PTableSorting[],\n): PTableSorting[] {\n return (isEmpty(userSorting) ? defaultSorting : userSorting) ?? [];\n}\n\n/** Drop sorting entries whose column is not available in the table. */\nfunction filterSorting(\n sorting: PTableSorting[],\n isValidColumnId: (id: string) => boolean,\n): PTableSorting[] {\n return sorting.filter((s) => isValidColumnId(canonicalizeJson<PTableColumnId>(s.column)));\n}\n\nfunction buildSecondaryGroups(\n direct: TableColumnVariant[],\n linked: TableColumnVariant[],\n): SecondaryGroup<undefined | PColumnDataUniversal>[] {\n return [\n ...direct.map(\n (c): SecondaryGroup<undefined | PColumnDataUniversal> => ({\n entries: [{ column: resolveSnapshot(c.column), qualifications: c.qualifications?.forHit }],\n primaryQualifications: c.qualifications?.forQueries,\n }),\n ),\n ...linked.map(\n (lc): SecondaryGroup<undefined | PColumnDataUniversal> => ({\n entries: [\n {\n column: resolveSnapshot(lc.column),\n linkers: lc.path?.map((s) => resolveSnapshot(s.linker)),\n qualifications: lc.qualifications?.forHit,\n },\n ],\n primaryQualifications: lc.qualifications?.forQueries,\n }),\n ),\n ];\n}\n\n/** Determine which columns should be hidden based on state or optional-column defaults. */\nfunction computeHiddenColumns(\n columns: { readonly id: PObjectId; readonly spec: PColumnSpec }[],\n sorting: Nil | PTableSorting[],\n filters: Nil | PlDataTableFilters,\n hiddenSpecs: Nil | PTableColumnId[],\n): Set<PObjectId> {\n const alwaysHidden = columns.filter((c) => isColumnHidden(c.spec)).map((c) => c.id);\n const optionalHidden = !isNil(hiddenSpecs)\n ? hiddenSpecs.filter((s): s is PTableColumnIdColumn => s.type === \"column\").map((s) => s.id)\n : columns.filter((c) => isColumnOptional(c.spec)).map((c) => c.id);\n const initial = [...alwaysHidden, ...optionalHidden];\n const preserved = collectPreservedColumnIds(sorting, filters);\n\n return new Set(initial.filter((id) => !preserved.has(id)));\n}\n\n/** Collect IDs of columns that must remain visible (sorted, filtered). */\nfunction collectPreservedColumnIds(\n sorting: Nil | PTableSorting[],\n filters: Nil | PlDataTableFilters,\n): Set<PObjectId> {\n const sortedIds = (sorting ?? [])\n .map((s) => s.column)\n .filter((c): c is PTableColumnIdColumn => c.type === \"column\")\n .map((c) => c.id);\n\n const filterIds = !isNil(filters)\n ? collectFilterSpecColumns(filters).flatMap((c) => {\n const obj = parseJson(c);\n return obj.type === \"column\" ? [obj.id] : [];\n })\n : [];\n\n return new Set<PObjectId>([...sortedIds, ...filterIds]);\n}\n\n/** Filter annotated columns to only visible ones, re-matching label columns for the visible subset. */\nfunction buildVisibleColumns(\n annotated: AnnotatedColumnGroups,\n hiddenColumns: Set<PObjectId>,\n): VisibleColumns {\n const direct = annotated.direct.filter((c) => !hiddenColumns.has(c.column.id));\n const linked = annotated.linked.filter((c) => !hiddenColumns.has(c.column.id));\n return { direct, linked };\n}\n\n/** Resolve a ColumnSnapshot to a PColumn with lazily-evaluated data. */\nfunction resolveSnapshot(\n snap: ColumnSnapshot<PObjectId>,\n): PColumn<undefined | PColumnDataUniversal> {\n return { id: snap.id, spec: snap.spec, data: snap.data?.get() };\n}\n\n/** Remap column references in sorting entries. */\nfunction remapSortingColumnIds(\n sorting: Nil | PTableSorting[],\n columns: TableColumnVariant[],\n): Nil | PTableSorting[] {\n return sorting?.flatMap((s) => {\n if (s.column.type === \"axis\") return [s]; // Axis references are unaffected by column ID remapping\n\n const id = s.column.id;\n const column = columns.find((c) => (getField(c, \"originalId\") ?? c.column.id) === id);\n if (column === undefined) return [];\n\n return [\n {\n ...s,\n column: {\n type: \"column\" as const,\n id: column.column.id,\n },\n },\n ];\n });\n}\n\ntype PlDataTableFilterNode = FilterSpecNode<PlDataTableFilterSpecLeaf>;\n\n/** Remap column references in a filter tree. */\nfunction remapFilterColumnIds(\n filters: Nil | PlDataTableFilters,\n columns: TableColumnVariant[],\n): Nil | PlDataTableFilters {\n if (isNil(filters)) return filters;\n\n const map = (\n tableColumnId: CanonicalizedJson<PTableColumnId>,\n ): CanonicalizedJson<PTableColumnId> => {\n const parsed = parseJson<PTableColumnId>(tableColumnId);\n if (parsed.type === \"axis\") return tableColumnId; // Axis references are unaffected by column ID remapping\n\n const originalId = parsed.id;\n const column =\n columns.find((c) => (getField(c, \"originalId\") ?? c.column.id) === originalId) ??\n throwError(`Column ID \"${parsed.id}\" in filters does not match any discovered column`);\n\n return canonicalizeJson<PTableColumnId>({\n type: \"column\",\n id: column.column.id,\n });\n };\n\n return traverseFilterSpec(filters, {\n leaf: (leaf): PlDataTableFilterNode => {\n if (leaf.type === undefined) return leaf;\n const result = { ...leaf };\n if (\"column\" in result) result.column = map(result.column);\n if (\"rhs\" in result) result.rhs = map(result.rhs);\n return result;\n },\n and: (results): PlDataTableFilterNode => ({ type: \"and\", filters: results }),\n or: (results): PlDataTableFilterNode => ({ type: \"or\", filters: results }),\n not: (result): PlDataTableFilterNode => ({ type: \"not\", filter: result }),\n }) as PlDataTableFilters;\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createPlDataTableV3.d.ts","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPlDataTableV3.ts"],"mappings":";;;;;;;;;;;KA8CY,0BAAA;EACV,UAAA,GAAa,kBAAA;EAEb,OAAA,EAAS,GAAA,GAAM,0BAAA,GAA6B,kBAAA;EAC5C,OAAA,GAAU,kBAAA;EACV,OAAA,GAAU,aAAA;EACV,eAAA;EAEA,aAAA,GAAgB,mBAAA;EAChB,cAAA,GAAiB,qBAAA;AAAA;;KAIP,qBAAA;EACV,OAAA,GAAU,mBAAA,GAAsB,mBAAA;EAChC,OAAA,GAAU,mBAAA,GAAsB,mBAAA;EAChC,IAAA,GAAO,YAAA;EACP,OAAA;AAAA;AAAA,KAGU,qBAAA;EAX4B,uFAatC,QAAA,GAAW,eAAA,IArBE;EAuBb,UAAA,GAAa,
|
|
1
|
+
{"version":3,"file":"createPlDataTableV3.d.ts","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPlDataTableV3.ts"],"mappings":";;;;;;;;;;;KA8CY,0BAAA;EACV,UAAA,GAAa,kBAAA;EAEb,OAAA,EAAS,GAAA,GAAM,0BAAA,GAA6B,kBAAA;EAC5C,OAAA,GAAU,kBAAA;EACV,OAAA,GAAU,aAAA;EACV,eAAA;EAEA,aAAA,GAAgB,mBAAA;EAChB,cAAA,GAAiB,qBAAA;AAAA;;KAIP,qBAAA;EACV,OAAA,GAAU,mBAAA,GAAsB,mBAAA;EAChC,OAAA,GAAU,mBAAA,GAAsB,mBAAA;EAChC,IAAA,GAAO,YAAA;EACP,OAAA;AAAA;AAAA,KAGU,qBAAA;EAX4B,uFAatC,QAAA,GAAW,eAAA,IArBE;EAuBb,UAAA,GAAa,oBAAoB;AAAA;AAAA,KAGvB,eAAA;EACV,KAAA,EAAO,aAAA,GAAgB,cAAc,EAxBrC;EA0BA,QAAA;AAAA;AAAA,KAGU,oBAAA;EACV,KAAA,EAAO,aAAA,GAAgB,cAAc;EACrC,UAAA;AAAA;AAAA,KAGU,aAAA,IAAiB,IAAiB,EAAX,WAAW;AAAA,iBAE9B,mBAAA,OACd,GAAA,EAAK,aAAA,CAAc,CAAA,EAAG,CAAA,GACtB,OAAA,EAAS,0BAAA,GACR,gBAAA;AAAA,KAgIS,kBAAA,IACR,aAAA,CAAc,SAAA,KACb,aAAA,CAAc,mBAAA;EAAA,SAAkC,UAAA,EAAY,SAAA;AAAA;EAAA,SAEtD,SAAA;AAAA"}
|
|
@@ -221,7 +221,7 @@ function collectPreservedColumnIds(sorting, filters) {
|
|
|
221
221
|
const obj = parseJson(c);
|
|
222
222
|
return obj.type === "column" ? [obj.id] : [];
|
|
223
223
|
}) : [];
|
|
224
|
-
return new Set([...sortedIds, ...filterIds]);
|
|
224
|
+
return /* @__PURE__ */ new Set([...sortedIds, ...filterIds]);
|
|
225
225
|
}
|
|
226
226
|
/** Filter annotated columns to only visible ones, re-matching label columns for the visible subset. */
|
|
227
227
|
function buildVisibleColumns(annotated, hiddenColumns) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createPlDataTableV3.js","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPlDataTableV3.ts"],"sourcesContent":["import type {\n AxisId,\n CanonicalizedJson,\n FilterSpecNode,\n PColumn,\n PObjectId,\n PTableColumnId,\n PTableColumnIdAxis,\n PTableColumnIdColumn,\n PTableSorting,\n PColumnSpec,\n MultiColumnSelector,\n PFrameSpecDriver,\n DiscoveredPColumnId,\n} from \"@milaboratories/pl-model-common\";\nimport { canonicalizeJson, getAxisId, parseJson, uniqueBy } from \"@milaboratories/pl-model-common\";\nimport { collectFilterSpecColumns, traverseFilterSpec } from \"../../../filters/traverse\";\nimport type { RenderCtxBase, PColumnDataUniversal } from \"../../../render\";\nimport { isEmpty } from \"es-toolkit/compat\";\nimport type { PlDataTableFilters, PlDataTableFilterSpecLeaf, PlDataTableModel } from \"../typesV7\";\nimport { upgradePlDataTableStateV2 } from \"../state-migration\";\nimport type { PlDataTableStateV2 } from \"../state-migration\";\nimport type { ColumnSelector, ColumnSnapshot, ColumnVariant, MatchingMode } from \"../../../columns\";\nimport type { DeriveLabelsOptions } from \"../../../labels/derive_distinct_labels\";\nimport {\n deriveAllLabels,\n deriveAllTooltips,\n evaluateRules,\n isColumnHidden,\n isColumnOptional,\n withHidenAxesAnnotations,\n withLabelAnnotations,\n withTableVisualAnnotations,\n withInfoAnnotations,\n withDataStatusAnnotations,\n} from \"./utils\";\nimport type { PrimaryEntry, SecondaryGroup } from \"./createPTableDefV3\";\nimport { createPTableDefV3 } from \"./createPTableDefV3\";\nimport {\n discoverLabelColumnVariants,\n discoverTableColumnSnaphots,\n type DiscoverTableColumnOptions,\n} from \"./discoverColumns\";\nimport { getField, isNil, isPlainObject, throwError, type Nil } from \"@milaboratories/helpers\";\nimport { flow } from \"es-toolkit\";\n\nexport type createPlDataTableOptionsV3 = {\n tableState?: PlDataTableStateV2;\n\n columns: Nil | DiscoverTableColumnOptions | TableColumnVariant[];\n filters?: PlDataTableFilters;\n sorting?: PTableSorting[];\n primaryJoinType?: \"inner\" | \"full\";\n\n labelsOptions?: DeriveLabelsOptions;\n displayOptions?: ColumnsDisplayOptions;\n};\n\n/** Structured source config — selectors/anchors instead of raw ColumnSource. */\nexport type ColumnsSelectorConfig = {\n include?: MultiColumnSelector | MultiColumnSelector[];\n exclude?: MultiColumnSelector | MultiColumnSelector[];\n mode?: MatchingMode;\n maxHops?: number;\n};\n\nexport type ColumnsDisplayOptions = {\n /** Column ordering rules. Higher priority = further left. First matching rule wins. */\n ordering?: ColumnOrderRule[];\n /** Column visibility rules. First matching rule wins. Unmatched columns use default visibility. */\n visibility?: ColumnVisibilityRule[];\n};\n\nexport type ColumnOrderRule = {\n match: ColumnMatcher | ColumnSelector;\n /** Higher number = further left in table */\n priority: number;\n};\n\nexport type ColumnVisibilityRule = {\n match: ColumnMatcher | ColumnSelector;\n visibility: \"default\" | \"optional\" | \"hidden\";\n};\n\nexport type ColumnMatcher = (spec: PColumnSpec) => boolean;\n\nexport function createPlDataTableV3<A, U>(\n ctx: RenderCtxBase<A, U>,\n options: createPlDataTableOptionsV3,\n): PlDataTableModel | undefined {\n const pframeSpec = ctx.getService(\"pframeSpec\");\n const state = upgradePlDataTableStateV2(options.tableState);\n const primaryJoinType = options.primaryJoinType ?? \"full\";\n\n const discovered = isPlainObject(options.columns)\n ? discoverTableColumnSnaphots(ctx, options.columns)\n : isNil(options.columns)\n ? options.columns\n : uniqueBy(\n [...options.columns, ...discoverLabelColumnVariants(ctx, options.columns)],\n (c) => c.column.id,\n );\n if (isNil(discovered) || discovered.length === 0) return undefined;\n\n const splited = splitDiscoveredColumns(discovered);\n\n const derivedLabels = deriveAllLabels({\n columns: discovered\n .map((dc) => ({\n id: dc.column.id,\n spec: dc.column.spec,\n linkerPath: dc.path,\n qualifications: dc.qualifications,\n }))\n .filter((v) => !isColumnHidden(v.spec)),\n deriveLabelsOptions: {\n includeNativeLabel: true,\n ...options.labelsOptions,\n },\n });\n\n const derivedTooltips = deriveAllTooltips({\n columns: discovered.map((dc) => ({\n id: dc.column.id,\n originalId: getField(dc, \"originalId\"),\n spec: dc.column.spec,\n linkerPath: dc.path,\n qualifications: dc.qualifications,\n })),\n });\n\n const annotated = annotateColumnGroups({\n pframeSpec,\n ...splited,\n derivedLabels,\n derivedTooltips,\n displayOptions: options.displayOptions,\n });\n\n const primarySnapshots = annotated.direct.filter((c) => c.isPrimary);\n const secondarySnapshots = annotated.direct.filter((c) => !c.isPrimary);\n\n if (primarySnapshots.length === 0) return undefined;\n\n const columnIsAvailable = createColumnValidationById([\n ...annotated.direct.map((v) => v.column),\n ...annotated.linked.flatMap((lc) => [...(lc.path ?? []).map((s) => s.linker), lc.column]),\n ]);\n\n const remapedDefaultFilters = remapFilterColumnIds(options.filters, discovered);\n const filters = filterFilters(\n concatFilters(\n state.pTableParams.filters,\n state.pTableParams.defaultFilters ?? remapedDefaultFilters,\n ),\n columnIsAvailable,\n );\n\n const sorting = filterSorting(\n resolveSorting(state.pTableParams.sorting, remapSortingColumnIds(options.sorting, discovered)),\n columnIsAvailable,\n );\n\n const primaryEntries: PrimaryEntry<undefined | PColumnDataUniversal>[] = primarySnapshots.map(\n (v) => ({ column: resolveSnapshot(v.column) }),\n );\n const secondaryGroups: SecondaryGroup<undefined | PColumnDataUniversal>[] = buildSecondaryGroups(\n secondarySnapshots,\n annotated.linked,\n );\n const fullDef = createPTableDefV3({\n primaryJoinType,\n primary: primaryEntries,\n secondary: secondaryGroups,\n filters,\n sorting,\n });\n\n const fullHandle = ctx.createPTableV2(fullDef);\n // TODO: is workaround for dropdown suggestions.\n // Pframe have not equivalent data for columns relativly to Ptable\n const pframeHandle = ctx.createPFrame([\n ...annotated.direct.map((v) => resolveSnapshot(v.column)),\n ...annotated.linked.map((v) => resolveSnapshot(v.column)),\n ...collectLinkerSnapshots(annotated.linked).map(resolveSnapshot),\n ]);\n\n const hiddenSpecs = state.pTableParams.hiddenColIds;\n const hiddenColumnIds = computeHiddenColumns(\n [...annotated.direct, ...annotated.linked].map((v) => v.column),\n sorting,\n filters,\n hiddenSpecs,\n );\n\n const visible = buildVisibleColumns(annotated, hiddenColumnIds);\n const visibleDef = createPTableDefV3({\n primaryJoinType,\n primary: primaryEntries,\n secondary: buildSecondaryGroups(\n visible.direct.filter((c) => !c.isPrimary),\n visible.linked,\n ),\n filters,\n sorting,\n });\n const visibleHandle = ctx.createPTableV2(visibleDef);\n\n return {\n sourceId: state.pTableParams.sourceId,\n fullTableHandle: fullHandle,\n fullPframeHandle: pframeHandle,\n visibleTableHandle: visibleHandle,\n defaultFilters: remapedDefaultFilters,\n } satisfies PlDataTableModel;\n}\n\nexport type TableColumnVariant = (\n | ColumnVariant<PObjectId>\n | (ColumnVariant<DiscoveredPColumnId> & { readonly originalId: PObjectId })\n) & {\n readonly isPrimary?: boolean;\n};\n\ntype SplitDiscoveredColumns = {\n readonly direct: TableColumnVariant[];\n readonly linked: TableColumnVariant[];\n};\n\ntype AnnotatedColumnGroups = {\n readonly direct: TableColumnVariant[];\n readonly linked: TableColumnVariant[];\n};\n\ntype VisibleColumns = {\n readonly direct: TableColumnVariant[];\n readonly linked: TableColumnVariant[];\n};\n\n/** Split discovered columns into direct (no linker path) and linked (with linker path). */\nfunction splitDiscoveredColumns(columns: TableColumnVariant[]): SplitDiscoveredColumns {\n const direct = columns.filter((dc) => (dc.path?.length ?? 0) === 0);\n const linked = columns.filter((dc) => (dc.path?.length ?? 0) > 0);\n return { direct, linked };\n}\n\n/** All linker snapshots across the given linked columns, deduped by id. */\nfunction collectLinkerSnapshots(linked: TableColumnVariant[]): ColumnSnapshot<PObjectId>[] {\n return uniqueBy(\n linked.flatMap((lc) => (lc.path ?? []).map((s) => s.linker)),\n (c) => c.id,\n );\n}\n\n/**\n * Annotate all column groups with derived labels and display-rule annotations.\n * Evaluates `displayOptions` rules against all discovered columns (direct,\n * linked, labels, linkers) and writes the winning visibility/priority into\n * column annotations via `withTableVisualAnnotations`.\n */\nfunction annotateColumnGroups(params: {\n direct: TableColumnVariant[];\n linked: TableColumnVariant[];\n derivedLabels: Record<string, string>;\n derivedTooltips: Record<string, string>;\n displayOptions?: ColumnsDisplayOptions;\n pframeSpec: PFrameSpecDriver;\n}): AnnotatedColumnGroups {\n const { direct, linked, derivedLabels, derivedTooltips, displayOptions, pframeSpec } = params;\n\n const allColumnsForRules = [\n ...direct.map((v) => v.column),\n ...linked.map((v) => v.column),\n ...collectLinkerSnapshots(linked),\n ];\n const visibilityByColId = evaluateRules(\n displayOptions?.visibility ?? [],\n allColumnsForRules,\n pframeSpec,\n );\n const orderByColId = evaluateRules(\n displayOptions?.ordering ?? [],\n allColumnsForRules,\n pframeSpec,\n );\n\n const directAnnotated = liftToVariantColumns(\n direct,\n flow(\n (cols) => withDataStatusAnnotations(cols),\n (cols) => withLabelAnnotations(derivedLabels, cols),\n (cols) => withInfoAnnotations(derivedTooltips, cols),\n (cols) => withTableVisualAnnotations(visibilityByColId, orderByColId, cols),\n ),\n );\n\n const linkedAnnotated = liftToVariantColumns(\n linked,\n flow(\n (cols) => withDataStatusAnnotations(cols),\n (cols) => withHidenAxesAnnotations(cols),\n (cols) => withLabelAnnotations(derivedLabels, cols),\n (cols) => withInfoAnnotations(derivedTooltips, cols),\n (cols) => withTableVisualAnnotations(visibilityByColId, orderByColId, cols),\n ),\n ).map((lc) => ({ ...lc, path: annotateLinkerPath(derivedLabels, lc.path) }));\n\n return {\n direct: directAnnotated,\n linked: linkedAnnotated,\n };\n}\n\n/** Lift a snapshot-array transform so it runs on the inner `column` of each variant. */\nfunction liftToVariantColumns<\n V extends { readonly column: ColumnSnapshot<PObjectId | DiscoveredPColumnId> },\n>(\n variants: V[],\n fn: (\n cols: ColumnSnapshot<PObjectId | DiscoveredPColumnId>[],\n ) => ColumnSnapshot<PObjectId | DiscoveredPColumnId>[],\n): V[] {\n const cols = fn(variants.map((v) => v.column));\n if (cols.length !== variants.length)\n throw new Error(\n `liftToVariantColumns: fn must preserve array length (got ${cols.length}, expected ${variants.length})`,\n );\n return variants.map((v, i) => ({ ...v, column: cols[i] }));\n}\n\nfunction annotateLinkerPath(\n derivedLabels: Record<string, string>,\n path: TableColumnVariant[\"path\"],\n): TableColumnVariant[\"path\"] {\n if (isNil(path) || path.length === 0) return path;\n const annotatedLinkers = withHidenAxesAnnotations(\n withLabelAnnotations(\n derivedLabels,\n path.map((s) => s.linker),\n ),\n );\n return path.map((s, i) => ({ ...s, linker: annotatedLinkers[i] }));\n}\n\n/** Build an index of all valid column IDs (axes + columns) for filter/sorting validation. */\nfunction createColumnValidationById(\n fullColumns: { readonly id: PObjectId; readonly spec: PColumnSpec }[],\n) {\n const axisIds = uniqueBy(\n fullColumns.flatMap((c) => c.spec.axesSpec.map(getAxisId)),\n (a) => canonicalizeJson<AxisId>(a),\n );\n\n const allIds: PTableColumnId[] = [\n ...axisIds.map((a) => ({ type: \"axis\", id: a }) satisfies PTableColumnIdAxis),\n ...fullColumns.map((c) => ({ type: \"column\", id: c.id }) satisfies PTableColumnIdColumn),\n ];\n\n const validIdSet = new Set(allIds.map((c) => canonicalizeJson<PTableColumnId>(c)));\n\n return (id: string): boolean => {\n return validIdSet.has(id as CanonicalizedJson<PTableColumnId>);\n };\n}\n\n/** Drop filter leaves whose column references are not available in the table. */\nfunction filterFilters(\n filters: Nil | PlDataTableFilters,\n isValidColumnId: (id: string) => boolean,\n): Nil | PlDataTableFilters {\n if (isNil(filters)) return filters;\n\n const isLeafValid = (leaf: PlDataTableFilterSpecLeaf): boolean => {\n if (leaf.type === undefined) return true;\n if (\"column\" in leaf && !isValidColumnId(leaf.column)) return false;\n if (\"rhs\" in leaf && !isValidColumnId(leaf.rhs)) return false;\n return true;\n };\n\n const prune = (node: PlDataTableFilterNode): Nil | PlDataTableFilterNode => {\n if (node.type === \"and\" || node.type === \"or\") {\n const kept = node.filters\n .map((f) => prune(f))\n .filter((f): f is PlDataTableFilterNode => !isNil(f));\n return { type: node.type, filters: kept };\n }\n if (node.type === \"not\") {\n const inner = prune(node.filter);\n return isNil(inner) ? undefined : { type: \"not\", filter: inner };\n }\n return isLeafValid(node) ? node : undefined;\n };\n\n return prune(filters) as Nil | PlDataTableFilters;\n}\n\n/** Merge two filter trees into one AND-combined tree. Returns the non-nil one if the other is nil. */\nfunction concatFilters(\n a: Nil | PlDataTableFilters,\n b: Nil | PlDataTableFilters,\n): Nil | PlDataTableFilters {\n if (isNil(a)) return b;\n if (isNil(b)) return a;\n return { ...a, filters: [...a.filters, ...b.filters] };\n}\n\n/** Pick user sorting from state if non-empty, otherwise fall back to options default. */\nfunction resolveSorting(\n userSorting: PTableSorting[],\n defaultSorting: Nil | PTableSorting[],\n): PTableSorting[] {\n return (isEmpty(userSorting) ? defaultSorting : userSorting) ?? [];\n}\n\n/** Drop sorting entries whose column is not available in the table. */\nfunction filterSorting(\n sorting: PTableSorting[],\n isValidColumnId: (id: string) => boolean,\n): PTableSorting[] {\n return sorting.filter((s) => isValidColumnId(canonicalizeJson<PTableColumnId>(s.column)));\n}\n\nfunction buildSecondaryGroups(\n direct: TableColumnVariant[],\n linked: TableColumnVariant[],\n): SecondaryGroup<undefined | PColumnDataUniversal>[] {\n return [\n ...direct.map(\n (c): SecondaryGroup<undefined | PColumnDataUniversal> => ({\n entries: [{ column: resolveSnapshot(c.column), qualifications: c.qualifications?.forHit }],\n primaryQualifications: c.qualifications?.forQueries,\n }),\n ),\n ...linked.map(\n (lc): SecondaryGroup<undefined | PColumnDataUniversal> => ({\n entries: [\n {\n column: resolveSnapshot(lc.column),\n linkers: lc.path?.map((s) => resolveSnapshot(s.linker)),\n qualifications: lc.qualifications?.forHit,\n },\n ],\n primaryQualifications: lc.qualifications?.forQueries,\n }),\n ),\n ];\n}\n\n/** Determine which columns should be hidden based on state or optional-column defaults. */\nfunction computeHiddenColumns(\n columns: { readonly id: PObjectId; readonly spec: PColumnSpec }[],\n sorting: Nil | PTableSorting[],\n filters: Nil | PlDataTableFilters,\n hiddenSpecs: Nil | PTableColumnId[],\n): Set<PObjectId> {\n const alwaysHidden = columns.filter((c) => isColumnHidden(c.spec)).map((c) => c.id);\n const optionalHidden = !isNil(hiddenSpecs)\n ? hiddenSpecs.filter((s): s is PTableColumnIdColumn => s.type === \"column\").map((s) => s.id)\n : columns.filter((c) => isColumnOptional(c.spec)).map((c) => c.id);\n const initial = [...alwaysHidden, ...optionalHidden];\n const preserved = collectPreservedColumnIds(sorting, filters);\n\n return new Set(initial.filter((id) => !preserved.has(id)));\n}\n\n/** Collect IDs of columns that must remain visible (sorted, filtered). */\nfunction collectPreservedColumnIds(\n sorting: Nil | PTableSorting[],\n filters: Nil | PlDataTableFilters,\n): Set<PObjectId> {\n const sortedIds = (sorting ?? [])\n .map((s) => s.column)\n .filter((c): c is PTableColumnIdColumn => c.type === \"column\")\n .map((c) => c.id);\n\n const filterIds = !isNil(filters)\n ? collectFilterSpecColumns(filters).flatMap((c) => {\n const obj = parseJson(c);\n return obj.type === \"column\" ? [obj.id] : [];\n })\n : [];\n\n return new Set<PObjectId>([...sortedIds, ...filterIds]);\n}\n\n/** Filter annotated columns to only visible ones, re-matching label columns for the visible subset. */\nfunction buildVisibleColumns(\n annotated: AnnotatedColumnGroups,\n hiddenColumns: Set<PObjectId>,\n): VisibleColumns {\n const direct = annotated.direct.filter((c) => !hiddenColumns.has(c.column.id));\n const linked = annotated.linked.filter((c) => !hiddenColumns.has(c.column.id));\n return { direct, linked };\n}\n\n/** Resolve a ColumnSnapshot to a PColumn with lazily-evaluated data. */\nfunction resolveSnapshot(\n snap: ColumnSnapshot<PObjectId>,\n): PColumn<undefined | PColumnDataUniversal> {\n return { id: snap.id, spec: snap.spec, data: snap.data?.get() };\n}\n\n/** Remap column references in sorting entries. */\nfunction remapSortingColumnIds(\n sorting: Nil | PTableSorting[],\n columns: TableColumnVariant[],\n): Nil | PTableSorting[] {\n return sorting?.flatMap((s) => {\n if (s.column.type === \"axis\") return [s]; // Axis references are unaffected by column ID remapping\n\n const id = s.column.id;\n const column = columns.find((c) => (getField(c, \"originalId\") ?? c.column.id) === id);\n if (column === undefined) return [];\n\n return [\n {\n ...s,\n column: {\n type: \"column\" as const,\n id: column.column.id,\n },\n },\n ];\n });\n}\n\ntype PlDataTableFilterNode = FilterSpecNode<PlDataTableFilterSpecLeaf>;\n\n/** Remap column references in a filter tree. */\nfunction remapFilterColumnIds(\n filters: Nil | PlDataTableFilters,\n columns: TableColumnVariant[],\n): Nil | PlDataTableFilters {\n if (isNil(filters)) return filters;\n\n const map = (\n tableColumnId: CanonicalizedJson<PTableColumnId>,\n ): CanonicalizedJson<PTableColumnId> => {\n const parsed = parseJson<PTableColumnId>(tableColumnId);\n if (parsed.type === \"axis\") return tableColumnId; // Axis references are unaffected by column ID remapping\n\n const originalId = parsed.id;\n const column =\n columns.find((c) => (getField(c, \"originalId\") ?? c.column.id) === originalId) ??\n throwError(`Column ID \"${parsed.id}\" in filters does not match any discovered column`);\n\n return canonicalizeJson<PTableColumnId>({\n type: \"column\",\n id: column.column.id,\n });\n };\n\n return traverseFilterSpec(filters, {\n leaf: (leaf): PlDataTableFilterNode => {\n if (leaf.type === undefined) return leaf;\n const result = { ...leaf };\n if (\"column\" in result) result.column = map(result.column);\n if (\"rhs\" in result) result.rhs = map(result.rhs);\n return result;\n },\n and: (results): PlDataTableFilterNode => ({ type: \"and\", filters: results }),\n or: (results): PlDataTableFilterNode => ({ type: \"or\", filters: results }),\n not: (result): PlDataTableFilterNode => ({ type: \"not\", filter: result }),\n }) as PlDataTableFilters;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"createPlDataTableV3.js","names":[],"sources":["../../../../src/components/PlDataTable/createPlDataTable/createPlDataTableV3.ts"],"sourcesContent":["import type {\n AxisId,\n CanonicalizedJson,\n FilterSpecNode,\n PColumn,\n PObjectId,\n PTableColumnId,\n PTableColumnIdAxis,\n PTableColumnIdColumn,\n PTableSorting,\n PColumnSpec,\n MultiColumnSelector,\n PFrameSpecDriver,\n DiscoveredPColumnId,\n} from \"@milaboratories/pl-model-common\";\nimport { canonicalizeJson, getAxisId, parseJson, uniqueBy } from \"@milaboratories/pl-model-common\";\nimport { collectFilterSpecColumns, traverseFilterSpec } from \"../../../filters/traverse\";\nimport type { RenderCtxBase, PColumnDataUniversal } from \"../../../render\";\nimport { isEmpty } from \"es-toolkit/compat\";\nimport type { PlDataTableFilters, PlDataTableFilterSpecLeaf, PlDataTableModel } from \"../typesV7\";\nimport { upgradePlDataTableStateV2 } from \"../state-migration\";\nimport type { PlDataTableStateV2 } from \"../state-migration\";\nimport type { ColumnSelector, ColumnSnapshot, ColumnVariant, MatchingMode } from \"../../../columns\";\nimport type { DeriveLabelsOptions } from \"../../../labels/derive_distinct_labels\";\nimport {\n deriveAllLabels,\n deriveAllTooltips,\n evaluateRules,\n isColumnHidden,\n isColumnOptional,\n withHidenAxesAnnotations,\n withLabelAnnotations,\n withTableVisualAnnotations,\n withInfoAnnotations,\n withDataStatusAnnotations,\n} from \"./utils\";\nimport type { PrimaryEntry, SecondaryGroup } from \"./createPTableDefV3\";\nimport { createPTableDefV3 } from \"./createPTableDefV3\";\nimport {\n discoverLabelColumnVariants,\n discoverTableColumnSnaphots,\n type DiscoverTableColumnOptions,\n} from \"./discoverColumns\";\nimport { getField, isNil, isPlainObject, throwError, type Nil } from \"@milaboratories/helpers\";\nimport { flow } from \"es-toolkit\";\n\nexport type createPlDataTableOptionsV3 = {\n tableState?: PlDataTableStateV2;\n\n columns: Nil | DiscoverTableColumnOptions | TableColumnVariant[];\n filters?: PlDataTableFilters;\n sorting?: PTableSorting[];\n primaryJoinType?: \"inner\" | \"full\";\n\n labelsOptions?: DeriveLabelsOptions;\n displayOptions?: ColumnsDisplayOptions;\n};\n\n/** Structured source config — selectors/anchors instead of raw ColumnSource. */\nexport type ColumnsSelectorConfig = {\n include?: MultiColumnSelector | MultiColumnSelector[];\n exclude?: MultiColumnSelector | MultiColumnSelector[];\n mode?: MatchingMode;\n maxHops?: number;\n};\n\nexport type ColumnsDisplayOptions = {\n /** Column ordering rules. Higher priority = further left. First matching rule wins. */\n ordering?: ColumnOrderRule[];\n /** Column visibility rules. First matching rule wins. Unmatched columns use default visibility. */\n visibility?: ColumnVisibilityRule[];\n};\n\nexport type ColumnOrderRule = {\n match: ColumnMatcher | ColumnSelector;\n /** Higher number = further left in table */\n priority: number;\n};\n\nexport type ColumnVisibilityRule = {\n match: ColumnMatcher | ColumnSelector;\n visibility: \"default\" | \"optional\" | \"hidden\";\n};\n\nexport type ColumnMatcher = (spec: PColumnSpec) => boolean;\n\nexport function createPlDataTableV3<A, U>(\n ctx: RenderCtxBase<A, U>,\n options: createPlDataTableOptionsV3,\n): PlDataTableModel | undefined {\n const pframeSpec = ctx.getService(\"pframeSpec\");\n const state = upgradePlDataTableStateV2(options.tableState);\n const primaryJoinType = options.primaryJoinType ?? \"full\";\n\n const discovered = isPlainObject(options.columns)\n ? discoverTableColumnSnaphots(ctx, options.columns)\n : isNil(options.columns)\n ? options.columns\n : uniqueBy(\n [...options.columns, ...discoverLabelColumnVariants(ctx, options.columns)],\n (c) => c.column.id,\n );\n if (isNil(discovered) || discovered.length === 0) return undefined;\n\n const splited = splitDiscoveredColumns(discovered);\n\n const derivedLabels = deriveAllLabels({\n columns: discovered\n .map((dc) => ({\n id: dc.column.id,\n spec: dc.column.spec,\n linkerPath: dc.path,\n qualifications: dc.qualifications,\n }))\n .filter((v) => !isColumnHidden(v.spec)),\n deriveLabelsOptions: {\n includeNativeLabel: true,\n ...options.labelsOptions,\n },\n });\n\n const derivedTooltips = deriveAllTooltips({\n columns: discovered.map((dc) => ({\n id: dc.column.id,\n originalId: getField(dc, \"originalId\"),\n spec: dc.column.spec,\n linkerPath: dc.path,\n qualifications: dc.qualifications,\n })),\n });\n\n const annotated = annotateColumnGroups({\n pframeSpec,\n ...splited,\n derivedLabels,\n derivedTooltips,\n displayOptions: options.displayOptions,\n });\n\n const primarySnapshots = annotated.direct.filter((c) => c.isPrimary);\n const secondarySnapshots = annotated.direct.filter((c) => !c.isPrimary);\n\n if (primarySnapshots.length === 0) return undefined;\n\n const columnIsAvailable = createColumnValidationById([\n ...annotated.direct.map((v) => v.column),\n ...annotated.linked.flatMap((lc) => [...(lc.path ?? []).map((s) => s.linker), lc.column]),\n ]);\n\n const remapedDefaultFilters = remapFilterColumnIds(options.filters, discovered);\n const filters = filterFilters(\n concatFilters(\n state.pTableParams.filters,\n state.pTableParams.defaultFilters ?? remapedDefaultFilters,\n ),\n columnIsAvailable,\n );\n\n const sorting = filterSorting(\n resolveSorting(state.pTableParams.sorting, remapSortingColumnIds(options.sorting, discovered)),\n columnIsAvailable,\n );\n\n const primaryEntries: PrimaryEntry<undefined | PColumnDataUniversal>[] = primarySnapshots.map(\n (v) => ({ column: resolveSnapshot(v.column) }),\n );\n const secondaryGroups: SecondaryGroup<undefined | PColumnDataUniversal>[] = buildSecondaryGroups(\n secondarySnapshots,\n annotated.linked,\n );\n const fullDef = createPTableDefV3({\n primaryJoinType,\n primary: primaryEntries,\n secondary: secondaryGroups,\n filters,\n sorting,\n });\n\n const fullHandle = ctx.createPTableV2(fullDef);\n // TODO: is workaround for dropdown suggestions.\n // Pframe have not equivalent data for columns relativly to Ptable\n const pframeHandle = ctx.createPFrame([\n ...annotated.direct.map((v) => resolveSnapshot(v.column)),\n ...annotated.linked.map((v) => resolveSnapshot(v.column)),\n ...collectLinkerSnapshots(annotated.linked).map(resolveSnapshot),\n ]);\n\n const hiddenSpecs = state.pTableParams.hiddenColIds;\n const hiddenColumnIds = computeHiddenColumns(\n [...annotated.direct, ...annotated.linked].map((v) => v.column),\n sorting,\n filters,\n hiddenSpecs,\n );\n\n const visible = buildVisibleColumns(annotated, hiddenColumnIds);\n const visibleDef = createPTableDefV3({\n primaryJoinType,\n primary: primaryEntries,\n secondary: buildSecondaryGroups(\n visible.direct.filter((c) => !c.isPrimary),\n visible.linked,\n ),\n filters,\n sorting,\n });\n const visibleHandle = ctx.createPTableV2(visibleDef);\n\n return {\n sourceId: state.pTableParams.sourceId,\n fullTableHandle: fullHandle,\n fullPframeHandle: pframeHandle,\n visibleTableHandle: visibleHandle,\n defaultFilters: remapedDefaultFilters,\n } satisfies PlDataTableModel;\n}\n\nexport type TableColumnVariant = (\n | ColumnVariant<PObjectId>\n | (ColumnVariant<DiscoveredPColumnId> & { readonly originalId: PObjectId })\n) & {\n readonly isPrimary?: boolean;\n};\n\ntype SplitDiscoveredColumns = {\n readonly direct: TableColumnVariant[];\n readonly linked: TableColumnVariant[];\n};\n\ntype AnnotatedColumnGroups = {\n readonly direct: TableColumnVariant[];\n readonly linked: TableColumnVariant[];\n};\n\ntype VisibleColumns = {\n readonly direct: TableColumnVariant[];\n readonly linked: TableColumnVariant[];\n};\n\n/** Split discovered columns into direct (no linker path) and linked (with linker path). */\nfunction splitDiscoveredColumns(columns: TableColumnVariant[]): SplitDiscoveredColumns {\n const direct = columns.filter((dc) => (dc.path?.length ?? 0) === 0);\n const linked = columns.filter((dc) => (dc.path?.length ?? 0) > 0);\n return { direct, linked };\n}\n\n/** All linker snapshots across the given linked columns, deduped by id. */\nfunction collectLinkerSnapshots(linked: TableColumnVariant[]): ColumnSnapshot<PObjectId>[] {\n return uniqueBy(\n linked.flatMap((lc) => (lc.path ?? []).map((s) => s.linker)),\n (c) => c.id,\n );\n}\n\n/**\n * Annotate all column groups with derived labels and display-rule annotations.\n * Evaluates `displayOptions` rules against all discovered columns (direct,\n * linked, labels, linkers) and writes the winning visibility/priority into\n * column annotations via `withTableVisualAnnotations`.\n */\nfunction annotateColumnGroups(params: {\n direct: TableColumnVariant[];\n linked: TableColumnVariant[];\n derivedLabels: Record<string, string>;\n derivedTooltips: Record<string, string>;\n displayOptions?: ColumnsDisplayOptions;\n pframeSpec: PFrameSpecDriver;\n}): AnnotatedColumnGroups {\n const { direct, linked, derivedLabels, derivedTooltips, displayOptions, pframeSpec } = params;\n\n const allColumnsForRules = [\n ...direct.map((v) => v.column),\n ...linked.map((v) => v.column),\n ...collectLinkerSnapshots(linked),\n ];\n const visibilityByColId = evaluateRules(\n displayOptions?.visibility ?? [],\n allColumnsForRules,\n pframeSpec,\n );\n const orderByColId = evaluateRules(\n displayOptions?.ordering ?? [],\n allColumnsForRules,\n pframeSpec,\n );\n\n const directAnnotated = liftToVariantColumns(\n direct,\n flow(\n (cols) => withDataStatusAnnotations(cols),\n (cols) => withLabelAnnotations(derivedLabels, cols),\n (cols) => withInfoAnnotations(derivedTooltips, cols),\n (cols) => withTableVisualAnnotations(visibilityByColId, orderByColId, cols),\n ),\n );\n\n const linkedAnnotated = liftToVariantColumns(\n linked,\n flow(\n (cols) => withDataStatusAnnotations(cols),\n (cols) => withHidenAxesAnnotations(cols),\n (cols) => withLabelAnnotations(derivedLabels, cols),\n (cols) => withInfoAnnotations(derivedTooltips, cols),\n (cols) => withTableVisualAnnotations(visibilityByColId, orderByColId, cols),\n ),\n ).map((lc) => ({ ...lc, path: annotateLinkerPath(derivedLabels, lc.path) }));\n\n return {\n direct: directAnnotated,\n linked: linkedAnnotated,\n };\n}\n\n/** Lift a snapshot-array transform so it runs on the inner `column` of each variant. */\nfunction liftToVariantColumns<\n V extends { readonly column: ColumnSnapshot<PObjectId | DiscoveredPColumnId> },\n>(\n variants: V[],\n fn: (\n cols: ColumnSnapshot<PObjectId | DiscoveredPColumnId>[],\n ) => ColumnSnapshot<PObjectId | DiscoveredPColumnId>[],\n): V[] {\n const cols = fn(variants.map((v) => v.column));\n if (cols.length !== variants.length)\n throw new Error(\n `liftToVariantColumns: fn must preserve array length (got ${cols.length}, expected ${variants.length})`,\n );\n return variants.map((v, i) => ({ ...v, column: cols[i] }));\n}\n\nfunction annotateLinkerPath(\n derivedLabels: Record<string, string>,\n path: TableColumnVariant[\"path\"],\n): TableColumnVariant[\"path\"] {\n if (isNil(path) || path.length === 0) return path;\n const annotatedLinkers = withHidenAxesAnnotations(\n withLabelAnnotations(\n derivedLabels,\n path.map((s) => s.linker),\n ),\n );\n return path.map((s, i) => ({ ...s, linker: annotatedLinkers[i] }));\n}\n\n/** Build an index of all valid column IDs (axes + columns) for filter/sorting validation. */\nfunction createColumnValidationById(\n fullColumns: { readonly id: PObjectId; readonly spec: PColumnSpec }[],\n) {\n const axisIds = uniqueBy(\n fullColumns.flatMap((c) => c.spec.axesSpec.map(getAxisId)),\n (a) => canonicalizeJson<AxisId>(a),\n );\n\n const allIds: PTableColumnId[] = [\n ...axisIds.map((a) => ({ type: \"axis\", id: a }) satisfies PTableColumnIdAxis),\n ...fullColumns.map((c) => ({ type: \"column\", id: c.id }) satisfies PTableColumnIdColumn),\n ];\n\n const validIdSet = new Set(allIds.map((c) => canonicalizeJson<PTableColumnId>(c)));\n\n return (id: string): boolean => {\n return validIdSet.has(id as CanonicalizedJson<PTableColumnId>);\n };\n}\n\n/** Drop filter leaves whose column references are not available in the table. */\nfunction filterFilters(\n filters: Nil | PlDataTableFilters,\n isValidColumnId: (id: string) => boolean,\n): Nil | PlDataTableFilters {\n if (isNil(filters)) return filters;\n\n const isLeafValid = (leaf: PlDataTableFilterSpecLeaf): boolean => {\n if (leaf.type === undefined) return true;\n if (\"column\" in leaf && !isValidColumnId(leaf.column)) return false;\n if (\"rhs\" in leaf && !isValidColumnId(leaf.rhs)) return false;\n return true;\n };\n\n const prune = (node: PlDataTableFilterNode): Nil | PlDataTableFilterNode => {\n if (node.type === \"and\" || node.type === \"or\") {\n const kept = node.filters\n .map((f) => prune(f))\n .filter((f): f is PlDataTableFilterNode => !isNil(f));\n return { type: node.type, filters: kept };\n }\n if (node.type === \"not\") {\n const inner = prune(node.filter);\n return isNil(inner) ? undefined : { type: \"not\", filter: inner };\n }\n return isLeafValid(node) ? node : undefined;\n };\n\n return prune(filters) as Nil | PlDataTableFilters;\n}\n\n/** Merge two filter trees into one AND-combined tree. Returns the non-nil one if the other is nil. */\nfunction concatFilters(\n a: Nil | PlDataTableFilters,\n b: Nil | PlDataTableFilters,\n): Nil | PlDataTableFilters {\n if (isNil(a)) return b;\n if (isNil(b)) return a;\n return { ...a, filters: [...a.filters, ...b.filters] };\n}\n\n/** Pick user sorting from state if non-empty, otherwise fall back to options default. */\nfunction resolveSorting(\n userSorting: PTableSorting[],\n defaultSorting: Nil | PTableSorting[],\n): PTableSorting[] {\n return (isEmpty(userSorting) ? defaultSorting : userSorting) ?? [];\n}\n\n/** Drop sorting entries whose column is not available in the table. */\nfunction filterSorting(\n sorting: PTableSorting[],\n isValidColumnId: (id: string) => boolean,\n): PTableSorting[] {\n return sorting.filter((s) => isValidColumnId(canonicalizeJson<PTableColumnId>(s.column)));\n}\n\nfunction buildSecondaryGroups(\n direct: TableColumnVariant[],\n linked: TableColumnVariant[],\n): SecondaryGroup<undefined | PColumnDataUniversal>[] {\n return [\n ...direct.map(\n (c): SecondaryGroup<undefined | PColumnDataUniversal> => ({\n entries: [{ column: resolveSnapshot(c.column), qualifications: c.qualifications?.forHit }],\n primaryQualifications: c.qualifications?.forQueries,\n }),\n ),\n ...linked.map(\n (lc): SecondaryGroup<undefined | PColumnDataUniversal> => ({\n entries: [\n {\n column: resolveSnapshot(lc.column),\n linkers: lc.path?.map((s) => resolveSnapshot(s.linker)),\n qualifications: lc.qualifications?.forHit,\n },\n ],\n primaryQualifications: lc.qualifications?.forQueries,\n }),\n ),\n ];\n}\n\n/** Determine which columns should be hidden based on state or optional-column defaults. */\nfunction computeHiddenColumns(\n columns: { readonly id: PObjectId; readonly spec: PColumnSpec }[],\n sorting: Nil | PTableSorting[],\n filters: Nil | PlDataTableFilters,\n hiddenSpecs: Nil | PTableColumnId[],\n): Set<PObjectId> {\n const alwaysHidden = columns.filter((c) => isColumnHidden(c.spec)).map((c) => c.id);\n const optionalHidden = !isNil(hiddenSpecs)\n ? hiddenSpecs.filter((s): s is PTableColumnIdColumn => s.type === \"column\").map((s) => s.id)\n : columns.filter((c) => isColumnOptional(c.spec)).map((c) => c.id);\n const initial = [...alwaysHidden, ...optionalHidden];\n const preserved = collectPreservedColumnIds(sorting, filters);\n\n return new Set(initial.filter((id) => !preserved.has(id)));\n}\n\n/** Collect IDs of columns that must remain visible (sorted, filtered). */\nfunction collectPreservedColumnIds(\n sorting: Nil | PTableSorting[],\n filters: Nil | PlDataTableFilters,\n): Set<PObjectId> {\n const sortedIds = (sorting ?? [])\n .map((s) => s.column)\n .filter((c): c is PTableColumnIdColumn => c.type === \"column\")\n .map((c) => c.id);\n\n const filterIds = !isNil(filters)\n ? collectFilterSpecColumns(filters).flatMap((c) => {\n const obj = parseJson(c);\n return obj.type === \"column\" ? [obj.id] : [];\n })\n : [];\n\n return new Set<PObjectId>([...sortedIds, ...filterIds]);\n}\n\n/** Filter annotated columns to only visible ones, re-matching label columns for the visible subset. */\nfunction buildVisibleColumns(\n annotated: AnnotatedColumnGroups,\n hiddenColumns: Set<PObjectId>,\n): VisibleColumns {\n const direct = annotated.direct.filter((c) => !hiddenColumns.has(c.column.id));\n const linked = annotated.linked.filter((c) => !hiddenColumns.has(c.column.id));\n return { direct, linked };\n}\n\n/** Resolve a ColumnSnapshot to a PColumn with lazily-evaluated data. */\nfunction resolveSnapshot(\n snap: ColumnSnapshot<PObjectId>,\n): PColumn<undefined | PColumnDataUniversal> {\n return { id: snap.id, spec: snap.spec, data: snap.data?.get() };\n}\n\n/** Remap column references in sorting entries. */\nfunction remapSortingColumnIds(\n sorting: Nil | PTableSorting[],\n columns: TableColumnVariant[],\n): Nil | PTableSorting[] {\n return sorting?.flatMap((s) => {\n if (s.column.type === \"axis\") return [s]; // Axis references are unaffected by column ID remapping\n\n const id = s.column.id;\n const column = columns.find((c) => (getField(c, \"originalId\") ?? c.column.id) === id);\n if (column === undefined) return [];\n\n return [\n {\n ...s,\n column: {\n type: \"column\" as const,\n id: column.column.id,\n },\n },\n ];\n });\n}\n\ntype PlDataTableFilterNode = FilterSpecNode<PlDataTableFilterSpecLeaf>;\n\n/** Remap column references in a filter tree. */\nfunction remapFilterColumnIds(\n filters: Nil | PlDataTableFilters,\n columns: TableColumnVariant[],\n): Nil | PlDataTableFilters {\n if (isNil(filters)) return filters;\n\n const map = (\n tableColumnId: CanonicalizedJson<PTableColumnId>,\n ): CanonicalizedJson<PTableColumnId> => {\n const parsed = parseJson<PTableColumnId>(tableColumnId);\n if (parsed.type === \"axis\") return tableColumnId; // Axis references are unaffected by column ID remapping\n\n const originalId = parsed.id;\n const column =\n columns.find((c) => (getField(c, \"originalId\") ?? c.column.id) === originalId) ??\n throwError(`Column ID \"${parsed.id}\" in filters does not match any discovered column`);\n\n return canonicalizeJson<PTableColumnId>({\n type: \"column\",\n id: column.column.id,\n });\n };\n\n return traverseFilterSpec(filters, {\n leaf: (leaf): PlDataTableFilterNode => {\n if (leaf.type === undefined) return leaf;\n const result = { ...leaf };\n if (\"column\" in result) result.column = map(result.column);\n if (\"rhs\" in result) result.rhs = map(result.rhs);\n return result;\n },\n and: (results): PlDataTableFilterNode => ({ type: \"and\", filters: results }),\n or: (results): PlDataTableFilterNode => ({ type: \"or\", filters: results }),\n not: (result): PlDataTableFilterNode => ({ type: \"not\", filter: result }),\n }) as PlDataTableFilters;\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
require("../../../_virtual/_rolldown/runtime.cjs");
|
|
2
1
|
const require_column_snapshot_provider = require("../../../columns/column_snapshot_provider.cjs");
|
|
3
2
|
const require_column_collection_builder = require("../../../columns/column_collection_builder.cjs");
|
|
4
3
|
const require_ctx_column_sources = require("../../../columns/ctx_column_sources.cjs");
|