@platforma-sdk/ui-vue 1.44.4 → 1.44.6

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.
Files changed (66) hide show
  1. package/.turbo/turbo-build.log +33 -35
  2. package/.turbo/turbo-type-check.log +1 -1
  3. package/CHANGELOG.md +14 -0
  4. package/dist/AgGridVue/createAgGridColDef.js +2 -3
  5. package/dist/AgGridVue/createAgGridColDef.js.map +1 -1
  6. package/dist/AgGridVue/useAgGridOptions.js +2 -3
  7. package/dist/AgGridVue/useAgGridOptions.js.map +1 -1
  8. package/dist/components/PlAgDataTable/PlAgDataTableSheets.vue2.js +2 -3
  9. package/dist/components/PlAgDataTable/PlAgDataTableSheets.vue2.js.map +1 -1
  10. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js +2 -3
  11. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js.map +1 -1
  12. package/dist/components/PlAgDataTable/PlAgRowCount.vue.js +7 -8
  13. package/dist/components/PlAgDataTable/PlAgRowCount.vue.js.map +1 -1
  14. package/dist/components/PlAgDataTable/sources/focus-row.js +20 -21
  15. package/dist/components/PlAgDataTable/sources/focus-row.js.map +1 -1
  16. package/dist/components/PlAgDataTable/sources/table-source-v2.js +2 -3
  17. package/dist/components/PlAgDataTable/sources/table-source-v2.js.map +1 -1
  18. package/dist/components/PlAgDataTable/sources/table-state-v2.js +2 -3
  19. package/dist/components/PlAgDataTable/sources/table-state-v2.js.map +1 -1
  20. package/dist/components/PlAgDataTable/types.js +9 -10
  21. package/dist/components/PlAgDataTable/types.js.map +1 -1
  22. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue.js +9 -10
  23. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue.js.map +1 -1
  24. package/dist/components/PlAgRowNumHeader.vue.js +2 -3
  25. package/dist/components/PlAgRowNumHeader.vue.js.map +1 -1
  26. package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue2.js +2 -3
  27. package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue2.js.map +1 -1
  28. package/dist/components/PlAnnotations/components/DynamicForm.vue2.js +2 -3
  29. package/dist/components/PlAnnotations/components/DynamicForm.vue2.js.map +1 -1
  30. package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js +2 -3
  31. package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js.map +1 -1
  32. package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue2.js +9 -10
  33. package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue2.js.map +1 -1
  34. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue2.js +2 -3
  35. package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue2.js.map +1 -1
  36. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue2.js +2 -3
  37. package/dist/components/PlMultiSequenceAlignment/Toolbar.vue2.js.map +1 -1
  38. package/dist/components/PlMultiSequenceAlignment/data.js +8 -9
  39. package/dist/components/PlMultiSequenceAlignment/data.js.map +1 -1
  40. package/dist/components/PlTableFilters/PlTableAddFilterV2.vue.js +2 -3
  41. package/dist/components/PlTableFilters/PlTableAddFilterV2.vue.js.map +1 -1
  42. package/dist/components/PlTableFilters/PlTableFilterEntryV2.vue.js +2 -3
  43. package/dist/components/PlTableFilters/PlTableFilterEntryV2.vue.js.map +1 -1
  44. package/dist/components/PlTableFilters/PlTableFiltersV2.vue2.js +2 -3
  45. package/dist/components/PlTableFilters/PlTableFiltersV2.vue2.js.map +1 -1
  46. package/dist/components/PlTableFilters/filters-state.js +9 -10
  47. package/dist/components/PlTableFilters/filters-state.js.map +1 -1
  48. package/dist/composition/fileContent.js +0 -1
  49. package/dist/composition/fileContent.js.map +1 -1
  50. package/dist/createModel.js +2 -3
  51. package/dist/createModel.js.map +1 -1
  52. package/dist/defineApp.js +8 -9
  53. package/dist/defineApp.js.map +1 -1
  54. package/dist/internal/UpdateSerializer.js +10 -11
  55. package/dist/internal/UpdateSerializer.js.map +1 -1
  56. package/dist/internal/createAppModel.js +11 -12
  57. package/dist/internal/createAppModel.js.map +1 -1
  58. package/dist/internal/createAppV1.js +2 -3
  59. package/dist/internal/createAppV1.js.map +1 -1
  60. package/dist/internal/createAppV2.js +31 -32
  61. package/dist/internal/createAppV2.js.map +1 -1
  62. package/package.json +6 -6
  63. package/dist/lib/util/helpers/dist/parse.js +0 -24
  64. package/dist/lib/util/helpers/dist/parse.js.map +0 -1
  65. package/dist/lib/util/helpers/dist/test_timeouts.js +0 -9
  66. package/dist/lib/util/helpers/dist/test_timeouts.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"PlAgDataTableV2.vue2.js","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 PTableValue,\n} from '@platforma-sdk/model';\nimport {\n getRawPlatformaInstance,\n parseJson,\n createPlSelectionModel,\n matchAxisId,\n getAxisId,\n canonicalizeJson,\n} from '@platforma-sdk/model';\nimport type {\n CellRendererSelectorFunc,\n ColDef,\n ColGroupDef,\n GridApi,\n GridOptions,\n GridState,\n ManagedGridOptionKey,\n ManagedGridOptions,\n} from 'ag-grid-enterprise';\nimport { AgGridVue } from 'ag-grid-vue3';\nimport { computed, effectScope, ref, shallowRef, toRefs, watch } from 'vue';\nimport { AgGridTheme } from '../../aggrid';\nimport PlAgCsvExporter from '../PlAgCsvExporter/PlAgCsvExporter.vue';\nimport { PlAgGridColumnManager } from '../PlAgGridColumnManager';\nimport type { PlDataTableFiltersSettings } from '../PlTableFilters';\nimport PlTableFiltersV2 from '../PlTableFilters/PlTableFiltersV2.vue';\nimport PlAgDataTableSheets from './PlAgDataTableSheets.vue';\nimport PlOverlayLoading from './PlAgOverlayLoading.vue';\nimport PlOverlayNoRows from './PlAgOverlayNoRows.vue';\nimport PlAgRowCount from './PlAgRowCount.vue';\nimport { DeferredCircular, ensureNodeVisible } from './sources/focus-row';\nimport { autoSizeRowNumberColumn, 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 PlTableRowIdJson,\n} from './types';\nimport { watchCached } from '@milaboratories/uikit';\nimport { type PTableHidden } from './sources/common';\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.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 { gridState, sheetsState, filtersState } = useTableState(tableState, settings);\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});\n\nconst filterableColumns = ref<PTableColumnSpec[]>([]);\nconst filtersSettings = computed<PlDataTableFiltersSettings>(() => {\n const settingsCopy = { ...settings.value };\n const columns = filterableColumns.value;\n const result = settingsCopy.sourceId !== null && columns.length > 0\n ? {\n columns,\n config: (column: PTableColumnSpec) => settingsCopy.filtersConfig({ sourceId: settingsCopy.sourceId, column }),\n cachedState: [...filtersState.value],\n }\n : {\n columns: [],\n config: () => ({}),\n cachedState: [],\n };\n return result;\n});\n\nconst gridApi = shallowRef<GridApi<PlAgDataTableV2Row> | null>(null);\nconst dataRenderedTracker = new DeferredCircular<GridApi<PlAgDataTableV2Row>>();\nconst gridOptions = shallowRef<GridOptions<PlAgDataTableV2Row>>({\n animateRows: false,\n suppressColumnMoveAnimation: true,\n cellSelection: !selection.value,\n initialState: gridState.value,\n autoSizeStrategy: { type: 'fitCellContents' },\n rowSelection: selection.value\n ? {\n mode: 'multiRow',\n selectAll: 'all',\n groupSelects: 'self',\n checkboxes: false,\n headerCheckbox: false,\n enableClickSelection: false,\n }\n : undefined,\n onSelectionChanged: (event) => {\n if (selection.value) {\n const state = event.api.getServerSideSelectionState();\n const selectedKeys = state?.toggledNodes?.map((nodeId) => parseJson(nodeId as PlTableRowIdJson)) ?? [];\n if (!isJsonEqual(selection.value.selectedKeys, selectedKeys)) {\n selection.value = { ...selection.value, selectedKeys };\n }\n }\n },\n onRowDoubleClicked: (event) => {\n if (event.data && event.data.axesKey) emit('rowDoubleClicked', event.data.axesKey);\n },\n defaultColDef: {\n suppressHeaderMenuButton: true,\n sortingOrder: ['desc', 'asc', null],\n cellRendererSelector: props.cellRendererSelector,\n },\n maintainColumnOrder: true,\n localeText: {\n loadingError: '...',\n },\n rowModelType: 'serverSide',\n // cacheBlockSize should be tha same as PlMultiSequenceAlignment limit\n // so that selectAll will add all rows to selection\n cacheBlockSize: 1000,\n maxBlocksInCache: 100,\n blockLoadDebounceMillis: 500,\n serverSideSortAllLevels: true,\n suppressServerSideFullWidthLoadingRow: true,\n getRowId: (params) => params.data.id,\n loading: true,\n loadingOverlayComponentParams: {\n notReady: true,\n loadingText: props.loadingText,\n notReadyText: props.notReadyText,\n } satisfies PlAgOverlayLoadingParams,\n loadingOverlayComponent: PlOverlayLoading,\n noRowsOverlayComponent: PlOverlayNoRows,\n noRowsOverlayComponentParams: {\n text: props.noRowsText,\n } satisfies PlAgOverlayNoRowsParams,\n defaultCsvExportParams: {\n allColumns: true,\n suppressQuotes: true,\n fileName: 'table.csv',\n },\n statusBar: {\n statusPanels: [\n { statusPanel: PlAgRowCount, align: 'left' },\n ],\n },\n onGridReady: (event) => {\n const api = event.api;\n autoSizeRowNumberColumn(api);\n const setGridOption = (\n key: ManagedGridOptionKey,\n value: GridOptions[ManagedGridOptionKey],\n ) => {\n const options = { ...gridOptions.value };\n options[key] = value;\n gridOptions.value = options;\n api.setGridOption(key, value);\n };\n const updateGridOptions = (options: ManagedGridOptions) => {\n gridOptions.value = {\n ...gridOptions.value,\n ...options,\n };\n api.updateGridOptions(options);\n };\n gridApi.value = new Proxy(api, {\n get(target, prop, receiver) {\n switch (prop) {\n case 'setGridOption':\n return setGridOption;\n case 'updateGridOptions':\n return updateGridOptions;\n default:\n return Reflect.get(target, prop, receiver);\n }\n },\n });\n },\n onStateUpdated: (event) => {\n gridOptions.value.initialState = gridState.value = makePartialState(\n event.state,\n );\n event.api.autoSizeColumns(\n event.api.getAllDisplayedColumns().filter(\n (column) => column.getColId() !== PlAgDataTableRowNumberColId,\n ),\n );\n },\n onGridPreDestroyed: (event) => {\n gridOptions.value.initialState = gridState.value = makePartialState(\n event.api.getState(),\n );\n gridApi.value = null;\n },\n});\n\n// Restore proper types erased by AgGrid\nfunction makePartialState(state: GridState): PlDataTableGridStateCore {\n return {\n columnOrder: state.columnOrder as {\n orderedColIds: PlTableColumnIdJson[];\n } | undefined,\n sort: state.sort as {\n sortModel: {\n colId: PlTableColumnIdJson;\n sort: 'asc' | 'desc';\n }[];\n } | undefined,\n columnVisibility: state.columnVisibility as {\n hiddenColIds: PlTableColumnIdJson[];\n } | undefined,\n };\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 (!isJsonEqual(gridState, {}) && !isJsonEqual(gridState, selfState)) {\n gridOptions.value.initialState = gridState;\n ++reloadKey.value;\n }\n },\n);\n\n// Make loadingOverlayComponentParams reactive\nlet oldOptions: GridOptions | null = null;\nwatch(\n () => [gridApi.value, gridOptions.value] as const,\n ([gridApi, options]) => {\n // Wait for AgGrid reinitialization, gridApi will eventially become initialized\n if (!gridApi || gridApi.isDestroyed()) return;\n if (options.loading && oldOptions?.loading && !isJsonEqual(\n options.loadingOverlayComponentParams,\n oldOptions?.loadingOverlayComponentParams,\n )) {\n // Hack to reapply loadingOverlayComponentParams\n gridApi.setGridOption('loading', false);\n gridApi.setGridOption('loading', true);\n }\n oldOptions = options;\n },\n { immediate: true },\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\n .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\n .map((key) => canonicalizeJson<PlTableRowId>(mapping.map((index) => key[index])));\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\nfunction getDataColDefs(\n columnDefs: ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden>[] | null | undefined,\n): ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden>[] {\n const isColDef = <TData, TValue>(\n def: ColDef<TData, TValue> | ColGroupDef<TData>,\n ): def is ColDef<TData, TValue> => !('children' in def);\n if (!columnDefs) return [];\n return columnDefs\n .filter(isColDef)\n .filter((def) => def.colId && def.colId !== PlAgDataTableRowNumberColId);\n}\n\n// Propagate columns for filter component\nwatchCached(\n () => gridOptions.value.columnDefs,\n (columnDefs) => {\n const sourceId = settings.value.sourceId;\n if (sourceId === null) {\n filterableColumns.value = [];\n } else {\n const dataColumns = getDataColDefs(columnDefs);\n filterableColumns.value = dataColumns\n .map((def) => parseJson(def.colId! satisfies string as PlTableColumnIdJson).labeled);\n }\n },\n { immediate: true },\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 eventially 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) {\n gridApi.updateGridOptions({\n loading: true,\n loadingOverlayComponentParams: {\n ...gridOptions.value.loadingOverlayComponentParams,\n notReady: true,\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 notReady: false,\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 = (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\n ? state[0].rowCount\n : 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:\n props.cellButtonInvokeRowsOnDoubleClick,\n trigger: (key?: PTableKey) => emit('cellButtonClicked', key),\n } satisfies PlAgCellButtonAxisParams,\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\n .map((key) => mapping.map((index) => key[index]));\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 }).catch((error: unknown) => {\n if (gridApi.isDestroyed() || stateGeneration !== generation.value) return;\n console.trace(error);\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 notReadyText: props.notReadyText,\n noRowsText: props.noRowsText,\n }),\n ({ gridApi, loadingText, notReadyText, noRowsText }) => {\n if (!gridApi || gridApi.isDestroyed()) return;\n gridApi.updateGridOptions({\n loadingOverlayComponentParams: {\n ...gridOptions.value.loadingOverlayComponentParams,\n loadingText,\n notReadyText,\n },\n noRowsOverlayComponentParams: {\n ...gridOptions.value.noRowsOverlayComponentParams,\n text: noRowsText,\n },\n });\n },\n);\n</script>\n\n<template>\n <div :class=\"$style.container\">\n <PlAgGridColumnManager\n v-if=\"gridApi && !disableColumnsPanel\"\n :api=\"gridApi\"\n />\n <PlTableFiltersV2\n v-if=\"!disableFiltersPanel\"\n v-model=\"filtersState\"\n :settings=\"filtersSettings\"\n />\n <PlAgCsvExporter\n v-if=\"gridApi && showExportButton\"\n :api=\"gridApi\"\n />\n <PlAgDataTableSheets\n v-model=\"sheetsState\"\n :settings=\"sheetsSettings\"\n >\n <template #before>\n <slot name=\"before-sheets\" />\n </template>\n <template #after>\n <slot name=\"after-sheets\" />\n </template>\n </PlAgDataTableSheets>\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"],"names":["tableState","_useModel","selection","__props","props","settings","toRefs","emit","__emit","gridState","sheetsState","filtersState","useTableState","sheetsSettings","computed","settingsCopy","filterableColumns","ref","filtersSettings","columns","column","gridApi","shallowRef","dataRenderedTracker","DeferredCircular","gridOptions","event","state","selectedKeys","_a","nodeId","parseJson","isJsonEqual","params","PlOverlayLoading","PlOverlayNoRows","PlAgRowCount","api","autoSizeRowNumberColumn","setGridOption","key","value","options","updateGridOptions","target","prop","receiver","makePartialState","PlAgDataTableRowNumberColId","reloadKey","watch","selfState","oldOptions","cellRendererSelector","__expose","rowKey","ensureNodeVisible","row","axesSpec","axes","mapping","spec","id","getAxisId","axis","matchAxisId","mappingSet","selectedNodes","canonicalizeJson","index","oldSelectedKeys","scope","effectScope","resolve","promise","promiseTimeout","getDataColDefs","columnDefs","isColDef","def","watchCached","dataColumns","defaultSelection","createPlSelectionModel","oldSettings","generation","sourceChanged","rowCount","stateGeneration","calculateGridOptions","getRawPlatformaInstance","_b","result","oldAxesSpec","newSelection","error","loadingText","notReadyText","noRowsText"],"mappings":"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"}
1
+ {"version":3,"file":"PlAgDataTableV2.vue2.js","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 PTableValue,\n} from '@platforma-sdk/model';\nimport {\n getRawPlatformaInstance,\n parseJson,\n createPlSelectionModel,\n matchAxisId,\n getAxisId,\n canonicalizeJson,\n} from '@platforma-sdk/model';\nimport type {\n CellRendererSelectorFunc,\n ColDef,\n ColGroupDef,\n GridApi,\n GridOptions,\n GridState,\n ManagedGridOptionKey,\n ManagedGridOptions,\n} from 'ag-grid-enterprise';\nimport { AgGridVue } from 'ag-grid-vue3';\nimport { computed, effectScope, ref, shallowRef, toRefs, watch } from 'vue';\nimport { AgGridTheme } from '../../aggrid';\nimport PlAgCsvExporter from '../PlAgCsvExporter/PlAgCsvExporter.vue';\nimport { PlAgGridColumnManager } from '../PlAgGridColumnManager';\nimport type { PlDataTableFiltersSettings } from '../PlTableFilters';\nimport PlTableFiltersV2 from '../PlTableFilters/PlTableFiltersV2.vue';\nimport PlAgDataTableSheets from './PlAgDataTableSheets.vue';\nimport PlOverlayLoading from './PlAgOverlayLoading.vue';\nimport PlOverlayNoRows from './PlAgOverlayNoRows.vue';\nimport PlAgRowCount from './PlAgRowCount.vue';\nimport { DeferredCircular, ensureNodeVisible } from './sources/focus-row';\nimport { autoSizeRowNumberColumn, 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 PlTableRowIdJson,\n} from './types';\nimport { watchCached } from '@milaboratories/uikit';\nimport { type PTableHidden } from './sources/common';\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.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 { gridState, sheetsState, filtersState } = useTableState(tableState, settings);\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});\n\nconst filterableColumns = ref<PTableColumnSpec[]>([]);\nconst filtersSettings = computed<PlDataTableFiltersSettings>(() => {\n const settingsCopy = { ...settings.value };\n const columns = filterableColumns.value;\n const result = settingsCopy.sourceId !== null && columns.length > 0\n ? {\n columns,\n config: (column: PTableColumnSpec) => settingsCopy.filtersConfig({ sourceId: settingsCopy.sourceId, column }),\n cachedState: [...filtersState.value],\n }\n : {\n columns: [],\n config: () => ({}),\n cachedState: [],\n };\n return result;\n});\n\nconst gridApi = shallowRef<GridApi<PlAgDataTableV2Row> | null>(null);\nconst dataRenderedTracker = new DeferredCircular<GridApi<PlAgDataTableV2Row>>();\nconst gridOptions = shallowRef<GridOptions<PlAgDataTableV2Row>>({\n animateRows: false,\n suppressColumnMoveAnimation: true,\n cellSelection: !selection.value,\n initialState: gridState.value,\n autoSizeStrategy: { type: 'fitCellContents' },\n rowSelection: selection.value\n ? {\n mode: 'multiRow',\n selectAll: 'all',\n groupSelects: 'self',\n checkboxes: false,\n headerCheckbox: false,\n enableClickSelection: false,\n }\n : undefined,\n onSelectionChanged: (event) => {\n if (selection.value) {\n const state = event.api.getServerSideSelectionState();\n const selectedKeys = state?.toggledNodes?.map((nodeId) => parseJson(nodeId as PlTableRowIdJson)) ?? [];\n if (!isJsonEqual(selection.value.selectedKeys, selectedKeys)) {\n selection.value = { ...selection.value, selectedKeys };\n }\n }\n },\n onRowDoubleClicked: (event) => {\n if (event.data && event.data.axesKey) emit('rowDoubleClicked', event.data.axesKey);\n },\n defaultColDef: {\n suppressHeaderMenuButton: true,\n sortingOrder: ['desc', 'asc', null],\n cellRendererSelector: props.cellRendererSelector,\n },\n maintainColumnOrder: true,\n localeText: {\n loadingError: '...',\n },\n rowModelType: 'serverSide',\n // cacheBlockSize should be tha same as PlMultiSequenceAlignment limit\n // so that selectAll will add all rows to selection\n cacheBlockSize: 1000,\n maxBlocksInCache: 100,\n blockLoadDebounceMillis: 500,\n serverSideSortAllLevels: true,\n suppressServerSideFullWidthLoadingRow: true,\n getRowId: (params) => params.data.id,\n loading: true,\n loadingOverlayComponentParams: {\n notReady: true,\n loadingText: props.loadingText,\n notReadyText: props.notReadyText,\n } satisfies PlAgOverlayLoadingParams,\n loadingOverlayComponent: PlOverlayLoading,\n noRowsOverlayComponent: PlOverlayNoRows,\n noRowsOverlayComponentParams: {\n text: props.noRowsText,\n } satisfies PlAgOverlayNoRowsParams,\n defaultCsvExportParams: {\n allColumns: true,\n suppressQuotes: true,\n fileName: 'table.csv',\n },\n statusBar: {\n statusPanels: [\n { statusPanel: PlAgRowCount, align: 'left' },\n ],\n },\n onGridReady: (event) => {\n const api = event.api;\n autoSizeRowNumberColumn(api);\n const setGridOption = (\n key: ManagedGridOptionKey,\n value: GridOptions[ManagedGridOptionKey],\n ) => {\n const options = { ...gridOptions.value };\n options[key] = value;\n gridOptions.value = options;\n api.setGridOption(key, value);\n };\n const updateGridOptions = (options: ManagedGridOptions) => {\n gridOptions.value = {\n ...gridOptions.value,\n ...options,\n };\n api.updateGridOptions(options);\n };\n gridApi.value = new Proxy(api, {\n get(target, prop, receiver) {\n switch (prop) {\n case 'setGridOption':\n return setGridOption;\n case 'updateGridOptions':\n return updateGridOptions;\n default:\n return Reflect.get(target, prop, receiver);\n }\n },\n });\n },\n onStateUpdated: (event) => {\n gridOptions.value.initialState = gridState.value = makePartialState(\n event.state,\n );\n event.api.autoSizeColumns(\n event.api.getAllDisplayedColumns().filter(\n (column) => column.getColId() !== PlAgDataTableRowNumberColId,\n ),\n );\n },\n onGridPreDestroyed: (event) => {\n gridOptions.value.initialState = gridState.value = makePartialState(\n event.api.getState(),\n );\n gridApi.value = null;\n },\n});\n\n// Restore proper types erased by AgGrid\nfunction makePartialState(state: GridState): PlDataTableGridStateCore {\n return {\n columnOrder: state.columnOrder as {\n orderedColIds: PlTableColumnIdJson[];\n } | undefined,\n sort: state.sort as {\n sortModel: {\n colId: PlTableColumnIdJson;\n sort: 'asc' | 'desc';\n }[];\n } | undefined,\n columnVisibility: state.columnVisibility as {\n hiddenColIds: PlTableColumnIdJson[];\n } | undefined,\n };\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 (!isJsonEqual(gridState, {}) && !isJsonEqual(gridState, selfState)) {\n gridOptions.value.initialState = gridState;\n ++reloadKey.value;\n }\n },\n);\n\n// Make loadingOverlayComponentParams reactive\nlet oldOptions: GridOptions | null = null;\nwatch(\n () => [gridApi.value, gridOptions.value] as const,\n ([gridApi, options]) => {\n // Wait for AgGrid reinitialization, gridApi will eventially become initialized\n if (!gridApi || gridApi.isDestroyed()) return;\n if (options.loading && oldOptions?.loading && !isJsonEqual(\n options.loadingOverlayComponentParams,\n oldOptions?.loadingOverlayComponentParams,\n )) {\n // Hack to reapply loadingOverlayComponentParams\n gridApi.setGridOption('loading', false);\n gridApi.setGridOption('loading', true);\n }\n oldOptions = options;\n },\n { immediate: true },\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\n .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\n .map((key) => canonicalizeJson<PlTableRowId>(mapping.map((index) => key[index])));\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\nfunction getDataColDefs(\n columnDefs: ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden>[] | null | undefined,\n): ColDef<PlAgDataTableV2Row, PTableValue | PTableHidden>[] {\n const isColDef = <TData, TValue>(\n def: ColDef<TData, TValue> | ColGroupDef<TData>,\n ): def is ColDef<TData, TValue> => !('children' in def);\n if (!columnDefs) return [];\n return columnDefs\n .filter(isColDef)\n .filter((def) => def.colId && def.colId !== PlAgDataTableRowNumberColId);\n}\n\n// Propagate columns for filter component\nwatchCached(\n () => gridOptions.value.columnDefs,\n (columnDefs) => {\n const sourceId = settings.value.sourceId;\n if (sourceId === null) {\n filterableColumns.value = [];\n } else {\n const dataColumns = getDataColDefs(columnDefs);\n filterableColumns.value = dataColumns\n .map((def) => parseJson(def.colId! satisfies string as PlTableColumnIdJson).labeled);\n }\n },\n { immediate: true },\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 eventially 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) {\n gridApi.updateGridOptions({\n loading: true,\n loadingOverlayComponentParams: {\n ...gridOptions.value.loadingOverlayComponentParams,\n notReady: true,\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 notReady: false,\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 = (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\n ? state[0].rowCount\n : 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:\n props.cellButtonInvokeRowsOnDoubleClick,\n trigger: (key?: PTableKey) => emit('cellButtonClicked', key),\n } satisfies PlAgCellButtonAxisParams,\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\n .map((key) => mapping.map((index) => key[index]));\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 }).catch((error: unknown) => {\n if (gridApi.isDestroyed() || stateGeneration !== generation.value) return;\n console.trace(error);\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 notReadyText: props.notReadyText,\n noRowsText: props.noRowsText,\n }),\n ({ gridApi, loadingText, notReadyText, noRowsText }) => {\n if (!gridApi || gridApi.isDestroyed()) return;\n gridApi.updateGridOptions({\n loadingOverlayComponentParams: {\n ...gridOptions.value.loadingOverlayComponentParams,\n loadingText,\n notReadyText,\n },\n noRowsOverlayComponentParams: {\n ...gridOptions.value.noRowsOverlayComponentParams,\n text: noRowsText,\n },\n });\n },\n);\n</script>\n\n<template>\n <div :class=\"$style.container\">\n <PlAgGridColumnManager\n v-if=\"gridApi && !disableColumnsPanel\"\n :api=\"gridApi\"\n />\n <PlTableFiltersV2\n v-if=\"!disableFiltersPanel\"\n v-model=\"filtersState\"\n :settings=\"filtersSettings\"\n />\n <PlAgCsvExporter\n v-if=\"gridApi && showExportButton\"\n :api=\"gridApi\"\n />\n <PlAgDataTableSheets\n v-model=\"sheetsState\"\n :settings=\"sheetsSettings\"\n >\n <template #before>\n <slot name=\"before-sheets\" />\n </template>\n <template #after>\n <slot name=\"after-sheets\" />\n </template>\n </PlAgDataTableSheets>\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"],"names":["tableState","_useModel","selection","__props","props","settings","toRefs","emit","__emit","gridState","sheetsState","filtersState","useTableState","sheetsSettings","computed","settingsCopy","filterableColumns","ref","filtersSettings","columns","column","gridApi","shallowRef","dataRenderedTracker","DeferredCircular","gridOptions","event","state","selectedKeys","_a","nodeId","parseJson","isJsonEqual","params","PlOverlayLoading","PlOverlayNoRows","PlAgRowCount","api","autoSizeRowNumberColumn","setGridOption","key","value","options","updateGridOptions","target","prop","receiver","makePartialState","PlAgDataTableRowNumberColId","reloadKey","watch","selfState","oldOptions","cellRendererSelector","__expose","rowKey","ensureNodeVisible","row","axesSpec","axes","mapping","spec","id","getAxisId","axis","matchAxisId","mappingSet","selectedNodes","canonicalizeJson","index","oldSelectedKeys","scope","effectScope","resolve","promise","promiseTimeout","getDataColDefs","columnDefs","isColDef","def","watchCached","dataColumns","defaultSelection","createPlSelectionModel","oldSettings","generation","sourceChanged","rowCount","stateGeneration","calculateGridOptions","getRawPlatformaInstance","_b","result","oldAxesSpec","newSelection","error","loadingText","notReadyText","noRowsText"],"mappings":"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"}
@@ -10,7 +10,6 @@
10
10
  import { defineComponent as l, ref as n, computed as d, onBeforeMount as c, onBeforeUnmount as v, toDisplayString as f } from "vue";
11
11
 
12
12
 
13
- import "../../lib/util/helpers/dist/test_timeouts.js";
14
13
  import "@platforma-sdk/model";
15
14
  import "@vueuse/core";
16
15
  import "../../node_modules/.pnpm/fast-json-patch@3.1.1/node_modules/fast-json-patch/index.js";
@@ -32,27 +31,27 @@ import "canonicalize";
32
31
  import { getTotalRowsCount as i, getSelectedRowsCount as p } from "../../AgGridVue/selection.js";
33
32
  import "../PlMultiSequenceAlignment/data.js";
34
33
  import "../../composition/fileContent.js";
35
- const H = /* @__PURE__ */ l({
34
+ const G = /* @__PURE__ */ l({
36
35
  __name: "PlAgRowCount",
37
36
  props: {
38
37
  params: {}
39
38
  },
40
39
  setup(t) {
41
- const a = n(i(t.params.api)), r = n(p(t.params.api)), u = new Intl.PluralRules("en"), m = new Intl.NumberFormat("en"), s = d(() => {
42
- let o = m.format(a.value) + " ";
43
- return o += u.select(a.value) === "one" ? "row" : "rows", r.value > 0 && (o += " (" + m.format(r.value) + " selected)"), o;
40
+ const o = n(i(t.params.api)), r = n(p(t.params.api)), u = new Intl.PluralRules("en"), m = new Intl.NumberFormat("en"), s = d(() => {
41
+ let a = m.format(o.value) + " ";
42
+ return a += u.select(o.value) === "one" ? "row" : "rows", r.value > 0 && (a += " (" + m.format(r.value) + " selected)"), a;
44
43
  });
45
44
  function e() {
46
- a.value = i(t.params.api), r.value = p(t.params.api);
45
+ o.value = i(t.params.api), r.value = p(t.params.api);
47
46
  }
48
47
  return c(() => {
49
48
  t.params.api.addEventListener("selectionChanged", e), t.params.api.addEventListener("rowDataUpdated", e), t.params.api.addEventListener("modelUpdated", e);
50
49
  }), v(() => {
51
50
  t.params.api.removeEventListener("selectionChanged", e), t.params.api.removeEventListener("rowDataUpdated", e), t.params.api.removeEventListener("modelUpdated", e);
52
- }), (o, w) => f(s.value);
51
+ }), (a, w) => f(s.value);
53
52
  }
54
53
  });
55
54
  export {
56
- H as default
55
+ G as default
57
56
  };
58
57
  //# sourceMappingURL=PlAgRowCount.vue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlAgRowCount.vue.js","sources":["../../../src/components/PlAgDataTable/PlAgRowCount.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { GridApi } from 'ag-grid-enterprise';\nimport { computed, onBeforeMount, onBeforeUnmount, ref } from 'vue';\nimport { getSelectedRowsCount, getTotalRowsCount } from '../../lib';\n\nconst { params } = defineProps<{\n params: { api: GridApi };\n}>();\n\nconst totalRowCount = ref(getTotalRowsCount(params.api));\nconst selectedRowCount = ref(getSelectedRowsCount(params.api));\n\nconst pluralRules = new Intl.PluralRules('en');\nconst numberFormatter = new Intl.NumberFormat('en');\n\nconst output = computed(() => {\n let result = numberFormatter.format(totalRowCount.value) + ' ';\n result += pluralRules.select(totalRowCount.value) === 'one' ? 'row' : 'rows';\n if (selectedRowCount.value > 0) {\n result += ' (' + numberFormatter.format(selectedRowCount.value) + ' selected)';\n }\n return result;\n});\n\nfunction updateRowCounts() {\n totalRowCount.value = getTotalRowsCount(params.api);\n selectedRowCount.value = getSelectedRowsCount(params.api);\n}\n\nonBeforeMount(() => {\n params.api.addEventListener('selectionChanged', updateRowCounts);\n params.api.addEventListener('rowDataUpdated', updateRowCounts);\n params.api.addEventListener('modelUpdated', updateRowCounts);\n});\n\nonBeforeUnmount(() => {\n params.api.removeEventListener('selectionChanged', updateRowCounts);\n params.api.removeEventListener('rowDataUpdated', updateRowCounts);\n params.api.removeEventListener('modelUpdated', updateRowCounts);\n});\n</script>\n\n<template>\n {{ output }}\n</template>\n"],"names":["totalRowCount","ref","getTotalRowsCount","__props","selectedRowCount","getSelectedRowsCount","pluralRules","numberFormatter","output","computed","result","updateRowCounts","onBeforeMount","onBeforeUnmount"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,UAAMA,IAAgBC,EAAIC,EAAkBC,EAAA,OAAO,GAAG,CAAC,GACjDC,IAAmBH,EAAII,EAAqBF,EAAA,OAAO,GAAG,CAAC,GAEvDG,IAAc,IAAI,KAAK,YAAY,IAAI,GACvCC,IAAkB,IAAI,KAAK,aAAa,IAAI,GAE5CC,IAASC,EAAS,MAAM;AAC5B,UAAIC,IAASH,EAAgB,OAAOP,EAAc,KAAK,IAAI;AAC3D,aAAAU,KAAUJ,EAAY,OAAON,EAAc,KAAK,MAAM,QAAQ,QAAQ,QAClEI,EAAiB,QAAQ,MAC3BM,KAAU,OAAOH,EAAgB,OAAOH,EAAiB,KAAK,IAAI,eAE7DM;AAAA,IACT,CAAC;AAED,aAASC,IAAkB;AACzB,MAAAX,EAAc,QAAQE,EAAkBC,SAAO,GAAG,GAClDC,EAAiB,QAAQC,EAAqBF,SAAO,GAAG;AAAA,IAC1D;AAEA,WAAAS,EAAc,MAAM;AAClB,MAAAT,EAAA,OAAO,IAAI,iBAAiB,oBAAoBQ,CAAe,GAC/DR,EAAA,OAAO,IAAI,iBAAiB,kBAAkBQ,CAAe,GAC7DR,EAAA,OAAO,IAAI,iBAAiB,gBAAgBQ,CAAe;AAAA,IAC7D,CAAC,GAEDE,EAAgB,MAAM;AACpB,MAAAV,EAAA,OAAO,IAAI,oBAAoB,oBAAoBQ,CAAe,GAClER,EAAA,OAAO,IAAI,oBAAoB,kBAAkBQ,CAAe,GAChER,EAAA,OAAO,IAAI,oBAAoB,gBAAgBQ,CAAe;AAAA,IAChE,CAAC;;;"}
1
+ {"version":3,"file":"PlAgRowCount.vue.js","sources":["../../../src/components/PlAgDataTable/PlAgRowCount.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { GridApi } from 'ag-grid-enterprise';\nimport { computed, onBeforeMount, onBeforeUnmount, ref } from 'vue';\nimport { getSelectedRowsCount, getTotalRowsCount } from '../../lib';\n\nconst { params } = defineProps<{\n params: { api: GridApi };\n}>();\n\nconst totalRowCount = ref(getTotalRowsCount(params.api));\nconst selectedRowCount = ref(getSelectedRowsCount(params.api));\n\nconst pluralRules = new Intl.PluralRules('en');\nconst numberFormatter = new Intl.NumberFormat('en');\n\nconst output = computed(() => {\n let result = numberFormatter.format(totalRowCount.value) + ' ';\n result += pluralRules.select(totalRowCount.value) === 'one' ? 'row' : 'rows';\n if (selectedRowCount.value > 0) {\n result += ' (' + numberFormatter.format(selectedRowCount.value) + ' selected)';\n }\n return result;\n});\n\nfunction updateRowCounts() {\n totalRowCount.value = getTotalRowsCount(params.api);\n selectedRowCount.value = getSelectedRowsCount(params.api);\n}\n\nonBeforeMount(() => {\n params.api.addEventListener('selectionChanged', updateRowCounts);\n params.api.addEventListener('rowDataUpdated', updateRowCounts);\n params.api.addEventListener('modelUpdated', updateRowCounts);\n});\n\nonBeforeUnmount(() => {\n params.api.removeEventListener('selectionChanged', updateRowCounts);\n params.api.removeEventListener('rowDataUpdated', updateRowCounts);\n params.api.removeEventListener('modelUpdated', updateRowCounts);\n});\n</script>\n\n<template>\n {{ output }}\n</template>\n"],"names":["totalRowCount","ref","getTotalRowsCount","__props","selectedRowCount","getSelectedRowsCount","pluralRules","numberFormatter","output","computed","result","updateRowCounts","onBeforeMount","onBeforeUnmount"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,UAAMA,IAAgBC,EAAIC,EAAkBC,EAAA,OAAO,GAAG,CAAC,GACjDC,IAAmBH,EAAII,EAAqBF,EAAA,OAAO,GAAG,CAAC,GAEvDG,IAAc,IAAI,KAAK,YAAY,IAAI,GACvCC,IAAkB,IAAI,KAAK,aAAa,IAAI,GAE5CC,IAASC,EAAS,MAAM;AAC5B,UAAIC,IAASH,EAAgB,OAAOP,EAAc,KAAK,IAAI;AAC3D,aAAAU,KAAUJ,EAAY,OAAON,EAAc,KAAK,MAAM,QAAQ,QAAQ,QAClEI,EAAiB,QAAQ,MAC3BM,KAAU,OAAOH,EAAgB,OAAOH,EAAiB,KAAK,IAAI,eAE7DM;AAAA,IACT,CAAC;AAED,aAASC,IAAkB;AACzB,MAAAX,EAAc,QAAQE,EAAkBC,SAAO,GAAG,GAClDC,EAAiB,QAAQC,EAAqBF,SAAO,GAAG;AAAA,IAC1D;AAEA,WAAAS,EAAc,MAAM;AAClB,MAAAT,EAAA,OAAO,IAAI,iBAAiB,oBAAoBQ,CAAe,GAC/DR,EAAA,OAAO,IAAI,iBAAiB,kBAAkBQ,CAAe,GAC7DR,EAAA,OAAO,IAAI,iBAAiB,gBAAgBQ,CAAe;AAAA,IAC7D,CAAC,GAEDE,EAAgB,MAAM;AACpB,MAAAV,EAAA,OAAO,IAAI,oBAAoB,oBAAoBQ,CAAe,GAClER,EAAA,OAAO,IAAI,oBAAoB,kBAAkBQ,CAAe,GAChER,EAAA,OAAO,IAAI,oBAAoB,gBAAgBQ,CAAe;AAAA,IAChE,CAAC;;;"}
@@ -1,29 +1,28 @@
1
- var h = Object.defineProperty;
2
- var o = (e) => {
1
+ var m = Object.defineProperty;
2
+ var n = (e) => {
3
3
  throw TypeError(e);
4
4
  };
5
- var v = (e, r, s) => r in e ? h(e, r, { enumerable: !0, configurable: !0, writable: !0, value: s }) : e[r] = s;
6
- var n = (e, r, s) => v(e, typeof r != "symbol" ? r + "" : r, s), i = (e, r, s) => r.has(e) || o("Cannot " + s);
7
- var u = (e, r, s) => (i(e, r, "read from private field"), s ? s.call(e) : r.get(e)), f = (e, r, s) => r.has(e) ? o("Cannot add the same private member more than once") : r instanceof WeakSet ? r.add(e) : r.set(e, s), c = (e, r, s, d) => (i(e, r, "write to private field"), d ? d.call(e, s) : r.set(e, s), s);
5
+ var v = (e, r, s) => r in e ? m(e, r, { enumerable: !0, configurable: !0, writable: !0, value: s }) : e[r] = s;
6
+ var o = (e, r, s) => v(e, typeof r != "symbol" ? r + "" : r, s), i = (e, r, s) => r.has(e) || n("Cannot " + s);
7
+ var u = (e, r, s) => (i(e, r, "read from private field"), s ? s.call(e) : r.get(e)), f = (e, r, s) => r.has(e) ? n("Cannot add the same private member more than once") : r instanceof WeakSet ? r.add(e) : r.set(e, s), c = (e, r, s, d) => (i(e, r, "write to private field"), d ? d.call(e, s) : r.set(e, s), s);
8
8
  import { Deferred as a } from "../../../lib/util/helpers/dist/utils.js";
9
- import "../../../lib/util/helpers/dist/test_timeouts.js";
10
- var l;
11
- class m extends a {
9
+ var t;
10
+ class h extends a {
12
11
  constructor() {
13
12
  super();
14
- f(this, l, !1);
13
+ f(this, t, !1);
15
14
  this.promise.finally(() => {
16
- c(this, l, !0);
15
+ c(this, t, !0);
17
16
  });
18
17
  }
19
18
  get resolved() {
20
- return u(this, l);
19
+ return u(this, t);
21
20
  }
22
21
  }
23
- l = new WeakMap();
24
- class C {
22
+ t = new WeakMap();
23
+ class x {
25
24
  constructor() {
26
- n(this, "deferred", new m());
25
+ o(this, "deferred", new h());
27
26
  }
28
27
  get promise() {
29
28
  return this.deferred.promise;
@@ -35,20 +34,20 @@ class C {
35
34
  return this.deferred.resolved;
36
35
  }
37
36
  reset() {
38
- this.resolved && (this.deferred = new m());
37
+ this.resolved && (this.deferred = new h());
39
38
  }
40
39
  }
41
- function D(e, r) {
40
+ function C(e, r) {
42
41
  let s = null;
43
- const d = (t) => r(t) ? (s = t.rowIndex, !0) : !1;
42
+ const d = (l) => r(l) ? (s = l.rowIndex, !0) : !1;
44
43
  if (e.ensureNodeVisible(d, "middle"), s) {
45
- const t = e.getAllDisplayedColumns();
46
- t.length > 0 && (e.ensureColumnVisible(t[0]), e.setFocusedCell(s, t[0]));
44
+ const l = e.getAllDisplayedColumns();
45
+ l.length > 0 && (e.ensureColumnVisible(l[0]), e.setFocusedCell(s, l[0]));
47
46
  }
48
47
  return s !== null;
49
48
  }
50
49
  export {
51
- C as DeferredCircular,
52
- D as ensureNodeVisible
50
+ x as DeferredCircular,
51
+ C as ensureNodeVisible
53
52
  };
54
53
  //# sourceMappingURL=focus-row.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"focus-row.js","sources":["../../../../src/components/PlAgDataTable/sources/focus-row.ts"],"sourcesContent":["import type { GridApi, IRowNode } from 'ag-grid-enterprise';\nimport { Deferred } from '@milaboratories/helpers';\n\nclass DeferredTracked<T> extends Deferred<T> {\n #resolved = false;\n\n constructor() {\n super();\n this.promise.finally(() => {\n this.#resolved = true;\n });\n }\n\n public get resolved(): boolean {\n return this.#resolved;\n }\n}\n\nexport class DeferredCircular<T> {\n private deferred = new DeferredTracked<T>();\n\n public get promise(): Promise<T> {\n return this.deferred.promise;\n }\n\n public resolve(ctx: T): void {\n this.deferred.resolve(ctx);\n }\n\n public get resolved(): boolean {\n return this.deferred.resolved;\n }\n\n public reset(): void {\n if (this.resolved) {\n this.deferred = new DeferredTracked<T>();\n }\n }\n}\n\nexport function ensureNodeVisible<TData>(api: GridApi<TData>, selector: (row: IRowNode<TData>) => boolean): boolean {\n let rowIndex: number | null = null;\n const nodeSelector = (row: IRowNode<TData>): boolean => {\n if (selector(row)) {\n rowIndex = row.rowIndex;\n return true;\n }\n return false;\n };\n api.ensureNodeVisible(nodeSelector, 'middle');\n if (rowIndex) {\n const columns = api.getAllDisplayedColumns();\n if (columns.length > 0) {\n api.ensureColumnVisible(columns[0]);\n api.setFocusedCell(rowIndex, columns[0]);\n }\n }\n return rowIndex !== null;\n};\n"],"names":["DeferredTracked","Deferred","__privateAdd","_resolved","__privateSet","__privateGet","DeferredCircular","__publicField","ctx","ensureNodeVisible","api","selector","rowIndex","nodeSelector","row","columns"],"mappings":";;;;;;;;;;AAGA,MAAMA,UAA2BC,EAAY;AAAA,EAG3C,cAAc;AACZ,UAAA;AAHF,IAAAC,EAAA,MAAAC,GAAY;AAIV,SAAK,QAAQ,QAAQ,MAAM;AACzB,MAAAC,EAAA,MAAKD,GAAY;AAAA,IACnB,CAAC;AAAA,EACH;AAAA,EAEA,IAAW,WAAoB;AAC7B,WAAOE,EAAA,MAAKF;AAAA,EACd;AACF;AAZEA,IAAA;AAcK,MAAMG,EAAoB;AAAA,EAA1B;AACG,IAAAC,EAAA,kBAAW,IAAIP,EAAA;AAAA;AAAA,EAEvB,IAAW,UAAsB;AAC/B,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EAEO,QAAQQ,GAAc;AAC3B,SAAK,SAAS,QAAQA,CAAG;AAAA,EAC3B;AAAA,EAEA,IAAW,WAAoB;AAC7B,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EAEO,QAAc;AACnB,IAAI,KAAK,aACP,KAAK,WAAW,IAAIR,EAAA;AAAA,EAExB;AACF;AAEO,SAASS,EAAyBC,GAAqBC,GAAsD;AAClH,MAAIC,IAA0B;AAC9B,QAAMC,IAAe,CAACC,MAChBH,EAASG,CAAG,KACdF,IAAWE,EAAI,UACR,MAEF;AAGT,MADAJ,EAAI,kBAAkBG,GAAc,QAAQ,GACxCD,GAAU;AACZ,UAAMG,IAAUL,EAAI,uBAAA;AACpB,IAAIK,EAAQ,SAAS,MACnBL,EAAI,oBAAoBK,EAAQ,CAAC,CAAC,GAClCL,EAAI,eAAeE,GAAUG,EAAQ,CAAC,CAAC;AAAA,EAE3C;AACA,SAAOH,MAAa;AACtB;"}
1
+ {"version":3,"file":"focus-row.js","sources":["../../../../src/components/PlAgDataTable/sources/focus-row.ts"],"sourcesContent":["import type { GridApi, IRowNode } from 'ag-grid-enterprise';\nimport { Deferred } from '@milaboratories/helpers';\n\nclass DeferredTracked<T> extends Deferred<T> {\n #resolved = false;\n\n constructor() {\n super();\n this.promise.finally(() => {\n this.#resolved = true;\n });\n }\n\n public get resolved(): boolean {\n return this.#resolved;\n }\n}\n\nexport class DeferredCircular<T> {\n private deferred = new DeferredTracked<T>();\n\n public get promise(): Promise<T> {\n return this.deferred.promise;\n }\n\n public resolve(ctx: T): void {\n this.deferred.resolve(ctx);\n }\n\n public get resolved(): boolean {\n return this.deferred.resolved;\n }\n\n public reset(): void {\n if (this.resolved) {\n this.deferred = new DeferredTracked<T>();\n }\n }\n}\n\nexport function ensureNodeVisible<TData>(api: GridApi<TData>, selector: (row: IRowNode<TData>) => boolean): boolean {\n let rowIndex: number | null = null;\n const nodeSelector = (row: IRowNode<TData>): boolean => {\n if (selector(row)) {\n rowIndex = row.rowIndex;\n return true;\n }\n return false;\n };\n api.ensureNodeVisible(nodeSelector, 'middle');\n if (rowIndex) {\n const columns = api.getAllDisplayedColumns();\n if (columns.length > 0) {\n api.ensureColumnVisible(columns[0]);\n api.setFocusedCell(rowIndex, columns[0]);\n }\n }\n return rowIndex !== null;\n};\n"],"names":["DeferredTracked","Deferred","__privateAdd","_resolved","__privateSet","__privateGet","DeferredCircular","__publicField","ctx","ensureNodeVisible","api","selector","rowIndex","nodeSelector","row","columns"],"mappings":";;;;;;;;;AAGA,MAAMA,UAA2BC,EAAY;AAAA,EAG3C,cAAc;AACZ,UAAA;AAHF,IAAAC,EAAA,MAAAC,GAAY;AAIV,SAAK,QAAQ,QAAQ,MAAM;AACzB,MAAAC,EAAA,MAAKD,GAAY;AAAA,IACnB,CAAC;AAAA,EACH;AAAA,EAEA,IAAW,WAAoB;AAC7B,WAAOE,EAAA,MAAKF;AAAA,EACd;AACF;AAZEA,IAAA;AAcK,MAAMG,EAAoB;AAAA,EAA1B;AACG,IAAAC,EAAA,kBAAW,IAAIP,EAAA;AAAA;AAAA,EAEvB,IAAW,UAAsB;AAC/B,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EAEO,QAAQQ,GAAc;AAC3B,SAAK,SAAS,QAAQA,CAAG;AAAA,EAC3B;AAAA,EAEA,IAAW,WAAoB;AAC7B,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EAEO,QAAc;AACnB,IAAI,KAAK,aACP,KAAK,WAAW,IAAIR,EAAA;AAAA,EAExB;AACF;AAEO,SAASS,EAAyBC,GAAqBC,GAAsD;AAClH,MAAIC,IAA0B;AAC9B,QAAMC,IAAe,CAACC,MAChBH,EAASG,CAAG,KACdF,IAAWE,EAAI,UACR,MAEF;AAGT,MADAJ,EAAI,kBAAkBG,GAAc,QAAQ,GACxCD,GAAU;AACZ,UAAMG,IAAUL,EAAI,uBAAA;AACpB,IAAIK,EAAQ,SAAS,MACnBL,EAAI,oBAAoBK,EAAQ,CAAC,CAAC,GAClCL,EAAI,eAAeE,GAAUG,EAAQ,CAAC,CAAC;AAAA,EAE3C;AACA,SAAOH,MAAa;AACtB;"}
@@ -6,7 +6,6 @@ import { defaultMainMenuItems as Q } from "./menu-items.js";
6
6
  import { makeRowNumberColDef as X, PlAgDataTableRowNumberColId as Y } from "./row-number.js";
7
7
  import { getColumnRenderingSpec as Z } from "./value-rendering.js";
8
8
  import { isJsonEqual as J } from "../../../lib/util/helpers/dist/objects.js";
9
- import "../../../lib/util/helpers/dist/test_timeouts.js";
10
9
  function B(r) {
11
10
  switch (r.type) {
12
11
  case "axis":
@@ -36,7 +35,7 @@ function ee(r, o, w, d) {
36
35
  }
37
36
  return c;
38
37
  }
39
- async function fe({
38
+ async function de({
40
39
  generation: r,
41
40
  pfDriver: o,
42
41
  model: w,
@@ -211,7 +210,7 @@ function te(r, o, w, d, c) {
211
210
  };
212
211
  }
213
212
  export {
214
- fe as calculateGridOptions,
213
+ de as calculateGridOptions,
215
214
  B as getPTableColumnId,
216
215
  te as makeColDef
217
216
  };
@@ -1 +1 @@
1
- {"version":3,"file":"table-source-v2.js","sources":["../../../../src/components/PlAgDataTable/sources/table-source-v2.ts"],"sourcesContent":["import type {\n AxesSpec,\n PTableColumnId,\n PTableColumnSpecColumn,\n PTableValue,\n PTableValueAxis,\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 isPTableValueAxis,\n readAnnotation,\n Annotation,\n ValueType,\n readAnnotationJson,\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 {\n PTableHidden,\n} 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\nexport function getPTableColumnId(spec: PTableColumnSpec): PTableColumnId {\n switch (spec.type) {\n case 'axis':\n return {\n type: 'axis',\n id: getAxisId(spec.spec),\n };\n case 'column':\n return {\n type: 'column',\n id: spec.id,\n };\n }\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: PTableValueAxis[] = axes\n .map((iAxis) => {\n const value = pTableValue(columns[resultMapping[iAxis]], iRow);\n if (!isPTableValueAxis(value))\n throw new Error(`axis value is not a PTableValueAxis: ${JSON.stringify(value)}`);\n return value;\n });\n const id = canonicalizeJson<PlTableRowId>(axesKey);\n const row: PlAgDataTableV2Row = { id, axesKey };\n fields.forEach((field, iCol) => {\n row[field.toString() as `${number}`] = resultMapping[iCol] === -1\n ? PTableHidden\n : 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<Pick<ManagedGridOptions<PlAgDataTableV2Row>, 'columnDefs' | 'serverSideDatasource'> & { axesSpec: AxesSpec }> {\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) => canonicalizeJson<PTableColumnId>(getPTableColumnId(spec));\n const dataSpecsMap = new Map(\n dataSpecs.entries().map(([i, spec]) => [specId(spec), i]),\n );\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.entries()\n .filter(\n ([i, spec]) => {\n switch (spec.type) {\n case 'axis': 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 )\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) => makeColDef(field, specs[field], specs[indices[index]], hiddenColIds, cellButtonAxisParams)),\n ];\n\n // mix in indices of skipped axes (axes that were partitioned or replaced with label columns)\n const axesSpec = specs.values().filter((spec) => spec.type === 'axis').map((spec) => spec.spec).toArray();\n const axes = axesSpec.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()) 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 (rowCount > 0 && params.request.startRow !== undefined && params.request.endRow !== undefined) {\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()) 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.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: readAnnotation(labeledSpec.spec, Annotation.Label)?.trim() ?? `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"],"names":["getPTableColumnId","spec","getAxisId","columns2rows","fields","columns","axes","resultMapping","rowData","iRow","axesKey","iAxis","value","pTableValue","isPTableValueAxis","row","canonicalizeJson","field","iCol","PTableHidden","calculateGridOptions","generation","pfDriver","model","sheets","dataRenderedTracker","hiddenColIds","cellButtonAxisParams","stateGeneration","stateChangedError","specs","pt","dataSpecs","specId","dataSpecsMap","i","specsToDataSpecsMapping","dataSpecIdx","sheetAxesIds","sheet","isPartitionedAxis","axisId","id","matchAxisId","labelColumns","setLabelColumnIndex","labelColumnIdx","info","getLabelColumnIndex","_a","indices","isLabelColumnSpec","labeledAxisId","isColumnHidden","a","b","aPriority","readAnnotationJson","Annotation","bPriority","columnDefs","makeRowNumberColDef","index","makeColDef","axesSpec","r","requestIndices","idx","rowCount","lastParams","params","ptShape","isJsonEqual","length","data","column","PlAgDataTableRowNumberColId","error","labeledSpec","colId","valueType","columnRenderingSpec","getColumnRenderingSpec","cellStyle","defaultMainMenuItems","readAnnotation","isColumnOptional","PlAgColumnHeader","_b","PlAgTextAndButtonCell","ValueType"],"mappings":"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"}
1
+ {"version":3,"file":"table-source-v2.js","sources":["../../../../src/components/PlAgDataTable/sources/table-source-v2.ts"],"sourcesContent":["import type {\n AxesSpec,\n PTableColumnId,\n PTableColumnSpecColumn,\n PTableValue,\n PTableValueAxis,\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 isPTableValueAxis,\n readAnnotation,\n Annotation,\n ValueType,\n readAnnotationJson,\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 {\n PTableHidden,\n} 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\nexport function getPTableColumnId(spec: PTableColumnSpec): PTableColumnId {\n switch (spec.type) {\n case 'axis':\n return {\n type: 'axis',\n id: getAxisId(spec.spec),\n };\n case 'column':\n return {\n type: 'column',\n id: spec.id,\n };\n }\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: PTableValueAxis[] = axes\n .map((iAxis) => {\n const value = pTableValue(columns[resultMapping[iAxis]], iRow);\n if (!isPTableValueAxis(value))\n throw new Error(`axis value is not a PTableValueAxis: ${JSON.stringify(value)}`);\n return value;\n });\n const id = canonicalizeJson<PlTableRowId>(axesKey);\n const row: PlAgDataTableV2Row = { id, axesKey };\n fields.forEach((field, iCol) => {\n row[field.toString() as `${number}`] = resultMapping[iCol] === -1\n ? PTableHidden\n : 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<Pick<ManagedGridOptions<PlAgDataTableV2Row>, 'columnDefs' | 'serverSideDatasource'> & { axesSpec: AxesSpec }> {\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) => canonicalizeJson<PTableColumnId>(getPTableColumnId(spec));\n const dataSpecsMap = new Map(\n dataSpecs.entries().map(([i, spec]) => [specId(spec), i]),\n );\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.entries()\n .filter(\n ([i, spec]) => {\n switch (spec.type) {\n case 'axis': 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 )\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) => makeColDef(field, specs[field], specs[indices[index]], hiddenColIds, cellButtonAxisParams)),\n ];\n\n // mix in indices of skipped axes (axes that were partitioned or replaced with label columns)\n const axesSpec = specs.values().filter((spec) => spec.type === 'axis').map((spec) => spec.spec).toArray();\n const axes = axesSpec.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()) 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 (rowCount > 0 && params.request.startRow !== undefined && params.request.endRow !== undefined) {\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()) 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.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: readAnnotation(labeledSpec.spec, Annotation.Label)?.trim() ?? `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"],"names":["getPTableColumnId","spec","getAxisId","columns2rows","fields","columns","axes","resultMapping","rowData","iRow","axesKey","iAxis","value","pTableValue","isPTableValueAxis","row","canonicalizeJson","field","iCol","PTableHidden","calculateGridOptions","generation","pfDriver","model","sheets","dataRenderedTracker","hiddenColIds","cellButtonAxisParams","stateGeneration","stateChangedError","specs","pt","dataSpecs","specId","dataSpecsMap","i","specsToDataSpecsMapping","dataSpecIdx","sheetAxesIds","sheet","isPartitionedAxis","axisId","id","matchAxisId","labelColumns","setLabelColumnIndex","labelColumnIdx","info","getLabelColumnIndex","_a","indices","isLabelColumnSpec","labeledAxisId","isColumnHidden","a","b","aPriority","readAnnotationJson","Annotation","bPriority","columnDefs","makeRowNumberColDef","index","makeColDef","axesSpec","r","requestIndices","idx","rowCount","lastParams","params","ptShape","isJsonEqual","length","data","column","PlAgDataTableRowNumberColId","error","labeledSpec","colId","valueType","columnRenderingSpec","getColumnRenderingSpec","cellStyle","defaultMainMenuItems","readAnnotation","isColumnOptional","PlAgColumnHeader","_b","PlAgTextAndButtonCell","ValueType"],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  import { upgradePlDataTableStateV2 as v, makeDefaultPTableParams as i, parseJson as d } from "@platforma-sdk/model";
2
2
  import { computed as n, watch as h } from "vue";
3
3
  import { isJsonEqual as I } from "../../../lib/util/helpers/dist/objects.js";
4
- import "../../../lib/util/helpers/dist/test_timeouts.js";
5
4
  import { makePredicate as g } from "../../PlTableFilters/filters_logic.js";
6
5
  import { computedCached as b } from "@milaboratories/uikit";
7
6
  function P() {
@@ -57,7 +56,7 @@ function c(e) {
57
56
  sorting: y(e.gridState.sort)
58
57
  };
59
58
  }
60
- function D(e, o) {
59
+ function q(e, o) {
61
60
  const a = b({
62
61
  get: () => v(e.value),
63
62
  set: (t) => e.value = t
@@ -126,6 +125,6 @@ function D(e, o) {
126
125
  return { gridState: f, sheetsState: m, filtersState: p };
127
126
  }
128
127
  export {
129
- D as useTableState
128
+ q as useTableState
130
129
  };
131
130
  //# sourceMappingURL=table-state-v2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table-state-v2.js","sources":["../../../../src/components/PlAgDataTable/sources/table-state-v2.ts"],"sourcesContent":["import {\n makeDefaultPTableParams,\n parseJson,\n upgradePlDataTableStateV2,\n type PlDataTableGridStateCore,\n type PlDataTableSheetState,\n type PlDataTableStateV2,\n type PlDataTableFilterState,\n type PlDataTableStateV2CacheEntry,\n type PlDataTableStateV2Normalized,\n type PObjectId,\n type PTableParamsV2,\n type PTableRecordFilter,\n type PTableSorting,\n} from '@platforma-sdk/model';\nimport {\n computed,\n watch,\n type Ref,\n type WritableComputedRef,\n} from 'vue';\nimport type {\n PlDataTableSettingsV2,\n} from '../types';\nimport { isJsonEqual } from '@milaboratories/helpers';\nimport { makePredicate } from '../../PlTableFilters/filters_logic';\nimport { computedCached } from '@milaboratories/uikit';\n\ntype PlDataTableStateV2CacheEntryNullable = PlDataTableStateV2CacheEntry | {\n sourceId: null;\n gridState: Record<string, never>;\n sheetsState: [];\n filtersState: [];\n};\n\nfunction makeDefaultState(): PlDataTableStateV2CacheEntryNullable {\n return {\n sourceId: null,\n gridState: {},\n sheetsState: [],\n filtersState: [],\n };\n}\n\nfunction getHiddenColIds(state: PlDataTableGridStateCore['columnVisibility']): PObjectId[] | null {\n return state?.hiddenColIds\n ?.map(parseJson)\n .reduce((acc, c) => {\n if (c.source.type === 'column') {\n acc.push(c.source.id);\n }\n return acc;\n }, [] as PObjectId[])\n ?? null;\n}\n\nfunction makePartitionFilters(sheetsState: PlDataTableSheetState[]): PTableRecordFilter[] {\n return sheetsState.map((s) => ({\n type: 'bySingleColumnV2',\n column: {\n type: 'axis',\n id: s.axisId,\n },\n predicate: {\n operator: 'Equal',\n reference: s.value,\n },\n }));\n}\n\nfunction makeFilters(columnsState: PlDataTableFilterState[]): PTableRecordFilter[] {\n return columnsState\n .reduce((acc, s) => {\n if (!s.filter || s.filter.disabled) {\n return acc;\n }\n acc.push({\n type: 'bySingleColumnV2',\n column: s.id,\n predicate: makePredicate(s.alphabetic, s.filter.value),\n });\n return acc;\n }, [] as PTableRecordFilter[]);\n}\n\nfunction makeSorting(state: PlDataTableGridStateCore['sort']): PTableSorting[] {\n return (\n state?.sortModel.map((item) => {\n const { spec: _, ...column } = parseJson(\n item.colId,\n ).labeled;\n return {\n column,\n ascending: item.sort === 'asc',\n naAndAbsentAreLeastValues: item.sort === 'asc',\n };\n }) ?? []\n );\n}\n\nfunction makePTableParams(state: PlDataTableStateV2CacheEntry): PTableParamsV2 {\n return {\n sourceId: state.sourceId,\n hiddenColIds: getHiddenColIds(state.gridState.columnVisibility),\n partitionFilters: makePartitionFilters(state.sheetsState),\n filters: makeFilters(state.filtersState),\n sorting: makeSorting(state.gridState.sort),\n };\n}\n\nexport function useTableState(\n tableStateDenormalized: Ref<PlDataTableStateV2>,\n settings: Ref<PlDataTableSettingsV2>,\n): {\n gridState: WritableComputedRef<PlDataTableGridStateCore>;\n sheetsState: WritableComputedRef<PlDataTableSheetState[]>;\n filtersState: WritableComputedRef<PlDataTableFilterState[]>;\n } {\n const tableStateNormalized = computedCached<PlDataTableStateV2Normalized>({\n get: () => upgradePlDataTableStateV2(tableStateDenormalized.value),\n set: (newState) => tableStateDenormalized.value = newState,\n });\n\n const tableState = computed<PlDataTableStateV2CacheEntryNullable>({\n get: () => {\n const defaultState = makeDefaultState();\n\n const sourceId = settings.value.sourceId;\n if (!sourceId) return defaultState;\n\n const cachedState = tableStateNormalized.value.stateCache\n .find((entry) => entry.sourceId === sourceId);\n if (!cachedState) return {\n ...defaultState,\n sourceId,\n };\n\n return cachedState;\n },\n set: (state) => {\n const oldState = { ...tableStateNormalized.value };\n const newState: PlDataTableStateV2Normalized = {\n ...oldState,\n pTableParams: makeDefaultPTableParams(),\n };\n\n if (state.sourceId) {\n newState.pTableParams = makePTableParams(state);\n\n const stateIdx = newState.stateCache.findIndex((entry) => entry.sourceId === state.sourceId);\n if (stateIdx !== -1) {\n newState.stateCache[stateIdx] = state;\n } else {\n const CacheDepth = 5;\n newState.stateCache.push(state);\n newState.stateCache = newState.stateCache.slice(-CacheDepth);\n }\n }\n\n tableStateNormalized.value = newState;\n },\n });\n\n // Update pTableParams when sourceId changes\n watch(\n () => tableState.value,\n (state) => {\n const newParams = state.sourceId ? makePTableParams(state) : makeDefaultPTableParams();\n const oldParams = tableStateNormalized.value.pTableParams;\n if (!isJsonEqual(newParams, oldParams)) {\n tableStateNormalized.value = {\n ...tableStateNormalized.value,\n pTableParams: newParams,\n };\n }\n },\n { deep: true },\n );\n\n const gridState = computed<PlDataTableGridStateCore>({\n get: () => tableState.value.gridState,\n set: (gridState) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n gridState,\n };\n }\n },\n });\n\n const sheetsState = computed<PlDataTableSheetState[]>({\n get: () => tableState.value.sheetsState,\n set: (sheetsState) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n sheetsState,\n };\n }\n },\n });\n\n const filtersState = computed<PlDataTableFilterState[]>({\n get: () => tableState.value.filtersState,\n set: (filtersState) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n filtersState,\n };\n }\n },\n });\n\n return { gridState, sheetsState, filtersState };\n}\n"],"names":["makeDefaultState","getHiddenColIds","state","_a","parseJson","acc","c","makePartitionFilters","sheetsState","s","makeFilters","columnsState","makePredicate","makeSorting","item","_","column","makePTableParams","useTableState","tableStateDenormalized","settings","tableStateNormalized","computedCached","upgradePlDataTableStateV2","newState","tableState","computed","defaultState","sourceId","cachedState","entry","makeDefaultPTableParams","stateIdx","watch","newParams","oldParams","isJsonEqual","gridState","oldState","filtersState"],"mappings":"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"}
1
+ {"version":3,"file":"table-state-v2.js","sources":["../../../../src/components/PlAgDataTable/sources/table-state-v2.ts"],"sourcesContent":["import {\n makeDefaultPTableParams,\n parseJson,\n upgradePlDataTableStateV2,\n type PlDataTableGridStateCore,\n type PlDataTableSheetState,\n type PlDataTableStateV2,\n type PlDataTableFilterState,\n type PlDataTableStateV2CacheEntry,\n type PlDataTableStateV2Normalized,\n type PObjectId,\n type PTableParamsV2,\n type PTableRecordFilter,\n type PTableSorting,\n} from '@platforma-sdk/model';\nimport {\n computed,\n watch,\n type Ref,\n type WritableComputedRef,\n} from 'vue';\nimport type {\n PlDataTableSettingsV2,\n} from '../types';\nimport { isJsonEqual } from '@milaboratories/helpers';\nimport { makePredicate } from '../../PlTableFilters/filters_logic';\nimport { computedCached } from '@milaboratories/uikit';\n\ntype PlDataTableStateV2CacheEntryNullable = PlDataTableStateV2CacheEntry | {\n sourceId: null;\n gridState: Record<string, never>;\n sheetsState: [];\n filtersState: [];\n};\n\nfunction makeDefaultState(): PlDataTableStateV2CacheEntryNullable {\n return {\n sourceId: null,\n gridState: {},\n sheetsState: [],\n filtersState: [],\n };\n}\n\nfunction getHiddenColIds(state: PlDataTableGridStateCore['columnVisibility']): PObjectId[] | null {\n return state?.hiddenColIds\n ?.map(parseJson)\n .reduce((acc, c) => {\n if (c.source.type === 'column') {\n acc.push(c.source.id);\n }\n return acc;\n }, [] as PObjectId[])\n ?? null;\n}\n\nfunction makePartitionFilters(sheetsState: PlDataTableSheetState[]): PTableRecordFilter[] {\n return sheetsState.map((s) => ({\n type: 'bySingleColumnV2',\n column: {\n type: 'axis',\n id: s.axisId,\n },\n predicate: {\n operator: 'Equal',\n reference: s.value,\n },\n }));\n}\n\nfunction makeFilters(columnsState: PlDataTableFilterState[]): PTableRecordFilter[] {\n return columnsState\n .reduce((acc, s) => {\n if (!s.filter || s.filter.disabled) {\n return acc;\n }\n acc.push({\n type: 'bySingleColumnV2',\n column: s.id,\n predicate: makePredicate(s.alphabetic, s.filter.value),\n });\n return acc;\n }, [] as PTableRecordFilter[]);\n}\n\nfunction makeSorting(state: PlDataTableGridStateCore['sort']): PTableSorting[] {\n return (\n state?.sortModel.map((item) => {\n const { spec: _, ...column } = parseJson(\n item.colId,\n ).labeled;\n return {\n column,\n ascending: item.sort === 'asc',\n naAndAbsentAreLeastValues: item.sort === 'asc',\n };\n }) ?? []\n );\n}\n\nfunction makePTableParams(state: PlDataTableStateV2CacheEntry): PTableParamsV2 {\n return {\n sourceId: state.sourceId,\n hiddenColIds: getHiddenColIds(state.gridState.columnVisibility),\n partitionFilters: makePartitionFilters(state.sheetsState),\n filters: makeFilters(state.filtersState),\n sorting: makeSorting(state.gridState.sort),\n };\n}\n\nexport function useTableState(\n tableStateDenormalized: Ref<PlDataTableStateV2>,\n settings: Ref<PlDataTableSettingsV2>,\n): {\n gridState: WritableComputedRef<PlDataTableGridStateCore>;\n sheetsState: WritableComputedRef<PlDataTableSheetState[]>;\n filtersState: WritableComputedRef<PlDataTableFilterState[]>;\n } {\n const tableStateNormalized = computedCached<PlDataTableStateV2Normalized>({\n get: () => upgradePlDataTableStateV2(tableStateDenormalized.value),\n set: (newState) => tableStateDenormalized.value = newState,\n });\n\n const tableState = computed<PlDataTableStateV2CacheEntryNullable>({\n get: () => {\n const defaultState = makeDefaultState();\n\n const sourceId = settings.value.sourceId;\n if (!sourceId) return defaultState;\n\n const cachedState = tableStateNormalized.value.stateCache\n .find((entry) => entry.sourceId === sourceId);\n if (!cachedState) return {\n ...defaultState,\n sourceId,\n };\n\n return cachedState;\n },\n set: (state) => {\n const oldState = { ...tableStateNormalized.value };\n const newState: PlDataTableStateV2Normalized = {\n ...oldState,\n pTableParams: makeDefaultPTableParams(),\n };\n\n if (state.sourceId) {\n newState.pTableParams = makePTableParams(state);\n\n const stateIdx = newState.stateCache.findIndex((entry) => entry.sourceId === state.sourceId);\n if (stateIdx !== -1) {\n newState.stateCache[stateIdx] = state;\n } else {\n const CacheDepth = 5;\n newState.stateCache.push(state);\n newState.stateCache = newState.stateCache.slice(-CacheDepth);\n }\n }\n\n tableStateNormalized.value = newState;\n },\n });\n\n // Update pTableParams when sourceId changes\n watch(\n () => tableState.value,\n (state) => {\n const newParams = state.sourceId ? makePTableParams(state) : makeDefaultPTableParams();\n const oldParams = tableStateNormalized.value.pTableParams;\n if (!isJsonEqual(newParams, oldParams)) {\n tableStateNormalized.value = {\n ...tableStateNormalized.value,\n pTableParams: newParams,\n };\n }\n },\n { deep: true },\n );\n\n const gridState = computed<PlDataTableGridStateCore>({\n get: () => tableState.value.gridState,\n set: (gridState) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n gridState,\n };\n }\n },\n });\n\n const sheetsState = computed<PlDataTableSheetState[]>({\n get: () => tableState.value.sheetsState,\n set: (sheetsState) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n sheetsState,\n };\n }\n },\n });\n\n const filtersState = computed<PlDataTableFilterState[]>({\n get: () => tableState.value.filtersState,\n set: (filtersState) => {\n const oldState = tableState.value;\n if (oldState.sourceId) {\n tableState.value = {\n ...oldState,\n filtersState,\n };\n }\n },\n });\n\n return { gridState, sheetsState, filtersState };\n}\n"],"names":["makeDefaultState","getHiddenColIds","state","_a","parseJson","acc","c","makePartitionFilters","sheetsState","s","makeFilters","columnsState","makePredicate","makeSorting","item","_","column","makePTableParams","useTableState","tableStateDenormalized","settings","tableStateNormalized","computedCached","upgradePlDataTableStateV2","newState","tableState","computed","defaultState","sourceId","cachedState","entry","makeDefaultPTableParams","stateIdx","watch","newParams","oldParams","isJsonEqual","gridState","oldState","filtersState"],"mappings":";;;;;AAmCA,SAASA,IAAyD;AAChE,SAAO;AAAA,IACL,UAAU;AAAA,IACV,WAAW,CAAA;AAAA,IACX,aAAa,CAAA;AAAA,IACb,cAAc,CAAA;AAAA,EAAC;AAEnB;AAEA,SAASC,EAAgBC,GAAyE;;AAChG,WAAOC,IAAAD,KAAA,gBAAAA,EAAO,iBAAP,gBAAAC,EACH,IAAIC,GACL,OAAO,CAACC,GAAKC,OACRA,EAAE,OAAO,SAAS,YACpBD,EAAI,KAAKC,EAAE,OAAO,EAAE,GAEfD,IACN,CAAA,OACA;AACP;AAEA,SAASE,EAAqBC,GAA4D;AACxF,SAAOA,EAAY,IAAI,CAACC,OAAO;AAAA,IAC7B,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,IAAIA,EAAE;AAAA,IAAA;AAAA,IAER,WAAW;AAAA,MACT,UAAU;AAAA,MACV,WAAWA,EAAE;AAAA,IAAA;AAAA,EACf,EACA;AACJ;AAEA,SAASC,EAAYC,GAA8D;AACjF,SAAOA,EACJ,OAAO,CAACN,GAAKI,OACR,CAACA,EAAE,UAAUA,EAAE,OAAO,YAG1BJ,EAAI,KAAK;AAAA,IACP,MAAM;AAAA,IACN,QAAQI,EAAE;AAAA,IACV,WAAWG,EAAcH,EAAE,YAAYA,EAAE,OAAO,KAAK;AAAA,EAAA,CACtD,GACMJ,IACN,CAAA,CAA0B;AACjC;AAEA,SAASQ,EAAYX,GAA0D;AAC7E,UACEA,KAAA,gBAAAA,EAAO,UAAU,IAAI,CAACY,MAAS;AAC7B,UAAM,EAAE,MAAMC,GAAG,GAAGC,MAAWZ;AAAA,MAC7BU,EAAK;AAAA,IAAA,EACL;AACF,WAAO;AAAA,MACL,QAAAE;AAAA,MACA,WAAWF,EAAK,SAAS;AAAA,MACzB,2BAA2BA,EAAK,SAAS;AAAA,IAAA;AAAA,EAE7C,OAAM,CAAA;AAEV;AAEA,SAASG,EAAiBf,GAAqD;AAC7E,SAAO;AAAA,IACL,UAAUA,EAAM;AAAA,IAChB,cAAcD,EAAgBC,EAAM,UAAU,gBAAgB;AAAA,IAC9D,kBAAkBK,EAAqBL,EAAM,WAAW;AAAA,IACxD,SAASQ,EAAYR,EAAM,YAAY;AAAA,IACvC,SAASW,EAAYX,EAAM,UAAU,IAAI;AAAA,EAAA;AAE7C;AAEO,SAASgB,EACdC,GACAC,GAKE;AACF,QAAMC,IAAuBC,EAA6C;AAAA,IACxE,KAAK,MAAMC,EAA0BJ,EAAuB,KAAK;AAAA,IACjE,KAAK,CAACK,MAAaL,EAAuB,QAAQK;AAAA,EAAA,CACnD,GAEKC,IAAaC,EAA+C;AAAA,IAChE,KAAK,MAAM;AACT,YAAMC,IAAe3B,EAAA,GAEf4B,IAAWR,EAAS,MAAM;AAChC,UAAI,CAACQ,EAAU,QAAOD;AAEtB,YAAME,IAAcR,EAAqB,MAAM,WAC5C,KAAK,CAACS,MAAUA,EAAM,aAAaF,CAAQ;AAC9C,aAAKC,KAAoB;AAAA,QACvB,GAAGF;AAAA,QACH,UAAAC;AAAA,MAAA;AAAA,IAIJ;AAAA,IACA,KAAK,CAAC1B,MAAU;AAEd,YAAMsB,IAAyC;AAAA,QAC7C,GAFe,EAAE,GAAGH,EAAqB,MAAA;AAAA,QAGzC,cAAcU,EAAA;AAAA,MAAwB;AAGxC,UAAI7B,EAAM,UAAU;AAClB,QAAAsB,EAAS,eAAeP,EAAiBf,CAAK;AAE9C,cAAM8B,IAAWR,EAAS,WAAW,UAAU,CAACM,MAAUA,EAAM,aAAa5B,EAAM,QAAQ;AAC3F,QAAI8B,MAAa,KACfR,EAAS,WAAWQ,CAAQ,IAAI9B,KAGhCsB,EAAS,WAAW,KAAKtB,CAAK,GAC9BsB,EAAS,aAAaA,EAAS,WAAW,MAAM,EAAW;AAAA,MAE/D;AAEA,MAAAH,EAAqB,QAAQG;AAAA,IAC/B;AAAA,EAAA,CACD;AAGD,EAAAS;AAAA,IACE,MAAMR,EAAW;AAAA,IACjB,CAACvB,MAAU;AACT,YAAMgC,IAAYhC,EAAM,WAAWe,EAAiBf,CAAK,IAAI6B,EAAA,GACvDI,IAAYd,EAAqB,MAAM;AAC7C,MAAKe,EAAYF,GAAWC,CAAS,MACnCd,EAAqB,QAAQ;AAAA,QAC3B,GAAGA,EAAqB;AAAA,QACxB,cAAca;AAAA,MAAA;AAAA,IAGpB;AAAA,IACA,EAAE,MAAM,GAAA;AAAA,EAAK;AAGf,QAAMG,IAAYX,EAAmC;AAAA,IACnD,KAAK,MAAMD,EAAW,MAAM;AAAA,IAC5B,KAAK,CAACY,MAAc;AAClB,YAAMC,IAAWb,EAAW;AAC5B,MAAIa,EAAS,aACXb,EAAW,QAAQ;AAAA,QACjB,GAAGa;AAAA,QACH,WAAAD;AAAAA,MAAA;AAAA,IAGN;AAAA,EAAA,CACD,GAEK7B,IAAckB,EAAkC;AAAA,IACpD,KAAK,MAAMD,EAAW,MAAM;AAAA,IAC5B,KAAK,CAACjB,MAAgB;AACpB,YAAM8B,IAAWb,EAAW;AAC5B,MAAIa,EAAS,aACXb,EAAW,QAAQ;AAAA,QACjB,GAAGa;AAAA,QACH,aAAA9B;AAAAA,MAAA;AAAA,IAGN;AAAA,EAAA,CACD,GAEK+B,IAAeb,EAAmC;AAAA,IACtD,KAAK,MAAMD,EAAW,MAAM;AAAA,IAC5B,KAAK,CAACc,MAAiB;AACrB,YAAMD,IAAWb,EAAW;AAC5B,MAAIa,EAAS,aACXb,EAAW,QAAQ;AAAA,QACjB,GAAGa;AAAA,QACH,cAAAC;AAAAA,MAAA;AAAA,IAGN;AAAA,EAAA,CACD;AAED,SAAO,EAAE,WAAAF,GAAW,aAAA7B,GAAa,cAAA+B,EAAA;AACnC;"}
@@ -1,11 +1,10 @@
1
1
  import { computed as f, toValue as l } from "vue";
2
2
  import u from "canonicalize";
3
- import { deepClone as o } from "../../lib/util/helpers/dist/objects.js";
4
- import "../../lib/util/helpers/dist/test_timeouts.js";
5
- function h(s) {
6
- const c = s.filtersConfig, d = typeof c == "function" ? (e) => {
3
+ import { deepClone as c } from "../../lib/util/helpers/dist/objects.js";
4
+ function I(s) {
5
+ const o = s.filtersConfig, d = typeof o == "function" ? (e) => {
7
6
  try {
8
- return c({
7
+ return o({
9
8
  sourceId: JSON.parse(e.sourceId),
10
9
  column: e.column
11
10
  });
@@ -14,12 +13,12 @@ function h(s) {
14
13
  }
15
14
  } : () => ({});
16
15
  return f(() => {
17
- const e = o(l(s.model));
16
+ const e = c(l(s.model));
18
17
  let r;
19
18
  if ("sourceId" in s) {
20
- const t = o(l(s.sourceId));
19
+ const t = c(l(s.sourceId));
21
20
  if (s.sheets) {
22
- const n = o(l(s.sheets));
21
+ const n = c(l(s.sheets));
23
22
  r = t && n ? {
24
23
  sourceId: u(t),
25
24
  sheets: n,
@@ -32,7 +31,7 @@ function h(s) {
32
31
  model: e
33
32
  } : { sourceId: null };
34
33
  } else if (s.sheets) {
35
- const t = o(l(s.sheets));
34
+ const t = c(l(s.sheets));
36
35
  r = t ? {
37
36
  sourceId: u("static"),
38
37
  sheets: t,
@@ -51,6 +50,6 @@ function h(s) {
51
50
  });
52
51
  }
53
52
  export {
54
- h as usePlDataTableSettingsV2
53
+ I as usePlDataTableSettingsV2
55
54
  };
56
55
  //# sourceMappingURL=types.js.map