@platforma-sdk/ui-vue 1.40.5 → 1.40.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 (26) hide show
  1. package/.turbo/turbo-build.log +10 -10
  2. package/.turbo/turbo-type-check.log +1 -1
  3. package/CHANGELOG.md +9 -0
  4. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue.d.ts +1 -4
  5. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue.d.ts.map +1 -1
  6. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js +155 -172
  7. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js.map +1 -1
  8. package/dist/components/PlAgDataTable/sources/table-source-v2.d.ts +2 -2
  9. package/dist/components/PlAgDataTable/sources/table-source-v2.d.ts.map +1 -1
  10. package/dist/components/PlAgDataTable/sources/table-source-v2.js +110 -105
  11. package/dist/components/PlAgDataTable/sources/table-source-v2.js.map +1 -1
  12. package/dist/components/PlAgDataTable/types.d.ts +27 -43
  13. package/dist/components/PlAgDataTable/types.d.ts.map +1 -1
  14. package/dist/components/PlAgDataTable/types.js +32 -43
  15. package/dist/components/PlAgDataTable/types.js.map +1 -1
  16. package/dist/lib/model/common/dist/index.js.map +1 -1
  17. package/dist/lib/ui/uikit/dist/components/PlDialogModal/PlDialogModal.vue.js.map +1 -1
  18. package/dist/lib/ui/uikit/dist/lib/model/common/dist/index.js +5 -5
  19. package/dist/lib/ui/uikit/dist/sdk/model/dist/index.js +18 -18
  20. package/dist/lib/ui/uikit/dist/sdk/model/dist/index.js.map +1 -1
  21. package/dist/sdk/model/dist/index.js +80 -75
  22. package/dist/sdk/model/dist/index.js.map +1 -1
  23. package/package.json +7 -7
  24. package/src/components/PlAgDataTable/PlAgDataTableV2.vue +6 -31
  25. package/src/components/PlAgDataTable/sources/table-source-v2.ts +29 -29
  26. package/src/components/PlAgDataTable/types.ts +42 -70
@@ -1 +1 @@
1
- {"version":3,"file":"PlAgDataTableV2.vue2.js","sources":["../../../src/components/PlAgDataTable/PlAgDataTableV2.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { isJsonEqual } from '@milaboratories/helpers';\nimport type {\n AxisId,\n AxisSpec,\n PlDataTableGridStateCore,\n PlDataTableStateV2,\n PlSelectionModel,\n PlTableColumnIdJson,\n PTableColumnSpec,\n PTableKey,\n} from '@platforma-sdk/model';\nimport { getRawPlatformaInstance, parseJson } 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, 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 { focusRow, makeOnceTracker } 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 PlTableLabeledSelectionModel,\n PlTableRowIdJson,\n} from './types';\nimport { watchCached } from '@milaboratories/uikit';\n\nconst tableState = defineModel<PlDataTableStateV2>({\n required: true,\n});\nconst selection = defineModel<PlSelectionModel>('selection');\nconst selectionLabeled = defineModel<PlTableLabeledSelectionModel>('selectionLabeled');\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}>();\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 firstDataRenderedTracker = makeOnceTracker<GridApi<PlAgDataTableV2Row>>();\nconst gridOptions = shallowRef<GridOptions<PlAgDataTableV2Row>>({\n animateRows: false,\n suppressColumnMoveAnimation: true,\n cellSelection: !selection.value && !selectionLabeled.value,\n initialState: gridState.value,\n autoSizeStrategy: { type: 'fitCellContents' },\n rowSelection: selection.value || selectionLabeled.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 const state = event.api.getServerSideSelectionState();\n if (selection.value) {\n const selectedKeys = state?.toggledNodes?.map((nodeId) => parseJson(nodeId as PlTableRowIdJson).axesKey) ?? [];\n selection.value = { ...selection.value, selectedKeys };\n }\n if (selectionLabeled.value) {\n const selectedLabeledKeys = state?.toggledNodes?.map((nodeId) => parseJson(nodeId as PlTableRowIdJson).labeled) ?? [];\n selectionLabeled.value = { ...selectionLabeled.value, selectedLabeledKeys };\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: (rowKey) => focusRow(\n (row) => isJsonEqual(row.data?.axesKey, rowKey),\n firstDataRenderedTracker,\n ),\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 if (selection.value) {\n selection.value = {\n axesSpec: [],\n selectedKeys: [],\n };\n }\n if (selectionLabeled.value) {\n selectionLabeled.value = {\n spec: [],\n selectedLabeledKeys: [],\n };\n }\n } else {\n const isColDef = (def: ColDef | ColGroupDef): def is ColDef =>\n !('children' in def);\n const colDefs = columnDefs?.filter(isColDef) ?? [];\n const columns = colDefs\n .map((def) => def.colId)\n .filter((colId) => colId !== undefined)\n .filter((colId) => colId !== PlAgDataTableRowNumberColId)\n .map((colId) => parseJson(colId as PlTableColumnIdJson))\n ?? [];\n filterableColumns.value = columns.map((column) => column.labeled);\n if (selection.value) {\n const axesSpec = columns\n .reduce((acc, column) => {\n if (column.source.type === 'axis') {\n acc.push(column.source.spec);\n }\n return acc;\n }, [] as AxisSpec[]);\n selection.value = {\n ...selection.value,\n axesSpec,\n };\n }\n if (selectionLabeled.value) {\n const spec = columns\n .reduce((acc, column) => {\n if (column.source.type === 'axis') {\n acc.push(column.labeled);\n }\n return acc;\n }, [] as PTableColumnSpec[]);\n selectionLabeled.value = {\n ...selectionLabeled.value,\n spec,\n };\n }\n }\n },\n { immediate: true },\n);\n\n// Update AgGrid when settings change\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 firstDataRenderedTracker.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 || selectionLabeled.value) {\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 || selectionLabeled.value) {\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 track: firstDataRenderedTracker.track,\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((options) => {\n if (gridApi.isDestroyed() || stateGeneration !== generation.value) return;\n return gridApi.updateGridOptions({\n ...options,\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 } 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","selectionLabeled","props","settings","toRefs","emit","__emit","gridState","sheetsState","filtersState","useTableState","sheetsSettings","computed","settingsCopy","filterableColumns","ref","filtersSettings","columns","column","gridApi","shallowRef","firstDataRenderedTracker","makeOnceTracker","gridOptions","event","state","selectedKeys","_a","nodeId","parseJson","selectedLabeledKeys","_b","params","PlOverlayLoading","PlOverlayNoRows","PlAgRowCount","api","autoSizeRowNumberColumn","setGridOption","key","value","options","updateGridOptions","target","prop","receiver","makePartialState","PlAgDataTableRowNumberColId","reloadKey","watch","selfState","isJsonEqual","oldOptions","cellRendererSelector","__expose","rowKey","focusRow","row","watchCached","columnDefs","isColDef","def","colId","axesSpec","acc","spec","oldSettings","generation","sourceChanged","rowCount","stateGeneration","calculateGridOptions","getRawPlatformaInstance","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 { isJsonEqual } from '@milaboratories/helpers';\nimport type {\n AxisId,\n AxisSpec,\n PlDataTableGridStateCore,\n PlDataTableStateV2,\n PlSelectionModel,\n PlTableColumnIdJson,\n PTableColumnSpec,\n PTableKey,\n} from '@platforma-sdk/model';\nimport { getRawPlatformaInstance, parseJson } 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, 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 { focusRow, makeOnceTracker } 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 PlTableRowIdJson,\n} from './types';\nimport { watchCached } from '@milaboratories/uikit';\n\nconst tableState = defineModel<PlDataTableStateV2>({\n required: true,\n});\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}>();\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 firstDataRenderedTracker = makeOnceTracker<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 selection.value = { ...selection.value, selectedKeys };\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: (rowKey) => focusRow(\n (row) => isJsonEqual(row.data?.axesKey, rowKey),\n firstDataRenderedTracker,\n ),\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 if (selection.value) {\n selection.value = {\n axesSpec: [],\n selectedKeys: [],\n };\n }\n } else {\n const isColDef = (def: ColDef | ColGroupDef): def is ColDef =>\n !('children' in def);\n const colDefs = columnDefs?.filter(isColDef) ?? [];\n const columns = colDefs\n .map((def) => def.colId)\n .filter((colId) => colId !== undefined)\n .filter((colId) => colId !== PlAgDataTableRowNumberColId)\n .map((colId) => parseJson(colId as PlTableColumnIdJson))\n ?? [];\n filterableColumns.value = columns.map((column) => column.labeled);\n if (selection.value) {\n const axesSpec = columns\n .reduce((acc, column) => {\n if (column.source.type === 'axis') {\n acc.push(column.source.spec);\n }\n return acc;\n }, [] as AxisSpec[]);\n selection.value = {\n ...selection.value,\n axesSpec,\n };\n }\n }\n },\n { immediate: true },\n);\n\n// Update AgGrid when settings change\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 firstDataRenderedTracker.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 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) {\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 track: firstDataRenderedTracker.track,\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((options) => {\n if (gridApi.isDestroyed() || stateGeneration !== generation.value) return;\n return gridApi.updateGridOptions({\n ...options,\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 } 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","firstDataRenderedTracker","makeOnceTracker","gridOptions","event","state","selectedKeys","_a","nodeId","parseJson","params","PlOverlayLoading","PlOverlayNoRows","PlAgRowCount","api","autoSizeRowNumberColumn","setGridOption","key","value","options","updateGridOptions","target","prop","receiver","makePartialState","PlAgDataTableRowNumberColId","reloadKey","watch","selfState","isJsonEqual","oldOptions","cellRendererSelector","__expose","rowKey","focusRow","row","watchCached","columnDefs","isColDef","def","colId","axesSpec","acc","oldSettings","generation","sourceChanged","rowCount","stateGeneration","calculateGridOptions","getRawPlatformaInstance","_b","error","loadingText","notReadyText","noRowsText"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import { PFrameDriver, PlDataTableSheet, AxisId, PlDataTableModel, PTableColumnSpec, PTableKey, PlTableColumnIdJson } from '@platforma-sdk/model';
1
+ import { PTableColumnSpecColumn, PFrameDriver, PlDataTableSheet, AxisId, PlDataTableModel, PTableColumnSpec, PTableKey, PlTableColumnIdJson } from '@platforma-sdk/model';
2
2
  import { ColDef, GridApi, ManagedGridOptions } from 'ag-grid-enterprise';
3
3
  import { PlAgDataTableV2Row } from '../types';
4
4
  import { Ref } from 'vue';
5
- export declare function isLabelColumn(column: PTableColumnSpec): boolean;
5
+ export declare function isLabelColumn(column: PTableColumnSpec): column is PTableColumnSpecColumn;
6
6
  /** Calculate GridOptions for selected p-table data source */
7
7
  export declare function calculateGridOptions({ generation, pfDriver, model, sheets, track, hiddenColIds, cellButtonAxisParams, }: {
8
8
  generation: Ref<number>;
@@ -1 +1 @@
1
- {"version":3,"file":"table-source-v2.d.ts","sourceRoot":"","sources":["../../../../src/components/PlAgDataTable/sources/table-source-v2.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EAErB,KAAK,MAAM,EACX,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EAEd,KAAK,mBAAmB,EAEzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAEV,MAAM,EACN,OAAO,EAIP,kBAAkB,EACnB,MAAM,oBAAoB,CAAC;AAK5B,OAAO,KAAK,EAAE,kBAAkB,EAAgB,MAAM,UAAU,CAAC;AAOjE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAG/B,wBAAgB,aAAa,CAAC,MAAM,EAAE,gBAAgB,WAErD;AAqCD,6DAA6D;AAC7D,wBAAsB,oBAAoB,CAAC,EACzC,UAAU,EACV,QAAQ,EACR,KAAK,EACL,MAAM,EACN,KAAK,EACL,YAAY,EACZ,oBAAoB,GACrB,EAAE;IACD,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,gBAAgB,CAAC;IACxB,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,KAAK,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,kBAAkB,CAAC,KAAK,IAAI,CAAC;IAClD,YAAY,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACrC,oBAAoB,CAAC,EAAE,wBAAwB,CAAC;CACjD,GAAG,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,EAAE,YAAY,GAAG,sBAAsB,CAAC,CAAC,CAgM/F;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,iCAAiC,CAAC,EAAE,OAAO,CAAC;IAC5C,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;CACpC,CAAC;AAEF;;GAEG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,gBAAgB,EACtB,WAAW,EAAE,gBAAgB,EAC7B,YAAY,EAAE,mBAAmB,EAAE,GAAG,SAAS,EAC/C,oBAAoB,CAAC,EAAE,wBAAwB,GAC9C,MAAM,CA4ER"}
1
+ {"version":3,"file":"table-source-v2.d.ts","sourceRoot":"","sources":["../../../../src/components/PlAgDataTable/sources/table-source-v2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAOL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EAErB,KAAK,MAAM,EACX,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EAEd,KAAK,mBAAmB,EAGzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAEV,MAAM,EACN,OAAO,EAIP,kBAAkB,EACnB,MAAM,oBAAoB,CAAC;AAK5B,OAAO,KAAK,EAAE,kBAAkB,EAAgB,MAAM,UAAU,CAAC;AAOjE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAG/B,wBAAgB,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,IAAI,sBAAsB,CAExF;AA4BD,6DAA6D;AAC7D,wBAAsB,oBAAoB,CAAC,EACzC,UAAU,EACV,QAAQ,EACR,KAAK,EACL,MAAM,EACN,KAAK,EACL,YAAY,EACZ,oBAAoB,GACrB,EAAE;IACD,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,gBAAgB,CAAC;IACxB,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,KAAK,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,kBAAkB,CAAC,KAAK,IAAI,CAAC;IAClD,YAAY,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACrC,oBAAoB,CAAC,EAAE,wBAAwB,CAAC;CACjD,GAAG,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,EAAE,YAAY,GAAG,sBAAsB,CAAC,CAAC,CAsM/F;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,iCAAiC,CAAC,EAAE,OAAO,CAAC;IAC5C,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;CACpC,CAAC;AAEF;;GAEG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,gBAAgB,EACtB,WAAW,EAAE,gBAAgB,EAC7B,YAAY,EAAE,mBAAmB,EAAE,GAAG,SAAS,EAC/C,oBAAoB,CAAC,EAAE,wBAAwB,GAC9C,MAAM,CA4ER"}
@@ -1,167 +1,172 @@
1
- import { isLabelColumn as L, isColumnOptional as _, mapPTableValueToAxisKey as q } from "../../../sdk/model/dist/index.js";
2
- import z from "../../../_virtual/canonicalize.js";
3
- import H from "../../PlAgColumnHeader/PlAgColumnHeader.vue.js";
1
+ import { isLabelColumn as q, isColumnHidden as H, isColumnOptional as J, mapPTableValueToAxisKey as L } from "../../../sdk/model/dist/index.js";
2
+ import _ from "../../../_virtual/canonicalize.js";
3
+ import z from "../../PlAgColumnHeader/PlAgColumnHeader.vue.js";
4
4
  import K from "../../PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue.js";
5
5
  import { PTableHidden as P } from "./common.js";
6
6
  import { defaultMainMenuItems as A } from "./menu-items.js";
7
7
  import { makeRowNumberColDef as V, PlAgDataTableRowNumberColId as Y } from "./row-number.js";
8
8
  import { getColumnRenderingSpec as j } from "./value-rendering.js";
9
- import { isJsonEqual as D } from "../../../lib/util/helpers/dist/index.js";
10
- import { getAxisId as v, canonicalizeJson as N, pTableValue as M } from "../../../lib/model/common/dist/index.js";
11
- function U(i) {
12
- return i.type === "column" && L(i.spec);
9
+ import { isJsonEqual as I } from "../../../lib/util/helpers/dist/index.js";
10
+ import { getAxisId as b, canonicalizeJson as N, pTableValue as E } from "../../../lib/model/common/dist/index.js";
11
+ function Q(s) {
12
+ return s.type === "column" && q(s.spec);
13
13
  }
14
- function W(i, n, p, y, s) {
15
- const m = [];
16
- for (let l = 0; l < n[0].data.length; ++l) {
17
- const u = p.map((f) => q(
18
- M(n[s[f]], l)
19
- )), o = y.map((f) => q(
20
- M(n[s[f]], l)
21
- )), w = { id: N({
22
- axesKey: u,
23
- labeled: o
24
- }), axesKey: u };
25
- i.forEach((f, x) => {
26
- w[f.toString()] = s[x] === -1 ? P : M(n[s[x]], l);
27
- }), m.push(w);
14
+ function U(s, n, m, c) {
15
+ const l = [];
16
+ for (let u = 0; u < n[0].data.length; ++u) {
17
+ const f = m.map((p) => L(
18
+ E(n[c[p]], u)
19
+ )), o = { id: N(f), axesKey: f };
20
+ s.forEach((p, w) => {
21
+ o[p.toString()] = c[w] === -1 ? P : E(n[c[w]], u);
22
+ }), l.push(o);
28
23
  }
29
- return m;
24
+ return l;
30
25
  }
31
26
  async function le({
32
- generation: i,
27
+ generation: s,
33
28
  pfDriver: n,
34
- model: p,
35
- sheets: y,
36
- track: s,
37
- hiddenColIds: m,
38
- cellButtonAxisParams: l
29
+ model: m,
30
+ sheets: c,
31
+ track: l,
32
+ hiddenColIds: u,
33
+ cellButtonAxisParams: f
39
34
  }) {
40
- const u = p.visibleTableHandle, o = await n.getSpec(p.fullTableHandle), g = (e) => e.type === "axis" ? z(v(e.spec)) : e.id, w = await n.getSpec(u), f = /* @__PURE__ */ new Map();
35
+ const d = m.visibleTableHandle, o = await n.getSpec(m.fullTableHandle), p = (e) => e.type === "axis" ? _(b(e.spec)) : e.id, w = await n.getSpec(d), v = /* @__PURE__ */ new Map();
41
36
  w.forEach((e, t) => {
42
- f.set(g(e), t);
37
+ v.set(p(e), t);
43
38
  });
44
- const x = /* @__PURE__ */ new Map();
39
+ const D = /* @__PURE__ */ new Map();
45
40
  o.forEach((e, t) => {
46
- const a = f.get(g(e));
47
- if (a === void 0 && e.type === "axis")
41
+ const i = v.get(p(e));
42
+ if (i === void 0 && e.type === "axis")
48
43
  throw new Error(`axis ${JSON.stringify(e.spec)} not present in join result`);
49
- x.set(t, a ?? -1);
44
+ D.set(t, i ?? -1);
50
45
  });
51
- let b = o.findIndex((e) => e.type === "column");
52
- b === -1 && (b = o.length);
53
- const r = [...o.keys()].filter(
54
- (e) => !y.some(
55
- (t) => D(v(t.axis), o[e].id) || o[e].type === "column" && o[e].spec.name === "pl7.app/label" && o[e].spec.axesSpec.length === 1 && D(v(t.axis), v(o[e].spec.axesSpec[0]))
56
- )
57
- ).sort((e, t) => {
58
- var C, E;
46
+ let x = o.findIndex((e) => e.type === "column");
47
+ x === -1 && (x = o.length);
48
+ const r = o.keys().filter(
49
+ (e) => {
50
+ const t = o[e];
51
+ switch (t.type) {
52
+ case "axis":
53
+ return !c.some(
54
+ (i) => I(b(i.axis), t.id)
55
+ );
56
+ case "column":
57
+ return q(t.spec) ? !c.some(
58
+ (i) => I(b(i.axis), b(t.spec.axesSpec[0]))
59
+ ) : !H(t.spec);
60
+ }
61
+ }
62
+ ).toArray().sort((e, t) => {
63
+ var O, k;
59
64
  if (o[e].type !== o[t].type) return o[e].type === "axis" ? -1 : 1;
60
- const a = (C = o[e].spec.annotations) == null ? void 0 : C["pl7.app/table/orderPriority"], c = (E = o[t].spec.annotations) == null ? void 0 : E["pl7.app/table/orderPriority"];
61
- return a === void 0 ? c === void 0 ? 0 : 1 : c === void 0 ? -1 : Number(c) - Number(a);
65
+ const i = (O = o[e].spec.annotations) == null ? void 0 : O["pl7.app/table/orderPriority"], a = (k = o[t].spec.annotations) == null ? void 0 : k["pl7.app/table/orderPriority"];
66
+ return i === void 0 ? a === void 0 ? 0 : 1 : a === void 0 ? -1 : Number(a) - Number(i);
62
67
  }), h = [...r], R = r.findIndex((e) => o[e].type === "column");
63
68
  for (let e = r.length - 1; e >= R; --e) {
64
69
  const t = r[e];
65
- if (!U(o[t])) continue;
66
- const a = v(o[t].spec.axesSpec[0]), c = r.findIndex((C) => D(o[C].id, a));
67
- c !== -1 ? r[c] = t : console.warn(`multiple label columns match axisId: ${JSON.stringify(a)}`), r.splice(e, 1), h.splice(e, 1);
70
+ if (!Q(o[t])) continue;
71
+ const i = b(o[t].spec.axesSpec[0]), a = r.findIndex((O) => I(o[O].id, i));
72
+ a !== -1 ? r[a] = t : console.warn(`multiple label columns match axisId: ${JSON.stringify(i)}`), r.splice(e, 1), h.splice(e, 1);
68
73
  }
69
74
  const $ = [
70
75
  V(),
71
- ...h.map((e, t) => Q(e, o[e], o[r[t]], m, l))
72
- ], S = [...r], I = /* @__PURE__ */ new Map();
73
- for (let e = 0; e < b; ++e) I.set(e, -1);
74
- S.forEach((e, t) => {
75
- I.has(e) && I.set(e, t);
76
+ ...h.map((e, t) => W(e, o[e], o[r[t]], u, f))
77
+ ], g = [...r], S = /* @__PURE__ */ new Map();
78
+ for (let e = 0; e < x; ++e) S.set(e, -1);
79
+ g.forEach((e, t) => {
80
+ S.has(e) && S.set(e, t);
76
81
  });
77
- for (const [e, t] of I)
78
- t === -1 && (I.set(
82
+ for (const [e, t] of S)
83
+ t === -1 && (S.set(
79
84
  e,
80
- S.length
85
+ g.length
81
86
  /* at this index value will be inserted in the next line */
82
- ), S.push(e));
87
+ ), g.push(e));
83
88
  const G = h.filter((e) => o[e].type === "axis").map((e) => {
84
- const t = S.indexOf(e);
89
+ const t = g.indexOf(e);
85
90
  if (t === -1)
86
91
  throw new Error(
87
92
  `Assertion failed: Original axis spec index ${e} (from fields) for key construction not found in allIndices.`
88
93
  );
89
94
  return t;
90
- }), J = h.reduce((e, t, a) => (o[t].type === "axis" && e.push(S.indexOf(r[a])), e), []), T = [], F = [];
91
- S.forEach((e) => {
92
- const t = x.get(e);
95
+ }), T = [], F = [];
96
+ g.forEach((e) => {
97
+ const t = D.get(e);
93
98
  t !== -1 ? (F.push(T.length), T.push(t)) : F.push(-1);
94
99
  });
95
- const O = i.value;
96
- let d = -1, k;
100
+ const C = s.value;
101
+ let y = -1, M;
97
102
  return {
98
103
  columnDefs: $,
99
104
  serverSideDatasource: {
100
105
  getRows: async (e) => {
101
- if (O !== i.value) return e.fail();
106
+ if (C !== s.value) return e.fail();
102
107
  try {
103
- if (d === -1) {
104
- const c = await n.getShape(u);
105
- if (O !== i.value || e.api.isDestroyed()) return e.fail();
106
- d = c.rows;
108
+ if (y === -1) {
109
+ const a = await n.getShape(d);
110
+ if (C !== s.value || e.api.isDestroyed()) return e.fail();
111
+ y = a.rows;
107
112
  }
108
- if (d == 0) {
109
- e.success({ rowData: [], rowCount: d }), e.api.setGridOption("loading", !1), e.api.showNoRowsOverlay();
113
+ if (y == 0) {
114
+ e.success({ rowData: [], rowCount: y }), e.api.setGridOption("loading", !1), e.api.showNoRowsOverlay();
110
115
  return;
111
116
  }
112
- if (k && !D(k.request.sortModel, e.request.sortModel))
113
- return e.success({ rowData: [], rowCount: d });
114
- k = e;
115
- let t = 0, a = [];
116
- if (d > 0 && e.request.startRow !== void 0 && e.request.endRow !== void 0 && (t = Math.min(d, e.request.endRow) - e.request.startRow, t > 0)) {
117
- const c = await n.getData(u, T, {
117
+ if (M && !I(M.request.sortModel, e.request.sortModel))
118
+ return e.success({ rowData: [], rowCount: y });
119
+ M = e;
120
+ let t = 0, i = [];
121
+ if (y > 0 && e.request.startRow !== void 0 && e.request.endRow !== void 0 && (t = Math.min(y, e.request.endRow) - e.request.startRow, t > 0)) {
122
+ const a = await n.getData(d, T, {
118
123
  offset: e.request.startRow,
119
124
  length: t
120
125
  });
121
- if (O !== i.value || e.api.isDestroyed()) return e.fail();
122
- a = W(h, c, G, J, F);
126
+ if (C !== s.value || e.api.isDestroyed()) return e.fail();
127
+ i = U(h, a, G, F);
123
128
  }
124
- e.success({ rowData: a, rowCount: d }), e.api.autoSizeColumns(
125
- e.api.getAllDisplayedColumns().filter((c) => c.getColId() !== Y)
129
+ e.success({ rowData: i, rowCount: y }), e.api.autoSizeColumns(
130
+ e.api.getAllDisplayedColumns().filter((a) => a.getColId() !== Y)
126
131
  ), e.api.setGridOption("loading", !1);
127
132
  } catch (t) {
128
- if (O !== i.value || e.api.isDestroyed()) return e.fail();
133
+ if (C !== s.value || e.api.isDestroyed()) return e.fail();
129
134
  e.api.setGridOption("loading", !0), e.fail(), console.trace(t);
130
135
  } finally {
131
- e.api.isDestroyed() || s(e.api);
136
+ e.api.isDestroyed() || l(e.api);
132
137
  }
133
138
  }
134
139
  }
135
140
  };
136
141
  }
137
- function Q(i, n, p, y, s) {
138
- var g, w;
139
- const m = N({
142
+ function W(s, n, m, c, l) {
143
+ var p, w;
144
+ const u = N({
140
145
  source: n,
141
- labeled: p
142
- }), l = n.type === "axis" ? n.spec.type : n.spec.valueType, u = j(n), o = {};
143
- return u.fontFamily && (u.fontFamily === "monospace" ? (o.fontFamily = "Spline Sans Mono", o.fontWeight = 300) : o.fontFamily = u.fontFamily), {
144
- colId: m,
146
+ labeled: m
147
+ }), f = n.type === "axis" ? n.spec.type : n.spec.valueType, d = j(n), o = {};
148
+ return d.fontFamily && (d.fontFamily === "monospace" ? (o.fontFamily = "Spline Sans Mono", o.fontWeight = 300) : o.fontFamily = d.fontFamily), {
149
+ colId: u,
145
150
  mainMenuItems: A,
146
151
  context: n,
147
- field: i.toString(),
148
- headerName: ((w = (g = p.spec.annotations) == null ? void 0 : g["pl7.app/label"]) == null ? void 0 : w.trim()) ?? "Unlabeled " + n.type + " " + i.toString(),
152
+ field: s.toString(),
153
+ headerName: ((w = (p = m.spec.annotations) == null ? void 0 : p["pl7.app/label"]) == null ? void 0 : w.trim()) ?? "Unlabeled " + n.type + " " + s.toString(),
149
154
  lockPosition: n.type === "axis",
150
- hide: (y == null ? void 0 : y.includes(m)) ?? _(n.spec),
151
- valueFormatter: u.valueFormatter,
152
- headerComponent: H,
153
- cellRendererSelector: s != null && s.showCellButtonForAxisId ? (f) => {
154
- var b, r;
155
+ hide: (c == null ? void 0 : c.includes(u)) ?? J(n.spec),
156
+ valueFormatter: d.valueFormatter,
157
+ headerComponent: z,
158
+ cellRendererSelector: l != null && l.showCellButtonForAxisId ? (v) => {
159
+ var x, r;
155
160
  if (n.type !== "axis") return;
156
- const x = (r = (b = f.colDef) == null ? void 0 : b.context) == null ? void 0 : r.id;
157
- if (D(x, s.showCellButtonForAxisId))
161
+ const D = (r = (x = v.colDef) == null ? void 0 : x.context) == null ? void 0 : r.id;
162
+ if (I(D, l.showCellButtonForAxisId))
158
163
  return {
159
164
  component: K,
160
165
  params: {
161
- invokeRowsOnDoubleClick: s.cellButtonInvokeRowsOnDoubleClick,
166
+ invokeRowsOnDoubleClick: l.cellButtonInvokeRowsOnDoubleClick,
162
167
  onClick: (h) => {
163
168
  var R;
164
- s.trigger((R = h.data) == null ? void 0 : R.axesKey);
169
+ l.trigger((R = h.data) == null ? void 0 : R.axesKey);
165
170
  }
166
171
  }
167
172
  };
@@ -169,7 +174,7 @@ function Q(i, n, p, y, s) {
169
174
  cellStyle: o,
170
175
  headerComponentParams: {
171
176
  type: (() => {
172
- switch (l) {
177
+ switch (f) {
173
178
  case "Int":
174
179
  case "Long":
175
180
  case "Float":
@@ -179,12 +184,12 @@ function Q(i, n, p, y, s) {
179
184
  case "Bytes":
180
185
  return "Text";
181
186
  default:
182
- throw Error(`unsupported data type: ${l}`);
187
+ throw Error(`unsupported data type: ${f}`);
183
188
  }
184
189
  })()
185
190
  },
186
191
  cellDataType: (() => {
187
- switch (l) {
192
+ switch (f) {
188
193
  case "Int":
189
194
  case "Long":
190
195
  case "Float":
@@ -194,14 +199,14 @@ function Q(i, n, p, y, s) {
194
199
  case "Bytes":
195
200
  return "text";
196
201
  default:
197
- throw Error(`unsupported data type: ${l}`);
202
+ throw Error(`unsupported data type: ${f}`);
198
203
  }
199
204
  })()
200
205
  };
201
206
  }
202
207
  export {
203
208
  le as calculateGridOptions,
204
- U as isLabelColumn,
205
- Q as makeColDef
209
+ Q as isLabelColumn,
210
+ W as makeColDef
206
211
  };
207
212
  //# sourceMappingURL=table-source-v2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table-source-v2.js","sources":["../../../../src/components/PlAgDataTable/sources/table-source-v2.ts"],"sourcesContent":["import {\n canonicalizeJson,\n getAxisId,\n isColumnOptional,\n mapPTableValueToAxisKey,\n pTableValue,\n type PColumnSpec,\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} 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 canonicalize from 'canonicalize';\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';\n\nexport function isLabelColumn(column: PTableColumnSpec) {\n return column.type === 'column' && isLabelColumnSpec(column.spec);\n}\n\n/** Convert columnar data from the driver to rows, used by ag-grid */\nfunction columns2rows(\n fields: number[],\n columns: PTableVector[],\n axes: number[],\n labeledAxes: number[],\n resultMapping: number[],\n): PlAgDataTableV2Row[] {\n const rowData: PlAgDataTableV2Row[] = [];\n for (let iRow = 0; iRow < columns[0].data.length; ++iRow) {\n const axesKey = axes.map((iAxis) => {\n return mapPTableValueToAxisKey(\n pTableValue(columns[resultMapping[iAxis]], iRow),\n );\n });\n const labeled = labeledAxes.map((iAxis) => {\n return mapPTableValueToAxisKey(\n pTableValue(columns[resultMapping[iAxis]], iRow),\n );\n });\n const id = canonicalizeJson<PlTableRowId>({\n axesKey,\n labeled,\n });\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 track,\n hiddenColIds,\n cellButtonAxisParams,\n}: {\n generation: Ref<number>;\n pfDriver: PFrameDriver;\n model: PlDataTableModel;\n sheets: PlDataTableSheet[];\n track: (ctx: GridApi<PlAgDataTableV2Row>) => void;\n hiddenColIds?: PlTableColumnIdJson[];\n cellButtonAxisParams?: PlAgCellButtonAxisParams;\n}): Promise<Pick<ManagedGridOptions<PlAgDataTableV2Row>, 'columnDefs' | 'serverSideDatasource'>> {\n const pt = model.visibleTableHandle;\n const specs = await pfDriver.getSpec(model.fullTableHandle);\n type SpecId = string;\n const specId = (spec: PTableColumnSpec): SpecId =>\n spec.type === 'axis' ? canonicalize(getAxisId(spec.spec))! : spec.id;\n const dataSpecs = await pfDriver.getSpec(pt);\n const dataSpecsMap = new Map<SpecId, number>();\n dataSpecs.forEach((spec, i) => {\n dataSpecsMap.set(specId(spec), i);\n });\n const specsToDataSpecsMapping = new Map<number, number>();\n specs.forEach((spec, i) => {\n const dataSpecIdx = dataSpecsMap.get(specId(spec));\n if (dataSpecIdx === undefined && spec.type === 'axis')\n throw new Error(`axis ${JSON.stringify(spec.spec)} not present in join result`);\n specsToDataSpecsMapping.set(i, dataSpecIdx ?? -1);\n });\n\n let numberOfAxes = specs.findIndex((s) => s.type === 'column');\n if (numberOfAxes === -1) numberOfAxes = specs.length;\n\n // column indices in the specs array that we are going to process\n const indices = [...specs.keys()]\n .filter(\n (i) =>\n !sheets.some(\n (sheet) =>\n isJsonEqual(getAxisId(sheet.axis), specs[i].id)\n || (specs[i].type === 'column'\n && specs[i].spec.name === 'pl7.app/label'\n && specs[i].spec.axesSpec.length === 1\n && isJsonEqual(getAxisId(sheet.axis), getAxisId(specs[i].spec.axesSpec[0]))),\n ),\n )\n .sort((a, b) => {\n if (specs[a].type !== specs[b].type) return specs[a].type === 'axis' ? -1 : 1;\n\n const aPriority = specs[a].spec.annotations?.['pl7.app/table/orderPriority'];\n const bPriority = specs[b].spec.annotations?.['pl7.app/table/orderPriority'];\n\n if (aPriority === undefined) return bPriority === undefined ? 0 : 1;\n if (bPriority === undefined) return -1;\n return Number(bPriority) - Number(aPriority);\n });\n\n const fields = [...indices];\n\n // process label columns\n const firstColumnIdx = indices.findIndex((i) => specs[i].type === 'column');\n for (let i = indices.length - 1; i >= firstColumnIdx; --i) {\n const idx = indices[i];\n if (!isLabelColumn(specs[idx])) continue;\n\n // axis of labels\n const axisId = getAxisId((specs[idx].spec as PColumnSpec).axesSpec[0]);\n const axisIdx = indices.findIndex((idx) => isJsonEqual(specs[idx].id, axisId));\n if (axisIdx !== -1) {\n indices[axisIdx] = idx;\n } else {\n console.warn(`multiple label columns match axisId: ${JSON.stringify(axisId)}`);\n }\n\n // remove original axis\n indices.splice(i, 1);\n fields.splice(i, 1);\n }\n\n const columnDefs: ColDef<PlAgDataTableV2Row>[] = [\n makeRowNumberColDef(),\n ...fields.map((field, index) => makeColDef(field, specs[field], specs[indices[index]], hiddenColIds, cellButtonAxisParams)),\n ];\n\n // mixing in axis indices\n\n const allIndices = [...indices];\n\n // axisIdx (0..<axesCount) -> idx in allIndices array\n const axisToFieldIdx = new Map<number, number>();\n for (let i = 0; i < numberOfAxes; ++i) axisToFieldIdx.set(i, -1);\n\n allIndices.forEach((idx, i) => {\n if (axisToFieldIdx.has(idx)) axisToFieldIdx.set(idx, i);\n });\n // at this point we have axis indices that are not listed in indices set to -1 in axisToFieldIdx\n\n // adding those indices at the end of allIndices array, to make sure we have all the axes in our response\n for (const [key, value] of axisToFieldIdx) {\n if (value === -1) {\n axisToFieldIdx.set(key, allIndices.length /* at this index value will be inserted in the next line */);\n allIndices.push(key);\n }\n }\n\n // Construct the `axes` array for key generation in `columns2rows`.\n // The key components should be ordered according to the display order of axis columns from the `fields` array.\n const axes: number[] = fields\n .filter((field) => specs[field].type === 'axis')\n .map((field) => {\n const r = allIndices.indexOf(field);\n if (r === -1) {\n throw new Error(\n `Assertion failed: Original axis spec index ${field} (from fields) for key construction not found in allIndices.`,\n );\n }\n return r;\n });\n const labeledAxes: number[] = fields\n .reduce((acc, field, index) => {\n if (specs[field].type === 'axis') {\n acc.push(allIndices.indexOf(indices[index]));\n }\n return acc;\n }, [] as number[]);\n\n const requestIndices: number[] = [];\n const resultMapping: number[] = [];\n allIndices.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 const stateGeneration = generation.value;\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, labeledAxes, 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 } 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 } finally {\n if (!params.api.isDestroyed()) {\n track(params.api);\n }\n }\n },\n };\n\n return {\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 {\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.toString(),\n headerName: labeledSpec.spec.annotations?.['pl7.app/label']?.trim() ?? 'Unlabeled ' + spec.type + ' ' + iCol.toString(),\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 'Int':\n case 'Long':\n case 'Float':\n case 'Double':\n return 'Number';\n case 'String':\n case 'Bytes':\n return 'Text';\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n } satisfies PlAgHeaderComponentParams,\n cellDataType: (() => {\n switch (valueType) {\n case 'Int':\n case 'Long':\n case 'Float':\n case 'Double':\n return 'number';\n case 'String':\n case 'Bytes':\n return 'text';\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n };\n}\n"],"names":["isLabelColumn","column","isLabelColumnSpec","columns2rows","fields","columns","axes","labeledAxes","resultMapping","rowData","iRow","axesKey","iAxis","mapPTableValueToAxisKey","pTableValue","labeled","row","canonicalizeJson","field","iCol","PTableHidden","calculateGridOptions","generation","pfDriver","model","sheets","track","hiddenColIds","cellButtonAxisParams","pt","specs","specId","spec","canonicalize","getAxisId","dataSpecs","dataSpecsMap","i","specsToDataSpecsMapping","dataSpecIdx","numberOfAxes","s","indices","sheet","isJsonEqual","a","b","aPriority","_a","bPriority","_b","firstColumnIdx","idx","axisId","axisIdx","columnDefs","makeRowNumberColDef","index","makeColDef","allIndices","axisToFieldIdx","key","value","r","acc","requestIndices","stateGeneration","rowCount","lastParams","params","ptShape","length","data","PlAgDataTableRowNumberColId","error","labeledSpec","colId","valueType","columnRenderingSpec","getColumnRenderingSpec","cellStyle","defaultMainMenuItems","isColumnOptional","PlAgColumnHeader","PlAgTextAndButtonCell"],"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 PTableColumnSpecColumn } from '@platforma-sdk/model';\nimport {\n canonicalizeJson,\n getAxisId,\n isColumnOptional,\n mapPTableValueToAxisKey,\n pTableValue,\n type PColumnSpec,\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} 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 canonicalize from 'canonicalize';\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';\n\nexport function isLabelColumn(column: PTableColumnSpec): column is PTableColumnSpecColumn {\n return column.type === 'column' && isLabelColumnSpec(column.spec);\n}\n\n/** Convert columnar data from the driver to rows, used by ag-grid */\nfunction columns2rows(\n fields: number[],\n columns: PTableVector[],\n axes: number[],\n resultMapping: number[],\n): PlAgDataTableV2Row[] {\n const rowData: PlAgDataTableV2Row[] = [];\n for (let iRow = 0; iRow < columns[0].data.length; ++iRow) {\n const axesKey = axes.map((iAxis) => {\n return mapPTableValueToAxisKey(\n pTableValue(columns[resultMapping[iAxis]], iRow),\n );\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 track,\n hiddenColIds,\n cellButtonAxisParams,\n}: {\n generation: Ref<number>;\n pfDriver: PFrameDriver;\n model: PlDataTableModel;\n sheets: PlDataTableSheet[];\n track: (ctx: GridApi<PlAgDataTableV2Row>) => void;\n hiddenColIds?: PlTableColumnIdJson[];\n cellButtonAxisParams?: PlAgCellButtonAxisParams;\n}): Promise<Pick<ManagedGridOptions<PlAgDataTableV2Row>, 'columnDefs' | 'serverSideDatasource'>> {\n const pt = model.visibleTableHandle;\n const specs = await pfDriver.getSpec(model.fullTableHandle);\n type SpecId = string;\n const specId = (spec: PTableColumnSpec): SpecId =>\n spec.type === 'axis' ? canonicalize(getAxisId(spec.spec))! : spec.id;\n const dataSpecs = await pfDriver.getSpec(pt);\n const dataSpecsMap = new Map<SpecId, number>();\n dataSpecs.forEach((spec, i) => {\n dataSpecsMap.set(specId(spec), i);\n });\n const specsToDataSpecsMapping = new Map<number, number>();\n specs.forEach((spec, i) => {\n const dataSpecIdx = dataSpecsMap.get(specId(spec));\n if (dataSpecIdx === undefined && spec.type === 'axis')\n throw new Error(`axis ${JSON.stringify(spec.spec)} not present in join result`);\n specsToDataSpecsMapping.set(i, dataSpecIdx ?? -1);\n });\n\n let numberOfAxes = specs.findIndex((s) => s.type === 'column');\n if (numberOfAxes === -1) numberOfAxes = specs.length;\n\n // column indices in the specs array that we are going to process\n const indices = specs.keys()\n .filter(\n (i) => {\n const spec = specs[i];\n switch (spec.type) {\n case 'axis':\n {\n return !sheets.some(\n (sheet) => isJsonEqual(getAxisId(sheet.axis), spec.id),\n );\n }\n case 'column':\n {\n if (isLabelColumnSpec(spec.spec)) {\n return !sheets.some(\n (sheet) => isJsonEqual(getAxisId(sheet.axis), getAxisId(spec.spec.axesSpec[0])),\n );\n } else {\n return !isColumnHidden(spec.spec);\n }\n }\n }\n },\n )\n .toArray()\n .sort((a, b) => {\n if (specs[a].type !== specs[b].type) return specs[a].type === 'axis' ? -1 : 1;\n\n const aPriority = specs[a].spec.annotations?.['pl7.app/table/orderPriority'];\n const bPriority = specs[b].spec.annotations?.['pl7.app/table/orderPriority'];\n\n if (aPriority === undefined) return bPriority === undefined ? 0 : 1;\n if (bPriority === undefined) return -1;\n return Number(bPriority) - Number(aPriority);\n });\n\n const fields = [...indices];\n\n // process label columns\n const firstColumnIdx = indices.findIndex((i) => specs[i].type === 'column');\n for (let i = indices.length - 1; i >= firstColumnIdx; --i) {\n const idx = indices[i];\n if (!isLabelColumn(specs[idx])) continue;\n\n // axis of labels\n const axisId = getAxisId((specs[idx].spec as PColumnSpec).axesSpec[0]);\n const axisIdx = indices.findIndex((idx) => isJsonEqual(specs[idx].id, axisId));\n if (axisIdx !== -1) {\n indices[axisIdx] = idx;\n } else {\n console.warn(`multiple label columns match axisId: ${JSON.stringify(axisId)}`);\n }\n\n // remove original axis\n indices.splice(i, 1);\n fields.splice(i, 1);\n }\n\n const columnDefs: ColDef<PlAgDataTableV2Row>[] = [\n makeRowNumberColDef(),\n ...fields.map((field, index) => makeColDef(field, specs[field], specs[indices[index]], hiddenColIds, cellButtonAxisParams)),\n ];\n\n // mixing in axis indices\n\n const allIndices = [...indices];\n\n // axisIdx (0..<axesCount) -> idx in allIndices array\n const axisToFieldIdx = new Map<number, number>();\n for (let i = 0; i < numberOfAxes; ++i) axisToFieldIdx.set(i, -1);\n\n allIndices.forEach((idx, i) => {\n if (axisToFieldIdx.has(idx)) axisToFieldIdx.set(idx, i);\n });\n // at this point we have axis indices that are not listed in indices set to -1 in axisToFieldIdx\n\n // adding those indices at the end of allIndices array, to make sure we have all the axes in our response\n for (const [key, value] of axisToFieldIdx) {\n if (value === -1) {\n axisToFieldIdx.set(key, allIndices.length /* at this index value will be inserted in the next line */);\n allIndices.push(key);\n }\n }\n\n // Construct the `axes` array for key generation in `columns2rows`.\n // The key components should be ordered according to the display order of axis columns from the `fields` array.\n const axes: number[] = fields\n .filter((field) => specs[field].type === 'axis')\n .map((field) => {\n const r = allIndices.indexOf(field);\n if (r === -1) {\n throw new Error(\n `Assertion failed: Original axis spec index ${field} (from fields) for key construction not found in allIndices.`,\n );\n }\n return r;\n });\n\n const requestIndices: number[] = [];\n const resultMapping: number[] = [];\n allIndices.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 const stateGeneration = generation.value;\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 } 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 } finally {\n if (!params.api.isDestroyed()) {\n track(params.api);\n }\n }\n },\n };\n\n return {\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 {\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.toString(),\n headerName: labeledSpec.spec.annotations?.['pl7.app/label']?.trim() ?? 'Unlabeled ' + spec.type + ' ' + iCol.toString(),\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 'Int':\n case 'Long':\n case 'Float':\n case 'Double':\n return 'Number';\n case 'String':\n case 'Bytes':\n return 'Text';\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n } satisfies PlAgHeaderComponentParams,\n cellDataType: (() => {\n switch (valueType) {\n case 'Int':\n case 'Long':\n case 'Float':\n case 'Double':\n return 'number';\n case 'String':\n case 'Bytes':\n return 'text';\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n };\n}\n"],"names":["isLabelColumn","column","isLabelColumnSpec","columns2rows","fields","columns","axes","resultMapping","rowData","iRow","axesKey","iAxis","mapPTableValueToAxisKey","pTableValue","row","canonicalizeJson","field","iCol","PTableHidden","calculateGridOptions","generation","pfDriver","model","sheets","track","hiddenColIds","cellButtonAxisParams","pt","specs","specId","spec","canonicalize","getAxisId","dataSpecs","dataSpecsMap","i","specsToDataSpecsMapping","dataSpecIdx","numberOfAxes","s","indices","sheet","isJsonEqual","isColumnHidden","a","b","aPriority","_a","bPriority","_b","firstColumnIdx","idx","axisId","axisIdx","columnDefs","makeRowNumberColDef","index","makeColDef","allIndices","axisToFieldIdx","key","value","r","requestIndices","stateGeneration","rowCount","lastParams","params","ptShape","length","data","PlAgDataTableRowNumberColId","error","labeledSpec","colId","valueType","columnRenderingSpec","getColumnRenderingSpec","cellStyle","defaultMainMenuItems","isColumnOptional","PlAgColumnHeader","PlAgTextAndButtonCell"],"mappings":"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"}