@platforma-sdk/ui-vue 1.63.12 → 1.65.0
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/.turbo/turbo-build.log +38 -32
- package/.turbo/turbo-formatter$colon$check.log +2 -2
- package/.turbo/turbo-linter$colon$check.log +2 -2
- package/.turbo/turbo-types$colon$check.log +1 -1
- package/CHANGELOG.md +24 -0
- package/dist/components/PlAdvancedFilter/FilterEditor.js.map +1 -1
- package/dist/components/PlAdvancedFilter/FilterEditor.style.js.map +1 -1
- package/dist/components/PlAdvancedFilter/FilterEditor.vue.d.ts +3 -8
- package/dist/components/PlAdvancedFilter/FilterEditor.vue.d.ts.map +1 -1
- package/dist/components/PlAdvancedFilter/FilterEditor.vue2.js +164 -151
- package/dist/components/PlAdvancedFilter/FilterEditor.vue2.js.map +1 -1
- package/dist/components/PlAdvancedFilter/PlAdvancedFilter.js.map +1 -1
- package/dist/components/PlAdvancedFilter/PlAdvancedFilter.style.js +8 -7
- package/dist/components/PlAdvancedFilter/PlAdvancedFilter.style.js.map +1 -1
- package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue.css +1 -1
- package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue.d.ts +24 -8
- package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue.d.ts.map +1 -1
- package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue2.js +176 -110
- package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue2.js.map +1 -1
- package/dist/components/PlAdvancedFilter/types.d.ts +2 -0
- package/dist/components/PlAdvancedFilter/types.d.ts.map +1 -1
- package/dist/components/PlAgDataTable/PlAgDataTableV2.js.map +1 -1
- package/dist/components/PlAgDataTable/PlAgDataTableV2.style.js.map +1 -1
- package/dist/components/PlAgDataTable/PlAgDataTableV2.vue.d.ts.map +1 -1
- package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js +116 -109
- package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js.map +1 -1
- package/dist/components/PlAgDataTable/compositions/useFilterableColumns.js +3 -3
- package/dist/components/PlAgDataTable/compositions/useFilterableColumns.js.map +1 -1
- package/dist/components/PlAgDataTable/sources/table-source-v2.d.ts +6 -5
- package/dist/components/PlAgDataTable/sources/table-source-v2.d.ts.map +1 -1
- package/dist/components/PlAgDataTable/sources/table-source-v2.js +122 -88
- package/dist/components/PlAgDataTable/sources/table-source-v2.js.map +1 -1
- package/dist/components/PlAgDataTable/sources/table-state-v2.d.ts +6 -3
- package/dist/components/PlAgDataTable/sources/table-state-v2.d.ts.map +1 -1
- package/dist/components/PlAgDataTable/sources/table-state-v2.js +182 -97
- package/dist/components/PlAgDataTable/sources/table-state-v2.js.map +1 -1
- package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.js.map +1 -1
- package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.style.js.map +1 -1
- package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue.d.ts.map +1 -1
- package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue2.js +37 -42
- package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue2.js.map +1 -1
- package/dist/components/PlAgGridColumnManager/useFilteredItems.d.ts +5 -5
- package/dist/components/PlAgGridColumnManager/useFilteredItems.d.ts.map +1 -1
- package/dist/components/PlAgGridColumnManager/useFilteredItems.js +2 -2
- package/dist/components/PlAgGridColumnManager/useFilteredItems.js.map +1 -1
- package/dist/components/PlAgGridColumnManager/useGridColumns.js +14 -0
- package/dist/components/PlAgGridColumnManager/useGridColumns.js.map +1 -0
- package/dist/components/PlAnnotations/components/FilterSidebar.js.map +1 -1
- package/dist/components/PlAnnotations/components/FilterSidebar.style.js.map +1 -1
- package/dist/components/PlAnnotations/components/FilterSidebar.vue.d.ts.map +1 -1
- package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js +7 -4
- package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js.map +1 -1
- package/dist/components/PlTableFilters/PlTableFiltersV2.js.map +1 -1
- package/dist/components/PlTableFilters/PlTableFiltersV2.style.js +5 -1
- package/dist/components/PlTableFilters/PlTableFiltersV2.style.js.map +1 -1
- package/dist/components/PlTableFilters/PlTableFiltersV2.vue.css +1 -1
- package/dist/components/PlTableFilters/PlTableFiltersV2.vue.d.ts +7 -9
- package/dist/components/PlTableFilters/PlTableFiltersV2.vue.d.ts.map +1 -1
- package/dist/components/PlTableFilters/PlTableFiltersV2.vue2.js +72 -47
- package/dist/components/PlTableFilters/PlTableFiltersV2.vue2.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/util/helpers/dist/functions.js.map +1 -1
- package/dist/lib/util/helpers/dist/objects.js +4 -1
- package/dist/lib/util/helpers/dist/objects.js.map +1 -1
- package/package.json +8 -7
- package/src/components/PlAdvancedFilter/FilterEditor.vue +99 -55
- package/src/components/PlAdvancedFilter/PlAdvancedFilter.vue +163 -95
- package/src/components/PlAdvancedFilter/types.ts +6 -1
- package/src/components/PlAgDataTable/PlAgDataTableV2.vue +26 -7
- package/src/components/PlAgDataTable/compositions/useFilterableColumns.ts +4 -4
- package/src/components/PlAgDataTable/sources/table-source-v2.ts +231 -131
- package/src/components/PlAgDataTable/sources/table-state-v2.ts +249 -70
- package/src/components/PlAgGridColumnManager/PlAgGridColumnManager.vue +17 -35
- package/src/components/PlAgGridColumnManager/useFilteredItems.ts +9 -11
- package/src/components/PlAgGridColumnManager/useGridColumns.ts +26 -0
- package/src/components/PlAnnotations/components/FilterSidebar.vue +3 -2
- package/src/components/PlTableFilters/PlTableFiltersV2.vue +76 -26
- package/src/index.ts +4 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlAgDataTableV2.vue_vue_type_script_setup_true_lang.js","names":["$style","$slots"],"sources":["../../../src/components/PlAgDataTable/PlAgDataTableV2.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { promiseTimeout, isJsonEqual } from \"@milaboratories/helpers\";\nimport type {\n AxisId,\n PlDataTableGridStateCore,\n PlDataTableStateV2,\n PlSelectionModel,\n PlTableColumnIdJson,\n PTableColumnSpec,\n PTableKey,\n} from \"@platforma-sdk/model\";\nimport {\n getRawPlatformaInstance,\n createPlSelectionModel,\n matchAxisId,\n getAxisId,\n canonicalizeJson,\n isAbortError,\n isColumnOptional,\n} from \"@platforma-sdk/model\";\nimport type { CellRendererSelectorFunc, GridApi, GridState } from \"ag-grid-enterprise\";\nimport { AgGridVue } from \"ag-grid-vue3\";\nimport { computed, effectScope, nextTick, ref, toRefs, watch, watchEffect } from \"vue\";\nimport PlAgCsvExporter from \"../PlAgCsvExporter/PlAgCsvExporter.vue\";\nimport { PlAgGridColumnManager } from \"../PlAgGridColumnManager\";\nimport PlTableFiltersV2 from \"../PlTableFilters/PlTableFiltersV2.vue\";\nimport { PlTableFastSearch } from \"../PlTableFastSearch\";\nimport PlAgDataTableSheets from \"./PlAgDataTableSheets.vue\";\nimport PlAgRowCount from \"./PlAgRowCount.vue\";\nimport { DeferredCircular, ensureNodeVisible } from \"./sources/focus-row\";\nimport { PlAgDataTableRowNumberColId } from \"./sources/row-number\";\nimport type { PlAgCellButtonAxisParams } from \"./sources/table-source-v2\";\nimport { calculateGridOptions } from \"./sources/table-source-v2\";\nimport { useTableState } from \"./sources/table-state-v2\";\nimport type {\n PlAgDataTableV2Controller,\n PlAgDataTableV2Row,\n PlAgOverlayLoadingParams,\n PlAgOverlayNoRowsParams,\n PlDataTableSettingsV2,\n PlDataTableSheetsSettings,\n PlTableRowId,\n} from \"./types\";\nimport { useFilterableColumns } from \"./compositions/useFilterableColumns\";\nimport { useGrid } from \"./compositions/useGrid\";\nimport { AgGridTheme } from \"../../AgGridVue/AgGridTheme\";\n\nconst tableState = defineModel<PlDataTableStateV2>({\n required: true,\n});\n/** Warning: selection model value updates are ignored, use updateSelection instead */\nconst selection = defineModel<PlSelectionModel>(\"selection\");\nconst props = defineProps<{\n /** Required component settings */\n settings: Readonly<PlDataTableSettingsV2>;\n\n /**\n * The disableColumnsPanel prop controls the display of a button that activates\n * the columns management panel in the table. To make the button functional\n * and visible, you must also include the PlAgDataTableToolsPanel component in your layout.\n * This component serves as the target for teleporting the button.\n */\n disableColumnsPanel?: boolean;\n\n /**\n * The disableFiltersPanel prop controls the display of a button that activates\n * the filters management panel in the table. To make the button functional\n * and visible, you must also include the PlAgDataTableToolsPanel component in your layout.\n * This component serves as the target for teleporting the button.\n */\n disableFiltersPanel?: boolean;\n\n /**\n * The showExportButton prop controls the display of a button that allows\n * to export table data in CSV format. To make the button functional\n * and visible, you must also include the PlAgDataTableToolsPanel component in your layout.\n * This component serves as the target for teleporting the button.\n */\n showExportButton?: boolean;\n\n /**\n * The AxisId property is used to configure and display the PlAgTextAndButtonCell component\n */\n showCellButtonForAxisId?: AxisId;\n\n /**\n * If cellButtonInvokeRowsOnDoubleClick = true, clicking a button inside the row\n * triggers the doubleClick event for the entire row.\n *\n * If cellButtonInvokeRowsOnDoubleClick = false, the doubleClick event for the row\n * is not triggered, but will triggered cellButtonClicked event with (key: PTableRowKey) argument.\n */\n cellButtonInvokeRowsOnDoubleClick?: boolean;\n\n /** @see {@link PlAgOverlayLoadingParams.loadingText} */\n loadingText?: string;\n\n /** @see {@link PlAgOverlayLoadingParams.runningText} */\n runningText?: string;\n\n /** @see {@link PlAgOverlayLoadingParams.notReadyText} */\n notReadyText?: string;\n\n /** @see {@link PlAgOverlayNoRowsParams.text} */\n noRowsText?: string;\n\n /**\n * Callback to override the default renderer for a given cell.\n * @see https://www.ag-grid.com/vue-data-grid/component-cell-renderer/#dynamic-component-selection\n */\n cellRendererSelector?: CellRendererSelectorFunc<PlAgDataTableV2Row>;\n}>();\nconst { settings } = toRefs(props);\nconst emit = defineEmits<{\n rowDoubleClicked: [key?: PTableKey];\n cellButtonClicked: [key?: PTableKey];\n newDataRendered: [];\n}>();\n\nconst dataRenderedTracker = new DeferredCircular<GridApi<PlAgDataTableV2Row>>();\nconst { gridApi, gridOptions } = useGrid({\n selection,\n noRowsText: props.noRowsText,\n runningText: props.runningText,\n loadingText: props.loadingText,\n notReadyText: props.notReadyText,\n cellRendererSelector: props.cellRendererSelector,\n});\nlet isReloading = false;\ngridOptions.value.onGridPreDestroyed = (event) => {\n if (!isReloading) {\n gridOptions.value.initialState = gridState.value = normalizeColumnVisibility(\n makePartialState(event.api.getState()),\n gridState.value,\n event.api,\n );\n }\n gridApi.value = null;\n};\ngridOptions.value.onRowDoubleClicked = (event) => {\n if (event.data && event.data.axesKey) emit(\"rowDoubleClicked\", event.data.axesKey);\n};\ngridOptions.value.onStateUpdated = (event) => {\n const partialState = normalizeColumnVisibility(\n makePartialState(event.state),\n gridState.value,\n event.api,\n );\n // We have to keep initialState synchronized with gridState for gridState recovery after key updating.\n gridOptions.value.initialState = gridState.value = partialState;\n\n if (!isJsonEqual(event.sources, [\"columnSizing\"])) {\n event.api.autoSizeColumns(\n event.api\n .getAllDisplayedColumns()\n .filter((column) => column.getColId() !== PlAgDataTableRowNumberColId),\n );\n }\n};\n\nconst [filterableColumns, visibleFilterableColumns] = useFilterableColumns(\n () => settings.value.sourceId,\n () => gridOptions.value.columnDefs ?? null,\n);\nconst { gridState, sheetsState, filtersState, searchString } = useTableState(\n tableState,\n settings,\n visibleFilterableColumns,\n);\nconst sheetsSettings = computed<PlDataTableSheetsSettings>(() => {\n const settingsCopy = { ...settings.value };\n return settingsCopy.sourceId !== null\n ? {\n sheets: settingsCopy.sheets ?? [],\n cachedState: [...sheetsState.value],\n }\n : {\n sheets: [],\n cachedState: [],\n };\n});\ngridOptions.value.initialState = gridState.value;\n\n// Restore proper types erased by AgGrid\nfunction makePartialState(state: GridState): PlDataTableGridStateCore {\n return {\n columnOrder: state.columnOrder as\n | {\n orderedColIds: PlTableColumnIdJson[];\n }\n | undefined,\n sort: state.sort as\n | {\n sortModel: {\n colId: PlTableColumnIdJson;\n sort: \"asc\" | \"desc\";\n }[];\n }\n | undefined,\n columnVisibility: state.columnVisibility as\n | {\n hiddenColIds: PlTableColumnIdJson[];\n }\n | undefined,\n };\n}\n\n// AG Grid returns columnVisibility: undefined when all columns are visible.\n// We need to distinguish \"no state yet\" (use isColumnOptional defaults) from\n// \"user explicitly showed all columns\" (store []). This function normalizes\n// the undefined from AG Grid based on the previous state.\nfunction normalizeColumnVisibility(\n partialState: PlDataTableGridStateCore,\n prevState: PlDataTableGridStateCore,\n api: GridApi<PlAgDataTableV2Row>,\n): PlDataTableGridStateCore {\n if (partialState.columnVisibility !== undefined) return partialState;\n\n if (prevState.columnVisibility !== undefined) {\n // Had explicit visibility state before → user made all columns visible → store [].\n return { ...partialState, columnVisibility: { hiddenColIds: [] } };\n }\n\n // No previous explicit state → compute defaults from current columns\n // to replicate: hide: hiddenColIds?.includes(colId) ?? isColumnOptional(spec.spec)\n const defaultHidden = getDefaultHiddenColIds(api);\n if (defaultHidden.length > 0) {\n return { ...partialState, columnVisibility: { hiddenColIds: defaultHidden } };\n }\n\n return partialState;\n}\n\nfunction getDefaultHiddenColIds(api: GridApi<PlAgDataTableV2Row>): PlTableColumnIdJson[] {\n const cols = api.getAllGridColumns();\n if (!cols) return [];\n return cols\n .filter((col) => {\n const spec = col.getColDef().context as PTableColumnSpec | undefined;\n return spec && isColumnOptional(spec.spec);\n })\n .map((col) => col.getColId() as PlTableColumnIdJson);\n}\n\n// Normalize columnVisibility for comparison: undefined and { hiddenColIds: [] } are equivalent.\nfunction stateForReloadCompare(state: PlDataTableGridStateCore): PlDataTableGridStateCore {\n const cv = state.columnVisibility;\n const normalizedCv = !cv || cv.hiddenColIds.length === 0 ? undefined : state.columnVisibility;\n return { ...state, columnVisibility: normalizedCv };\n}\n\n// Reload AgGrid when new state arrives from server\nconst reloadKey = ref(0);\nwatch(\n () => [gridApi.value, gridState.value] as const,\n ([gridApi, gridState]) => {\n if (!gridApi || gridApi.isDestroyed()) return;\n const selfState = makePartialState(gridApi.getState());\n if (\n !isJsonEqual(gridState, {}) &&\n !isJsonEqual(stateForReloadCompare(gridState), stateForReloadCompare(selfState))\n ) {\n isReloading = true;\n gridOptions.value.initialState = gridState;\n ++reloadKey.value;\n nextTick(() => {\n isReloading = false;\n });\n }\n },\n);\n\n// Make cellRendererSelector reactive\nconst cellRendererSelector = computed(() => props.cellRendererSelector ?? null);\nwatch(\n () => [gridApi.value, cellRendererSelector.value] as const,\n ([gridApi, cellRendererSelector]) => {\n if (!gridApi || gridApi.isDestroyed()) return;\n gridApi.setGridOption(\"defaultColDef\", {\n ...gridOptions.value.defaultColDef,\n cellRendererSelector: cellRendererSelector ?? undefined,\n });\n },\n);\n\ndefineExpose<PlAgDataTableV2Controller>({\n focusRow: async (rowKey) => {\n const gridApi = await dataRenderedTracker.promise;\n if (gridApi.isDestroyed()) return false;\n\n return ensureNodeVisible(gridApi, (row) => isJsonEqual(row.data?.axesKey, rowKey));\n },\n updateSelection: async ({ axesSpec, selectedKeys }) => {\n const gridApi = await dataRenderedTracker.promise;\n if (gridApi.isDestroyed()) return false;\n\n const axes = selection.value?.axesSpec;\n if (!axes || axes.length !== axesSpec.length) return false;\n\n const mapping = axesSpec.map((spec) => {\n const id = getAxisId(spec);\n return axes.findIndex((axis) => matchAxisId(axis, id));\n });\n const mappingSet = new Set(mapping);\n if (mappingSet.has(-1) || mappingSet.size !== axesSpec.length) return false;\n\n const selectedNodes = selectedKeys.map((key) =>\n canonicalizeJson<PlTableRowId>(mapping.map((index) => key[index])),\n );\n const oldSelectedKeys = gridApi.getServerSideSelectionState()?.toggledNodes ?? [];\n if (!isJsonEqual(oldSelectedKeys, selectedNodes)) {\n gridApi.setServerSideSelectionState({\n selectAll: false,\n toggledNodes: selectedNodes,\n });\n\n // wait for `onSelectionChanged` to update `selection` model\n const scope = effectScope();\n const { resolve, promise } = Promise.withResolvers();\n scope.run(() => watch(selection, resolve, { once: true }));\n try {\n await promiseTimeout(promise, 500);\n } catch {\n return false;\n } finally {\n scope.stop();\n }\n }\n return true;\n },\n});\n\n// Update AgGrid when settings change\nconst defaultSelection = createPlSelectionModel();\nlet oldSettings: PlDataTableSettingsV2 | null = null;\nconst generation = ref(0);\nwatch(\n () => [gridApi.value, settings.value] as const,\n ([gridApi, settings]) => {\n // Wait for AgGrid reinitialization, gridApi will eventually become initialized\n if (!gridApi || gridApi.isDestroyed()) return;\n // Verify that this is not a false watch trigger\n if (isJsonEqual(settings, oldSettings)) return;\n ++generation.value;\n try {\n // Hide no rows overlay if it is shown, or else loading overlay will not be shown\n gridApi.hideOverlay();\n dataRenderedTracker.reset();\n\n // No data source selected -> reset state to default\n if (settings.sourceId === null) {\n gridApi.updateGridOptions({\n loading: true,\n loadingOverlayComponentParams: {\n ...gridOptions.value.loadingOverlayComponentParams,\n variant: settings.pending ? \"running\" : \"not-ready\",\n } satisfies PlAgOverlayLoadingParams,\n columnDefs: undefined,\n serverSideDatasource: undefined,\n });\n if (selection.value) {\n if (selection.value && !isJsonEqual(selection.value, defaultSelection)) {\n selection.value = createPlSelectionModel();\n }\n gridApi.setServerSideSelectionState({\n selectAll: false,\n toggledNodes: [],\n });\n }\n return;\n }\n\n // Data source changed -> show full page loader, clear selection\n if (settings.sourceId !== oldSettings?.sourceId) {\n gridApi.updateGridOptions({\n loading: true,\n loadingOverlayComponentParams: {\n ...gridOptions.value.loadingOverlayComponentParams,\n variant: \"loading\",\n } satisfies PlAgOverlayLoadingParams,\n });\n if (selection.value && oldSettings?.sourceId) {\n if (selection.value && !isJsonEqual(selection.value, defaultSelection)) {\n selection.value = createPlSelectionModel();\n }\n gridApi.setServerSideSelectionState({\n selectAll: false,\n toggledNodes: [],\n });\n }\n }\n\n // Model updated -> show skeletons instead of data\n const sourceChanged =\n settings.model?.sourceId && settings.model.sourceId !== settings.sourceId;\n if (!settings.model || sourceChanged) {\n const state = gridApi.getServerSideGroupLevelState();\n const rowCount = !sourceChanged && state.length > 0 ? state[0].rowCount : 1;\n return gridApi.updateGridOptions({\n serverSideDatasource: {\n getRows: (params) => {\n params.success({ rowData: [], rowCount });\n },\n },\n });\n }\n\n // Model ready -> calculate new state\n const stateGeneration = generation.value;\n calculateGridOptions({\n generation,\n pfDriver: getRawPlatformaInstance().pFrameDriver,\n model: settings.model,\n sheets: settings.sheets ?? [],\n dataRenderedTracker,\n hiddenColIds: gridState.value.columnVisibility?.hiddenColIds,\n cellButtonAxisParams: {\n showCellButtonForAxisId: props.showCellButtonForAxisId,\n cellButtonInvokeRowsOnDoubleClick: props.cellButtonInvokeRowsOnDoubleClick,\n trigger: (key?: PTableKey) => emit(\"cellButtonClicked\", key),\n } satisfies PlAgCellButtonAxisParams,\n })\n .then((result) => {\n if (gridApi.isDestroyed() || stateGeneration !== generation.value) return;\n const { axesSpec, ...options } = result;\n gridApi.updateGridOptions({\n ...options,\n });\n if (selection.value) {\n // Update selection if axesSpec changed, as order of axes may have changed and so we need to remap selected keys\n const { axesSpec: oldAxesSpec, selectedKeys: oldSelectedKeys } = selection.value;\n if (!isJsonEqual(oldAxesSpec, axesSpec)) {\n if (!oldAxesSpec || axesSpec.length !== oldAxesSpec.length) {\n const newSelection: PlSelectionModel = { axesSpec, selectedKeys: [] };\n if (!isJsonEqual(selection.value, newSelection)) {\n selection.value = newSelection;\n }\n return gridApi.setServerSideSelectionState({\n selectAll: false,\n toggledNodes: [],\n });\n }\n\n const mapping = oldAxesSpec\n .map(getAxisId)\n .map((id) => axesSpec.findIndex((axis) => matchAxisId(axis, id)));\n const mappingSet = new Set(mapping);\n if (mappingSet.has(-1) || mappingSet.size !== axesSpec.length) {\n const newSelection: PlSelectionModel = { axesSpec, selectedKeys: [] };\n if (!isJsonEqual(selection.value, newSelection)) {\n selection.value = newSelection;\n }\n return gridApi.setServerSideSelectionState({\n selectAll: false,\n toggledNodes: [],\n });\n }\n\n const selectedNodes = oldSelectedKeys.map((key) =>\n mapping.map((index) => key[index]),\n );\n const newSelection: PlSelectionModel = { axesSpec, selectedKeys: selectedNodes };\n if (!isJsonEqual(selection.value, newSelection)) {\n selection.value = newSelection;\n }\n return gridApi.setServerSideSelectionState({\n selectAll: false,\n toggledNodes: selectedNodes.map((key) => canonicalizeJson<PlTableRowId>(key)),\n });\n }\n }\n })\n .catch((error: unknown) => {\n if (gridApi.isDestroyed() || stateGeneration !== generation.value) return;\n if (isAbortError(error)) return;\n console.trace(error);\n })\n .finally(() => {\n if (gridApi.isDestroyed() || stateGeneration !== generation.value) return;\n gridApi.updateGridOptions({\n loading: false,\n });\n });\n dataRenderedTracker.promise.then(() => emit(\"newDataRendered\"));\n } catch (error: unknown) {\n console.trace(error);\n } finally {\n oldSettings = settings;\n }\n },\n);\n\nwatch(\n () => ({\n gridApi: gridApi.value,\n loadingText: props.loadingText,\n runningText: props.runningText,\n notReadyText: props.notReadyText,\n noRowsText: props.noRowsText,\n }),\n ({ gridApi, loadingText, runningText, notReadyText, noRowsText }) => {\n if (!gridApi || gridApi.isDestroyed()) return;\n gridApi.updateGridOptions({\n loadingOverlayComponentParams: {\n ...gridOptions.value.loadingOverlayComponentParams,\n loadingText,\n runningText,\n notReadyText,\n },\n noRowsOverlayComponentParams: {\n ...gridOptions.value.noRowsOverlayComponentParams,\n text: noRowsText,\n },\n });\n },\n);\n\nwatchEffect(() => {\n if (!gridApi.value || gridApi.value?.isDestroyed()) return;\n gridApi.value.updateGridOptions({\n statusBar: gridOptions.value.loading\n ? undefined\n : {\n statusPanels: [{ statusPanel: PlAgRowCount, align: \"left\" }],\n },\n });\n});\n</script>\n\n<template>\n <div :class=\"$style.container\">\n <PlAgGridColumnManager v-if=\"gridApi && !disableColumnsPanel\" :api=\"gridApi\" />\n <PlTableFiltersV2\n v-if=\"!disableFiltersPanel\"\n v-model=\"filtersState\"\n :pframe-handle=\"'model' in settings ? settings?.model?.fullPframeHandle : undefined\"\n :columns=\"filterableColumns\"\n />\n <PlAgCsvExporter v-if=\"gridApi && showExportButton\" :api=\"gridApi\" />\n <PlAgDataTableSheets v-model=\"sheetsState\" :settings=\"sheetsSettings\">\n <template v-if=\"$slots['before-sheets']\" #before>\n <slot name=\"before-sheets\" />\n </template>\n <template v-if=\"$slots['after-sheets']\" #after>\n <slot name=\"after-sheets\" />\n </template>\n </PlAgDataTableSheets>\n <PlTableFastSearch v-model=\"searchString\" />\n <AgGridVue\n :key=\"reloadKey\"\n :theme=\"AgGridTheme\"\n :class=\"$style.grid\"\n :grid-options=\"gridOptions\"\n />\n </div>\n</template>\n\n<style lang=\"css\" module>\n.container {\n display: flex;\n flex-direction: column;\n height: 100%;\n gap: 12px;\n}\n\n.grid {\n flex: 1;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+CA,IAAM,KAAa,EAA+B,GAAA,aAEhD,EAEI,IAAY,EAA6B,GAAC,YAAY,EACtD,IAAQ,GA4DR,EAAE,gBAAa,GAAO,EAAM,EAC5B,IAAO,GAMP,IAAsB,IAAI,IAA+C,EACzE,EAAE,YAAS,mBAAgB,GAAQ;GACvC;GACA,YAAY,EAAM;GAClB,aAAa,EAAM;GACnB,aAAa,EAAM;GACnB,cAAc,EAAM;GACpB,sBAAsB,EAAM;GAC7B,CAAC,EACE,IAAc;AAclB,EAbA,EAAY,MAAM,sBAAsB,MAAU;AAQhD,GAPK,MACH,EAAY,MAAM,eAAe,EAAU,QAAQ,EACjD,EAAiB,EAAM,IAAI,UAAU,CAAC,EACtC,EAAU,OACV,EAAM,IACP,GAEH,EAAQ,QAAQ;KAElB,EAAY,MAAM,sBAAsB,MAAU;AAChD,GAAI,EAAM,QAAQ,EAAM,KAAK,WAAS,EAAK,oBAAoB,EAAM,KAAK,QAAQ;KAEpF,EAAY,MAAM,kBAAkB,MAAU;GAC5C,IAAM,IAAe,EACnB,EAAiB,EAAM,MAAM,EAC7B,EAAU,OACV,EAAM,IACP;AAID,GAFA,EAAY,MAAM,eAAe,EAAU,QAAQ,GAE9C,EAAY,EAAM,SAAS,CAAC,eAAe,CAAC,IAC/C,EAAM,IAAI,gBACR,EAAM,IACH,wBAAuB,CACvB,QAAQ,MAAW,EAAO,UAAU,KAAK,EAA4B,CACzE;;EAIL,IAAM,CAAC,IAAmB,MAA4B,SAC9C,EAAS,MAAM,gBACf,EAAY,MAAM,cAAc,KACvC,EACK,EAAE,cAAW,gBAAa,iBAAc,oBAAiB,EAC7D,IACA,GACA,GACD,EACK,KAAiB,QAA0C;GAC/D,IAAM,IAAe,EAAE,GAAG,EAAS,OAAO;AAC1C,UAAO,EAAa,aAAa,OAK7B;IACE,QAAQ,EAAE;IACV,aAAa,EAAE;IAChB,GAPD;IACE,QAAQ,EAAa,UAAU,EAAE;IACjC,aAAa,CAAC,GAAG,EAAY,MAAM;IACrC;IAKJ;AACF,IAAY,MAAM,eAAe,EAAU;EAG3C,SAAS,EAAiB,GAA4C;AACpE,UAAO;IACL,aAAa,EAAM;IAKnB,MAAM,EAAM;IAQZ,kBAAkB,EAAM;IAKzB;;EAOH,SAAS,EACP,GACA,GACA,GAC0B;AAC1B,OAAI,EAAa,qBAAqB,KAAA,EAAW,QAAO;AAExD,OAAI,EAAU,qBAAqB,KAAA,EAEjC,QAAO;IAAE,GAAG;IAAc,kBAAkB,EAAE,cAAc,EAAE,EAAE;IAAE;GAKpE,IAAM,IAAgB,GAAuB,EAAI;AAKjD,UAJI,EAAc,SAAS,IAClB;IAAE,GAAG;IAAc,kBAAkB,EAAE,cAAc,GAAe;IAAE,GAGxE;;EAGT,SAAS,GAAuB,GAAyD;GACvF,IAAM,IAAO,EAAI,mBAAmB;AAEpC,UADK,IACE,EACJ,QAAQ,MAAQ;IACf,IAAM,IAAO,EAAI,WAAW,CAAC;AAC7B,WAAO,KAAQ,GAAiB,EAAK,KAAK;KAC3C,CACA,KAAK,MAAQ,EAAI,UAAU,CAAwB,GANpC,EAAE;;EAUtB,SAAS,EAAsB,GAA2D;GACxF,IAAM,IAAK,EAAM,kBACX,IAAe,CAAC,KAAM,EAAG,aAAa,WAAW,IAAI,KAAA,IAAY,EAAM;AAC7E,UAAO;IAAE,GAAG;IAAO,kBAAkB;IAAc;;EAIrD,IAAM,IAAY,EAAI,EAAE;AACxB,UACQ,CAAC,EAAQ,OAAO,EAAU,MAAM,GACrC,CAAC,GAAS,OAAe;AACxB,OAAI,CAAC,KAAW,EAAQ,aAAa,CAAE;GACvC,IAAM,IAAY,EAAiB,EAAQ,UAAU,CAAC;AACtD,GACE,CAAC,EAAY,GAAW,EAAE,CAAC,IAC3B,CAAC,EAAY,EAAsB,EAAU,EAAE,EAAsB,EAAU,CAAA,KAE/E,IAAc,IACd,EAAY,MAAM,eAAe,GACjC,EAAE,EAAU,OACZ,SAAe;AACb,QAAc;KACd;IAGP;EAGD,IAAM,KAAuB,QAAe,EAAM,wBAAwB,KAAK;AAY/E,EAXA,QACQ,CAAC,EAAQ,OAAO,GAAqB,MAAM,GAChD,CAAC,GAAS,OAA0B;AAC/B,IAAC,KAAW,EAAQ,aAAa,IACrC,EAAQ,cAAc,iBAAiB;IACrC,GAAG,EAAY,MAAM;IACrB,sBAAsB,KAAwB,KAAA;IAC/C,CAAC;IAEL,EAED,EAAwC;GACtC,UAAU,OAAO,MAAW;IAC1B,IAAM,IAAU,MAAM,EAAoB;AAG1C,WAFI,EAAQ,aAAa,GAAS,KAE3B,GAAkB,IAAU,MAAQ,EAAY,EAAI,MAAM,SAAS,EAAO,CAAC;;GAEpF,iBAAiB,OAAO,EAAE,aAAU,sBAAmB;IACrD,IAAM,IAAU,MAAM,EAAoB;AAC1C,QAAI,EAAQ,aAAa,CAAE,QAAO;IAElC,IAAM,IAAO,EAAU,OAAO;AAC9B,QAAI,CAAC,KAAQ,EAAK,WAAW,EAAS,OAAQ,QAAO;IAErD,IAAM,IAAU,EAAS,KAAK,MAAS;KACrC,IAAM,IAAK,EAAU,EAAK;AAC1B,YAAO,EAAK,WAAW,MAAS,EAAY,GAAM,EAAG,CAAC;MACtD,EACI,IAAa,IAAI,IAAI,EAAQ;AACnC,QAAI,EAAW,IAAI,GAAG,IAAI,EAAW,SAAS,EAAS,OAAQ,QAAO;IAEtE,IAAM,IAAgB,EAAa,KAAK,MACtC,EAA+B,EAAQ,KAAK,MAAU,EAAI,GAAO,CAAC,CACnE;AAED,QAAI,CAAC,EADmB,EAAQ,6BAA6B,EAAE,gBAAgB,EAAE,EAC/C,EAAc,EAAE;AAChD,OAAQ,4BAA4B;MAClC,WAAW;MACX,cAAc;MACf,CAAC;KAGF,IAAM,IAAQ,GAAa,EACrB,EAAE,YAAS,eAAY,QAAQ,eAAe;AACpD,OAAM,UAAU,EAAM,GAAW,GAAS,EAAE,MAAM,IAAM,CAAC,CAAC;AAC1D,SAAI;AACF,YAAM,EAAe,GAAS,IAAI;aAC5B;AACN,aAAO;eACC;AACR,QAAM,MAAM;;;AAGhB,WAAO;;GAEV,CAAC;EAGF,IAAM,IAAmB,GAAwB,EAC7C,IAA4C,MAC1C,IAAa,EAAI,EAAE;SACzB,QACQ,CAAC,EAAQ,OAAO,EAAS,MAAM,GACpC,CAAC,GAAS,OAAc;AAEnB,UAAC,KAAW,EAAQ,aAAa,KAEjC,GAAY,GAAU,EAAY,EACtC;MAAE,EAAW;AACb,QAAI;AAMF,SAJA,EAAQ,aAAa,EACrB,EAAoB,OAAO,EAGvB,EAAS,aAAa,MAAM;AAU9B,MATA,EAAQ,kBAAkB;OACxB,SAAS;OACT,+BAA+B;QAC7B,GAAG,EAAY,MAAM;QACrB,SAAS,EAAS,UAAU,YAAY;QACzC;OACD,YAAY,KAAA;OACZ,sBAAsB,KAAA;OACvB,CAAC,EACE,EAAU,UACR,EAAU,SAAS,CAAC,EAAY,EAAU,OAAO,EAAiB,KACpE,EAAU,QAAQ,GAAwB,GAE5C,EAAQ,4BAA4B;OAClC,WAAW;OACX,cAAc,EAAE;OACjB,CAAC;AAEJ;;AAIF,KAAI,EAAS,aAAa,GAAa,aACrC,EAAQ,kBAAkB;MACxB,SAAS;MACT,+BAA+B;OAC7B,GAAG,EAAY,MAAM;OACrB,SAAS;OACV;MACF,CAAC,EACE,EAAU,SAAS,GAAa,aAC9B,EAAU,SAAS,CAAC,EAAY,EAAU,OAAO,EAAiB,KACpE,EAAU,QAAQ,GAAwB,GAE5C,EAAQ,4BAA4B;MAClC,WAAW;MACX,cAAc,EAAE;MACjB,CAAC;KAKN,IAAM,IACJ,EAAS,OAAO,YAAY,EAAS,MAAM,aAAa,EAAS;AACnE,SAAI,CAAC,EAAS,SAAS,GAAe;MACpC,IAAM,IAAQ,EAAQ,8BAA8B,EAC9C,IAAW,CAAC,KAAiB,EAAM,SAAS,IAAI,EAAM,GAAG,WAAW;AAC1E,aAAO,EAAQ,kBAAkB,EAC/B,sBAAsB,EACpB,UAAU,MAAW;AACnB,SAAO,QAAQ;QAAE,SAAS,EAAE;QAAE;QAAU,CAAC;SAE5C,EACF,CAAC;;KAIJ,IAAM,IAAkB,EAAW;AA2EnC,KA1EA,EAAqB;MACnB;MACA,UAAU,IAAyB,CAAC;MACpC,OAAO,EAAS;MAChB,QAAQ,EAAS,UAAU,EAAE;MAC7B;MACA,cAAc,EAAU,MAAM,kBAAkB;MAChD,sBAAsB;OACpB,yBAAyB,EAAM;OAC/B,mCAAmC,EAAM;OACzC,UAAU,MAAoB,EAAK,qBAAqB,EAAI;OAC7D;MACF,CAAA,CACE,MAAM,MAAW;AAChB,UAAI,EAAQ,aAAa,IAAI,MAAoB,EAAW,MAAO;MACnE,IAAM,EAAE,aAAU,GAAG,MAAY;AAIjC,UAHA,EAAQ,kBAAkB,EACxB,GAAG,GACJ,CAAC,EACE,EAAU,OAAO;OAEnB,IAAM,EAAE,UAAU,GAAa,cAAc,MAAoB,EAAU;AAC3E,WAAI,CAAC,EAAY,GAAa,EAAS,EAAE;AACvC,YAAI,CAAC,KAAe,EAAS,WAAW,EAAY,QAAQ;SAC1D,IAAM,IAAiC;UAAE;UAAU,cAAc,EAAE;UAAE;AAIrE,gBAHK,EAAY,EAAU,OAAO,EAAa,KAC7C,EAAU,QAAQ,IAEb,EAAQ,4BAA4B;UACzC,WAAW;UACX,cAAc,EAAE;UACjB,CAAC;;QAGJ,IAAM,IAAU,EACb,IAAI,EAAS,CACb,KAAK,MAAO,EAAS,WAAW,MAAS,EAAY,GAAM,EAAG,CAAC,CAAC,EAC7D,IAAa,IAAI,IAAI,EAAQ;AACnC,YAAI,EAAW,IAAI,GAAG,IAAI,EAAW,SAAS,EAAS,QAAQ;SAC7D,IAAM,IAAiC;UAAE;UAAU,cAAc,EAAE;UAAE;AAIrE,gBAHK,EAAY,EAAU,OAAO,EAAa,KAC7C,EAAU,QAAQ,IAEb,EAAQ,4BAA4B;UACzC,WAAW;UACX,cAAc,EAAE;UACjB,CAAC;;QAGJ,IAAM,IAAgB,EAAgB,KAAK,MACzC,EAAQ,KAAK,MAAU,EAAI,GAAO,CACnC,EACK,IAAiC;SAAE;SAAU,cAAc;SAAe;AAIhF,eAHK,EAAY,EAAU,OAAO,EAAa,KAC7C,EAAU,QAAQ,IAEb,EAAQ,4BAA4B;SACzC,WAAW;SACX,cAAc,EAAc,KAAK,MAAQ,EAA+B,EAAI,CAAC;SAC9E,CAAC;;;OAGP,CACA,OAAO,MAAmB;AACrB,QAAQ,aAAa,IAAI,MAAoB,EAAW,SACxD,EAAa,EAAM,IACvB,QAAQ,MAAM,EAAM;OACrB,CACA,cAAc;AACT,QAAQ,aAAa,IAAI,MAAoB,EAAW,SAC5D,EAAQ,kBAAkB,EACxB,SAAS,IACV,CAAC;OACF,EACJ,EAAoB,QAAQ,WAAW,EAAK,kBAAkB,CAAC;aACxD,GAAgB;AACvB,aAAQ,MAAM,EAAM;cACZ;AACR,SAAc;;;IAGnB,EAED,SACS;GACL,SAAS,EAAQ;GACjB,aAAa,EAAM;GACnB,aAAa,EAAM;GACnB,cAAc,EAAM;GACpB,YAAY,EAAM;GACnB,IACA,EAAE,YAAS,gBAAa,gBAAa,iBAAc,oBAAiB;AAC/D,IAAC,KAAW,EAAQ,aAAa,IACrC,EAAQ,kBAAkB;IACxB,+BAA+B;KAC7B,GAAG,EAAY,MAAM;KACrB;KACA;KACA;KACD;IACD,8BAA8B;KAC5B,GAAG,EAAY,MAAM;KACrB,MAAM;KACP;IACF,CAAC;IAEL,EAED,QAAkB;AACZ,IAAC,EAAQ,SAAS,EAAQ,OAAO,aAAa,IAClD,EAAQ,MAAM,kBAAkB,EAC9B,WAAW,EAAY,MAAM,UACzB,KAAA,IACA,EACE,cAAc,CAAC;IAAE,aAAa;IAAc,OAAO;IAAQ,CAAC,EAC7D,EACN,CAAC;IACF,kBAIA,GAwBM,OAAA,EAxBA,OAAK,EAAEA,EAAAA,OAAO,UAAS,EAAA,EAAA;GACE,EAAA,EAAO,IAAA,CAAK,EAAA,uBAAA,GAAA,EAAzC,EAA+E,EAAA,EAAA,EAAA;;IAAhB,KAAK,EAAA,EAAO;;GAElE,EAAA,mCAAA,GAAA,EADT,EAKE,GAAA;;gBAHS,EAAA,EAAY;oDAAA,QAAA,IAAA;IACpB,iBAAa,WAAa,EAAA,EAAQ,GAAG,EAAA,EAAQ,EAAE,OAAO,mBAAmB,KAAA;IACzE,SAAS,EAAA,GAAiB;;;;;;GAEN,EAAA,EAAO,IAAI,EAAA,oBAAA,GAAA,EAAlC,EAAqE,GAAA;;IAAhB,KAAK,EAAA,EAAO;;GACjE,EAOsB,GAAA;gBAPQ,EAAA,EAAW;oDAAA,QAAA,IAAA;IAAG,UAAU,GAAA;mBACpCC,EAAAA,OAAM,mBAAA;UAAoB;gBACX,CAA7B,EAA6B,EAAA,QAAA,gBAAA,CAAA,CAAA;;eAEfA,EAAAA,OAAM,kBAAA;UAAmB;gBACX,CAA5B,EAA4B,EAAA,QAAA,eAAA,CAAA,CAAA;;;GAGhC,EAA4C,EAAA,EAAA,EAAA;gBAAhB,EAAA,EAAY;oDAAA,QAAA,IAAA;;SACxC,EAKE,EAAA,GAAA,EAAA;IAJC,KAAK,EAAA;IACL,OAAO,EAAA,GAAW;IAClB,OAAK,EAAED,EAAAA,OAAO,KAAI;IAClB,gBAAc,EAAA,EAAW"}
|
|
1
|
+
{"version":3,"file":"PlAgDataTableV2.vue_vue_type_script_setup_true_lang.js","names":["$style","$slots"],"sources":["../../../src/components/PlAgDataTable/PlAgDataTableV2.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { promiseTimeout, isJsonEqual } from \"@milaboratories/helpers\";\nimport type {\n AxisId,\n PlDataTableGridStateCore,\n PlDataTableStateV2,\n PlSelectionModel,\n PlTableColumnIdJson,\n PTableColumnSpec,\n PTableKey,\n} from \"@platforma-sdk/model\";\nimport {\n getRawPlatformaInstance,\n createPlSelectionModel,\n matchAxisId,\n getAxisId,\n canonicalizeJson,\n isAbortError,\n isColumnOptional,\n} from \"@platforma-sdk/model\";\nimport type { CellRendererSelectorFunc, GridApi, GridState } from \"ag-grid-enterprise\";\nimport { AgGridVue } from \"ag-grid-vue3\";\nimport { computed, effectScope, nextTick, ref, toRefs, watch, watchEffect } from \"vue\";\nimport PlAgCsvExporter from \"../PlAgCsvExporter/PlAgCsvExporter.vue\";\nimport { PlAgGridColumnManager } from \"../PlAgGridColumnManager\";\nimport PlTableFiltersV2 from \"../PlTableFilters/PlTableFiltersV2.vue\";\nimport { PlTableFastSearch } from \"../PlTableFastSearch\";\nimport PlAgDataTableSheets from \"./PlAgDataTableSheets.vue\";\nimport PlAgRowCount from \"./PlAgRowCount.vue\";\nimport { DeferredCircular, ensureNodeVisible } from \"./sources/focus-row\";\nimport { PlAgDataTableRowNumberColId } from \"./sources/row-number\";\nimport type { PlAgCellButtonAxisParams } from \"./sources/table-source-v2\";\nimport { calculateGridOptions } from \"./sources/table-source-v2\";\nimport { useTableState } from \"./sources/table-state-v2\";\nimport type {\n PlAgDataTableV2Controller,\n PlAgDataTableV2Row,\n PlAgOverlayLoadingParams,\n PlAgOverlayNoRowsParams,\n PlDataTableSettingsV2,\n PlDataTableSheetsSettings,\n PlTableRowId,\n} from \"./types\";\nimport { useFilterableColumns } from \"./compositions/useFilterableColumns\";\nimport { useGrid } from \"./compositions/useGrid\";\nimport { AgGridTheme } from \"../../AgGridVue/AgGridTheme\";\n\nconst tableState = defineModel<PlDataTableStateV2>({\n required: true,\n});\n/** Warning: selection model value updates are ignored, use updateSelection instead */\nconst selection = defineModel<PlSelectionModel>(\"selection\");\nconst props = defineProps<{\n /** Required component settings */\n settings: Readonly<PlDataTableSettingsV2>;\n\n /**\n * The disableColumnsPanel prop controls the display of a button that activates\n * the columns management panel in the table. To make the button functional\n * and visible, you must also include the PlAgDataTableToolsPanel component in your layout.\n * This component serves as the target for teleporting the button.\n */\n disableColumnsPanel?: boolean;\n\n /**\n * The disableFiltersPanel prop controls the display of a button that activates\n * the filters management panel in the table. To make the button functional\n * and visible, you must also include the PlAgDataTableToolsPanel component in your layout.\n * This component serves as the target for teleporting the button.\n */\n disableFiltersPanel?: boolean;\n\n /**\n * The showExportButton prop controls the display of a button that allows\n * to export table data in CSV format. To make the button functional\n * and visible, you must also include the PlAgDataTableToolsPanel component in your layout.\n * This component serves as the target for teleporting the button.\n */\n showExportButton?: boolean;\n\n /**\n * The AxisId property is used to configure and display the PlAgTextAndButtonCell component\n */\n showCellButtonForAxisId?: AxisId;\n\n /**\n * If cellButtonInvokeRowsOnDoubleClick = true, clicking a button inside the row\n * triggers the doubleClick event for the entire row.\n *\n * If cellButtonInvokeRowsOnDoubleClick = false, the doubleClick event for the row\n * is not triggered, but will triggered cellButtonClicked event with (key: PTableRowKey) argument.\n */\n cellButtonInvokeRowsOnDoubleClick?: boolean;\n\n /** @see {@link PlAgOverlayLoadingParams.loadingText} */\n loadingText?: string;\n\n /** @see {@link PlAgOverlayLoadingParams.runningText} */\n runningText?: string;\n\n /** @see {@link PlAgOverlayLoadingParams.notReadyText} */\n notReadyText?: string;\n\n /** @see {@link PlAgOverlayNoRowsParams.text} */\n noRowsText?: string;\n\n /**\n * Callback to override the default renderer for a given cell.\n * @see https://www.ag-grid.com/vue-data-grid/component-cell-renderer/#dynamic-component-selection\n */\n cellRendererSelector?: CellRendererSelectorFunc<PlAgDataTableV2Row>;\n}>();\nconst { settings } = toRefs(props);\nconst emit = defineEmits<{\n rowDoubleClicked: [key?: PTableKey];\n cellButtonClicked: [key?: PTableKey];\n newDataRendered: [];\n}>();\n\nconst dataRenderedTracker = new DeferredCircular<GridApi<PlAgDataTableV2Row>>();\nconst { gridApi, gridOptions } = useGrid({\n selection,\n noRowsText: props.noRowsText,\n runningText: props.runningText,\n loadingText: props.loadingText,\n notReadyText: props.notReadyText,\n cellRendererSelector: props.cellRendererSelector,\n});\nlet isReloading = false;\ngridOptions.value.onGridPreDestroyed = (event) => {\n if (!isReloading) {\n gridOptions.value.initialState = gridState.value = normalizeColumnVisibility(\n makePartialState(event.api.getState()),\n gridState.value,\n event.api,\n );\n }\n gridApi.value = null;\n};\ngridOptions.value.onRowDoubleClicked = (event) => {\n if (event.data && event.data.axesKey) emit(\"rowDoubleClicked\", event.data.axesKey);\n};\ngridOptions.value.onStateUpdated = (event) => {\n const partialState = normalizeColumnVisibility(\n makePartialState(event.state),\n gridState.value,\n event.api,\n );\n // We have to keep initialState synchronized with gridState for gridState recovery after key updating.\n gridOptions.value.initialState = gridState.value = partialState;\n\n if (!isJsonEqual(event.sources, [\"columnSizing\"])) {\n event.api.autoSizeColumns(\n event.api\n .getAllDisplayedColumns()\n .filter((column) => column.getColId() !== PlAgDataTableRowNumberColId),\n );\n }\n};\n\nconst [filterableColumns, visibleFilterableColumns] = useFilterableColumns(\n () => settings.value.sourceId,\n () => gridOptions.value.columnDefs ?? null,\n);\nconst defaultFilters = computed(() =>\n settings.value.sourceId !== null ? settings.value.model?.defaultFilters : undefined,\n);\nconst {\n gridState,\n sheetsState,\n searchString,\n filtersState,\n defaultFiltersState,\n resetDefaultFilters,\n} = useTableState(tableState, settings, visibleFilterableColumns, defaultFilters);\nconst sheetsSettings = computed<PlDataTableSheetsSettings>(() => {\n const settingsCopy = { ...settings.value };\n return settingsCopy.sourceId !== null\n ? {\n sheets: settingsCopy.sheets ?? [],\n cachedState: [...sheetsState.value],\n }\n : {\n sheets: [],\n cachedState: [],\n };\n});\ngridOptions.value.initialState = gridState.value;\n\n// Restore proper types erased by AgGrid\nfunction makePartialState(state: GridState): PlDataTableGridStateCore {\n return {\n columnOrder: state.columnOrder as\n | {\n orderedColIds: PlTableColumnIdJson[];\n }\n | undefined,\n sort: state.sort as\n | {\n sortModel: {\n colId: PlTableColumnIdJson;\n sort: \"asc\" | \"desc\";\n }[];\n }\n | undefined,\n columnVisibility: state.columnVisibility as\n | {\n hiddenColIds: PlTableColumnIdJson[];\n }\n | undefined,\n };\n}\n\n// AG Grid returns columnVisibility: undefined when all columns are visible.\n// We need to distinguish \"no state yet\" (use isColumnOptional defaults) from\n// \"user explicitly showed all columns\" (store []). This function normalizes\n// the undefined from AG Grid based on the previous state.\nfunction normalizeColumnVisibility(\n partialState: PlDataTableGridStateCore,\n prevState: PlDataTableGridStateCore,\n api: GridApi<PlAgDataTableV2Row>,\n): PlDataTableGridStateCore {\n if (partialState.columnVisibility !== undefined) return partialState;\n\n if (prevState.columnVisibility !== undefined) {\n // Had explicit visibility state before → user made all columns visible → store [].\n return { ...partialState, columnVisibility: { hiddenColIds: [] } };\n }\n\n // No previous explicit state → compute defaults from current columns\n // to replicate: hide: hiddenColIds?.includes(colId) ?? isColumnOptional(spec.spec)\n const defaultHidden = getDefaultHiddenColIds(api);\n if (defaultHidden.length > 0) {\n return { ...partialState, columnVisibility: { hiddenColIds: defaultHidden } };\n }\n\n return partialState;\n}\n\nfunction getDefaultHiddenColIds(api: GridApi<PlAgDataTableV2Row>): PlTableColumnIdJson[] {\n const cols = api.getAllGridColumns();\n if (!cols) return [];\n\n return cols\n .filter((col) => {\n const spec = col.getColDef().context as PTableColumnSpec | undefined;\n return spec !== undefined && spec.type === \"column\" && isColumnOptional(spec.spec);\n })\n .map((col) => col.getColId() as PlTableColumnIdJson);\n}\n\n// Normalize columnVisibility for comparison: undefined and { hiddenColIds: [] } are equivalent.\nfunction stateForReloadCompare(state: PlDataTableGridStateCore): PlDataTableGridStateCore {\n const cv = state.columnVisibility;\n const normalizedCv = !cv || cv.hiddenColIds.length === 0 ? undefined : state.columnVisibility;\n return { ...state, columnVisibility: normalizedCv };\n}\n\n// Reload AgGrid when new state arrives from server\nconst reloadKey = ref(0);\nwatch(\n () => [gridApi.value, gridState.value] as const,\n ([gridApi, gridState]) => {\n if (!gridApi || gridApi.isDestroyed()) return;\n const selfState = makePartialState(gridApi.getState());\n if (\n !isJsonEqual(gridState, {}) &&\n !isJsonEqual(stateForReloadCompare(gridState), stateForReloadCompare(selfState))\n ) {\n isReloading = true;\n gridOptions.value.initialState = gridState;\n ++reloadKey.value;\n nextTick(() => {\n isReloading = false;\n });\n }\n },\n);\n\n// Make cellRendererSelector reactive\nconst cellRendererSelector = computed(() => props.cellRendererSelector ?? null);\nwatch(\n () => [gridApi.value, cellRendererSelector.value] as const,\n ([gridApi, cellRendererSelector]) => {\n if (!gridApi || gridApi.isDestroyed()) return;\n gridApi.setGridOption(\"defaultColDef\", {\n ...gridOptions.value.defaultColDef,\n cellRendererSelector: cellRendererSelector ?? undefined,\n });\n },\n);\n\ndefineExpose<PlAgDataTableV2Controller>({\n focusRow: async (rowKey) => {\n const gridApi = await dataRenderedTracker.promise;\n if (gridApi.isDestroyed()) return false;\n\n return ensureNodeVisible(gridApi, (row) => isJsonEqual(row.data?.axesKey, rowKey));\n },\n updateSelection: async ({ axesSpec, selectedKeys }) => {\n const gridApi = await dataRenderedTracker.promise;\n if (gridApi.isDestroyed()) return false;\n\n const axes = selection.value?.axesSpec;\n if (!axes || axes.length !== axesSpec.length) return false;\n\n const mapping = axesSpec.map((spec) => {\n const id = getAxisId(spec);\n return axes.findIndex((axis) => matchAxisId(axis, id));\n });\n const mappingSet = new Set(mapping);\n if (mappingSet.has(-1) || mappingSet.size !== axesSpec.length) return false;\n\n const selectedNodes = selectedKeys.map((key) =>\n canonicalizeJson<PlTableRowId>(mapping.map((index) => key[index])),\n );\n const oldSelectedKeys = gridApi.getServerSideSelectionState()?.toggledNodes ?? [];\n if (!isJsonEqual(oldSelectedKeys, selectedNodes)) {\n gridApi.setServerSideSelectionState({\n selectAll: false,\n toggledNodes: selectedNodes,\n });\n\n // wait for `onSelectionChanged` to update `selection` model\n const scope = effectScope();\n const { resolve, promise } = Promise.withResolvers();\n scope.run(() => watch(selection, resolve, { once: true }));\n try {\n await promiseTimeout(promise, 500);\n } catch {\n return false;\n } finally {\n scope.stop();\n }\n }\n return true;\n },\n});\n\n// Update AgGrid when settings change\nconst defaultSelection = createPlSelectionModel();\nlet oldSettings: PlDataTableSettingsV2 | null = null;\nconst generation = ref(0);\nwatch(\n () => [gridApi.value, settings.value] as const,\n ([gridApi, settings]) => {\n // Wait for AgGrid reinitialization, gridApi will eventually become initialized\n if (!gridApi || gridApi.isDestroyed()) return;\n // Verify that this is not a false watch trigger\n if (isJsonEqual(settings, oldSettings)) return;\n ++generation.value;\n try {\n // Hide no rows overlay if it is shown, or else loading overlay will not be shown\n gridApi.hideOverlay();\n dataRenderedTracker.reset();\n\n // No data source selected -> reset state to default\n if (settings.sourceId === null) {\n gridApi.updateGridOptions({\n loading: true,\n loadingOverlayComponentParams: {\n ...gridOptions.value.loadingOverlayComponentParams,\n variant: settings.pending ? \"running\" : \"not-ready\",\n } satisfies PlAgOverlayLoadingParams,\n columnDefs: undefined,\n serverSideDatasource: undefined,\n });\n if (selection.value) {\n if (selection.value && !isJsonEqual(selection.value, defaultSelection)) {\n selection.value = createPlSelectionModel();\n }\n gridApi.setServerSideSelectionState({\n selectAll: false,\n toggledNodes: [],\n });\n }\n return;\n }\n\n if (\n settings.model?.fullTableHandle === undefined ||\n settings.model?.visibleTableHandle === undefined\n ) {\n return;\n }\n\n // Data source changed -> show full page loader, clear selection\n if (settings.sourceId !== oldSettings?.sourceId) {\n gridApi.updateGridOptions({\n loading: true,\n loadingOverlayComponentParams: {\n ...gridOptions.value.loadingOverlayComponentParams,\n variant: \"loading\",\n } satisfies PlAgOverlayLoadingParams,\n });\n if (selection.value && oldSettings?.sourceId) {\n if (selection.value && !isJsonEqual(selection.value, defaultSelection)) {\n selection.value = createPlSelectionModel();\n }\n gridApi.setServerSideSelectionState({\n selectAll: false,\n toggledNodes: [],\n });\n }\n }\n\n // Model updated -> show skeletons instead of data\n const sourceChanged =\n settings.model?.sourceId && settings.model.sourceId !== settings.sourceId;\n if (!settings.model || sourceChanged) {\n const state = gridApi.getServerSideGroupLevelState();\n const rowCount = !sourceChanged && state.length > 0 ? state[0].rowCount : 1;\n return gridApi.updateGridOptions({\n serverSideDatasource: {\n getRows: (params) => {\n params.success({ rowData: [], rowCount });\n },\n },\n });\n }\n\n // Model ready -> calculate new state\n const stateGeneration = generation.value;\n calculateGridOptions({\n generation,\n pfDriver: getRawPlatformaInstance().pFrameDriver,\n fullTableHandle: settings.model?.fullTableHandle,\n visibleTableHandle: settings.model?.visibleTableHandle,\n sheets: settings.sheets ?? [],\n dataRenderedTracker,\n hiddenColIds: gridState.value.columnVisibility?.hiddenColIds,\n cellButtonAxisParams: {\n showCellButtonForAxisId: props.showCellButtonForAxisId,\n cellButtonInvokeRowsOnDoubleClick: props.cellButtonInvokeRowsOnDoubleClick,\n trigger: (key?: PTableKey) => emit(\"cellButtonClicked\", key),\n } satisfies PlAgCellButtonAxisParams,\n })\n .then((result) => {\n if (gridApi.isDestroyed() || stateGeneration !== generation.value) return;\n const { axesSpec, ...options } = result;\n gridApi.updateGridOptions({\n ...options,\n });\n if (selection.value) {\n // Update selection if axesSpec changed, as order of axes may have changed and so we need to remap selected keys\n const { axesSpec: oldAxesSpec, selectedKeys: oldSelectedKeys } = selection.value;\n if (!isJsonEqual(oldAxesSpec, axesSpec)) {\n if (!oldAxesSpec || axesSpec.length !== oldAxesSpec.length) {\n const newSelection: PlSelectionModel = { axesSpec, selectedKeys: [] };\n if (!isJsonEqual(selection.value, newSelection)) {\n selection.value = newSelection;\n }\n return gridApi.setServerSideSelectionState({\n selectAll: false,\n toggledNodes: [],\n });\n }\n\n const mapping = oldAxesSpec\n .map(getAxisId)\n .map((id) => axesSpec.findIndex((axis) => matchAxisId(axis, id)));\n const mappingSet = new Set(mapping);\n if (mappingSet.has(-1) || mappingSet.size !== axesSpec.length) {\n const newSelection: PlSelectionModel = { axesSpec, selectedKeys: [] };\n if (!isJsonEqual(selection.value, newSelection)) {\n selection.value = newSelection;\n }\n return gridApi.setServerSideSelectionState({\n selectAll: false,\n toggledNodes: [],\n });\n }\n\n const selectedNodes = oldSelectedKeys.map((key) =>\n mapping.map((index) => key[index]),\n );\n const newSelection: PlSelectionModel = { axesSpec, selectedKeys: selectedNodes };\n if (!isJsonEqual(selection.value, newSelection)) {\n selection.value = newSelection;\n }\n return gridApi.setServerSideSelectionState({\n selectAll: false,\n toggledNodes: selectedNodes.map((key) => canonicalizeJson<PlTableRowId>(key)),\n });\n }\n }\n })\n .catch((error: unknown) => {\n if (gridApi.isDestroyed() || stateGeneration !== generation.value) return;\n if (isAbortError(error)) return;\n console.trace(error);\n })\n .finally(() => {\n if (gridApi.isDestroyed() || stateGeneration !== generation.value) return;\n gridApi.updateGridOptions({\n loading: false,\n });\n });\n dataRenderedTracker.promise.then(() => emit(\"newDataRendered\"));\n } catch (error: unknown) {\n console.trace(error);\n } finally {\n oldSettings = settings;\n }\n },\n);\n\nwatch(\n () => ({\n gridApi: gridApi.value,\n loadingText: props.loadingText,\n runningText: props.runningText,\n notReadyText: props.notReadyText,\n noRowsText: props.noRowsText,\n }),\n ({ gridApi, loadingText, runningText, notReadyText, noRowsText }) => {\n if (!gridApi || gridApi.isDestroyed()) return;\n gridApi.updateGridOptions({\n loadingOverlayComponentParams: {\n ...gridOptions.value.loadingOverlayComponentParams,\n loadingText,\n runningText,\n notReadyText,\n },\n noRowsOverlayComponentParams: {\n ...gridOptions.value.noRowsOverlayComponentParams,\n text: noRowsText,\n },\n });\n },\n);\n\nwatchEffect(() => {\n if (!gridApi.value || gridApi.value?.isDestroyed()) return;\n gridApi.value.updateGridOptions({\n statusBar: gridOptions.value.loading\n ? undefined\n : {\n statusPanels: [{ statusPanel: PlAgRowCount, align: \"left\" }],\n },\n });\n});\n</script>\n\n<template>\n <div :class=\"$style.container\">\n <PlAgGridColumnManager v-if=\"gridApi && !disableColumnsPanel\" :api=\"gridApi\" />\n <PlTableFiltersV2\n v-if=\"!disableFiltersPanel\"\n :filters=\"filtersState\"\n :default-filters=\"defaultFiltersState\"\n :pframe-handle=\"'model' in settings ? settings?.model?.fullPframeHandle : undefined\"\n :columns=\"filterableColumns\"\n @updateFilters=\"(v) => (filtersState = v)\"\n @resetDefaultFilters=\"resetDefaultFilters\"\n @updateDefaultFilters=\"(v) => (defaultFiltersState = v)\"\n />\n <PlAgCsvExporter v-if=\"gridApi && showExportButton\" :api=\"gridApi\" />\n <PlAgDataTableSheets v-model=\"sheetsState\" :settings=\"sheetsSettings\">\n <template v-if=\"$slots['before-sheets']\" #before>\n <slot name=\"before-sheets\" />\n </template>\n <template v-if=\"$slots['after-sheets']\" #after>\n <slot name=\"after-sheets\" />\n </template>\n </PlAgDataTableSheets>\n <PlTableFastSearch v-model=\"searchString\" />\n <AgGridVue\n :key=\"reloadKey\"\n :theme=\"AgGridTheme\"\n :class=\"$style.grid\"\n :grid-options=\"gridOptions\"\n />\n </div>\n</template>\n\n<style lang=\"css\" module>\n.container {\n display: flex;\n flex-direction: column;\n height: 100%;\n gap: 12px;\n}\n\n.grid {\n flex: 1;\n}\n</style>\n"],"mappings":"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"}
|
|
@@ -11,11 +11,11 @@ function i(i, o) {
|
|
|
11
11
|
s.value = [], c.value = [];
|
|
12
12
|
return;
|
|
13
13
|
}
|
|
14
|
-
let i = a(e).filter((e) => !r(e.colId)).
|
|
15
|
-
|
|
14
|
+
let i = a(e).filter((e) => !r(e.colId)).map((e) => ({
|
|
15
|
+
item: t(e.colId).labeled,
|
|
16
16
|
hide: e.hide
|
|
17
17
|
}));
|
|
18
|
-
s.value = i.map((e) => e.
|
|
18
|
+
s.value = i.map((e) => e.item), c.value = i.filter((e) => !e.hide).map((e) => e.item);
|
|
19
19
|
}, { immediate: !0 }), [s, c];
|
|
20
20
|
}
|
|
21
21
|
function a(e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFilterableColumns.js","names":[],"sources":["../../../../src/components/PlAgDataTable/compositions/useFilterableColumns.ts"],"sourcesContent":["import { isNil } from \"es-toolkit\";\nimport {\n parseJson,\n PlTableColumnIdJson,\n PTableColumnSpec,\n PTableValue,\n} from \"@platforma-sdk/model\";\nimport { ref } from \"vue\";\nimport { PTableHidden } from \"../sources/common\";\nimport { watchCached } from \"@milaboratories/uikit\";\nimport { ColDef, ColGroupDef } from \"ag-grid-enterprise\";\nimport { PlAgDataTableRowNumberColId } from \"../sources/row-number\";\nimport { PlAgDataTableV2Row } from \"../types\";\n\nexport function useFilterableColumns(\n getSourceId: () => string | null,\n getColumnDefs: () => null | undefined | ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden>[],\n) {\n const filterableColumns = ref<PTableColumnSpec[]>([]);\n const visibleFilterableColumns = ref<PTableColumnSpec[]>([]);\n\n // Propagate columns for filter component\n watchCached(\n () => [getColumnDefs(), getSourceId()] as const,\n ([columnDefs, sourceId]) => {\n if (isNil(sourceId)) {\n filterableColumns.value = [];\n visibleFilterableColumns.value = [];\n return;\n }\n\n const dataColDefs = getDataColDefs(columnDefs);\n const cols = dataColDefs\n .filter((def): def is typeof def & { colId: string } => !isNil(def.colId))\n .
|
|
1
|
+
{"version":3,"file":"useFilterableColumns.js","names":[],"sources":["../../../../src/components/PlAgDataTable/compositions/useFilterableColumns.ts"],"sourcesContent":["import { isNil } from \"es-toolkit\";\nimport {\n parseJson,\n PlTableColumnIdJson,\n PTableColumnSpec,\n PTableValue,\n} from \"@platforma-sdk/model\";\nimport { ref } from \"vue\";\nimport { PTableHidden } from \"../sources/common\";\nimport { watchCached } from \"@milaboratories/uikit\";\nimport { ColDef, ColGroupDef } from \"ag-grid-enterprise\";\nimport { PlAgDataTableRowNumberColId } from \"../sources/row-number\";\nimport { PlAgDataTableV2Row } from \"../types\";\n\nexport function useFilterableColumns(\n getSourceId: () => string | null,\n getColumnDefs: () => null | undefined | ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden>[],\n) {\n const filterableColumns = ref<PTableColumnSpec[]>([]);\n const visibleFilterableColumns = ref<PTableColumnSpec[]>([]);\n\n // Propagate columns for filter component\n watchCached(\n () => [getColumnDefs(), getSourceId()] as const,\n ([columnDefs, sourceId]) => {\n if (isNil(sourceId)) {\n filterableColumns.value = [];\n visibleFilterableColumns.value = [];\n return;\n }\n\n const dataColDefs = getDataColDefs(columnDefs);\n const cols = dataColDefs\n .filter((def): def is typeof def & { colId: string } => !isNil(def.colId))\n .map((def) => ({\n item: parseJson(def.colId satisfies string as PlTableColumnIdJson).labeled,\n hide: def.hide,\n }));\n\n filterableColumns.value = cols.map((c) => c.item);\n visibleFilterableColumns.value = cols.filter((c) => !c.hide).map((c) => c.item);\n },\n { immediate: true },\n );\n\n return [filterableColumns, visibleFilterableColumns] as const;\n}\n\nfunction getDataColDefs(\n columnDefs: ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden>[] | null | undefined,\n): ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden>[] {\n if (!columnDefs) return [];\n return columnDefs\n .filter(isColDef)\n .filter((def) => def.colId && def.colId !== PlAgDataTableRowNumberColId);\n}\n\nfunction isColDef<TData, TValue>(\n def: ColDef<TData, TValue> | ColGroupDef<TData>,\n): def is ColDef<TData, TValue> {\n return !(\"children\" in def);\n}\n"],"mappings":";;;;;;AAcA,SAAgB,EACd,GACA,GACA;CACA,IAAM,IAAoB,EAAwB,EAAE,CAAC,EAC/C,IAA2B,EAAwB,EAAE,CAAC;AA0B5D,QAvBA,QACQ,CAAC,GAAe,EAAE,GAAa,CAAC,GACrC,CAAC,GAAY,OAAc;AAC1B,MAAI,EAAM,EAAS,EAAE;AAEnB,GADA,EAAkB,QAAQ,EAAE,EAC5B,EAAyB,QAAQ,EAAE;AACnC;;EAIF,IAAM,IADc,EAAe,EAAW,CAE3C,QAAQ,MAA+C,CAAC,EAAM,EAAI,MAAM,CAAC,CACzE,KAAK,OAAS;GACb,MAAM,EAAU,EAAI,MAA8C,CAAC;GACnE,MAAM,EAAI;GACX,EAAE;AAGL,EADA,EAAkB,QAAQ,EAAK,KAAK,MAAM,EAAE,KAAK,EACjD,EAAyB,QAAQ,EAAK,QAAQ,MAAM,CAAC,EAAE,KAAK,CAAC,KAAK,MAAM,EAAE,KAAK;IAEjF,EAAE,WAAW,IAAM,CACpB,EAEM,CAAC,GAAmB,EAAyB;;AAGtD,SAAS,EACP,GAC0D;AAE1D,QADK,IACE,EACJ,OAAO,EAAS,CAChB,QAAQ,MAAQ,EAAI,SAAS,EAAI,UAAA,4BAAsC,GAHlD,EAAE;;AAM5B,SAAS,EACP,GAC8B;AAC9B,QAAO,EAAE,cAAc"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AxesSpec, PTableColumnSpecColumn, PTableValue, PFrameDriver, PlDataTableSheet, AxisId,
|
|
1
|
+
import { AxesSpec, PTableColumnSpecColumn, PTableHandle, PTableValue, PFrameDriver, PlDataTableSheet, AxisId, PTableColumnSpec, PTableKey, PlTableColumnIdJson } from '@platforma-sdk/model';
|
|
2
2
|
import { ColDef, GridApi, ManagedGridOptions } from 'ag-grid-enterprise';
|
|
3
3
|
import { PlAgDataTableV2Row } from '../types';
|
|
4
4
|
import { PTableHidden } from './common';
|
|
@@ -6,11 +6,12 @@ import { Ref } from 'vue';
|
|
|
6
6
|
import { DeferredCircular } from './focus-row';
|
|
7
7
|
export declare function isLabelColumn(column: PTableColumnSpec): column is PTableColumnSpecColumn;
|
|
8
8
|
/** Calculate GridOptions for selected p-table data source */
|
|
9
|
-
export declare function calculateGridOptions({ generation, pfDriver,
|
|
10
|
-
generation: Ref<number>;
|
|
11
|
-
pfDriver: PFrameDriver;
|
|
12
|
-
model: PlDataTableModel;
|
|
9
|
+
export declare function calculateGridOptions({ generation, pfDriver, sheets, fullTableHandle, visibleTableHandle, dataRenderedTracker, hiddenColIds, cellButtonAxisParams, }: {
|
|
13
10
|
sheets: PlDataTableSheet[];
|
|
11
|
+
pfDriver: PFrameDriver;
|
|
12
|
+
generation: Ref<number>;
|
|
13
|
+
fullTableHandle: PTableHandle;
|
|
14
|
+
visibleTableHandle: PTableHandle;
|
|
14
15
|
dataRenderedTracker: DeferredCircular<GridApi<PlAgDataTableV2Row>>;
|
|
15
16
|
hiddenColIds?: PlTableColumnIdJson[];
|
|
16
17
|
cellButtonAxisParams?: PlAgCellButtonAxisParams;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-source-v2.d.ts","sourceRoot":"","sources":["../../../../src/components/PlAgDataTable/sources/table-source-v2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,
|
|
1
|
+
{"version":3,"file":"table-source-v2.d.ts","sourceRoot":"","sources":["../../../../src/components/PlAgDataTable/sources/table-source-v2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EAGR,sBAAsB,EACtB,YAAY,EACZ,WAAW,EACZ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EAErB,KAAK,MAAM,EACX,KAAK,gBAAgB,EACrB,KAAK,SAAS,EAEd,KAAK,mBAAmB,EAWzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAEV,MAAM,EACN,OAAO,EAIP,kBAAkB,EACnB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,KAAK,EAAE,kBAAkB,EAAgB,MAAM,UAAU,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAIxC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,wBAAgB,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,IAAI,sBAAsB,CAExF;AA6BD,6DAA6D;AAC7D,wBAAsB,oBAAoB,CAAC,EACzC,UAAU,EACV,QAAQ,EACR,MAAM,EACN,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,GACrB,EAAE;IACD,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,QAAQ,EAAE,YAAY,CAAC;IACvB,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,eAAe,EAAE,YAAY,CAAC;IAC9B,kBAAkB,EAAE,YAAY,CAAC;IACjC,mBAAmB,EAAE,gBAAgB,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACnE,YAAY,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACrC,oBAAoB,CAAC,EAAE,wBAAwB,CAAC;CACjD,GAAG,OAAO,CACT,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,EAAE,YAAY,GAAG,sBAAsB,CAAC,GAAG;IACpF,QAAQ,EAAE,QAAQ,CAAC;CACpB,CACF,CA8HA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,iCAAiC,CAAC,EAAE,OAAO,CAAC;IAC5C,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;CACpC,CAAC;AAEF;;GAEG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,gBAAgB,EACtB,WAAW,EAAE,gBAAgB,EAC7B,YAAY,EAAE,mBAAmB,EAAE,GAAG,SAAS,EAC/C,oBAAoB,CAAC,EAAE,wBAAwB,GAC9C,MAAM,CAAC,kBAAkB,EAAE,WAAW,GAAG,YAAY,CAAC,CAkFxD"}
|
|
@@ -8,126 +8,83 @@ import "../../PlAgTextAndButtonCell/index.js";
|
|
|
8
8
|
import { PTableHidden as a } from "./common.js";
|
|
9
9
|
import { defaultMainMenuItems as o } from "./menu-items.js";
|
|
10
10
|
import { getColumnRenderingSpec as s } from "./value-rendering.js";
|
|
11
|
-
import { Annotation as c, ValueType as l, canonicalizeJson as u, getAxisId as d, getPTableColumnId as f, isColumnHidden as p, isColumnOptional as m, isLabelColumn as h,
|
|
11
|
+
import { Annotation as c, ValueType as l, canonicalizeJson as u, getAxisId as d, getPTableColumnId as f, isColumnHidden as p, isColumnOptional as m, isLabelColumn as h, isLinkerColumn as g, matchAxisId as _, pTableValue as v, readAnnotation as y, readAnnotationJson as b } from "@platforma-sdk/model";
|
|
12
|
+
import { isNil as x, uniq as S } from "es-toolkit";
|
|
12
13
|
//#region src/components/PlAgDataTable/sources/table-source-v2.ts
|
|
13
|
-
function
|
|
14
|
+
function C(e, t, n, r) {
|
|
14
15
|
let i = [];
|
|
15
16
|
for (let o = 0; o < t[0].data.length; ++o) {
|
|
16
|
-
let s =
|
|
17
|
-
id:
|
|
17
|
+
let s = r.map((e) => v(t[e], o)), c = u(s), l = e.reduce((e, r, i) => (e[r.toString()] = n[i] === -1 ? a : v(t[n[i]], o), e), {
|
|
18
|
+
id: c,
|
|
18
19
|
axesKey: s
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
c[e.toString()] = r[n] === -1 ? a : _(t[r[n]], o);
|
|
22
|
-
}), i.push(c);
|
|
20
|
+
});
|
|
21
|
+
i.push(l);
|
|
23
22
|
}
|
|
24
23
|
return i;
|
|
25
24
|
}
|
|
26
|
-
async function
|
|
27
|
-
let
|
|
28
|
-
if (
|
|
29
|
-
let
|
|
30
|
-
if (_ !== r.value) throw v;
|
|
31
|
-
let T = (e) => u(f(e)), E = new Map(w.entries().map(([e, t]) => [T(t), e])), D = new Map(x.entries().map(([e, t]) => {
|
|
32
|
-
let n = E.get(T(t)) ?? -1;
|
|
33
|
-
if (n === -1 && t.type === "axis") throw Error(`axis ${JSON.stringify(t.spec)} not present in join result`);
|
|
34
|
-
return [e, n];
|
|
35
|
-
})), O = o.map((e) => d(e.axis)), k = (e) => O.some((t) => g(t, e)), A = [], j = (e, t) => {
|
|
36
|
-
A.some((t) => g(t.axisId, e)) ? console.warn(`multiple label columns match axisId: ${JSON.stringify(e)}`) : A.push({
|
|
37
|
-
axisId: e,
|
|
38
|
-
labelColumnIdx: t
|
|
39
|
-
});
|
|
40
|
-
}, M = (e) => A.find((t) => g(t.axisId, e))?.labelColumnIdx ?? -1, N = x.entries().filter(([e, t]) => {
|
|
41
|
-
switch (t.type) {
|
|
42
|
-
case "axis": return !k(t.id);
|
|
43
|
-
case "column":
|
|
44
|
-
if (h(t.spec)) {
|
|
45
|
-
let n = d(t.spec.axesSpec[0]);
|
|
46
|
-
return k(n) || j(n, e), !1;
|
|
47
|
-
}
|
|
48
|
-
return !p(t.spec);
|
|
49
|
-
}
|
|
50
|
-
}).map(([e]) => e).toArray();
|
|
51
|
-
N.sort((e, t) => {
|
|
52
|
-
if (x[e].type !== x[t].type) return x[e].type === "axis" ? -1 : 1;
|
|
53
|
-
let n = y(x[e].spec, c.Table.OrderPriority), r = y(x[t].spec, c.Table.OrderPriority);
|
|
54
|
-
return n === void 0 ? r === void 0 ? 0 : 1 : r === void 0 ? -1 : r - n;
|
|
55
|
-
});
|
|
56
|
-
let P = [...N];
|
|
57
|
-
N = N.map((e) => {
|
|
58
|
-
let t = x[e];
|
|
59
|
-
if (t.type === "axis") {
|
|
60
|
-
let e = M(t.id);
|
|
61
|
-
if (e !== -1) return e;
|
|
62
|
-
}
|
|
63
|
-
return e;
|
|
64
|
-
});
|
|
65
|
-
let F = [n(), ...P.map((e, t) => S(e, x[e], x[N[t]], l, m))], I = x.values().filter((e) => e.type === "axis").map((e) => e.spec).toArray(), L = I.keys().map((e) => {
|
|
66
|
-
let t = N.indexOf(e);
|
|
67
|
-
return t === -1 && (t = N.length, N.push(e)), t;
|
|
68
|
-
}).toArray(), R = [], z = [];
|
|
69
|
-
N.forEach((e) => {
|
|
70
|
-
let t = D.get(e);
|
|
71
|
-
t === -1 ? z.push(-1) : (z.push(R.length), R.push(t));
|
|
72
|
-
});
|
|
73
|
-
let B = -1, V;
|
|
25
|
+
async function w({ generation: r, pfDriver: i, sheets: a, fullTableHandle: o, visibleTableHandle: s, dataRenderedTracker: c, hiddenColIds: l, cellButtonAxisParams: u }) {
|
|
26
|
+
let d = r.value, [f, p] = await Promise.all([i.getSpec(o), i.getSpec(s)]);
|
|
27
|
+
if (d !== r.value) throw Error("table state generation changed");
|
|
28
|
+
let m = E(f, p), h = D(a), g = O(f, h), _ = A(k(f, h), f), v = j(_, f, g), y = l ?? M(_, v, f), b = [n(), ..._.map((e, t) => T(e, f[e], f[v[t]], y, u))], x = N(p), { requestIndices: S, fieldResultMapping: w, axesResultIndices: F } = P(v, m, x.map(([e]) => e)), I = -1, L;
|
|
74
29
|
return {
|
|
75
|
-
axesSpec:
|
|
76
|
-
columnDefs:
|
|
30
|
+
axesSpec: x.map(([, { spec: e }]) => e),
|
|
31
|
+
columnDefs: b,
|
|
77
32
|
serverSideDatasource: { getRows: async (n) => {
|
|
78
|
-
if (
|
|
33
|
+
if (d !== r.value) return n.fail();
|
|
79
34
|
try {
|
|
80
|
-
if (
|
|
81
|
-
let e = await i.getShape(
|
|
82
|
-
if (
|
|
83
|
-
|
|
35
|
+
if (I === -1) {
|
|
36
|
+
let e = await i.getShape(s);
|
|
37
|
+
if (d !== r.value || n.api.isDestroyed()) return n.fail();
|
|
38
|
+
I = e.rows;
|
|
84
39
|
}
|
|
85
|
-
if (
|
|
40
|
+
if (I == 0) {
|
|
86
41
|
n.success({
|
|
87
42
|
rowData: [],
|
|
88
|
-
rowCount:
|
|
43
|
+
rowCount: I
|
|
89
44
|
}), n.api.setGridOption("loading", !1), n.api.showNoRowsOverlay();
|
|
90
45
|
return;
|
|
91
46
|
}
|
|
92
|
-
if (
|
|
47
|
+
if (L && !e(L.request.sortModel, n.request.sortModel)) return n.success({
|
|
93
48
|
rowData: [],
|
|
94
|
-
rowCount:
|
|
49
|
+
rowCount: I
|
|
95
50
|
});
|
|
96
|
-
|
|
51
|
+
L = n;
|
|
97
52
|
let a = 0, o = [];
|
|
98
|
-
if (
|
|
99
|
-
let e = await i.getData(
|
|
53
|
+
if (I > 0 && n.request.startRow !== void 0 && n.request.endRow !== void 0 && (a = Math.min(I, n.request.endRow) - n.request.startRow, a > 0)) {
|
|
54
|
+
let e = await i.getData(s, S, {
|
|
100
55
|
offset: n.request.startRow,
|
|
101
56
|
length: a
|
|
102
57
|
});
|
|
103
|
-
if (
|
|
104
|
-
o =
|
|
58
|
+
if (d !== r.value || n.api.isDestroyed()) return n.fail();
|
|
59
|
+
o = C(_, e, w, F);
|
|
105
60
|
}
|
|
106
61
|
n.success({
|
|
107
62
|
rowData: o,
|
|
108
|
-
rowCount:
|
|
109
|
-
}), n.api.autoSizeColumns(n.api.getAllDisplayedColumns().filter((e) => e.getColId() !== t)), n.api.setGridOption("loading", !1),
|
|
63
|
+
rowCount: I
|
|
64
|
+
}), n.api.autoSizeColumns(n.api.getAllDisplayedColumns().filter((e) => e.getColId() !== t)), n.api.setGridOption("loading", !1), c.resolve(n.api);
|
|
110
65
|
} catch (e) {
|
|
111
|
-
if (
|
|
66
|
+
if (d !== r.value || n.api.isDestroyed()) return n.fail();
|
|
112
67
|
n.api.setGridOption("loading", !0), n.fail(), console.trace(e);
|
|
113
68
|
}
|
|
114
69
|
} }
|
|
115
70
|
};
|
|
116
71
|
}
|
|
117
|
-
function
|
|
72
|
+
function T(t, n, a, d, f) {
|
|
118
73
|
let p = u({
|
|
119
74
|
source: n,
|
|
120
75
|
labeled: a
|
|
121
|
-
}),
|
|
122
|
-
|
|
76
|
+
}), m = n.type === "axis" ? n.spec.type : n.spec.valueType, h = s(n), g = {};
|
|
77
|
+
h.fontFamily && (h.fontFamily === "monospace" ? (g.fontFamily = "Spline Sans Mono", g.fontWeight = 300) : g.fontFamily = h.fontFamily);
|
|
78
|
+
let _ = y(a.spec, c.Label)?.trim() ?? y(n.spec, c.Label)?.trim() ?? `Unlabeled ${n.type} ${t}`;
|
|
79
|
+
return {
|
|
123
80
|
colId: p,
|
|
124
81
|
mainMenuItems: o,
|
|
125
82
|
context: n,
|
|
126
83
|
field: `${t}`,
|
|
127
|
-
headerName:
|
|
84
|
+
headerName: _,
|
|
128
85
|
lockPosition: n.type === "axis",
|
|
129
|
-
hide: d
|
|
130
|
-
valueFormatter:
|
|
86
|
+
hide: d !== void 0 && d.includes(p),
|
|
87
|
+
valueFormatter: h.valueFormatter,
|
|
131
88
|
headerComponent: r,
|
|
132
89
|
cellRendererSelector: f?.showCellButtonForAxisId ? (t) => {
|
|
133
90
|
if (n.type !== "axis") return;
|
|
@@ -142,35 +99,112 @@ function S(t, n, a, d, f) {
|
|
|
142
99
|
}
|
|
143
100
|
};
|
|
144
101
|
} : void 0,
|
|
145
|
-
cellStyle:
|
|
102
|
+
cellStyle: g,
|
|
146
103
|
headerComponentParams: {
|
|
147
104
|
type: (() => {
|
|
148
|
-
switch (
|
|
105
|
+
switch (m) {
|
|
149
106
|
case l.Int:
|
|
150
107
|
case l.Long:
|
|
151
108
|
case l.Float:
|
|
152
109
|
case l.Double: return "Number";
|
|
153
110
|
case l.String:
|
|
154
111
|
case l.Bytes: return "Text";
|
|
155
|
-
default: throw Error(`unsupported data type: ${
|
|
112
|
+
default: throw Error(`unsupported data type: ${m}`);
|
|
156
113
|
}
|
|
157
114
|
})(),
|
|
158
|
-
tooltip:
|
|
115
|
+
tooltip: y(a.spec, c.Description)?.trim()
|
|
159
116
|
},
|
|
160
117
|
cellDataType: (() => {
|
|
161
|
-
switch (
|
|
118
|
+
switch (m) {
|
|
162
119
|
case l.Int:
|
|
163
120
|
case l.Long:
|
|
164
121
|
case l.Float:
|
|
165
122
|
case l.Double: return "number";
|
|
166
123
|
case l.String:
|
|
167
124
|
case l.Bytes: return "text";
|
|
168
|
-
default: throw Error(`unsupported data type: ${
|
|
125
|
+
default: throw Error(`unsupported data type: ${m}`);
|
|
169
126
|
}
|
|
170
127
|
})()
|
|
171
128
|
};
|
|
172
129
|
}
|
|
130
|
+
function E(e, t) {
|
|
131
|
+
let n = (e) => u(f(e)), r = new Map(t.entries().map(([e, t]) => [n(t), e]));
|
|
132
|
+
return new Map(e.entries().map(([e, t]) => {
|
|
133
|
+
let i = r.get(n(t));
|
|
134
|
+
return [e, x(i) ? -1 : i];
|
|
135
|
+
}));
|
|
136
|
+
}
|
|
137
|
+
function D(e) {
|
|
138
|
+
let t = e.map((e) => d(e.axis));
|
|
139
|
+
return (e) => t.some((t) => _(t, e));
|
|
140
|
+
}
|
|
141
|
+
function O(e, t) {
|
|
142
|
+
let n = [];
|
|
143
|
+
for (let [r, i] of e.entries()) {
|
|
144
|
+
if (i.type !== "column" || !h(i.spec)) continue;
|
|
145
|
+
let e = d(i.spec.axesSpec[0]);
|
|
146
|
+
if (!t(e)) {
|
|
147
|
+
if (n.some((t) => _(t.axisId, e))) {
|
|
148
|
+
console.warn(`multiple label columns match axisId: ${JSON.stringify(e)}`);
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
n.push({
|
|
152
|
+
axisId: e,
|
|
153
|
+
labelColumnIdx: r
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return (e) => n.find((t) => _(t.axisId, e))?.labelColumnIdx ?? -1;
|
|
158
|
+
}
|
|
159
|
+
function k(e, t) {
|
|
160
|
+
return e.entries().filter(([, e]) => {
|
|
161
|
+
switch (e.type) {
|
|
162
|
+
case "axis": return !t(e.id);
|
|
163
|
+
case "column": return !h(e.spec) && !p(e.spec) && !g(e.spec);
|
|
164
|
+
}
|
|
165
|
+
}).map(([e]) => e).toArray();
|
|
166
|
+
}
|
|
167
|
+
function A(e, t) {
|
|
168
|
+
let n = (e) => {
|
|
169
|
+
let n = t[e];
|
|
170
|
+
return n.type === "column" ? b(n.spec, c.Table.OrderPriority) ?? 0 : 0;
|
|
171
|
+
};
|
|
172
|
+
return [...e].sort((e, r) => t[e].type === t[r].type ? n(r) - n(e) : t[e].type === "axis" ? -1 : 1);
|
|
173
|
+
}
|
|
174
|
+
function j(e, t, n) {
|
|
175
|
+
return e.map((e) => {
|
|
176
|
+
let r = t[e], i = r.type === "axis" ? n(r.id) : -1;
|
|
177
|
+
return i === -1 ? e : i;
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
function M(e, t, n) {
|
|
181
|
+
return e.reduce((e, r, i) => {
|
|
182
|
+
let a = n[r];
|
|
183
|
+
if (a.type !== "column" || !m(a.spec)) return e;
|
|
184
|
+
let o = n[t[i]];
|
|
185
|
+
return [...e, u({
|
|
186
|
+
source: a,
|
|
187
|
+
labeled: o
|
|
188
|
+
})];
|
|
189
|
+
}, []);
|
|
190
|
+
}
|
|
191
|
+
function N(e) {
|
|
192
|
+
return e.entries().filter((e) => e[1].type === "axis").toArray();
|
|
193
|
+
}
|
|
194
|
+
function P(e, t, n) {
|
|
195
|
+
let r = e.map((e) => {
|
|
196
|
+
let n = t.get(e);
|
|
197
|
+
return n === void 0 || n === -1 ? null : n;
|
|
198
|
+
}), i = r.filter((e) => e !== null), a = [], o = 0;
|
|
199
|
+
for (let e of r) a.push(e === null ? -1 : o++);
|
|
200
|
+
let s = S([...i, ...n]);
|
|
201
|
+
return {
|
|
202
|
+
requestIndices: s,
|
|
203
|
+
fieldResultMapping: a,
|
|
204
|
+
axesResultIndices: n.map((e) => s.indexOf(e))
|
|
205
|
+
};
|
|
206
|
+
}
|
|
173
207
|
//#endregion
|
|
174
|
-
export {
|
|
208
|
+
export { w as calculateGridOptions };
|
|
175
209
|
|
|
176
210
|
//# sourceMappingURL=table-source-v2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-source-v2.js","names":[],"sources":["../../../../src/components/PlAgDataTable/sources/table-source-v2.ts"],"sourcesContent":["import type {\n AxesSpec,\n PTableColumnId,\n PTableColumnSpecColumn,\n PTableValue,\n} from \"@platforma-sdk/model\";\nimport {\n canonicalizeJson,\n getAxisId,\n isColumnOptional,\n pTableValue,\n type PFrameDriver,\n type PlDataTableSheet,\n type PTableVector,\n type AxisId,\n type PlDataTableModel,\n type PTableColumnSpec,\n type PTableKey,\n type PlTableColumnId,\n type PlTableColumnIdJson,\n isLabelColumn as isLabelColumnSpec,\n isColumnHidden,\n matchAxisId,\n readAnnotation,\n Annotation,\n ValueType,\n readAnnotationJson,\n getPTableColumnId,\n} from \"@platforma-sdk/model\";\nimport type {\n CellStyle,\n ColDef,\n GridApi,\n ICellRendererParams,\n IServerSideDatasource,\n IServerSideGetRowsParams,\n ManagedGridOptions,\n} from \"ag-grid-enterprise\";\nimport type { PlAgHeaderComponentParams, PlAgHeaderComponentType } from \"../../PlAgColumnHeader\";\nimport { PlAgColumnHeader } from \"../../PlAgColumnHeader\";\nimport { PlAgTextAndButtonCell } from \"../../PlAgTextAndButtonCell\";\nimport type { PlAgDataTableV2Row, PlTableRowId } from \"../types\";\nimport { PTableHidden } from \"./common\";\nimport { defaultMainMenuItems } from \"./menu-items\";\nimport { makeRowNumberColDef, PlAgDataTableRowNumberColId } from \"./row-number\";\nimport { getColumnRenderingSpec } from \"./value-rendering\";\nimport type { Ref } from \"vue\";\nimport { isJsonEqual } from \"@milaboratories/helpers\";\nimport type { DeferredCircular } from \"./focus-row\";\n\nexport function isLabelColumn(column: PTableColumnSpec): column is PTableColumnSpecColumn {\n return column.type === \"column\" && isLabelColumnSpec(column.spec);\n}\n\n/** Convert columnar data from the driver to rows, used by ag-grid */\nfunction columns2rows(\n fields: number[],\n columns: PTableVector[],\n axes: number[],\n resultMapping: number[],\n): PlAgDataTableV2Row[] {\n const rowData: PlAgDataTableV2Row[] = [];\n for (let iRow = 0; iRow < columns[0].data.length; ++iRow) {\n const axesKey: PTableKey = axes.map((iAxis) =>\n pTableValue(columns[resultMapping[iAxis]], iRow),\n );\n const id = canonicalizeJson<PlTableRowId>(axesKey);\n const row: PlAgDataTableV2Row = { id, axesKey };\n fields.forEach((field, iCol) => {\n row[field.toString() as `${number}`] =\n resultMapping[iCol] === -1 ? PTableHidden : pTableValue(columns[resultMapping[iCol]], iRow);\n });\n rowData.push(row);\n }\n return rowData;\n}\n\n/** Calculate GridOptions for selected p-table data source */\nexport async function calculateGridOptions({\n generation,\n pfDriver,\n model,\n sheets,\n dataRenderedTracker,\n hiddenColIds,\n cellButtonAxisParams,\n}: {\n generation: Ref<number>;\n pfDriver: PFrameDriver;\n model: PlDataTableModel;\n sheets: PlDataTableSheet[];\n dataRenderedTracker: DeferredCircular<GridApi<PlAgDataTableV2Row>>;\n hiddenColIds?: PlTableColumnIdJson[];\n cellButtonAxisParams?: PlAgCellButtonAxisParams;\n}): Promise<\n Pick<ManagedGridOptions<PlAgDataTableV2Row>, \"columnDefs\" | \"serverSideDatasource\"> & {\n axesSpec: AxesSpec;\n }\n> {\n const stateGeneration = generation.value;\n const stateChangedError = new Error(\"table state generation changed\");\n\n // get specs of the full table\n const specs = await pfDriver.getSpec(model.fullTableHandle);\n if (stateGeneration !== generation.value) throw stateChangedError;\n\n // get specs of the visible table (with hidden columns omitted)\n const pt = model.visibleTableHandle;\n const dataSpecs = await pfDriver.getSpec(pt);\n if (stateGeneration !== generation.value) throw stateChangedError;\n\n // create index mapping from full specs to visible subset (hidden columns would have -1)\n const specId = (spec: PTableColumnSpec) =>\n canonicalizeJson<PTableColumnId>(getPTableColumnId(spec));\n const dataSpecsMap = new Map(dataSpecs.entries().map(([i, spec]) => [specId(spec), i]));\n const specsToDataSpecsMapping = new Map(\n specs.entries().map(([i, spec]) => {\n const dataSpecIdx = dataSpecsMap.get(specId(spec)) ?? -1;\n if (dataSpecIdx === -1 && spec.type === \"axis\")\n throw new Error(`axis ${JSON.stringify(spec.spec)} not present in join result`);\n return [i, dataSpecIdx];\n }),\n );\n\n // gether indices of columns that would be displayed in the table\n\n const sheetAxesIds = sheets.map((sheet) => getAxisId(sheet.axis));\n const isPartitionedAxis = (axisId: AxisId) => sheetAxesIds.some((id) => matchAxisId(id, axisId));\n\n const labelColumns: { axisId: AxisId; labelColumnIdx: number }[] = [];\n const setLabelColumnIndex = (axisId: AxisId, labelColumnIdx: number) => {\n if (!labelColumns.some((info) => matchAxisId(info.axisId, axisId))) {\n labelColumns.push({ axisId, labelColumnIdx });\n } else {\n console.warn(`multiple label columns match axisId: ${JSON.stringify(axisId)}`);\n }\n };\n const getLabelColumnIndex = (axisId: AxisId) => {\n return labelColumns.find((info) => matchAxisId(info.axisId, axisId))?.labelColumnIdx ?? -1;\n };\n\n // filter out partitioned axes, label columns and hidden columns\n let indices = specs\n .entries()\n .filter(([i, spec]) => {\n switch (spec.type) {\n case \"axis\":\n return !isPartitionedAxis(spec.id);\n case \"column\":\n if (isLabelColumnSpec(spec.spec)) {\n const labeledAxisId = getAxisId(spec.spec.axesSpec[0]);\n if (!isPartitionedAxis(labeledAxisId)) {\n setLabelColumnIndex(labeledAxisId, i);\n }\n return false;\n }\n return !isColumnHidden(spec.spec);\n }\n })\n .map(([i]) => i)\n .toArray();\n\n // order columns by priority\n indices.sort((a, b) => {\n if (specs[a].type !== specs[b].type) return specs[a].type === \"axis\" ? -1 : 1;\n\n const aPriority = readAnnotationJson(specs[a].spec, Annotation.Table.OrderPriority);\n const bPriority = readAnnotationJson(specs[b].spec, Annotation.Table.OrderPriority);\n\n if (aPriority === undefined) return bPriority === undefined ? 0 : 1;\n if (bPriority === undefined) return -1;\n return bPriority - aPriority;\n });\n\n // fields are indices of columns that would go to columnDefs\n const fields = [...indices];\n // replace axes with label columns\n indices = indices.map((i) => {\n const spec = specs[i];\n if (spec.type === \"axis\") {\n const labelColumnIdx = getLabelColumnIndex(spec.id);\n if (labelColumnIdx !== -1) {\n return labelColumnIdx;\n }\n }\n return i;\n });\n const columnDefs: ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden>[] = [\n makeRowNumberColDef(),\n ...fields.map((field, index) =>\n makeColDef(field, specs[field], specs[indices[index]], hiddenColIds, cellButtonAxisParams),\n ),\n ];\n\n // mix in indices of skipped axes (axes that were partitioned or replaced with label columns)\n const axesSpec = specs\n .values()\n .filter((spec) => spec.type === \"axis\")\n .map((spec) => spec.spec)\n .toArray();\n const axes = axesSpec\n .keys()\n .map((i) => {\n let r = indices.indexOf(i);\n if (r === -1) {\n r = indices.length;\n indices.push(i);\n }\n return r;\n })\n .toArray();\n\n const requestIndices: number[] = [];\n const resultMapping: number[] = [];\n indices.forEach((idx) => {\n const dataSpecIdx = specsToDataSpecsMapping.get(idx)!;\n if (dataSpecIdx !== -1) {\n resultMapping.push(requestIndices.length);\n requestIndices.push(dataSpecIdx);\n } else {\n resultMapping.push(-1);\n }\n });\n\n let rowCount = -1;\n let lastParams: IServerSideGetRowsParams | undefined = undefined;\n const serverSideDatasource: IServerSideDatasource<PlAgDataTableV2Row> = {\n getRows: async (params: IServerSideGetRowsParams) => {\n if (stateGeneration !== generation.value) return params.fail();\n try {\n if (rowCount === -1) {\n const ptShape = await pfDriver.getShape(pt);\n if (stateGeneration !== generation.value || params.api.isDestroyed())\n return params.fail();\n rowCount = ptShape.rows;\n }\n\n if (rowCount == 0) {\n params.success({ rowData: [], rowCount });\n // Warning: AgGrid cannot show two overlays at once,\n // so first hide loading overlay, then show no rows overlay\n params.api.setGridOption(\"loading\", false);\n params.api.showNoRowsOverlay();\n return;\n }\n\n // If sort has changed - show skeletons instead of data\n if (lastParams && !isJsonEqual(lastParams.request.sortModel, params.request.sortModel)) {\n return params.success({ rowData: [], rowCount });\n }\n lastParams = params;\n\n let length = 0;\n let rowData: PlAgDataTableV2Row[] = [];\n if (\n rowCount > 0 &&\n params.request.startRow !== undefined &&\n params.request.endRow !== undefined\n ) {\n length = Math.min(rowCount, params.request.endRow) - params.request.startRow;\n if (length > 0) {\n const data = await pfDriver.getData(pt, requestIndices, {\n offset: params.request.startRow,\n length,\n });\n if (stateGeneration !== generation.value || params.api.isDestroyed())\n return params.fail();\n rowData = columns2rows(fields, data, axes, resultMapping);\n }\n }\n\n params.success({ rowData, rowCount });\n params.api.autoSizeColumns(\n params.api\n .getAllDisplayedColumns()\n .filter((column) => column.getColId() !== PlAgDataTableRowNumberColId),\n );\n params.api.setGridOption(\"loading\", false);\n dataRenderedTracker.resolve(params.api);\n } catch (error: unknown) {\n if (stateGeneration !== generation.value || params.api.isDestroyed()) return params.fail();\n params.api.setGridOption(\"loading\", true);\n params.fail();\n console.trace(error);\n }\n },\n };\n\n return {\n axesSpec,\n columnDefs,\n serverSideDatasource,\n };\n}\n\nexport type PlAgCellButtonAxisParams = {\n showCellButtonForAxisId?: AxisId;\n cellButtonInvokeRowsOnDoubleClick?: boolean;\n trigger: (key?: PTableKey) => void;\n};\n\n/**\n * Calculates column definition for a given p-table column\n */\nexport function makeColDef(\n iCol: number,\n spec: PTableColumnSpec,\n labeledSpec: PTableColumnSpec,\n hiddenColIds: PlTableColumnIdJson[] | undefined,\n cellButtonAxisParams?: PlAgCellButtonAxisParams,\n): ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden> {\n const colId = canonicalizeJson<PlTableColumnId>({\n source: spec,\n labeled: labeledSpec,\n });\n const valueType = spec.type === \"axis\" ? spec.spec.type : spec.spec.valueType;\n const columnRenderingSpec = getColumnRenderingSpec(spec);\n const cellStyle: CellStyle = {};\n if (columnRenderingSpec.fontFamily) {\n if (columnRenderingSpec.fontFamily === \"monospace\") {\n cellStyle.fontFamily = \"Spline Sans Mono\";\n cellStyle.fontWeight = 300;\n } else {\n cellStyle.fontFamily = columnRenderingSpec.fontFamily;\n }\n }\n return {\n colId,\n mainMenuItems: defaultMainMenuItems,\n context: spec,\n field: `${iCol}`,\n headerName:\n readAnnotation(labeledSpec.spec, Annotation.Label)?.trim() ??\n `Unlabeled ${spec.type} ${iCol}`,\n lockPosition: spec.type === \"axis\",\n hide: hiddenColIds?.includes(colId) ?? isColumnOptional(spec.spec),\n valueFormatter: columnRenderingSpec.valueFormatter,\n headerComponent: PlAgColumnHeader,\n cellRendererSelector: cellButtonAxisParams?.showCellButtonForAxisId\n ? (params: ICellRendererParams) => {\n if (spec.type !== \"axis\") return;\n\n const axisId = (params.colDef?.context as PTableColumnSpec)?.id as AxisId;\n if (isJsonEqual(axisId, cellButtonAxisParams.showCellButtonForAxisId)) {\n return {\n component: PlAgTextAndButtonCell,\n params: {\n invokeRowsOnDoubleClick: cellButtonAxisParams.cellButtonInvokeRowsOnDoubleClick,\n onClick: (params: ICellRendererParams<PlAgDataTableV2Row>) => {\n cellButtonAxisParams.trigger(params.data?.axesKey);\n },\n },\n };\n }\n }\n : undefined,\n cellStyle,\n headerComponentParams: {\n type: ((): PlAgHeaderComponentType => {\n switch (valueType) {\n case ValueType.Int:\n case ValueType.Long:\n case ValueType.Float:\n case ValueType.Double:\n return \"Number\";\n case ValueType.String:\n case ValueType.Bytes:\n return \"Text\";\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n tooltip: readAnnotation(labeledSpec.spec, Annotation.Description)?.trim(),\n } satisfies PlAgHeaderComponentParams,\n cellDataType: (() => {\n switch (valueType) {\n case ValueType.Int:\n case ValueType.Long:\n case ValueType.Float:\n case ValueType.Double:\n return \"number\";\n case ValueType.String:\n case ValueType.Bytes:\n return \"text\";\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"table-source-v2.js","names":[],"sources":["../../../../src/components/PlAgDataTable/sources/table-source-v2.ts"],"sourcesContent":["import type {\n AxesSpec,\n PTableColumnId,\n PTableColumnSpecAxis,\n PTableColumnSpecColumn,\n PTableHandle,\n PTableValue,\n} from \"@platforma-sdk/model\";\nimport {\n canonicalizeJson,\n getAxisId,\n pTableValue,\n type PFrameDriver,\n type PlDataTableSheet,\n type PTableVector,\n type AxisId,\n type PTableColumnSpec,\n type PTableKey,\n type PlTableColumnId,\n type PlTableColumnIdJson,\n isLabelColumn as isLabelColumnSpec,\n isLinkerColumn as isLinkerColumnSpec,\n isColumnHidden,\n isColumnOptional,\n matchAxisId,\n readAnnotation,\n readAnnotationJson,\n Annotation,\n ValueType,\n getPTableColumnId,\n} from \"@platforma-sdk/model\";\nimport type {\n CellStyle,\n ColDef,\n GridApi,\n ICellRendererParams,\n IServerSideDatasource,\n IServerSideGetRowsParams,\n ManagedGridOptions,\n} from \"ag-grid-enterprise\";\nimport type { PlAgHeaderComponentParams, PlAgHeaderComponentType } from \"../../PlAgColumnHeader\";\nimport { PlAgColumnHeader } from \"../../PlAgColumnHeader\";\nimport { PlAgTextAndButtonCell } from \"../../PlAgTextAndButtonCell\";\nimport type { PlAgDataTableV2Row, PlTableRowId } from \"../types\";\nimport { PTableHidden } from \"./common\";\nimport { defaultMainMenuItems } from \"./menu-items\";\nimport { makeRowNumberColDef, PlAgDataTableRowNumberColId } from \"./row-number\";\nimport { getColumnRenderingSpec } from \"./value-rendering\";\nimport type { Ref } from \"vue\";\nimport { isJsonEqual } from \"@milaboratories/helpers\";\nimport type { DeferredCircular } from \"./focus-row\";\nimport { isNil, uniq } from \"es-toolkit\";\n\nexport function isLabelColumn(column: PTableColumnSpec): column is PTableColumnSpecColumn {\n return column.type === \"column\" && isLabelColumnSpec(column.spec);\n}\n\n/** Convert columnar data from the driver to rows, used by ag-grid */\nfunction columns2rows(\n fields: number[],\n columns: PTableVector[],\n fieldResultMapping: number[],\n axesResultIndices: number[],\n): PlAgDataTableV2Row[] {\n const rowData: PlAgDataTableV2Row[] = [];\n for (let iRow = 0; iRow < columns[0].data.length; ++iRow) {\n const axesKey: PTableKey = axesResultIndices.map((ri) => pTableValue(columns[ri], iRow));\n const id = canonicalizeJson<PlTableRowId>(axesKey);\n const row = fields.reduce<PlAgDataTableV2Row>(\n (acc, field, iCol) => {\n acc[field.toString() as `${number}`] =\n fieldResultMapping[iCol] === -1\n ? PTableHidden\n : pTableValue(columns[fieldResultMapping[iCol]], iRow);\n return acc;\n },\n { id, axesKey },\n );\n\n rowData.push(row);\n }\n return rowData;\n}\n\n/** Calculate GridOptions for selected p-table data source */\nexport async function calculateGridOptions({\n generation,\n pfDriver,\n sheets,\n fullTableHandle,\n visibleTableHandle,\n dataRenderedTracker,\n hiddenColIds,\n cellButtonAxisParams,\n}: {\n sheets: PlDataTableSheet[];\n pfDriver: PFrameDriver;\n generation: Ref<number>;\n fullTableHandle: PTableHandle;\n visibleTableHandle: PTableHandle;\n dataRenderedTracker: DeferredCircular<GridApi<PlAgDataTableV2Row>>;\n hiddenColIds?: PlTableColumnIdJson[];\n cellButtonAxisParams?: PlAgCellButtonAxisParams;\n}): Promise<\n Pick<ManagedGridOptions<PlAgDataTableV2Row>, \"columnDefs\" | \"serverSideDatasource\"> & {\n axesSpec: AxesSpec;\n }\n> {\n const stateGeneration = generation.value;\n\n // get specs of the full table\n const [tableSpecs, visibleTableSpecs] = await Promise.all([\n pfDriver.getSpec(fullTableHandle),\n pfDriver.getSpec(visibleTableHandle),\n ]);\n\n if (stateGeneration !== generation.value) throw new Error(\"table state generation changed\");\n\n // index mapping from full specs to visible subset (hidden columns → -1)\n const specsToVisibleSpecsMapping = buildSpecsToVisibleSpecsMapping(tableSpecs, visibleTableSpecs);\n\n const isPartitionedAxis = createPartitionedAxisPredicate(sheets);\n\n // label columns indexed by labeled axis (for axis→label replacement later)\n const getLabelColumnIndex = collectLabelColumnsByAxis(tableSpecs, isPartitionedAxis);\n\n // displayable column indices ordered: axes first, then columns by OrderPriority\n const fields = sortIndicesByTypeAndPriority(\n selectDisplayableIndices(tableSpecs, isPartitionedAxis),\n tableSpecs,\n );\n\n // same as fields, but each axis replaced by its label column index when available\n const indices = replaceAxesWithLabelColumns(fields, tableSpecs, getLabelColumnIndex);\n\n // default hidden columns derived from Optional annotation when no saved state\n const resolvedHiddenColIds =\n hiddenColIds ?? computeDefaultHiddenColIds(fields, indices, tableSpecs);\n\n const columnDefs: ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden>[] = [\n makeRowNumberColDef(),\n ...fields.map((field, index) =>\n makeColDef(\n field,\n tableSpecs[field],\n tableSpecs[indices[index]],\n resolvedHiddenColIds,\n cellButtonAxisParams,\n ),\n ),\n ];\n\n // axes — taken directly from visible table (always present as part of join)\n const visibleAxes = collectVisibleAxes(visibleTableSpecs);\n\n // request indices: non-hidden display fields + visible axes for row selection keys.\n // Axes replaced by label columns request label data (display); original axis values\n // are fetched via visibleAxes (row keys).\n const { requestIndices, fieldResultMapping, axesResultIndices } = buildRequestIndices(\n indices,\n specsToVisibleSpecsMapping,\n visibleAxes.map(([i]) => i),\n );\n\n let rowCount = -1;\n let lastParams: IServerSideGetRowsParams | undefined = undefined;\n const serverSideDatasource: IServerSideDatasource<PlAgDataTableV2Row> = {\n getRows: async (params: IServerSideGetRowsParams) => {\n if (stateGeneration !== generation.value) return params.fail();\n try {\n if (rowCount === -1) {\n const ptShape = await pfDriver.getShape(visibleTableHandle);\n if (stateGeneration !== generation.value || params.api.isDestroyed())\n return params.fail();\n rowCount = ptShape.rows;\n }\n\n if (rowCount == 0) {\n params.success({ rowData: [], rowCount });\n // Warning: AgGrid cannot show two overlays at once,\n // so first hide loading overlay, then show no rows overlay\n params.api.setGridOption(\"loading\", false);\n params.api.showNoRowsOverlay();\n return;\n }\n\n // If sort has changed - show skeletons instead of data\n if (lastParams && !isJsonEqual(lastParams.request.sortModel, params.request.sortModel)) {\n return params.success({ rowData: [], rowCount });\n }\n lastParams = params;\n\n let length = 0;\n let rowData: PlAgDataTableV2Row[] = [];\n if (\n rowCount > 0 &&\n params.request.startRow !== undefined &&\n params.request.endRow !== undefined\n ) {\n length = Math.min(rowCount, params.request.endRow) - params.request.startRow;\n if (length > 0) {\n const data = await pfDriver.getData(visibleTableHandle, requestIndices, {\n offset: params.request.startRow,\n length,\n });\n if (stateGeneration !== generation.value || params.api.isDestroyed())\n return params.fail();\n rowData = columns2rows(fields, data, fieldResultMapping, axesResultIndices);\n }\n }\n\n params.success({ rowData, rowCount });\n params.api.autoSizeColumns(\n params.api\n .getAllDisplayedColumns()\n .filter((column) => column.getColId() !== PlAgDataTableRowNumberColId),\n );\n params.api.setGridOption(\"loading\", false);\n dataRenderedTracker.resolve(params.api);\n } catch (error: unknown) {\n if (stateGeneration !== generation.value || params.api.isDestroyed()) return params.fail();\n params.api.setGridOption(\"loading\", true);\n params.fail();\n console.trace(error);\n }\n },\n };\n\n return {\n axesSpec: visibleAxes.map(([, { spec }]) => spec),\n columnDefs,\n serverSideDatasource,\n };\n}\n\nexport type PlAgCellButtonAxisParams = {\n showCellButtonForAxisId?: AxisId;\n cellButtonInvokeRowsOnDoubleClick?: boolean;\n trigger: (key?: PTableKey) => void;\n};\n\n/**\n * Calculates column definition for a given p-table column\n */\nexport function makeColDef(\n iCol: number,\n spec: PTableColumnSpec,\n labeledSpec: PTableColumnSpec,\n hiddenColIds: PlTableColumnIdJson[] | undefined,\n cellButtonAxisParams?: PlAgCellButtonAxisParams,\n): ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden> {\n const colId = canonicalizeJson<PlTableColumnId>({\n source: spec,\n labeled: labeledSpec,\n });\n const valueType = spec.type === \"axis\" ? spec.spec.type : spec.spec.valueType;\n const columnRenderingSpec = getColumnRenderingSpec(spec);\n const cellStyle: CellStyle = {};\n if (columnRenderingSpec.fontFamily) {\n if (columnRenderingSpec.fontFamily === \"monospace\") {\n cellStyle.fontFamily = \"Spline Sans Mono\";\n cellStyle.fontWeight = 300;\n } else {\n cellStyle.fontFamily = columnRenderingSpec.fontFamily;\n }\n }\n const headerName =\n readAnnotation(labeledSpec.spec, Annotation.Label)?.trim() ??\n readAnnotation(spec.spec, Annotation.Label)?.trim() ??\n `Unlabeled ${spec.type} ${iCol}`;\n\n return {\n colId,\n mainMenuItems: defaultMainMenuItems,\n context: spec,\n field: `${iCol}`,\n headerName,\n lockPosition: spec.type === \"axis\",\n hide: hiddenColIds !== undefined && hiddenColIds.includes(colId),\n valueFormatter: columnRenderingSpec.valueFormatter,\n headerComponent: PlAgColumnHeader,\n cellRendererSelector: cellButtonAxisParams?.showCellButtonForAxisId\n ? (params: ICellRendererParams) => {\n if (spec.type !== \"axis\") return;\n\n const axisId = (params.colDef?.context as PTableColumnSpec)?.id as AxisId;\n if (isJsonEqual(axisId, cellButtonAxisParams.showCellButtonForAxisId)) {\n return {\n component: PlAgTextAndButtonCell,\n params: {\n invokeRowsOnDoubleClick: cellButtonAxisParams.cellButtonInvokeRowsOnDoubleClick,\n onClick: (params: ICellRendererParams<PlAgDataTableV2Row>) => {\n cellButtonAxisParams.trigger(params.data?.axesKey);\n },\n },\n };\n }\n }\n : undefined,\n cellStyle,\n headerComponentParams: {\n type: ((): PlAgHeaderComponentType => {\n switch (valueType) {\n case ValueType.Int:\n case ValueType.Long:\n case ValueType.Float:\n case ValueType.Double:\n return \"Number\";\n case ValueType.String:\n case ValueType.Bytes:\n return \"Text\";\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n tooltip: readAnnotation(labeledSpec.spec, Annotation.Description)?.trim(),\n } satisfies PlAgHeaderComponentParams,\n cellDataType: (() => {\n switch (valueType) {\n case ValueType.Int:\n case ValueType.Long:\n case ValueType.Float:\n case ValueType.Double:\n return \"number\";\n case ValueType.String:\n case ValueType.Bytes:\n return \"text\";\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n };\n}\n\ntype LabelColumnLookup = (axisId: AxisId) => number;\n\n/** Build index mapping from full tableSpecs to their position in visibleTableSpecs (missing → -1). */\nfunction buildSpecsToVisibleSpecsMapping(\n tableSpecs: PTableColumnSpec[],\n visibleTableSpecs: PTableColumnSpec[],\n): Map<number, number> {\n const specId = (spec: PTableColumnSpec) =>\n canonicalizeJson<PTableColumnId>(getPTableColumnId(spec));\n const visibleSpecsMap = new Map(\n visibleTableSpecs.entries().map(([i, spec]) => [specId(spec), i] as const),\n );\n return new Map(\n tableSpecs.entries().map(([i, spec]) => {\n const visibleSpecIdx = visibleSpecsMap.get(specId(spec));\n return [i, isNil(visibleSpecIdx) ? -1 : visibleSpecIdx];\n }),\n );\n}\n\n/** Predicate that returns true when an axis is one of the sheet partition axes. */\nfunction createPartitionedAxisPredicate(sheets: PlDataTableSheet[]): (axisId: AxisId) => boolean {\n const sheetAxesIds = sheets.map((sheet) => getAxisId(sheet.axis));\n return (axisId) => sheetAxesIds.some((id) => matchAxisId(id, axisId));\n}\n\n/**\n * Collect label columns (skipping partitioned axes and duplicates) and return a\n * lookup function that resolves labeled axisId → label column index (or -1).\n */\nfunction collectLabelColumnsByAxis(\n tableSpecs: PTableColumnSpec[],\n isPartitionedAxis: (axisId: AxisId) => boolean,\n): LabelColumnLookup {\n const labelColumns: { axisId: AxisId; labelColumnIdx: number }[] = [];\n for (const [i, spec] of tableSpecs.entries()) {\n if (spec.type !== \"column\" || !isLabelColumnSpec(spec.spec)) continue;\n const labeledAxisId = getAxisId(spec.spec.axesSpec[0]);\n if (isPartitionedAxis(labeledAxisId)) continue;\n if (labelColumns.some((info) => matchAxisId(info.axisId, labeledAxisId))) {\n console.warn(`multiple label columns match axisId: ${JSON.stringify(labeledAxisId)}`);\n continue;\n }\n labelColumns.push({ axisId: labeledAxisId, labelColumnIdx: i });\n }\n return (axisId) =>\n labelColumns.find((info) => matchAxisId(info.axisId, axisId))?.labelColumnIdx ?? -1;\n}\n\n/** Indices of columns to display: drop partitioned axes, label/linker columns, hidden columns. */\nfunction selectDisplayableIndices(\n tableSpecs: PTableColumnSpec[],\n isPartitionedAxis: (axisId: AxisId) => boolean,\n): number[] {\n return tableSpecs\n .entries()\n .filter(([, spec]) => {\n switch (spec.type) {\n case \"axis\":\n return !isPartitionedAxis(spec.id);\n case \"column\":\n return (\n !isLabelColumnSpec(spec.spec) &&\n !isColumnHidden(spec.spec) &&\n !isLinkerColumnSpec(spec.spec)\n );\n }\n })\n .map(([i]) => i)\n .toArray();\n}\n\n/** Sort: axes first, then columns by OrderPriority annotation (higher priority = further left). */\nfunction sortIndicesByTypeAndPriority(indices: number[], tableSpecs: PTableColumnSpec[]): number[] {\n const priorityOf = (i: number): number => {\n const spec = tableSpecs[i];\n return spec.type === \"column\"\n ? (readAnnotationJson(spec.spec, Annotation.Table.OrderPriority) ?? 0)\n : 0;\n };\n return [...indices].sort((a, b) => {\n if (tableSpecs[a].type !== tableSpecs[b].type) {\n return tableSpecs[a].type === \"axis\" ? -1 : 1;\n }\n return priorityOf(b) - priorityOf(a);\n });\n}\n\n/** For each axis entry substitute the index of its matching label column when one exists. */\nfunction replaceAxesWithLabelColumns(\n fields: number[],\n tableSpecs: PTableColumnSpec[],\n getLabelColumnIndex: LabelColumnLookup,\n): number[] {\n return fields.map((i) => {\n const spec = tableSpecs[i];\n const labelIdx = spec.type === \"axis\" ? getLabelColumnIndex(spec.id) : -1;\n return labelIdx === -1 ? i : labelIdx;\n });\n}\n\n/** Default hidden col ids built from columns marked with the Optional annotation. */\nfunction computeDefaultHiddenColIds(\n fields: number[],\n indices: number[],\n tableSpecs: PTableColumnSpec[],\n): PlTableColumnIdJson[] {\n return fields.reduce<PlTableColumnIdJson[]>((acc, field, i) => {\n const spec = tableSpecs[field];\n if (spec.type !== \"column\" || !isColumnOptional(spec.spec)) return acc;\n const labeledSpec = tableSpecs[indices[i]];\n return [...acc, canonicalizeJson<PlTableColumnId>({ source: spec, labeled: labeledSpec })];\n }, []);\n}\n\n/** Extract axis indices and specs from the visible table (always present as part of join). */\nfunction collectVisibleAxes(\n visibleTableSpecs: PTableColumnSpec[],\n): [number, PTableColumnSpecAxis][] {\n return visibleTableSpecs\n .entries()\n .filter((entry): entry is [number, PTableColumnSpecAxis] => entry[1].type === \"axis\")\n .toArray();\n}\n\n/**\n * Compose request indices for the visible table:\n * non-hidden display fields first, then visible axes (deduplicated).\n * Returns fieldResultMapping (display field → position in requestIndices, -1 if not requested)\n * and axesResultIndices (visible axis → position in requestIndices).\n */\nfunction buildRequestIndices(\n indices: number[],\n specsToVisibleSpecsMapping: Map<number, number>,\n visibleAxesIndices: number[],\n): {\n requestIndices: number[];\n fieldResultMapping: number[];\n axesResultIndices: number[];\n} {\n const resolved = indices.map((displayField) => {\n const idx = specsToVisibleSpecsMapping.get(displayField);\n return idx === undefined || idx === -1 ? null : idx;\n });\n const requestedFields = resolved.filter((v): v is number => v !== null);\n\n const fieldResultMapping: number[] = [];\n let pos = 0;\n for (const v of resolved) {\n fieldResultMapping.push(v === null ? -1 : pos++);\n }\n\n const requestIndices = uniq([...requestedFields, ...visibleAxesIndices]);\n const axesResultIndices = visibleAxesIndices.map((vi) => requestIndices.indexOf(vi));\n return { requestIndices, fieldResultMapping, axesResultIndices };\n}\n"],"mappings":"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"}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
import { PTableColumnSpec, PlDataTableGridStateCore, PlDataTableSheetState, PlDataTableStateV2, PlDataTableFiltersWithMeta } from '@platforma-sdk/model';
|
|
1
|
+
import { PTableColumnSpec, PlDataTableGridStateCore, PlDataTableSheetState, PlDataTableStateV2, PlDataTableFilters, PlDataTableFiltersWithMeta } from '@platforma-sdk/model';
|
|
2
2
|
import { Ref, WritableComputedRef } from 'vue';
|
|
3
3
|
import { PlDataTableSettingsV2 } from '../types';
|
|
4
|
-
|
|
4
|
+
import { Nil } from '@milaboratories/helpers';
|
|
5
|
+
export declare function useTableState(tableStateDenormalized: Ref<PlDataTableStateV2>, settings: Ref<PlDataTableSettingsV2>, columns: Ref<PTableColumnSpec[]>, defaultFilters: Ref<Nil | PlDataTableFilters>): {
|
|
5
6
|
gridState: WritableComputedRef<PlDataTableGridStateCore>;
|
|
6
7
|
sheetsState: WritableComputedRef<PlDataTableSheetState[]>;
|
|
7
|
-
filtersState: Ref<PlDataTableFiltersWithMeta>;
|
|
8
8
|
searchString: WritableComputedRef<string>;
|
|
9
|
+
filtersState: Ref<PlDataTableFiltersWithMeta>;
|
|
10
|
+
defaultFiltersState: Ref<null | PlDataTableFiltersWithMeta>;
|
|
11
|
+
resetDefaultFilters: () => void;
|
|
9
12
|
};
|
|
10
13
|
//# sourceMappingURL=table-state-v2.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-state-v2.d.ts","sourceRoot":"","sources":["../../../../src/components/PlAgDataTable/sources/table-state-v2.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,
|
|
1
|
+
{"version":3,"file":"table-state-v2.d.ts","sourceRoot":"","sources":["../../../../src/components/PlAgDataTable/sources/table-state-v2.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EAOvB,KAAK,kBAAkB,EAEvB,0BAA0B,EAG3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAY,KAAK,GAAG,EAAE,KAAK,mBAAmB,EAAE,MAAM,KAAK,CAAC;AACnE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAoC,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAKhF,wBAAgB,aAAa,CAC3B,sBAAsB,EAAE,GAAG,CAAC,kBAAkB,CAAC,EAC/C,QAAQ,EAAE,GAAG,CAAC,qBAAqB,CAAC,EACpC,OAAO,EAAE,GAAG,CAAC,gBAAgB,EAAE,CAAC,EAChC,cAAc,EAAE,GAAG,CAAC,GAAG,GAAG,kBAAkB,CAAC,GAC5C;IACD,SAAS,EAAE,mBAAmB,CAAC,wBAAwB,CAAC,CAAC;IACzD,WAAW,EAAE,mBAAmB,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAE1D,YAAY,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC1C,YAAY,EAAE,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAC9C,mBAAmB,EAAE,GAAG,CAAC,IAAI,GAAG,0BAA0B,CAAC,CAAC;IAC5D,mBAAmB,EAAE,MAAM,IAAI,CAAC;CACjC,CA+IA"}
|