@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.
- package/.turbo/turbo-build.log +52 -25
- package/.turbo/turbo-type-check.log +1 -1
- package/CHANGELOG.md +21 -0
- package/dist/AgGridVue/useAgGridOptions.js +54 -53
- package/dist/AgGridVue/useAgGridOptions.js.map +1 -1
- package/dist/components/BlockLayout.vue.d.ts.map +1 -1
- package/dist/components/BlockLayout.vue.js +7 -50
- package/dist/components/BlockLayout.vue.js.map +1 -1
- package/dist/components/BlockLayout.vue2.js +53 -2
- package/dist/components/BlockLayout.vue2.js.map +1 -1
- package/dist/components/BlockLayout.vue3.js +9 -0
- package/dist/components/BlockLayout.vue3.js.map +1 -0
- package/dist/components/NotFound.vue.d.ts.map +1 -1
- package/dist/components/NotFound.vue.js +12 -14
- package/dist/components/NotFound.vue.js.map +1 -1
- package/dist/components/PlAgDataTable/PlAgDataTableV2.vue.d.ts +1 -4
- package/dist/components/PlAgDataTable/PlAgDataTableV2.vue.d.ts.map +1 -1
- package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js +155 -172
- package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js.map +1 -1
- package/dist/components/PlAgDataTable/PlAgRowCount.vue.js +7 -6
- package/dist/components/PlAgDataTable/PlAgRowCount.vue.js.map +1 -1
- package/dist/components/PlAgDataTable/sources/table-source-v2.d.ts +2 -2
- package/dist/components/PlAgDataTable/sources/table-source-v2.d.ts.map +1 -1
- package/dist/components/PlAgDataTable/sources/table-source-v2.js +110 -105
- package/dist/components/PlAgDataTable/sources/table-source-v2.js.map +1 -1
- package/dist/components/PlAgDataTable/types.d.ts +27 -43
- package/dist/components/PlAgDataTable/types.d.ts.map +1 -1
- package/dist/components/PlAgDataTable/types.js +32 -43
- package/dist/components/PlAgDataTable/types.js.map +1 -1
- package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue.js +10 -9
- package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue.js.map +1 -1
- package/dist/components/PlAgRowNumHeader.vue.js +3 -2
- package/dist/components/PlAgRowNumHeader.vue.js.map +1 -1
- package/dist/components/PlAnnotations/components/DynamicForm.vue2.js +10 -10
- package/dist/components/PlAnnotations/components/PlAnnotationCreateDialog.vue.d.ts +1 -1
- package/dist/components/PlAnnotations/components/PlAnnotationCreateDialog.vue.d.ts.map +1 -1
- package/dist/components/PlMultiSequenceAlignment/data.js +51 -51
- package/dist/composition/fileContent.js +16 -16
- package/dist/defineApp.d.ts +19 -6
- package/dist/defineApp.d.ts.map +1 -1
- package/dist/defineApp.js +50 -30
- package/dist/defineApp.js.map +1 -1
- package/dist/internal/UpdateSerializer.d.ts +26 -0
- package/dist/internal/UpdateSerializer.d.ts.map +1 -0
- package/dist/internal/UpdateSerializer.js +65 -0
- package/dist/internal/UpdateSerializer.js.map +1 -0
- package/dist/internal/createAppModel.d.ts +1 -1
- package/dist/internal/createAppModel.d.ts.map +1 -1
- package/dist/internal/createAppModel.js +43 -51
- package/dist/internal/createAppModel.js.map +1 -1
- package/dist/internal/{createApp.d.ts → createAppV1.d.ts} +4 -4
- package/dist/internal/createAppV1.d.ts.map +1 -0
- package/dist/internal/{createApp.js → createAppV1.js} +17 -18
- package/dist/internal/createAppV1.js.map +1 -0
- package/dist/internal/createAppV2.d.ts +56 -0
- package/dist/internal/createAppV2.d.ts.map +1 -0
- package/dist/internal/createAppV2.js +158 -0
- package/dist/internal/createAppV2.js.map +1 -0
- package/dist/internal/test-helpers/BlockMock.d.ts +28 -0
- package/dist/internal/test-helpers/BlockMock.d.ts.map +1 -0
- package/dist/internal/test-helpers/createMockApi.d.ts +4 -0
- package/dist/internal/test-helpers/createMockApi.d.ts.map +1 -0
- package/dist/internal/test-helpers/utils.d.ts +4 -0
- package/dist/internal/test-helpers/utils.d.ts.map +1 -0
- package/dist/{types.static-test.d.ts → internal/v1.static-test.d.ts} +3 -3
- package/dist/internal/v1.static-test.d.ts.map +1 -0
- package/dist/internal/v2.static-test.d.ts +7 -0
- package/dist/internal/v2.static-test.d.ts.map +1 -0
- package/dist/lib/model/common/dist/index.js +214 -199
- package/dist/lib/model/common/dist/index.js.map +1 -1
- package/dist/lib/ui/uikit/dist/components/PlAccordion/{ExpandTransition.vue.js → ExpandTransition.vue2.js} +1 -1
- package/dist/lib/ui/uikit/dist/components/PlAccordion/ExpandTransition.vue2.js.map +1 -0
- package/dist/lib/ui/uikit/dist/components/PlAccordion/PlAccordionSection.vue2.js +1 -1
- package/dist/lib/ui/uikit/dist/components/PlDialogModal/PlDialogModal.vue.js.map +1 -1
- package/dist/lib/ui/uikit/dist/lib/model/common/dist/index.js +7 -7
- package/dist/lib/ui/uikit/dist/sdk/model/dist/index.js +77 -56
- package/dist/lib/ui/uikit/dist/sdk/model/dist/index.js.map +1 -1
- package/dist/lib/util/helpers/dist/index.js +67 -56
- package/dist/lib/util/helpers/dist/index.js.map +1 -1
- package/dist/node_modules/.pnpm/fast-json-patch@3.1.1/node_modules/fast-json-patch/index.js +29 -0
- package/dist/node_modules/.pnpm/fast-json-patch@3.1.1/node_modules/fast-json-patch/index.js.map +1 -0
- package/dist/node_modules/.pnpm/fast-json-patch@3.1.1/node_modules/fast-json-patch/module/core.js +208 -0
- package/dist/node_modules/.pnpm/fast-json-patch@3.1.1/node_modules/fast-json-patch/module/core.js.map +1 -0
- package/dist/node_modules/.pnpm/fast-json-patch@3.1.1/node_modules/fast-json-patch/module/duplex.js +95 -0
- package/dist/node_modules/.pnpm/fast-json-patch@3.1.1/node_modules/fast-json-patch/module/duplex.js.map +1 -0
- package/dist/node_modules/.pnpm/fast-json-patch@3.1.1/node_modules/fast-json-patch/module/helpers.js +112 -0
- package/dist/node_modules/.pnpm/fast-json-patch@3.1.1/node_modules/fast-json-patch/module/helpers.js.map +1 -0
- package/dist/sdk/model/dist/index.js +165 -140
- package/dist/sdk/model/dist/index.js.map +1 -1
- package/dist/types.d.ts +2 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +9 -6
- package/src/components/BlockLayout.vue +9 -1
- package/src/components/NotFound.vue +1 -3
- package/src/components/PlAgDataTable/PlAgDataTableV2.vue +6 -31
- package/src/components/PlAgDataTable/sources/table-source-v2.ts +29 -29
- package/src/components/PlAgDataTable/types.ts +42 -70
- package/src/defineApp.ts +134 -36
- package/src/internal/UpdateSerializer.ts +112 -0
- package/src/internal/createAppModel.ts +7 -20
- package/src/internal/{createApp.ts → createAppV1.ts} +10 -6
- package/src/internal/createAppV2.test.ts +158 -0
- package/src/internal/createAppV2.ts +309 -0
- package/src/internal/test-helpers/BlockMock.ts +144 -0
- package/src/internal/test-helpers/createMockApi.ts +92 -0
- package/src/internal/test-helpers/utils.ts +65 -0
- package/src/{types.static-test.ts → internal/v1.static-test.ts} +5 -9
- package/src/internal/v2.static-test.ts +98 -0
- package/src/types.ts +2 -2
- package/dist/internal/createApp.d.ts.map +0 -1
- package/dist/internal/createApp.js.map +0 -1
- package/dist/lib/ui/uikit/dist/components/PlAccordion/ExpandTransition.vue.js.map +0 -1
- 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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDM,UAAAA,IAAaC,iBAElB,GACKC,IAAYD,EAA6BE,GAAC,WAAW,GACrDC,IAAQD,GAyDR,EAAE,UAAAE,EAAA,IAAaC,EAAOF,CAAK,GAC3BG,IAAOC,GAKP,EAAE,WAAAC,GAAW,aAAAC,GAAa,cAAAC,EAAiB,IAAAC,GAAcZ,GAAYK,CAAQ,GAE7EQ,IAAiBC,EAAoC,MAAM;AAC/D,YAAMC,IAAe,EAAE,GAAGV,EAAS,MAAM;AAClC,aAAAU,EAAa,aAAa,OAC7B;AAAA,QACE,QAAQA,EAAa,UAAU,CAAC;AAAA,QAChC,aAAa,CAAC,GAAGL,EAAY,KAAK;AAAA,MAAA,IAEpC;AAAA,QACE,QAAQ,CAAC;AAAA,QACT,aAAa,CAAA;AAAA,MACf;AAAA,IAAA,CACL,GAEKM,IAAoBC,EAAwB,EAAE,GAC9CC,IAAkBJ,EAAqC,MAAM;AACjE,YAAMC,IAAe,EAAE,GAAGV,EAAS,MAAM,GACnCc,IAAUH,EAAkB;AAY3B,aAXQD,EAAa,aAAa,QAAQI,EAAQ,SAAS,IAC9D;AAAA,QACE,SAAAA;AAAA,QACA,QAAQ,CAACC,MAA6BL,EAAa,cAAc,EAAE,UAAUA,EAAa,UAAU,QAAAK,GAAQ;AAAA,QAC5G,aAAa,CAAC,GAAGT,EAAa,KAAK;AAAA,MAAA,IAErC;AAAA,QACE,SAAS,CAAC;AAAA,QACV,QAAQ,OAAO,CAAA;AAAA,QACf,aAAa,CAAA;AAAA,MACf;AAAA,IACG,CACR,GAEKU,IAAUC,EAA+C,IAAI,GAC7DC,IAA2BC,GAA6C,GACxEC,IAAcH,EAA4C;AAAA,MAC9D,aAAa;AAAA,MACb,6BAA6B;AAAA,MAC7B,eAAe,CAACpB,EAAU;AAAA,MAC1B,cAAcO,EAAU;AAAA,MACxB,kBAAkB,EAAE,MAAM,kBAAkB;AAAA,MAC5C,cAAcP,EAAU,QACpB;AAAA,QACE,MAAM;AAAA,QACN,WAAW;AAAA,QACX,cAAc;AAAA,QACd,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,sBAAsB;AAAA,MAAA,IAExB;AAAA,MACJ,oBAAoB,CAACwB,MAAU;;AAC7B,YAAIxB,EAAU,OAAO;AACb,gBAAAyB,IAAQD,EAAM,IAAI,4BAA4B,GAC9CE,MAAeC,IAAAF,KAAA,gBAAAA,EAAO,iBAAP,gBAAAE,EAAqB,IAAI,CAACC,MAAWC,EAAUD,CAA0B,OAAM,CAAC;AACrG,UAAA5B,EAAU,QAAQ,EAAE,GAAGA,EAAU,OAAO,cAAA0B,EAAa;AAAA,QAAA;AAAA,MAEzD;AAAA,MACA,oBAAoB,CAACF,MAAU;AACzB,QAAAA,EAAM,QAAQA,EAAM,KAAK,WAAcnB,EAAA,oBAAoBmB,EAAM,KAAK,OAAO;AAAA,MACnF;AAAA,MACA,eAAe;AAAA,QACb,0BAA0B;AAAA,QAC1B,cAAc,CAAC,QAAQ,OAAO,IAAI;AAAA,QAClC,sBAAsBtB,EAAM;AAAA,MAC9B;AAAA,MACA,qBAAqB;AAAA,MACrB,YAAY;AAAA,QACV,cAAc;AAAA,MAChB;AAAA,MACA,cAAc;AAAA;AAAA;AAAA,MAGd,gBAAgB;AAAA,MAChB,kBAAkB;AAAA,MAClB,yBAAyB;AAAA,MACzB,yBAAyB;AAAA,MACzB,uCAAuC;AAAA,MACvC,UAAU,CAAC4B,MAAWA,EAAO,KAAK;AAAA,MAClC,SAAS;AAAA,MACT,+BAA+B;AAAA,QAC7B,UAAU;AAAA,QACV,aAAa5B,EAAM;AAAA,QACnB,cAAcA,EAAM;AAAA,MACtB;AAAA,MACA,yBAAyB6B;AAAAA,MACzB,wBAAwBC;AAAAA,MACxB,8BAA8B;AAAA,QAC5B,MAAM9B,EAAM;AAAA,MACd;AAAA,MACA,wBAAwB;AAAA,QACtB,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,UAAU;AAAA,MACZ;AAAA,MACA,WAAW;AAAA,QACT,cAAc;AAAA,UACZ,EAAE,aAAa+B,IAAc,OAAO,OAAO;AAAA,QAAA;AAAA,MAE/C;AAAA,MACA,aAAa,CAACT,MAAU;AACtB,cAAMU,IAAMV,EAAM;AAClB,QAAAW,GAAwBD,CAAG;AACrB,cAAAE,IAAgB,CACpBC,GACAC,MACG;AACH,gBAAMC,IAAU,EAAE,GAAGhB,EAAY,MAAM;AACvC,UAAAgB,EAAQF,CAAG,IAAIC,GACff,EAAY,QAAQgB,GAChBL,EAAA,cAAcG,GAAKC,CAAK;AAAA,QAC9B,GACME,IAAoB,CAACD,MAAgC;AACzD,UAAAhB,EAAY,QAAQ;AAAA,YAClB,GAAGA,EAAY;AAAA,YACf,GAAGgB;AAAA,UACL,GACAL,EAAI,kBAAkBK,CAAO;AAAA,QAC/B;AACQ,QAAApB,EAAA,QAAQ,IAAI,MAAMe,GAAK;AAAA,UAC7B,IAAIO,GAAQC,GAAMC,GAAU;AAC1B,oBAAQD,GAAM;AAAA,cACZ,KAAK;AACI,uBAAAN;AAAA,cACT,KAAK;AACI,uBAAAI;AAAA,cACT;AACE,uBAAO,QAAQ,IAAIC,GAAQC,GAAMC,CAAQ;AAAA,YAAA;AAAA,UAC7C;AAAA,QACF,CACD;AAAA,MACH;AAAA,MACA,gBAAgB,CAACnB,MAAU;AACb,QAAAD,EAAA,MAAM,eAAehB,EAAU,QAAQqC;AAAA,UACjDpB,EAAM;AAAA,QACR,GACAA,EAAM,IAAI;AAAA,UACRA,EAAM,IAAI,uBAAA,EAAyB;AAAA,YACjC,CAACN,MAAWA,EAAO,eAAe2B;AAAA,UAAA;AAAA,QAEtC;AAAA,MACF;AAAA,MACA,oBAAoB,CAACrB,MAAU;AACjB,QAAAD,EAAA,MAAM,eAAehB,EAAU,QAAQqC;AAAA,UACjDpB,EAAM,IAAI,SAAS;AAAA,QACrB,GACAL,EAAQ,QAAQ;AAAA,MAAA;AAAA,IAClB,CACD;AAGD,aAASyB,EAAiBnB,GAA4C;AAC7D,aAAA;AAAA,QACL,aAAaA,EAAM;AAAA,QAGnB,MAAMA,EAAM;AAAA,QAMZ,kBAAkBA,EAAM;AAAA,MAG1B;AAAA,IAAA;AAII,UAAAqB,IAAY/B,EAAI,CAAC;AACvB,IAAAgC;AAAA,MACE,MAAM,CAAC5B,EAAQ,OAAOZ,EAAU,KAAK;AAAA,MACrC,CAAC,CAACY,GAASZ,CAAS,MAAM;AACxB,YAAI,CAACY,KAAWA,EAAQ,cAAe;AACvC,cAAM6B,IAAYJ,EAAiBzB,EAAQ,SAAA,CAAU;AACjD,QAAA,CAAC8B,EAAY1C,GAAW,CAAE,CAAA,KAAK,CAAC0C,EAAY1C,GAAWyC,CAAS,MAClEzB,EAAY,MAAM,eAAehB,GACjC,EAAEuC,EAAU;AAAA,MACd;AAAA,IAEJ;AAGA,QAAII,IAAiC;AACrC,IAAAH;AAAA,MACE,MAAM,CAAC5B,EAAQ,OAAOI,EAAY,KAAK;AAAA,MACvC,CAAC,CAACJ,GAASoB,CAAO,MAAM;AAEtB,QAAI,CAACpB,KAAWA,EAAQ,kBACpBoB,EAAQ,YAAWW,KAAA,QAAAA,EAAY,YAAW,CAACD;AAAAA,UAC7CV,EAAQ;AAAA,UACRW,KAAA,gBAAAA,EAAY;AAAA,QAAA,MAGZ/B,EAAQ,cAAc,WAAW,EAAK,GACtCA,EAAQ,cAAc,WAAW,EAAI,IAE1B+B,IAAAX;AAAA,MACf;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IACpB;AAGA,UAAMY,IAAuBvC,EAAS,MAAMV,EAAM,wBAAwB,IAAI;AAC9E,IAAA6C;AAAA,MACE,MAAM,CAAC5B,EAAQ,OAAOgC,EAAqB,KAAK;AAAA,MAChD,CAAC,CAAChC,GAASgC,CAAoB,MAAM;AACnC,QAAI,CAAChC,KAAWA,EAAQ,iBACxBA,EAAQ,cAAc,iBAAiB;AAAA,UACrC,GAAGI,EAAY,MAAM;AAAA,UACrB,sBAAsB4B,KAAwB;AAAA,QAAA,CAC/C;AAAA,MAAA;AAAA,IAEL,GAEwCC,EAAA;AAAA,MACtC,UAAU,CAACC,MAAWC;AAAA,QACpB,CAACC,MAAQN;;AAAAA,iBAAAA,GAAYtB,IAAA4B,EAAI,SAAJ,gBAAA5B,EAAU,SAAS0B,CAAM;AAAA;AAAA,QAC9ChC;AAAA,MAAA;AAAA,IACF,CACD,GAGDmC;AAAAA,MACE,MAAMjC,EAAY,MAAM;AAAA,MACxB,CAACkC,MAAe;AAEd,YADiBtD,EAAS,MAAM,aACf;AACf,UAAAW,EAAkB,QAAQ,CAAC,GACvBd,EAAU,UACZA,EAAU,QAAQ;AAAA,YAChB,UAAU,CAAC;AAAA,YACX,cAAc,CAAA;AAAA,UAChB;AAAA,aAEG;AACL,gBAAM0D,IAAW,CAACC,MAChB,EAAE,cAAcA,IAEZ1C,MADUwC,KAAA,gBAAAA,EAAY,OAAOC,OAAa,CAAC,GAE9C,IAAI,CAACC,MAAQA,EAAI,KAAK,EACtB,OAAO,CAACC,MAAUA,MAAU,MAAS,EACrC,OAAO,CAACA,MAAUA,MAAUf,CAA2B,EACvD,IAAI,CAACe,MAAU/B,EAAU+B,CAA4B,CAAC,KACpD,CAAC;AAEN,cADA9C,EAAkB,QAAQG,EAAQ,IAAI,CAACC,MAAWA,EAAO,OAAO,GAC5DlB,EAAU,OAAO;AACnB,kBAAM6D,IAAW5C,EACd,OAAO,CAAC6C,GAAK5C,OACRA,EAAO,OAAO,SAAS,UACrB4C,EAAA,KAAK5C,EAAO,OAAO,IAAI,GAEtB4C,IACN,EAAgB;AACrB,YAAA9D,EAAU,QAAQ;AAAA,cAChB,GAAGA,EAAU;AAAA,cACb,UAAA6D;AAAA,YACF;AAAA,UAAA;AAAA,QACF;AAAA,MAEJ;AAAA,MACA,EAAE,WAAW,GAAK;AAAA,IACpB;AAGA,QAAIE,IAA4C;AAC1C,UAAAC,IAAajD,EAAI,CAAC;AACxB,WAAAgC;AAAA,MACE,MAAM,CAAC5B,EAAQ,OAAOhB,EAAS,KAAK;AAAA,MACpC,CAAC,CAACgB,GAAShB,CAAQ,MAAM;;AAEvB,YAAI,GAACgB,KAAWA,EAAQ,kBAEpB8B,CAAAA,EAAY9C,GAAU4D,CAAW,GACrC;AAAA,YAAEC,EAAW;AACT,cAAA;AAME,gBAJJ7C,EAAQ,YAAY,GACpBE,EAAyB,MAAM,GAG3B,CAAClB,EAAS,UAAU;AACtBgB,cAAAA,EAAQ,kBAAkB;AAAA,gBACxB,SAAS;AAAA,gBACT,+BAA+B;AAAA,kBAC7B,GAAGI,EAAY,MAAM;AAAA,kBACrB,UAAU;AAAA,gBACZ;AAAA,gBACA,YAAY;AAAA,gBACZ,sBAAsB;AAAA,cAAA,CACvB,GACGvB,EAAU,SACZmB,EAAQ,4BAA4B;AAAA,gBAClC,WAAW;AAAA,gBACX,cAAc,CAAA;AAAA,cAAC,CAChB;AAEH;AAAA,YAAA;AAIEhB,YAAAA,EAAS,cAAa4D,KAAA,gBAAAA,EAAa,cACrC5C,EAAQ,kBAAkB;AAAA,cACxB,SAAS;AAAA,cACT,+BAA+B;AAAA,gBAC7B,GAAGI,EAAY,MAAM;AAAA,gBACrB,UAAU;AAAA,cAAA;AAAA,YACZ,CACD,GACGvB,EAAU,SACZmB,EAAQ,4BAA4B;AAAA,cAClC,WAAW;AAAA,cACX,cAAc,CAAA;AAAA,YAAC,CAChB;AAKL,kBAAM8C,MAAiB9D,IAAAA,EAAS,UAATA,gBAAAA,EAAgB,aAAYA,EAAS,MAAM,aAAaA,EAAS;AACpF,gBAAA,CAACA,EAAS,SAAS8D,GAAe;AAC9B,oBAAAxC,IAAQN,EAAQ,6BAA6B,GAC7C+C,IAAW,CAACD,KAAiBxC,EAAM,SAAS,IAC9CA,EAAM,CAAC,EAAE,WACT;AACJ,qBAAON,EAAQ,kBAAkB;AAAA,gBAC/B,sBAAsB;AAAA,kBACpB,SAAS,CAACW,MAAW;AACnB,oBAAAA,EAAO,QAAQ,EAAE,SAAS,CAAC,GAAG,UAAAoC,GAAU;AAAA,kBAAA;AAAA,gBAC1C;AAAA,cACF,CACD;AAAA,YAAA;AAIH,kBAAMC,IAAkBH,EAAW;AACd,YAAAI,GAAA;AAAA,cACnB,YAAAJ;AAAA,cACA,UAAUK,IAA0B;AAAA,cACpC,OAAOlE,EAAS;AAAA,cAChB,QAAQA,EAAS,UAAU,CAAC;AAAA,cAC5B,OAAOkB,EAAyB;AAAA,cAChC,eAAciD,IAAA/D,EAAU,MAAM,qBAAhB,gBAAA+D,EAAkC;AAAA,cAChD,sBAAsB;AAAA,gBACpB,yBAAyBpE,EAAM;AAAA,gBAC/B,mCACEA,EAAM;AAAA,gBACR,SAAS,CAACmC,MAAoBhC,EAAK,qBAAqBgC,CAAG;AAAA,cAAA;AAAA,YAC7D,CACD,EAAE,KAAK,CAACE,MAAY;AACnB,kBAAIpB,EAAAA,EAAQ,YAAA,KAAiBgD,MAAoBH,EAAW;AAC5D,uBAAO7C,EAAQ,kBAAkB;AAAA,kBAC/B,GAAGoB;AAAA,gBAAA,CACJ;AAAA,YAAA,CACF,EAAE,MAAM,CAACgC,MAAmB;AAC3B,cAAIpD,EAAQ,YAAA,KAAiBgD,MAAoBH,EAAW,SAC5D,QAAQ,MAAMO,CAAK;AAAA,YAAA,CACpB,EAAE,QAAQ,MAAM;AACf,cAAIpD,EAAQ,YAAA,KAAiBgD,MAAoBH,EAAW,SAC5D7C,EAAQ,kBAAkB;AAAA,gBACxB,SAAS;AAAA,cAAA,CACV;AAAA,YAAA,CACF;AAAA,mBACMoD,GAAgB;AACvB,oBAAQ,MAAMA,CAAK;AAAA,UAAA,UACnB;AACcpE,YAAAA,IAAAA;AAAAA,UAAA;AAAA;AAAA,MAChB;AAAA,IAEJ,GAEA4C;AAAA,MACE,OAAO;AAAA,QACL,SAAS5B,EAAQ;AAAA,QACjB,aAAajB,EAAM;AAAA,QACnB,cAAcA,EAAM;AAAA,QACpB,YAAYA,EAAM;AAAA,MAAA;AAAA,MAEpB,CAAC,EAAE,SAAAiB,GAAS,aAAAqD,GAAa,cAAAC,GAAc,YAAAC,QAAiB;AACtD,QAAI,CAACvD,KAAWA,EAAQ,iBACxBA,EAAQ,kBAAkB;AAAA,UACxB,+BAA+B;AAAA,YAC7B,GAAGI,EAAY,MAAM;AAAA,YACrB,aAAAiD;AAAA,YACA,cAAAC;AAAA,UACF;AAAA,UACA,8BAA8B;AAAA,YAC5B,GAAGlD,EAAY,MAAM;AAAA,YACrB,MAAMmD;AAAA,UAAA;AAAA,QACR,CACD;AAAA,MAAA;AAAA,IAEL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -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
|
|
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
|
|
33
|
+
const z = /* @__PURE__ */ l({
|
|
33
34
|
__name: "PlAgRowCount",
|
|
34
35
|
props: {
|
|
35
36
|
params: {}
|
|
36
37
|
},
|
|
37
38
|
setup(t) {
|
|
38
|
-
const o =
|
|
39
|
-
let a =
|
|
40
|
-
return a += u.select(o.value) === "one" ? "row" : "rows", r.value > 0 && (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
|
-
|
|
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":"
|
|
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):
|
|
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,
|
|
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
|
|
2
|
-
import
|
|
3
|
-
import
|
|
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
|
|
8
|
-
import { getColumnRenderingSpec as
|
|
9
|
-
import { isJsonEqual as
|
|
10
|
-
import { getAxisId as
|
|
11
|
-
function U(
|
|
12
|
-
return
|
|
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(
|
|
15
|
-
const
|
|
16
|
-
for (let
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
)), o =
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
|
24
|
+
return l;
|
|
30
25
|
}
|
|
31
26
|
async function le({
|
|
32
|
-
generation:
|
|
27
|
+
generation: s,
|
|
33
28
|
pfDriver: n,
|
|
34
|
-
model:
|
|
35
|
-
sheets:
|
|
36
|
-
track:
|
|
37
|
-
hiddenColIds:
|
|
38
|
-
cellButtonAxisParams:
|
|
29
|
+
model: m,
|
|
30
|
+
sheets: c,
|
|
31
|
+
track: l,
|
|
32
|
+
hiddenColIds: u,
|
|
33
|
+
cellButtonAxisParams: f
|
|
39
34
|
}) {
|
|
40
|
-
const
|
|
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
|
-
|
|
37
|
+
v.set(p(e), t);
|
|
43
38
|
});
|
|
44
|
-
const
|
|
39
|
+
const D = /* @__PURE__ */ new Map();
|
|
45
40
|
o.forEach((e, t) => {
|
|
46
|
-
const
|
|
47
|
-
if (
|
|
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
|
-
|
|
44
|
+
D.set(t, i ?? -1);
|
|
50
45
|
});
|
|
51
|
-
let
|
|
52
|
-
|
|
53
|
-
const r =
|
|
54
|
-
(e) =>
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
|
61
|
-
return
|
|
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
|
|
67
|
-
|
|
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) =>
|
|
72
|
-
],
|
|
73
|
-
for (let e = 0; e <
|
|
74
|
-
|
|
75
|
-
|
|
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
|
|
78
|
-
t === -1 && (
|
|
82
|
+
for (const [e, t] of S)
|
|
83
|
+
t === -1 && (S.set(
|
|
79
84
|
e,
|
|
80
|
-
|
|
85
|
+
g.length
|
|
81
86
|
/* at this index value will be inserted in the next line */
|
|
82
|
-
),
|
|
87
|
+
), g.push(e));
|
|
83
88
|
const G = h.filter((e) => o[e].type === "axis").map((e) => {
|
|
84
|
-
const t =
|
|
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
|
-
}),
|
|
91
|
-
|
|
92
|
-
const t =
|
|
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
|
|
96
|
-
let
|
|
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 (
|
|
106
|
+
if (C !== s.value) return e.fail();
|
|
102
107
|
try {
|
|
103
|
-
if (
|
|
104
|
-
const
|
|
105
|
-
if (
|
|
106
|
-
|
|
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 (
|
|
109
|
-
e.success({ rowData: [], rowCount:
|
|
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 (
|
|
113
|
-
return e.success({ rowData: [], rowCount:
|
|
114
|
-
|
|
115
|
-
let t = 0,
|
|
116
|
-
if (
|
|
117
|
-
const
|
|
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 (
|
|
122
|
-
|
|
126
|
+
if (C !== s.value || e.api.isDestroyed()) return e.fail();
|
|
127
|
+
i = W(h, a, G, F);
|
|
123
128
|
}
|
|
124
|
-
e.success({ rowData:
|
|
125
|
-
e.api.getAllDisplayedColumns().filter((
|
|
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 (
|
|
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() ||
|
|
136
|
+
e.api.isDestroyed() || l(e.api);
|
|
132
137
|
}
|
|
133
138
|
}
|
|
134
139
|
}
|
|
135
140
|
};
|
|
136
141
|
}
|
|
137
|
-
function
|
|
138
|
-
var
|
|
139
|
-
const
|
|
142
|
+
function X(s, n, m, c, l) {
|
|
143
|
+
var p, w;
|
|
144
|
+
const u = N({
|
|
140
145
|
source: n,
|
|
141
|
-
labeled:
|
|
142
|
-
}),
|
|
143
|
-
return
|
|
144
|
-
colId:
|
|
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:
|
|
148
|
-
headerName: ((w = (
|
|
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: (
|
|
151
|
-
valueFormatter:
|
|
152
|
-
headerComponent:
|
|
153
|
-
cellRendererSelector:
|
|
154
|
-
var
|
|
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
|
|
157
|
-
if (D
|
|
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:
|
|
166
|
+
invokeRowsOnDoubleClick: l.cellButtonInvokeRowsOnDoubleClick,
|
|
162
167
|
onClick: (h) => {
|
|
163
168
|
var R;
|
|
164
|
-
|
|
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 (
|
|
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: ${
|
|
187
|
+
throw Error(`unsupported data type: ${f}`);
|
|
183
188
|
}
|
|
184
189
|
})()
|
|
185
190
|
},
|
|
186
191
|
cellDataType: (() => {
|
|
187
|
-
switch (
|
|
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: ${
|
|
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
|
-
|
|
210
|
+
X as makeColDef
|
|
206
211
|
};
|
|
207
212
|
//# sourceMappingURL=table-source-v2.js.map
|