@platforma-sdk/ui-vue 1.40.5 → 1.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/.turbo/turbo-build.log +52 -25
  2. package/.turbo/turbo-type-check.log +1 -1
  3. package/CHANGELOG.md +21 -0
  4. package/dist/AgGridVue/useAgGridOptions.js +54 -53
  5. package/dist/AgGridVue/useAgGridOptions.js.map +1 -1
  6. package/dist/components/BlockLayout.vue.d.ts.map +1 -1
  7. package/dist/components/BlockLayout.vue.js +7 -50
  8. package/dist/components/BlockLayout.vue.js.map +1 -1
  9. package/dist/components/BlockLayout.vue2.js +53 -2
  10. package/dist/components/BlockLayout.vue2.js.map +1 -1
  11. package/dist/components/BlockLayout.vue3.js +9 -0
  12. package/dist/components/BlockLayout.vue3.js.map +1 -0
  13. package/dist/components/NotFound.vue.d.ts.map +1 -1
  14. package/dist/components/NotFound.vue.js +12 -14
  15. package/dist/components/NotFound.vue.js.map +1 -1
  16. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue.d.ts +1 -4
  17. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue.d.ts.map +1 -1
  18. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js +155 -172
  19. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js.map +1 -1
  20. package/dist/components/PlAgDataTable/PlAgRowCount.vue.js +7 -6
  21. package/dist/components/PlAgDataTable/PlAgRowCount.vue.js.map +1 -1
  22. package/dist/components/PlAgDataTable/sources/table-source-v2.d.ts +2 -2
  23. package/dist/components/PlAgDataTable/sources/table-source-v2.d.ts.map +1 -1
  24. package/dist/components/PlAgDataTable/sources/table-source-v2.js +110 -105
  25. package/dist/components/PlAgDataTable/sources/table-source-v2.js.map +1 -1
  26. package/dist/components/PlAgDataTable/types.d.ts +27 -43
  27. package/dist/components/PlAgDataTable/types.d.ts.map +1 -1
  28. package/dist/components/PlAgDataTable/types.js +32 -43
  29. package/dist/components/PlAgDataTable/types.js.map +1 -1
  30. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue.js +10 -9
  31. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue.js.map +1 -1
  32. package/dist/components/PlAgRowNumHeader.vue.js +3 -2
  33. package/dist/components/PlAgRowNumHeader.vue.js.map +1 -1
  34. package/dist/components/PlAnnotations/components/DynamicForm.vue2.js +10 -10
  35. package/dist/components/PlAnnotations/components/PlAnnotationCreateDialog.vue.d.ts +1 -1
  36. package/dist/components/PlAnnotations/components/PlAnnotationCreateDialog.vue.d.ts.map +1 -1
  37. package/dist/components/PlMultiSequenceAlignment/data.js +51 -51
  38. package/dist/composition/fileContent.js +16 -16
  39. package/dist/defineApp.d.ts +19 -6
  40. package/dist/defineApp.d.ts.map +1 -1
  41. package/dist/defineApp.js +50 -30
  42. package/dist/defineApp.js.map +1 -1
  43. package/dist/internal/UpdateSerializer.d.ts +26 -0
  44. package/dist/internal/UpdateSerializer.d.ts.map +1 -0
  45. package/dist/internal/UpdateSerializer.js +65 -0
  46. package/dist/internal/UpdateSerializer.js.map +1 -0
  47. package/dist/internal/createAppModel.d.ts +1 -1
  48. package/dist/internal/createAppModel.d.ts.map +1 -1
  49. package/dist/internal/createAppModel.js +43 -51
  50. package/dist/internal/createAppModel.js.map +1 -1
  51. package/dist/internal/{createApp.d.ts → createAppV1.d.ts} +4 -4
  52. package/dist/internal/createAppV1.d.ts.map +1 -0
  53. package/dist/internal/{createApp.js → createAppV1.js} +17 -18
  54. package/dist/internal/createAppV1.js.map +1 -0
  55. package/dist/internal/createAppV2.d.ts +56 -0
  56. package/dist/internal/createAppV2.d.ts.map +1 -0
  57. package/dist/internal/createAppV2.js +158 -0
  58. package/dist/internal/createAppV2.js.map +1 -0
  59. package/dist/internal/test-helpers/BlockMock.d.ts +28 -0
  60. package/dist/internal/test-helpers/BlockMock.d.ts.map +1 -0
  61. package/dist/internal/test-helpers/createMockApi.d.ts +4 -0
  62. package/dist/internal/test-helpers/createMockApi.d.ts.map +1 -0
  63. package/dist/internal/test-helpers/utils.d.ts +4 -0
  64. package/dist/internal/test-helpers/utils.d.ts.map +1 -0
  65. package/dist/{types.static-test.d.ts → internal/v1.static-test.d.ts} +3 -3
  66. package/dist/internal/v1.static-test.d.ts.map +1 -0
  67. package/dist/internal/v2.static-test.d.ts +7 -0
  68. package/dist/internal/v2.static-test.d.ts.map +1 -0
  69. package/dist/lib/model/common/dist/index.js +214 -199
  70. package/dist/lib/model/common/dist/index.js.map +1 -1
  71. package/dist/lib/ui/uikit/dist/components/PlAccordion/{ExpandTransition.vue.js → ExpandTransition.vue2.js} +1 -1
  72. package/dist/lib/ui/uikit/dist/components/PlAccordion/ExpandTransition.vue2.js.map +1 -0
  73. package/dist/lib/ui/uikit/dist/components/PlAccordion/PlAccordionSection.vue2.js +1 -1
  74. package/dist/lib/ui/uikit/dist/components/PlDialogModal/PlDialogModal.vue.js.map +1 -1
  75. package/dist/lib/ui/uikit/dist/lib/model/common/dist/index.js +7 -7
  76. package/dist/lib/ui/uikit/dist/sdk/model/dist/index.js +77 -56
  77. package/dist/lib/ui/uikit/dist/sdk/model/dist/index.js.map +1 -1
  78. package/dist/lib/util/helpers/dist/index.js +67 -56
  79. package/dist/lib/util/helpers/dist/index.js.map +1 -1
  80. package/dist/node_modules/.pnpm/fast-json-patch@3.1.1/node_modules/fast-json-patch/index.js +29 -0
  81. package/dist/node_modules/.pnpm/fast-json-patch@3.1.1/node_modules/fast-json-patch/index.js.map +1 -0
  82. package/dist/node_modules/.pnpm/fast-json-patch@3.1.1/node_modules/fast-json-patch/module/core.js +208 -0
  83. package/dist/node_modules/.pnpm/fast-json-patch@3.1.1/node_modules/fast-json-patch/module/core.js.map +1 -0
  84. package/dist/node_modules/.pnpm/fast-json-patch@3.1.1/node_modules/fast-json-patch/module/duplex.js +95 -0
  85. package/dist/node_modules/.pnpm/fast-json-patch@3.1.1/node_modules/fast-json-patch/module/duplex.js.map +1 -0
  86. package/dist/node_modules/.pnpm/fast-json-patch@3.1.1/node_modules/fast-json-patch/module/helpers.js +112 -0
  87. package/dist/node_modules/.pnpm/fast-json-patch@3.1.1/node_modules/fast-json-patch/module/helpers.js.map +1 -0
  88. package/dist/sdk/model/dist/index.js +165 -140
  89. package/dist/sdk/model/dist/index.js.map +1 -1
  90. package/dist/types.d.ts +2 -2
  91. package/dist/types.d.ts.map +1 -1
  92. package/package.json +9 -6
  93. package/src/components/BlockLayout.vue +9 -1
  94. package/src/components/NotFound.vue +1 -3
  95. package/src/components/PlAgDataTable/PlAgDataTableV2.vue +6 -31
  96. package/src/components/PlAgDataTable/sources/table-source-v2.ts +29 -29
  97. package/src/components/PlAgDataTable/types.ts +42 -70
  98. package/src/defineApp.ts +134 -36
  99. package/src/internal/UpdateSerializer.ts +112 -0
  100. package/src/internal/createAppModel.ts +7 -20
  101. package/src/internal/{createApp.ts → createAppV1.ts} +10 -6
  102. package/src/internal/createAppV2.test.ts +158 -0
  103. package/src/internal/createAppV2.ts +309 -0
  104. package/src/internal/test-helpers/BlockMock.ts +144 -0
  105. package/src/internal/test-helpers/createMockApi.ts +92 -0
  106. package/src/internal/test-helpers/utils.ts +65 -0
  107. package/src/{types.static-test.ts → internal/v1.static-test.ts} +5 -9
  108. package/src/internal/v2.static-test.ts +98 -0
  109. package/src/types.ts +2 -2
  110. package/dist/internal/createApp.d.ts.map +0 -1
  111. package/dist/internal/createApp.js.map +0 -1
  112. package/dist/lib/ui/uikit/dist/components/PlAccordion/ExpandTransition.vue.js.map +0 -1
  113. package/dist/types.static-test.d.ts.map +0 -1
@@ -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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"}
@@ -7,10 +7,11 @@
7
7
  .pl-ag-chart-stacked-bar-cell{height:100%;display:flex;flex-direction:row;align-items:center}.pl-ag-chart-stacked-bar-cell__not-ready{color:var(--txt-03)!important}
8
8
  .pl-ag-chart-histogram-cell{height:100%;display:flex;flex-direction:row;align-items:center}.pl-ag-chart-histogram-cell__not-ready{color:var(--txt-03)!important}
9
9
  .pl-ag-cell-status-tag{height:100%;padding:0 12px}`)),document.head.appendChild(o)}}catch(r){console.error("vite-plugin-css-injected-by-js",r)}})();
10
- import { defineComponent as l, ref as m, computed as d, onBeforeMount as c, onBeforeUnmount as v, toDisplayString as f } from "vue";
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
13
  import "../../sdk/model/dist/index.js";
14
+ import "../../node_modules/.pnpm/fast-json-patch@3.1.1/node_modules/fast-json-patch/index.js";
14
15
  import "../../aggrid.js";
15
16
  import "../../lib/ui/uikit/dist/index.js";
16
17
 
@@ -29,15 +30,15 @@ import { getTotalRowsCount as i, getSelectedRowsCount as p } from "../../AgGridV
29
30
  import "../PlMultiSequenceAlignment/data.js";
30
31
  import "@milaboratories/biowasm-tools";
31
32
  import "../../composition/fileContent.js";
32
- const q = /* @__PURE__ */ l({
33
+ const z = /* @__PURE__ */ l({
33
34
  __name: "PlAgRowCount",
34
35
  props: {
35
36
  params: {}
36
37
  },
37
38
  setup(t) {
38
- const o = m(i(t.params.api)), r = m(p(t.params.api)), u = new Intl.PluralRules("en"), n = new Intl.NumberFormat("en"), s = d(() => {
39
- let a = n.format(o.value) + " ";
40
- return a += u.select(o.value) === "one" ? "row" : "rows", r.value > 0 && (a += " (" + n.format(r.value) + " selected)"), a;
39
+ 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(() => {
40
+ let a = m.format(o.value) + " ";
41
+ return a += u.select(o.value) === "one" ? "row" : "rows", r.value > 0 && (a += " (" + m.format(r.value) + " selected)"), a;
41
42
  });
42
43
  function e() {
43
44
  o.value = i(t.params.api), r.value = p(t.params.api);
@@ -50,6 +51,6 @@ const q = /* @__PURE__ */ l({
50
51
  }
51
52
  });
52
53
  export {
53
- q as default
54
+ z as default
54
55
  };
55
56
  //# 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,EAAM,OAAC,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,IAAA,CACR;AAED,aAASC,IAAkB;AACzB,MAAAX,EAAc,QAAQE,EAAkBC,SAAO,GAAG,GAClDC,EAAiB,QAAQC,EAAqBF,SAAO,GAAG;AAAA,IAAA;AAG1D,WAAAS,EAAc,MAAM;AAClB,MAAAT,EAAM,OAAC,IAAI,iBAAiB,oBAAoBQ,CAAe,GAC/DR,EAAM,OAAC,IAAI,iBAAiB,kBAAkBQ,CAAe,GAC7DR,EAAM,OAAC,IAAI,iBAAiB,gBAAgBQ,CAAe;AAAA,IAAA,CAC5D,GAEDE,EAAgB,MAAM;AACpB,MAAAV,EAAA,OAAO,IAAI,oBAAoB,oBAAoBQ,CAAe,GAClER,EAAA,OAAO,IAAI,oBAAoB,kBAAkBQ,CAAe,GAChER,EAAM,OAAC,IAAI,oBAAoB,gBAAgBQ,CAAe;AAAA,IAAA,CAC/D;;;"}
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,EAAM,OAAC,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,IAAA,CACR;AAED,aAASC,IAAkB;AACzB,MAAAX,EAAc,QAAQE,EAAkBC,SAAO,GAAG,GAClDC,EAAiB,QAAQC,EAAqBF,SAAO,GAAG;AAAA,IAAA;AAG1D,WAAAS,EAAc,MAAM;AAClB,MAAAT,EAAM,OAAC,IAAI,iBAAiB,oBAAoBQ,CAAe,GAC/DR,EAAM,OAAC,IAAI,iBAAiB,kBAAkBQ,CAAe,GAC7DR,EAAM,OAAC,IAAI,iBAAiB,gBAAgBQ,CAAe;AAAA,IAAA,CAC5D,GAEDE,EAAgB,MAAM;AACpB,MAAAV,EAAA,OAAO,IAAI,oBAAoB,oBAAoBQ,CAAe,GAClER,EAAA,OAAO,IAAI,oBAAoB,kBAAkBQ,CAAe,GAChER,EAAM,OAAC,IAAI,oBAAoB,gBAAgBQ,CAAe;AAAA,IAAA,CAC/D;;;"}
@@ -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
- import { makeRowNumberColDef as V, PlAgDataTableRowNumberColId as Y } from "./row-number.js";
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);
7
+ import { makeRowNumberColDef as V, PlAgDataTableRowNumberColId as j } from "./row-number.js";
8
+ import { getColumnRenderingSpec as Q } from "./value-rendering.js";
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 U(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 W(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
70
  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);
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) => X(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 = W(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() !== j)
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 X(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 = Q(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,7 +199,7 @@ 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
  };
@@ -202,6 +207,6 @@ function Q(i, n, p, y, s) {
202
207
  export {
203
208
  le as calculateGridOptions,
204
209
  U as isLabelColumn,
205
- Q as makeColDef
210
+ X as makeColDef
206
211
  };
207
212
  //# sourceMappingURL=table-source-v2.js.map