@platforma-sdk/ui-vue 1.40.5 → 1.40.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +10 -10
- package/.turbo/turbo-type-check.log +1 -1
- package/CHANGELOG.md +9 -0
- 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/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/lib/model/common/dist/index.js.map +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 +5 -5
- package/dist/lib/ui/uikit/dist/sdk/model/dist/index.js +18 -18
- package/dist/lib/ui/uikit/dist/sdk/model/dist/index.js.map +1 -1
- package/dist/sdk/model/dist/index.js +80 -75
- package/dist/sdk/model/dist/index.js.map +1 -1
- package/package.json +7 -7
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlAgDataTableV2.vue2.js","sources":["../../../src/components/PlAgDataTable/PlAgDataTableV2.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { isJsonEqual } from '@milaboratories/helpers';\nimport type {\n AxisId,\n AxisSpec,\n PlDataTableGridStateCore,\n PlDataTableStateV2,\n PlSelectionModel,\n PlTableColumnIdJson,\n PTableColumnSpec,\n PTableKey,\n} from '@platforma-sdk/model';\nimport { getRawPlatformaInstance, parseJson } from '@platforma-sdk/model';\nimport type {\n CellRendererSelectorFunc,\n ColDef,\n ColGroupDef,\n GridApi,\n GridOptions,\n GridState,\n ManagedGridOptionKey,\n ManagedGridOptions,\n} from 'ag-grid-enterprise';\nimport { AgGridVue } from 'ag-grid-vue3';\nimport { computed, ref, shallowRef, toRefs, watch } from 'vue';\nimport { AgGridTheme } from '../../aggrid';\nimport PlAgCsvExporter from '../PlAgCsvExporter/PlAgCsvExporter.vue';\nimport { PlAgGridColumnManager } from '../PlAgGridColumnManager';\nimport type { PlDataTableFiltersSettings } from '../PlTableFilters';\nimport PlTableFiltersV2 from '../PlTableFilters/PlTableFiltersV2.vue';\nimport PlAgDataTableSheets from './PlAgDataTableSheets.vue';\nimport PlOverlayLoading from './PlAgOverlayLoading.vue';\nimport PlOverlayNoRows from './PlAgOverlayNoRows.vue';\nimport PlAgRowCount from './PlAgRowCount.vue';\nimport { focusRow, makeOnceTracker } from './sources/focus-row';\nimport { autoSizeRowNumberColumn, PlAgDataTableRowNumberColId } from './sources/row-number';\nimport type { PlAgCellButtonAxisParams } from './sources/table-source-v2';\nimport { calculateGridOptions } from './sources/table-source-v2';\nimport { useTableState } from './sources/table-state-v2';\nimport type {\n PlAgDataTableV2Controller,\n PlAgDataTableV2Row,\n PlAgOverlayLoadingParams,\n PlAgOverlayNoRowsParams,\n PlDataTableSettingsV2,\n PlDataTableSheetsSettings,\n PlTableLabeledSelectionModel,\n PlTableRowIdJson,\n} from './types';\nimport { watchCached } from '@milaboratories/uikit';\n\nconst tableState = defineModel<PlDataTableStateV2>({\n required: true,\n});\nconst selection = defineModel<PlSelectionModel>('selection');\nconst selectionLabeled = defineModel<PlTableLabeledSelectionModel>('selectionLabeled');\nconst props = defineProps<{\n /** Required component settings */\n settings: Readonly<PlDataTableSettingsV2>;\n\n /**\n * The disableColumnsPanel prop controls the display of a button that activates\n * the columns management panel in the table. To make the button functional\n * and visible, you must also include the PlAgDataTableToolsPanel component in your layout.\n * This component serves as the target for teleporting the button.\n */\n disableColumnsPanel?: boolean;\n\n /**\n * The disableFiltersPanel prop controls the display of a button that activates\n * the filters management panel in the table. To make the button functional\n * and visible, you must also include the PlAgDataTableToolsPanel component in your layout.\n * This component serves as the target for teleporting the button.\n */\n disableFiltersPanel?: boolean;\n\n /**\n * The showExportButton prop controls the display of a button that allows\n * to export table data in CSV format. To make the button functional\n * and visible, you must also include the PlAgDataTableToolsPanel component in your layout.\n * This component serves as the target for teleporting the button.\n */\n showExportButton?: boolean;\n\n /**\n * The AxisId property is used to configure and display the PlAgTextAndButtonCell component\n */\n showCellButtonForAxisId?: AxisId;\n\n /**\n * If cellButtonInvokeRowsOnDoubleClick = true, clicking a button inside the row\n * triggers the doubleClick event for the entire row.\n *\n * If cellButtonInvokeRowsOnDoubleClick = false, the doubleClick event for the row\n * is not triggered, but will triggered cellButtonClicked event with (key: PTableRowKey) argument.\n */\n cellButtonInvokeRowsOnDoubleClick?: boolean;\n\n /** @see {@link PlAgOverlayLoadingParams.loadingText} */\n loadingText?: string;\n\n /** @see {@link PlAgOverlayLoadingParams.notReadyText} */\n notReadyText?: string;\n\n /** @see {@link PlAgOverlayNoRowsParams.text} */\n noRowsText?: string;\n\n /**\n * Callback to override the default renderer for a given cell.\n * @see https://www.ag-grid.com/vue-data-grid/component-cell-renderer/#dynamic-component-selection\n */\n cellRendererSelector?: CellRendererSelectorFunc<PlAgDataTableV2Row>;\n}>();\nconst { settings } = toRefs(props);\nconst emit = defineEmits<{\n rowDoubleClicked: [key?: PTableKey];\n cellButtonClicked: [key?: PTableKey];\n}>();\n\nconst { gridState, sheetsState, filtersState } = useTableState(tableState, settings);\n\nconst sheetsSettings = computed<PlDataTableSheetsSettings>(() => {\n const settingsCopy = { ...settings.value };\n return settingsCopy.sourceId !== null\n ? {\n sheets: settingsCopy.sheets ?? [],\n cachedState: [...sheetsState.value],\n }\n : {\n sheets: [],\n cachedState: [],\n };\n});\n\nconst filterableColumns = ref<PTableColumnSpec[]>([]);\nconst filtersSettings = computed<PlDataTableFiltersSettings>(() => {\n const settingsCopy = { ...settings.value };\n const columns = filterableColumns.value;\n const result = settingsCopy.sourceId !== null && columns.length > 0\n ? {\n columns,\n config: (column: PTableColumnSpec) => settingsCopy.filtersConfig({ sourceId: settingsCopy.sourceId, column }),\n cachedState: [...filtersState.value],\n }\n : {\n columns: [],\n config: () => ({}),\n cachedState: [],\n };\n return result;\n});\n\nconst gridApi = shallowRef<GridApi<PlAgDataTableV2Row> | null>(null);\nconst firstDataRenderedTracker = makeOnceTracker<GridApi<PlAgDataTableV2Row>>();\nconst gridOptions = shallowRef<GridOptions<PlAgDataTableV2Row>>({\n animateRows: false,\n suppressColumnMoveAnimation: true,\n cellSelection: !selection.value && !selectionLabeled.value,\n initialState: gridState.value,\n autoSizeStrategy: { type: 'fitCellContents' },\n rowSelection: selection.value || selectionLabeled.value\n ? {\n mode: 'multiRow',\n selectAll: 'all',\n groupSelects: 'self',\n checkboxes: false,\n headerCheckbox: false,\n enableClickSelection: false,\n }\n : undefined,\n onSelectionChanged: (event) => {\n const state = event.api.getServerSideSelectionState();\n if (selection.value) {\n const selectedKeys = state?.toggledNodes?.map((nodeId) => parseJson(nodeId as PlTableRowIdJson).axesKey) ?? [];\n selection.value = { ...selection.value, selectedKeys };\n }\n if (selectionLabeled.value) {\n const selectedLabeledKeys = state?.toggledNodes?.map((nodeId) => parseJson(nodeId as PlTableRowIdJson).labeled) ?? [];\n selectionLabeled.value = { ...selectionLabeled.value, selectedLabeledKeys };\n }\n },\n onRowDoubleClicked: (event) => {\n if (event.data && event.data.axesKey) emit('rowDoubleClicked', event.data.axesKey);\n },\n defaultColDef: {\n suppressHeaderMenuButton: true,\n sortingOrder: ['desc', 'asc', null],\n cellRendererSelector: props.cellRendererSelector,\n },\n maintainColumnOrder: true,\n localeText: {\n loadingError: '...',\n },\n rowModelType: 'serverSide',\n // cacheBlockSize should be tha same as PlMultiSequenceAlignment limit\n // so that selectAll will add all rows to selection\n cacheBlockSize: 1000,\n maxBlocksInCache: 100,\n blockLoadDebounceMillis: 500,\n serverSideSortAllLevels: true,\n suppressServerSideFullWidthLoadingRow: true,\n getRowId: (params) => params.data.id,\n loading: true,\n loadingOverlayComponentParams: {\n notReady: true,\n loadingText: props.loadingText,\n notReadyText: props.notReadyText,\n } satisfies PlAgOverlayLoadingParams,\n loadingOverlayComponent: PlOverlayLoading,\n noRowsOverlayComponent: PlOverlayNoRows,\n noRowsOverlayComponentParams: {\n text: props.noRowsText,\n } satisfies PlAgOverlayNoRowsParams,\n defaultCsvExportParams: {\n allColumns: true,\n suppressQuotes: true,\n fileName: 'table.csv',\n },\n statusBar: {\n statusPanels: [\n { statusPanel: PlAgRowCount, align: 'left' },\n ],\n },\n onGridReady: (event) => {\n const api = event.api;\n autoSizeRowNumberColumn(api);\n const setGridOption = (\n key: ManagedGridOptionKey,\n value: GridOptions[ManagedGridOptionKey],\n ) => {\n const options = { ...gridOptions.value };\n options[key] = value;\n gridOptions.value = options;\n api.setGridOption(key, value);\n };\n const updateGridOptions = (options: ManagedGridOptions) => {\n gridOptions.value = {\n ...gridOptions.value,\n ...options,\n };\n api.updateGridOptions(options);\n };\n gridApi.value = new Proxy(api, {\n get(target, prop, receiver) {\n switch (prop) {\n case 'setGridOption':\n return setGridOption;\n case 'updateGridOptions':\n return updateGridOptions;\n default:\n return Reflect.get(target, prop, receiver);\n }\n },\n });\n },\n onStateUpdated: (event) => {\n gridOptions.value.initialState = gridState.value = makePartialState(\n event.state,\n );\n event.api.autoSizeColumns(\n event.api.getAllDisplayedColumns().filter(\n (column) => column.getColId() !== PlAgDataTableRowNumberColId,\n ),\n );\n },\n onGridPreDestroyed: (event) => {\n gridOptions.value.initialState = gridState.value = makePartialState(\n event.api.getState(),\n );\n gridApi.value = null;\n },\n});\n\n// Restore proper types erased by AgGrid\nfunction makePartialState(state: GridState): PlDataTableGridStateCore {\n return {\n columnOrder: state.columnOrder as {\n orderedColIds: PlTableColumnIdJson[];\n } | undefined,\n sort: state.sort as {\n sortModel: {\n colId: PlTableColumnIdJson;\n sort: 'asc' | 'desc';\n }[];\n } | undefined,\n columnVisibility: state.columnVisibility as {\n hiddenColIds: PlTableColumnIdJson[];\n } | undefined,\n };\n};\n\n// Reload AgGrid when new state arrives from server\nconst reloadKey = ref(0);\nwatch(\n () => [gridApi.value, gridState.value] as const,\n ([gridApi, gridState]) => {\n if (!gridApi || gridApi.isDestroyed()) return;\n const selfState = makePartialState(gridApi.getState());\n if (!isJsonEqual(gridState, {}) && !isJsonEqual(gridState, selfState)) {\n gridOptions.value.initialState = gridState;\n ++reloadKey.value;\n }\n },\n);\n\n// Make loadingOverlayComponentParams reactive\nlet oldOptions: GridOptions | null = null;\nwatch(\n () => [gridApi.value, gridOptions.value] as const,\n ([gridApi, options]) => {\n // Wait for AgGrid reinitialization, gridApi will eventially become initialized\n if (!gridApi || gridApi.isDestroyed()) return;\n if (options.loading && oldOptions?.loading && !isJsonEqual(\n options.loadingOverlayComponentParams,\n oldOptions?.loadingOverlayComponentParams,\n )) {\n // Hack to reapply loadingOverlayComponentParams\n gridApi.setGridOption('loading', false);\n gridApi.setGridOption('loading', true);\n }\n oldOptions = options;\n },\n { immediate: true },\n);\n\n// Make cellRendererSelector reactive\nconst cellRendererSelector = computed(() => props.cellRendererSelector ?? null);\nwatch(\n () => [gridApi.value, cellRendererSelector.value] as const,\n ([gridApi, cellRendererSelector]) => {\n if (!gridApi || gridApi.isDestroyed()) return;\n gridApi.setGridOption('defaultColDef', {\n ...gridOptions.value.defaultColDef,\n cellRendererSelector: cellRendererSelector ?? undefined,\n });\n },\n);\n\ndefineExpose<PlAgDataTableV2Controller>({\n focusRow: (rowKey) => focusRow(\n (row) => isJsonEqual(row.data?.axesKey, rowKey),\n firstDataRenderedTracker,\n ),\n});\n\n// Propagate columns for filter component\nwatchCached(\n () => gridOptions.value.columnDefs,\n (columnDefs) => {\n const sourceId = settings.value.sourceId;\n if (sourceId === null) {\n filterableColumns.value = [];\n if (selection.value) {\n selection.value = {\n axesSpec: [],\n selectedKeys: [],\n };\n }\n if (selectionLabeled.value) {\n selectionLabeled.value = {\n spec: [],\n selectedLabeledKeys: [],\n };\n }\n } else {\n const isColDef = (def: ColDef | ColGroupDef): def is ColDef =>\n !('children' in def);\n const colDefs = columnDefs?.filter(isColDef) ?? [];\n const columns = colDefs\n .map((def) => def.colId)\n .filter((colId) => colId !== undefined)\n .filter((colId) => colId !== PlAgDataTableRowNumberColId)\n .map((colId) => parseJson(colId as PlTableColumnIdJson))\n ?? [];\n filterableColumns.value = columns.map((column) => column.labeled);\n if (selection.value) {\n const axesSpec = columns\n .reduce((acc, column) => {\n if (column.source.type === 'axis') {\n acc.push(column.source.spec);\n }\n return acc;\n }, [] as AxisSpec[]);\n selection.value = {\n ...selection.value,\n axesSpec,\n };\n }\n if (selectionLabeled.value) {\n const spec = columns\n .reduce((acc, column) => {\n if (column.source.type === 'axis') {\n acc.push(column.labeled);\n }\n return acc;\n }, [] as PTableColumnSpec[]);\n selectionLabeled.value = {\n ...selectionLabeled.value,\n spec,\n };\n }\n }\n },\n { immediate: true },\n);\n\n// Update AgGrid when settings change\nlet oldSettings: PlDataTableSettingsV2 | null = null;\nconst generation = ref(0);\nwatch(\n () => [gridApi.value, settings.value] as const,\n ([gridApi, settings]) => {\n // Wait for AgGrid reinitialization, gridApi will eventially become initialized\n if (!gridApi || gridApi.isDestroyed()) return;\n // Verify that this is not a false watch trigger\n if (isJsonEqual(settings, oldSettings)) return;\n ++generation.value;\n try {\n // Hide no rows overlay if it is shown, or else loading overlay will not be shown\n gridApi.hideOverlay();\n firstDataRenderedTracker.reset();\n\n // No data source selected -> reset state to default\n if (!settings.sourceId) {\n gridApi.updateGridOptions({\n loading: true,\n loadingOverlayComponentParams: {\n ...gridOptions.value.loadingOverlayComponentParams,\n notReady: true,\n } satisfies PlAgOverlayLoadingParams,\n columnDefs: undefined,\n serverSideDatasource: undefined,\n });\n if (selection.value || selectionLabeled.value) {\n gridApi.setServerSideSelectionState({\n selectAll: false,\n toggledNodes: [],\n });\n }\n return;\n }\n\n // Data source changed -> show full page loader, clear selection\n if (settings.sourceId !== oldSettings?.sourceId) {\n gridApi.updateGridOptions({\n loading: true,\n loadingOverlayComponentParams: {\n ...gridOptions.value.loadingOverlayComponentParams,\n notReady: false,\n } satisfies PlAgOverlayLoadingParams,\n });\n if (selection.value || selectionLabeled.value) {\n gridApi.setServerSideSelectionState({\n selectAll: false,\n toggledNodes: [],\n });\n }\n }\n\n // Model updated -> show skeletons instead of data\n const sourceChanged = (settings.model?.sourceId && settings.model.sourceId !== settings.sourceId);\n if (!settings.model || sourceChanged) {\n const state = gridApi.getServerSideGroupLevelState();\n const rowCount = !sourceChanged && state.length > 0\n ? state[0].rowCount\n : 1;\n return gridApi.updateGridOptions({\n serverSideDatasource: {\n getRows: (params) => {\n params.success({ rowData: [], rowCount });\n },\n },\n });\n }\n\n // Model ready -> calculate new state\n const stateGeneration = generation.value;\n calculateGridOptions({\n generation,\n pfDriver: getRawPlatformaInstance().pFrameDriver,\n model: settings.model,\n sheets: settings.sheets ?? [],\n track: firstDataRenderedTracker.track,\n hiddenColIds: gridState.value.columnVisibility?.hiddenColIds,\n cellButtonAxisParams: {\n showCellButtonForAxisId: props.showCellButtonForAxisId,\n cellButtonInvokeRowsOnDoubleClick:\n props.cellButtonInvokeRowsOnDoubleClick,\n trigger: (key?: PTableKey) => emit('cellButtonClicked', key),\n } satisfies PlAgCellButtonAxisParams,\n }).then((options) => {\n if (gridApi.isDestroyed() || stateGeneration !== generation.value) return;\n return gridApi.updateGridOptions({\n ...options,\n });\n }).catch((error: unknown) => {\n if (gridApi.isDestroyed() || stateGeneration !== generation.value) return;\n console.trace(error);\n }).finally(() => {\n if (gridApi.isDestroyed() || stateGeneration !== generation.value) return;\n gridApi.updateGridOptions({\n loading: false,\n });\n });\n } catch (error: unknown) {\n console.trace(error);\n } finally {\n oldSettings = settings;\n }\n },\n);\n\nwatch(\n () => ({\n gridApi: gridApi.value,\n loadingText: props.loadingText,\n notReadyText: props.notReadyText,\n noRowsText: props.noRowsText,\n }),\n ({ gridApi, loadingText, notReadyText, noRowsText }) => {\n if (!gridApi || gridApi.isDestroyed()) return;\n gridApi.updateGridOptions({\n loadingOverlayComponentParams: {\n ...gridOptions.value.loadingOverlayComponentParams,\n loadingText,\n notReadyText,\n },\n noRowsOverlayComponentParams: {\n ...gridOptions.value.noRowsOverlayComponentParams,\n text: noRowsText,\n },\n });\n },\n);\n</script>\n\n<template>\n <div :class=\"$style.container\">\n <PlAgGridColumnManager\n v-if=\"gridApi && !disableColumnsPanel\"\n :api=\"gridApi\"\n />\n <PlTableFiltersV2\n v-if=\"!disableFiltersPanel\"\n v-model=\"filtersState\"\n :settings=\"filtersSettings\"\n />\n <PlAgCsvExporter\n v-if=\"gridApi && showExportButton\"\n :api=\"gridApi\"\n />\n <PlAgDataTableSheets\n v-model=\"sheetsState\"\n :settings=\"sheetsSettings\"\n >\n <template #before>\n <slot name=\"before-sheets\" />\n </template>\n <template #after>\n <slot name=\"after-sheets\" />\n </template>\n </PlAgDataTableSheets>\n <AgGridVue\n :key=\"reloadKey\"\n :theme=\"AgGridTheme\"\n :class=\"$style.grid\"\n :grid-options=\"gridOptions\"\n />\n </div>\n</template>\n\n<style lang=\"css\" module>\n.container {\n display: flex;\n flex-direction: column;\n height: 100%;\n gap: 12px;\n}\n\n.grid {\n flex: 1;\n}\n</style>\n"],"names":["tableState","_useModel","selection","__props","selectionLabeled","props","settings","toRefs","emit","__emit","gridState","sheetsState","filtersState","useTableState","sheetsSettings","computed","settingsCopy","filterableColumns","ref","filtersSettings","columns","column","gridApi","shallowRef","firstDataRenderedTracker","makeOnceTracker","gridOptions","event","state","selectedKeys","_a","nodeId","parseJson","selectedLabeledKeys","_b","params","PlOverlayLoading","PlOverlayNoRows","PlAgRowCount","api","autoSizeRowNumberColumn","setGridOption","key","value","options","updateGridOptions","target","prop","receiver","makePartialState","PlAgDataTableRowNumberColId","reloadKey","watch","selfState","isJsonEqual","oldOptions","cellRendererSelector","__expose","rowKey","focusRow","row","watchCached","columnDefs","isColDef","def","colId","axesSpec","acc","spec","oldSettings","generation","sourceChanged","rowCount","stateGeneration","calculateGridOptions","getRawPlatformaInstance","error","loadingText","notReadyText","noRowsText"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PlAgDataTableV2.vue2.js","sources":["../../../src/components/PlAgDataTable/PlAgDataTableV2.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { isJsonEqual } from '@milaboratories/helpers';\nimport type {\n AxisId,\n AxisSpec,\n PlDataTableGridStateCore,\n PlDataTableStateV2,\n PlSelectionModel,\n PlTableColumnIdJson,\n PTableColumnSpec,\n PTableKey,\n} from '@platforma-sdk/model';\nimport { getRawPlatformaInstance, parseJson } from '@platforma-sdk/model';\nimport type {\n CellRendererSelectorFunc,\n ColDef,\n ColGroupDef,\n GridApi,\n GridOptions,\n GridState,\n ManagedGridOptionKey,\n ManagedGridOptions,\n} from 'ag-grid-enterprise';\nimport { AgGridVue } from 'ag-grid-vue3';\nimport { computed, ref, shallowRef, toRefs, watch } from 'vue';\nimport { AgGridTheme } from '../../aggrid';\nimport PlAgCsvExporter from '../PlAgCsvExporter/PlAgCsvExporter.vue';\nimport { PlAgGridColumnManager } from '../PlAgGridColumnManager';\nimport type { PlDataTableFiltersSettings } from '../PlTableFilters';\nimport PlTableFiltersV2 from '../PlTableFilters/PlTableFiltersV2.vue';\nimport PlAgDataTableSheets from './PlAgDataTableSheets.vue';\nimport PlOverlayLoading from './PlAgOverlayLoading.vue';\nimport PlOverlayNoRows from './PlAgOverlayNoRows.vue';\nimport PlAgRowCount from './PlAgRowCount.vue';\nimport { focusRow, makeOnceTracker } from './sources/focus-row';\nimport { autoSizeRowNumberColumn, PlAgDataTableRowNumberColId } from './sources/row-number';\nimport type { PlAgCellButtonAxisParams } from './sources/table-source-v2';\nimport { calculateGridOptions } from './sources/table-source-v2';\nimport { useTableState } from './sources/table-state-v2';\nimport type {\n PlAgDataTableV2Controller,\n PlAgDataTableV2Row,\n PlAgOverlayLoadingParams,\n PlAgOverlayNoRowsParams,\n PlDataTableSettingsV2,\n PlDataTableSheetsSettings,\n PlTableRowIdJson,\n} from './types';\nimport { watchCached } from '@milaboratories/uikit';\n\nconst tableState = defineModel<PlDataTableStateV2>({\n required: true,\n});\nconst selection = defineModel<PlSelectionModel>('selection');\nconst props = defineProps<{\n /** Required component settings */\n settings: Readonly<PlDataTableSettingsV2>;\n\n /**\n * The disableColumnsPanel prop controls the display of a button that activates\n * the columns management panel in the table. To make the button functional\n * and visible, you must also include the PlAgDataTableToolsPanel component in your layout.\n * This component serves as the target for teleporting the button.\n */\n disableColumnsPanel?: boolean;\n\n /**\n * The disableFiltersPanel prop controls the display of a button that activates\n * the filters management panel in the table. To make the button functional\n * and visible, you must also include the PlAgDataTableToolsPanel component in your layout.\n * This component serves as the target for teleporting the button.\n */\n disableFiltersPanel?: boolean;\n\n /**\n * The showExportButton prop controls the display of a button that allows\n * to export table data in CSV format. To make the button functional\n * and visible, you must also include the PlAgDataTableToolsPanel component in your layout.\n * This component serves as the target for teleporting the button.\n */\n showExportButton?: boolean;\n\n /**\n * The AxisId property is used to configure and display the PlAgTextAndButtonCell component\n */\n showCellButtonForAxisId?: AxisId;\n\n /**\n * If cellButtonInvokeRowsOnDoubleClick = true, clicking a button inside the row\n * triggers the doubleClick event for the entire row.\n *\n * If cellButtonInvokeRowsOnDoubleClick = false, the doubleClick event for the row\n * is not triggered, but will triggered cellButtonClicked event with (key: PTableRowKey) argument.\n */\n cellButtonInvokeRowsOnDoubleClick?: boolean;\n\n /** @see {@link PlAgOverlayLoadingParams.loadingText} */\n loadingText?: string;\n\n /** @see {@link PlAgOverlayLoadingParams.notReadyText} */\n notReadyText?: string;\n\n /** @see {@link PlAgOverlayNoRowsParams.text} */\n noRowsText?: string;\n\n /**\n * Callback to override the default renderer for a given cell.\n * @see https://www.ag-grid.com/vue-data-grid/component-cell-renderer/#dynamic-component-selection\n */\n cellRendererSelector?: CellRendererSelectorFunc<PlAgDataTableV2Row>;\n}>();\nconst { settings } = toRefs(props);\nconst emit = defineEmits<{\n rowDoubleClicked: [key?: PTableKey];\n cellButtonClicked: [key?: PTableKey];\n}>();\n\nconst { gridState, sheetsState, filtersState } = useTableState(tableState, settings);\n\nconst sheetsSettings = computed<PlDataTableSheetsSettings>(() => {\n const settingsCopy = { ...settings.value };\n return settingsCopy.sourceId !== null\n ? {\n sheets: settingsCopy.sheets ?? [],\n cachedState: [...sheetsState.value],\n }\n : {\n sheets: [],\n cachedState: [],\n };\n});\n\nconst filterableColumns = ref<PTableColumnSpec[]>([]);\nconst filtersSettings = computed<PlDataTableFiltersSettings>(() => {\n const settingsCopy = { ...settings.value };\n const columns = filterableColumns.value;\n const result = settingsCopy.sourceId !== null && columns.length > 0\n ? {\n columns,\n config: (column: PTableColumnSpec) => settingsCopy.filtersConfig({ sourceId: settingsCopy.sourceId, column }),\n cachedState: [...filtersState.value],\n }\n : {\n columns: [],\n config: () => ({}),\n cachedState: [],\n };\n return result;\n});\n\nconst gridApi = shallowRef<GridApi<PlAgDataTableV2Row> | null>(null);\nconst firstDataRenderedTracker = makeOnceTracker<GridApi<PlAgDataTableV2Row>>();\nconst gridOptions = shallowRef<GridOptions<PlAgDataTableV2Row>>({\n animateRows: false,\n suppressColumnMoveAnimation: true,\n cellSelection: !selection.value,\n initialState: gridState.value,\n autoSizeStrategy: { type: 'fitCellContents' },\n rowSelection: selection.value\n ? {\n mode: 'multiRow',\n selectAll: 'all',\n groupSelects: 'self',\n checkboxes: false,\n headerCheckbox: false,\n enableClickSelection: false,\n }\n : undefined,\n onSelectionChanged: (event) => {\n if (selection.value) {\n const state = event.api.getServerSideSelectionState();\n const selectedKeys = state?.toggledNodes?.map((nodeId) => parseJson(nodeId as PlTableRowIdJson)) ?? [];\n selection.value = { ...selection.value, selectedKeys };\n }\n },\n onRowDoubleClicked: (event) => {\n if (event.data && event.data.axesKey) emit('rowDoubleClicked', event.data.axesKey);\n },\n defaultColDef: {\n suppressHeaderMenuButton: true,\n sortingOrder: ['desc', 'asc', null],\n cellRendererSelector: props.cellRendererSelector,\n },\n maintainColumnOrder: true,\n localeText: {\n loadingError: '...',\n },\n rowModelType: 'serverSide',\n // cacheBlockSize should be tha same as PlMultiSequenceAlignment limit\n // so that selectAll will add all rows to selection\n cacheBlockSize: 1000,\n maxBlocksInCache: 100,\n blockLoadDebounceMillis: 500,\n serverSideSortAllLevels: true,\n suppressServerSideFullWidthLoadingRow: true,\n getRowId: (params) => params.data.id,\n loading: true,\n loadingOverlayComponentParams: {\n notReady: true,\n loadingText: props.loadingText,\n notReadyText: props.notReadyText,\n } satisfies PlAgOverlayLoadingParams,\n loadingOverlayComponent: PlOverlayLoading,\n noRowsOverlayComponent: PlOverlayNoRows,\n noRowsOverlayComponentParams: {\n text: props.noRowsText,\n } satisfies PlAgOverlayNoRowsParams,\n defaultCsvExportParams: {\n allColumns: true,\n suppressQuotes: true,\n fileName: 'table.csv',\n },\n statusBar: {\n statusPanels: [\n { statusPanel: PlAgRowCount, align: 'left' },\n ],\n },\n onGridReady: (event) => {\n const api = event.api;\n autoSizeRowNumberColumn(api);\n const setGridOption = (\n key: ManagedGridOptionKey,\n value: GridOptions[ManagedGridOptionKey],\n ) => {\n const options = { ...gridOptions.value };\n options[key] = value;\n gridOptions.value = options;\n api.setGridOption(key, value);\n };\n const updateGridOptions = (options: ManagedGridOptions) => {\n gridOptions.value = {\n ...gridOptions.value,\n ...options,\n };\n api.updateGridOptions(options);\n };\n gridApi.value = new Proxy(api, {\n get(target, prop, receiver) {\n switch (prop) {\n case 'setGridOption':\n return setGridOption;\n case 'updateGridOptions':\n return updateGridOptions;\n default:\n return Reflect.get(target, prop, receiver);\n }\n },\n });\n },\n onStateUpdated: (event) => {\n gridOptions.value.initialState = gridState.value = makePartialState(\n event.state,\n );\n event.api.autoSizeColumns(\n event.api.getAllDisplayedColumns().filter(\n (column) => column.getColId() !== PlAgDataTableRowNumberColId,\n ),\n );\n },\n onGridPreDestroyed: (event) => {\n gridOptions.value.initialState = gridState.value = makePartialState(\n event.api.getState(),\n );\n gridApi.value = null;\n },\n});\n\n// Restore proper types erased by AgGrid\nfunction makePartialState(state: GridState): PlDataTableGridStateCore {\n return {\n columnOrder: state.columnOrder as {\n orderedColIds: PlTableColumnIdJson[];\n } | undefined,\n sort: state.sort as {\n sortModel: {\n colId: PlTableColumnIdJson;\n sort: 'asc' | 'desc';\n }[];\n } | undefined,\n columnVisibility: state.columnVisibility as {\n hiddenColIds: PlTableColumnIdJson[];\n } | undefined,\n };\n};\n\n// Reload AgGrid when new state arrives from server\nconst reloadKey = ref(0);\nwatch(\n () => [gridApi.value, gridState.value] as const,\n ([gridApi, gridState]) => {\n if (!gridApi || gridApi.isDestroyed()) return;\n const selfState = makePartialState(gridApi.getState());\n if (!isJsonEqual(gridState, {}) && !isJsonEqual(gridState, selfState)) {\n gridOptions.value.initialState = gridState;\n ++reloadKey.value;\n }\n },\n);\n\n// Make loadingOverlayComponentParams reactive\nlet oldOptions: GridOptions | null = null;\nwatch(\n () => [gridApi.value, gridOptions.value] as const,\n ([gridApi, options]) => {\n // Wait for AgGrid reinitialization, gridApi will eventially become initialized\n if (!gridApi || gridApi.isDestroyed()) return;\n if (options.loading && oldOptions?.loading && !isJsonEqual(\n options.loadingOverlayComponentParams,\n oldOptions?.loadingOverlayComponentParams,\n )) {\n // Hack to reapply loadingOverlayComponentParams\n gridApi.setGridOption('loading', false);\n gridApi.setGridOption('loading', true);\n }\n oldOptions = options;\n },\n { immediate: true },\n);\n\n// Make cellRendererSelector reactive\nconst cellRendererSelector = computed(() => props.cellRendererSelector ?? null);\nwatch(\n () => [gridApi.value, cellRendererSelector.value] as const,\n ([gridApi, cellRendererSelector]) => {\n if (!gridApi || gridApi.isDestroyed()) return;\n gridApi.setGridOption('defaultColDef', {\n ...gridOptions.value.defaultColDef,\n cellRendererSelector: cellRendererSelector ?? undefined,\n });\n },\n);\n\ndefineExpose<PlAgDataTableV2Controller>({\n focusRow: (rowKey) => focusRow(\n (row) => isJsonEqual(row.data?.axesKey, rowKey),\n firstDataRenderedTracker,\n ),\n});\n\n// Propagate columns for filter component\nwatchCached(\n () => gridOptions.value.columnDefs,\n (columnDefs) => {\n const sourceId = settings.value.sourceId;\n if (sourceId === null) {\n filterableColumns.value = [];\n if (selection.value) {\n selection.value = {\n axesSpec: [],\n selectedKeys: [],\n };\n }\n } else {\n const isColDef = (def: ColDef | ColGroupDef): def is ColDef =>\n !('children' in def);\n const colDefs = columnDefs?.filter(isColDef) ?? [];\n const columns = colDefs\n .map((def) => def.colId)\n .filter((colId) => colId !== undefined)\n .filter((colId) => colId !== PlAgDataTableRowNumberColId)\n .map((colId) => parseJson(colId as PlTableColumnIdJson))\n ?? [];\n filterableColumns.value = columns.map((column) => column.labeled);\n if (selection.value) {\n const axesSpec = columns\n .reduce((acc, column) => {\n if (column.source.type === 'axis') {\n acc.push(column.source.spec);\n }\n return acc;\n }, [] as AxisSpec[]);\n selection.value = {\n ...selection.value,\n axesSpec,\n };\n }\n }\n },\n { immediate: true },\n);\n\n// Update AgGrid when settings change\nlet oldSettings: PlDataTableSettingsV2 | null = null;\nconst generation = ref(0);\nwatch(\n () => [gridApi.value, settings.value] as const,\n ([gridApi, settings]) => {\n // Wait for AgGrid reinitialization, gridApi will eventially become initialized\n if (!gridApi || gridApi.isDestroyed()) return;\n // Verify that this is not a false watch trigger\n if (isJsonEqual(settings, oldSettings)) return;\n ++generation.value;\n try {\n // Hide no rows overlay if it is shown, or else loading overlay will not be shown\n gridApi.hideOverlay();\n firstDataRenderedTracker.reset();\n\n // No data source selected -> reset state to default\n if (!settings.sourceId) {\n gridApi.updateGridOptions({\n loading: true,\n loadingOverlayComponentParams: {\n ...gridOptions.value.loadingOverlayComponentParams,\n notReady: true,\n } satisfies PlAgOverlayLoadingParams,\n columnDefs: undefined,\n serverSideDatasource: undefined,\n });\n if (selection.value) {\n gridApi.setServerSideSelectionState({\n selectAll: false,\n toggledNodes: [],\n });\n }\n return;\n }\n\n // Data source changed -> show full page loader, clear selection\n if (settings.sourceId !== oldSettings?.sourceId) {\n gridApi.updateGridOptions({\n loading: true,\n loadingOverlayComponentParams: {\n ...gridOptions.value.loadingOverlayComponentParams,\n notReady: false,\n } satisfies PlAgOverlayLoadingParams,\n });\n if (selection.value) {\n gridApi.setServerSideSelectionState({\n selectAll: false,\n toggledNodes: [],\n });\n }\n }\n\n // Model updated -> show skeletons instead of data\n const sourceChanged = (settings.model?.sourceId && settings.model.sourceId !== settings.sourceId);\n if (!settings.model || sourceChanged) {\n const state = gridApi.getServerSideGroupLevelState();\n const rowCount = !sourceChanged && state.length > 0\n ? state[0].rowCount\n : 1;\n return gridApi.updateGridOptions({\n serverSideDatasource: {\n getRows: (params) => {\n params.success({ rowData: [], rowCount });\n },\n },\n });\n }\n\n // Model ready -> calculate new state\n const stateGeneration = generation.value;\n calculateGridOptions({\n generation,\n pfDriver: getRawPlatformaInstance().pFrameDriver,\n model: settings.model,\n sheets: settings.sheets ?? [],\n track: firstDataRenderedTracker.track,\n hiddenColIds: gridState.value.columnVisibility?.hiddenColIds,\n cellButtonAxisParams: {\n showCellButtonForAxisId: props.showCellButtonForAxisId,\n cellButtonInvokeRowsOnDoubleClick:\n props.cellButtonInvokeRowsOnDoubleClick,\n trigger: (key?: PTableKey) => emit('cellButtonClicked', key),\n } satisfies PlAgCellButtonAxisParams,\n }).then((options) => {\n if (gridApi.isDestroyed() || stateGeneration !== generation.value) return;\n return gridApi.updateGridOptions({\n ...options,\n });\n }).catch((error: unknown) => {\n if (gridApi.isDestroyed() || stateGeneration !== generation.value) return;\n console.trace(error);\n }).finally(() => {\n if (gridApi.isDestroyed() || stateGeneration !== generation.value) return;\n gridApi.updateGridOptions({\n loading: false,\n });\n });\n } catch (error: unknown) {\n console.trace(error);\n } finally {\n oldSettings = settings;\n }\n },\n);\n\nwatch(\n () => ({\n gridApi: gridApi.value,\n loadingText: props.loadingText,\n notReadyText: props.notReadyText,\n noRowsText: props.noRowsText,\n }),\n ({ gridApi, loadingText, notReadyText, noRowsText }) => {\n if (!gridApi || gridApi.isDestroyed()) return;\n gridApi.updateGridOptions({\n loadingOverlayComponentParams: {\n ...gridOptions.value.loadingOverlayComponentParams,\n loadingText,\n notReadyText,\n },\n noRowsOverlayComponentParams: {\n ...gridOptions.value.noRowsOverlayComponentParams,\n text: noRowsText,\n },\n });\n },\n);\n</script>\n\n<template>\n <div :class=\"$style.container\">\n <PlAgGridColumnManager\n v-if=\"gridApi && !disableColumnsPanel\"\n :api=\"gridApi\"\n />\n <PlTableFiltersV2\n v-if=\"!disableFiltersPanel\"\n v-model=\"filtersState\"\n :settings=\"filtersSettings\"\n />\n <PlAgCsvExporter\n v-if=\"gridApi && showExportButton\"\n :api=\"gridApi\"\n />\n <PlAgDataTableSheets\n v-model=\"sheetsState\"\n :settings=\"sheetsSettings\"\n >\n <template #before>\n <slot name=\"before-sheets\" />\n </template>\n <template #after>\n <slot name=\"after-sheets\" />\n </template>\n </PlAgDataTableSheets>\n <AgGridVue\n :key=\"reloadKey\"\n :theme=\"AgGridTheme\"\n :class=\"$style.grid\"\n :grid-options=\"gridOptions\"\n />\n </div>\n</template>\n\n<style lang=\"css\" module>\n.container {\n display: flex;\n flex-direction: column;\n height: 100%;\n gap: 12px;\n}\n\n.grid {\n flex: 1;\n}\n</style>\n"],"names":["tableState","_useModel","selection","__props","props","settings","toRefs","emit","__emit","gridState","sheetsState","filtersState","useTableState","sheetsSettings","computed","settingsCopy","filterableColumns","ref","filtersSettings","columns","column","gridApi","shallowRef","firstDataRenderedTracker","makeOnceTracker","gridOptions","event","state","selectedKeys","_a","nodeId","parseJson","params","PlOverlayLoading","PlOverlayNoRows","PlAgRowCount","api","autoSizeRowNumberColumn","setGridOption","key","value","options","updateGridOptions","target","prop","receiver","makePartialState","PlAgDataTableRowNumberColId","reloadKey","watch","selfState","isJsonEqual","oldOptions","cellRendererSelector","__expose","rowKey","focusRow","row","watchCached","columnDefs","isColDef","def","colId","axesSpec","acc","oldSettings","generation","sourceChanged","rowCount","stateGeneration","calculateGridOptions","getRawPlatformaInstance","_b","error","loadingText","notReadyText","noRowsText"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { PFrameDriver, PlDataTableSheet, AxisId, PlDataTableModel, PTableColumnSpec, PTableKey, PlTableColumnIdJson } from '@platforma-sdk/model';
|
|
1
|
+
import { PTableColumnSpecColumn, PFrameDriver, PlDataTableSheet, AxisId, PlDataTableModel, PTableColumnSpec, PTableKey, PlTableColumnIdJson } from '@platforma-sdk/model';
|
|
2
2
|
import { ColDef, GridApi, ManagedGridOptions } from 'ag-grid-enterprise';
|
|
3
3
|
import { PlAgDataTableV2Row } from '../types';
|
|
4
4
|
import { Ref } from 'vue';
|
|
5
|
-
export declare function isLabelColumn(column: PTableColumnSpec):
|
|
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
7
|
import { makeRowNumberColDef as V, PlAgDataTableRowNumberColId as Y } from "./row-number.js";
|
|
8
8
|
import { getColumnRenderingSpec as j } from "./value-rendering.js";
|
|
9
|
-
import { isJsonEqual as
|
|
10
|
-
import { getAxisId as
|
|
11
|
-
function
|
|
12
|
-
return
|
|
9
|
+
import { isJsonEqual as I } from "../../../lib/util/helpers/dist/index.js";
|
|
10
|
+
import { getAxisId as b, canonicalizeJson as N, pTableValue as E } from "../../../lib/model/common/dist/index.js";
|
|
11
|
+
function Q(s) {
|
|
12
|
+
return s.type === "column" && q(s.spec);
|
|
13
13
|
}
|
|
14
|
-
function
|
|
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 U(s, n, m, c) {
|
|
15
|
+
const l = [];
|
|
16
|
+
for (let u = 0; u < n[0].data.length; ++u) {
|
|
17
|
+
const f = m.map((p) => L(
|
|
18
|
+
E(n[c[p]], u)
|
|
19
|
+
)), o = { id: N(f), axesKey: f };
|
|
20
|
+
s.forEach((p, w) => {
|
|
21
|
+
o[p.toString()] = c[w] === -1 ? P : E(n[c[w]], u);
|
|
22
|
+
}), l.push(o);
|
|
28
23
|
}
|
|
29
|
-
return
|
|
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
|
-
if (!
|
|
66
|
-
const
|
|
67
|
-
|
|
70
|
+
if (!Q(o[t])) continue;
|
|
71
|
+
const i = b(o[t].spec.axesSpec[0]), a = r.findIndex((O) => I(o[O].id, i));
|
|
72
|
+
a !== -1 ? r[a] = t : console.warn(`multiple label columns match axisId: ${JSON.stringify(i)}`), r.splice(e, 1), h.splice(e, 1);
|
|
68
73
|
}
|
|
69
74
|
const $ = [
|
|
70
75
|
V(),
|
|
71
|
-
...h.map((e, t) =>
|
|
72
|
-
],
|
|
73
|
-
for (let e = 0; e <
|
|
74
|
-
|
|
75
|
-
|
|
76
|
+
...h.map((e, t) => W(e, o[e], o[r[t]], u, f))
|
|
77
|
+
], g = [...r], S = /* @__PURE__ */ new Map();
|
|
78
|
+
for (let e = 0; e < x; ++e) S.set(e, -1);
|
|
79
|
+
g.forEach((e, t) => {
|
|
80
|
+
S.has(e) && S.set(e, t);
|
|
76
81
|
});
|
|
77
|
-
for (const [e, t] of
|
|
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 = U(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() !== Y)
|
|
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 W(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 = j(n), o = {};
|
|
148
|
+
return d.fontFamily && (d.fontFamily === "monospace" ? (o.fontFamily = "Spline Sans Mono", o.fontWeight = 300) : o.fontFamily = d.fontFamily), {
|
|
149
|
+
colId: u,
|
|
145
150
|
mainMenuItems: A,
|
|
146
151
|
context: n,
|
|
147
|
-
field:
|
|
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,14 +199,14 @@ function Q(i, n, p, y, s) {
|
|
|
194
199
|
case "Bytes":
|
|
195
200
|
return "text";
|
|
196
201
|
default:
|
|
197
|
-
throw Error(`unsupported data type: ${
|
|
202
|
+
throw Error(`unsupported data type: ${f}`);
|
|
198
203
|
}
|
|
199
204
|
})()
|
|
200
205
|
};
|
|
201
206
|
}
|
|
202
207
|
export {
|
|
203
208
|
le as calculateGridOptions,
|
|
204
|
-
|
|
205
|
-
|
|
209
|
+
Q as isLabelColumn,
|
|
210
|
+
W as makeColDef
|
|
206
211
|
};
|
|
207
212
|
//# sourceMappingURL=table-source-v2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-source-v2.js","sources":["../../../../src/components/PlAgDataTable/sources/table-source-v2.ts"],"sourcesContent":["import {\n canonicalizeJson,\n getAxisId,\n isColumnOptional,\n mapPTableValueToAxisKey,\n pTableValue,\n type PColumnSpec,\n type PFrameDriver,\n type PlDataTableSheet,\n type PTableVector,\n type AxisId,\n type PlDataTableModel,\n type PTableColumnSpec,\n type PTableKey,\n type PlTableColumnId,\n type PlTableColumnIdJson,\n isLabelColumn as isLabelColumnSpec,\n} from '@platforma-sdk/model';\nimport type {\n CellStyle,\n ColDef,\n GridApi,\n ICellRendererParams,\n IServerSideDatasource,\n IServerSideGetRowsParams,\n ManagedGridOptions,\n} from 'ag-grid-enterprise';\nimport canonicalize from 'canonicalize';\nimport type { PlAgHeaderComponentParams, PlAgHeaderComponentType } from '../../PlAgColumnHeader';\nimport { PlAgColumnHeader } from '../../PlAgColumnHeader';\nimport { PlAgTextAndButtonCell } from '../../PlAgTextAndButtonCell';\nimport type { PlAgDataTableV2Row, PlTableRowId } from '../types';\nimport {\n PTableHidden,\n} from './common';\nimport { defaultMainMenuItems } from './menu-items';\nimport { makeRowNumberColDef, PlAgDataTableRowNumberColId } from './row-number';\nimport { getColumnRenderingSpec } from './value-rendering';\nimport type { Ref } from 'vue';\nimport { isJsonEqual } from '@milaboratories/helpers';\n\nexport function isLabelColumn(column: PTableColumnSpec) {\n return column.type === 'column' && isLabelColumnSpec(column.spec);\n}\n\n/** Convert columnar data from the driver to rows, used by ag-grid */\nfunction columns2rows(\n fields: number[],\n columns: PTableVector[],\n axes: number[],\n labeledAxes: number[],\n resultMapping: number[],\n): PlAgDataTableV2Row[] {\n const rowData: PlAgDataTableV2Row[] = [];\n for (let iRow = 0; iRow < columns[0].data.length; ++iRow) {\n const axesKey = axes.map((iAxis) => {\n return mapPTableValueToAxisKey(\n pTableValue(columns[resultMapping[iAxis]], iRow),\n );\n });\n const labeled = labeledAxes.map((iAxis) => {\n return mapPTableValueToAxisKey(\n pTableValue(columns[resultMapping[iAxis]], iRow),\n );\n });\n const id = canonicalizeJson<PlTableRowId>({\n axesKey,\n labeled,\n });\n const row: PlAgDataTableV2Row = { id, axesKey };\n fields.forEach((field, iCol) => {\n row[field.toString() as `${number}`] = resultMapping[iCol] === -1\n ? PTableHidden\n : pTableValue(columns[resultMapping[iCol]], iRow);\n });\n rowData.push(row);\n }\n return rowData;\n}\n\n/** Calculate GridOptions for selected p-table data source */\nexport async function calculateGridOptions({\n generation,\n pfDriver,\n model,\n sheets,\n track,\n hiddenColIds,\n cellButtonAxisParams,\n}: {\n generation: Ref<number>;\n pfDriver: PFrameDriver;\n model: PlDataTableModel;\n sheets: PlDataTableSheet[];\n track: (ctx: GridApi<PlAgDataTableV2Row>) => void;\n hiddenColIds?: PlTableColumnIdJson[];\n cellButtonAxisParams?: PlAgCellButtonAxisParams;\n}): Promise<Pick<ManagedGridOptions<PlAgDataTableV2Row>, 'columnDefs' | 'serverSideDatasource'>> {\n const pt = model.visibleTableHandle;\n const specs = await pfDriver.getSpec(model.fullTableHandle);\n type SpecId = string;\n const specId = (spec: PTableColumnSpec): SpecId =>\n spec.type === 'axis' ? canonicalize(getAxisId(spec.spec))! : spec.id;\n const dataSpecs = await pfDriver.getSpec(pt);\n const dataSpecsMap = new Map<SpecId, number>();\n dataSpecs.forEach((spec, i) => {\n dataSpecsMap.set(specId(spec), i);\n });\n const specsToDataSpecsMapping = new Map<number, number>();\n specs.forEach((spec, i) => {\n const dataSpecIdx = dataSpecsMap.get(specId(spec));\n if (dataSpecIdx === undefined && spec.type === 'axis')\n throw new Error(`axis ${JSON.stringify(spec.spec)} not present in join result`);\n specsToDataSpecsMapping.set(i, dataSpecIdx ?? -1);\n });\n\n let numberOfAxes = specs.findIndex((s) => s.type === 'column');\n if (numberOfAxes === -1) numberOfAxes = specs.length;\n\n // column indices in the specs array that we are going to process\n const indices = [...specs.keys()]\n .filter(\n (i) =>\n !sheets.some(\n (sheet) =>\n isJsonEqual(getAxisId(sheet.axis), specs[i].id)\n || (specs[i].type === 'column'\n && specs[i].spec.name === 'pl7.app/label'\n && specs[i].spec.axesSpec.length === 1\n && isJsonEqual(getAxisId(sheet.axis), getAxisId(specs[i].spec.axesSpec[0]))),\n ),\n )\n .sort((a, b) => {\n if (specs[a].type !== specs[b].type) return specs[a].type === 'axis' ? -1 : 1;\n\n const aPriority = specs[a].spec.annotations?.['pl7.app/table/orderPriority'];\n const bPriority = specs[b].spec.annotations?.['pl7.app/table/orderPriority'];\n\n if (aPriority === undefined) return bPriority === undefined ? 0 : 1;\n if (bPriority === undefined) return -1;\n return Number(bPriority) - Number(aPriority);\n });\n\n const fields = [...indices];\n\n // process label columns\n const firstColumnIdx = indices.findIndex((i) => specs[i].type === 'column');\n for (let i = indices.length - 1; i >= firstColumnIdx; --i) {\n const idx = indices[i];\n if (!isLabelColumn(specs[idx])) continue;\n\n // axis of labels\n const axisId = getAxisId((specs[idx].spec as PColumnSpec).axesSpec[0]);\n const axisIdx = indices.findIndex((idx) => isJsonEqual(specs[idx].id, axisId));\n if (axisIdx !== -1) {\n indices[axisIdx] = idx;\n } else {\n console.warn(`multiple label columns match axisId: ${JSON.stringify(axisId)}`);\n }\n\n // remove original axis\n indices.splice(i, 1);\n fields.splice(i, 1);\n }\n\n const columnDefs: ColDef<PlAgDataTableV2Row>[] = [\n makeRowNumberColDef(),\n ...fields.map((field, index) => makeColDef(field, specs[field], specs[indices[index]], hiddenColIds, cellButtonAxisParams)),\n ];\n\n // mixing in axis indices\n\n const allIndices = [...indices];\n\n // axisIdx (0..<axesCount) -> idx in allIndices array\n const axisToFieldIdx = new Map<number, number>();\n for (let i = 0; i < numberOfAxes; ++i) axisToFieldIdx.set(i, -1);\n\n allIndices.forEach((idx, i) => {\n if (axisToFieldIdx.has(idx)) axisToFieldIdx.set(idx, i);\n });\n // at this point we have axis indices that are not listed in indices set to -1 in axisToFieldIdx\n\n // adding those indices at the end of allIndices array, to make sure we have all the axes in our response\n for (const [key, value] of axisToFieldIdx) {\n if (value === -1) {\n axisToFieldIdx.set(key, allIndices.length /* at this index value will be inserted in the next line */);\n allIndices.push(key);\n }\n }\n\n // Construct the `axes` array for key generation in `columns2rows`.\n // The key components should be ordered according to the display order of axis columns from the `fields` array.\n const axes: number[] = fields\n .filter((field) => specs[field].type === 'axis')\n .map((field) => {\n const r = allIndices.indexOf(field);\n if (r === -1) {\n throw new Error(\n `Assertion failed: Original axis spec index ${field} (from fields) for key construction not found in allIndices.`,\n );\n }\n return r;\n });\n const labeledAxes: number[] = fields\n .reduce((acc, field, index) => {\n if (specs[field].type === 'axis') {\n acc.push(allIndices.indexOf(indices[index]));\n }\n return acc;\n }, [] as number[]);\n\n const requestIndices: number[] = [];\n const resultMapping: number[] = [];\n allIndices.forEach((idx) => {\n const dataSpecIdx = specsToDataSpecsMapping.get(idx)!;\n if (dataSpecIdx !== -1) {\n resultMapping.push(requestIndices.length);\n requestIndices.push(dataSpecIdx);\n } else {\n resultMapping.push(-1);\n }\n });\n\n const stateGeneration = generation.value;\n let rowCount = -1;\n let lastParams: IServerSideGetRowsParams | undefined = undefined;\n const serverSideDatasource: IServerSideDatasource<PlAgDataTableV2Row> = {\n getRows: async (params: IServerSideGetRowsParams) => {\n if (stateGeneration !== generation.value) return params.fail();\n try {\n if (rowCount === -1) {\n const ptShape = await pfDriver.getShape(pt);\n if (stateGeneration !== generation.value || params.api.isDestroyed()) return params.fail();\n rowCount = ptShape.rows;\n }\n\n if (rowCount == 0) {\n params.success({ rowData: [], rowCount });\n // Warning: AgGrid cannot show two overlays at once,\n // so first hide loading overlay, then show no rows overlay\n params.api.setGridOption('loading', false);\n params.api.showNoRowsOverlay();\n return;\n }\n\n // If sort has changed - show skeletons instead of data\n if (lastParams && !isJsonEqual(lastParams.request.sortModel, params.request.sortModel)) {\n return params.success({ rowData: [], rowCount });\n }\n lastParams = params;\n\n let length = 0;\n let rowData: PlAgDataTableV2Row[] = [];\n if (rowCount > 0 && params.request.startRow !== undefined && params.request.endRow !== undefined) {\n length = Math.min(rowCount, params.request.endRow) - params.request.startRow;\n if (length > 0) {\n const data = await pfDriver.getData(pt, requestIndices, {\n offset: params.request.startRow,\n length,\n });\n if (stateGeneration !== generation.value || params.api.isDestroyed()) return params.fail();\n rowData = columns2rows(fields, data, axes, labeledAxes, resultMapping);\n }\n }\n\n params.success({ rowData, rowCount });\n params.api.autoSizeColumns(\n params.api.getAllDisplayedColumns()\n .filter((column) => column.getColId() !== PlAgDataTableRowNumberColId),\n );\n params.api.setGridOption('loading', false);\n } catch (error: unknown) {\n if (stateGeneration !== generation.value || params.api.isDestroyed()) return params.fail();\n params.api.setGridOption('loading', true);\n params.fail();\n console.trace(error);\n } finally {\n if (!params.api.isDestroyed()) {\n track(params.api);\n }\n }\n },\n };\n\n return {\n columnDefs,\n serverSideDatasource,\n };\n}\n\nexport type PlAgCellButtonAxisParams = {\n showCellButtonForAxisId?: AxisId;\n cellButtonInvokeRowsOnDoubleClick?: boolean;\n trigger: (key?: PTableKey) => void;\n};\n\n/**\n * Calculates column definition for a given p-table column\n */\nexport function makeColDef(\n iCol: number,\n spec: PTableColumnSpec,\n labeledSpec: PTableColumnSpec,\n hiddenColIds: PlTableColumnIdJson[] | undefined,\n cellButtonAxisParams?: PlAgCellButtonAxisParams,\n): ColDef {\n const colId = canonicalizeJson<PlTableColumnId>({\n source: spec,\n labeled: labeledSpec,\n });\n const valueType = spec.type === 'axis' ? spec.spec.type : spec.spec.valueType;\n const columnRenderingSpec = getColumnRenderingSpec(spec);\n const cellStyle: CellStyle = {};\n if (columnRenderingSpec.fontFamily) {\n if (columnRenderingSpec.fontFamily === 'monospace') {\n cellStyle.fontFamily = 'Spline Sans Mono';\n cellStyle.fontWeight = 300;\n } else {\n cellStyle.fontFamily = columnRenderingSpec.fontFamily;\n }\n }\n return {\n colId,\n mainMenuItems: defaultMainMenuItems,\n context: spec,\n field: iCol.toString(),\n headerName: labeledSpec.spec.annotations?.['pl7.app/label']?.trim() ?? 'Unlabeled ' + spec.type + ' ' + iCol.toString(),\n lockPosition: spec.type === 'axis',\n hide: hiddenColIds?.includes(colId) ?? isColumnOptional(spec.spec),\n valueFormatter: columnRenderingSpec.valueFormatter,\n headerComponent: PlAgColumnHeader,\n cellRendererSelector: cellButtonAxisParams?.showCellButtonForAxisId\n ? (params: ICellRendererParams) => {\n if (spec.type !== 'axis') return;\n\n const axisId = (params.colDef?.context as PTableColumnSpec)?.id as AxisId;\n if (isJsonEqual(axisId, cellButtonAxisParams.showCellButtonForAxisId)) {\n return {\n component: PlAgTextAndButtonCell,\n params: {\n invokeRowsOnDoubleClick: cellButtonAxisParams.cellButtonInvokeRowsOnDoubleClick,\n onClick: (params: ICellRendererParams<PlAgDataTableV2Row>) => {\n cellButtonAxisParams.trigger(params.data?.axesKey);\n },\n },\n };\n }\n }\n : undefined,\n cellStyle,\n headerComponentParams: {\n type: ((): PlAgHeaderComponentType => {\n switch (valueType) {\n case 'Int':\n case 'Long':\n case 'Float':\n case 'Double':\n return 'Number';\n case 'String':\n case 'Bytes':\n return 'Text';\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n } satisfies PlAgHeaderComponentParams,\n cellDataType: (() => {\n switch (valueType) {\n case 'Int':\n case 'Long':\n case 'Float':\n case 'Double':\n return 'number';\n case 'String':\n case 'Bytes':\n return 'text';\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n };\n}\n"],"names":["isLabelColumn","column","isLabelColumnSpec","columns2rows","fields","columns","axes","labeledAxes","resultMapping","rowData","iRow","axesKey","iAxis","mapPTableValueToAxisKey","pTableValue","labeled","row","canonicalizeJson","field","iCol","PTableHidden","calculateGridOptions","generation","pfDriver","model","sheets","track","hiddenColIds","cellButtonAxisParams","pt","specs","specId","spec","canonicalize","getAxisId","dataSpecs","dataSpecsMap","i","specsToDataSpecsMapping","dataSpecIdx","numberOfAxes","s","indices","sheet","isJsonEqual","a","b","aPriority","_a","bPriority","_b","firstColumnIdx","idx","axisId","axisIdx","columnDefs","makeRowNumberColDef","index","makeColDef","allIndices","axisToFieldIdx","key","value","r","acc","requestIndices","stateGeneration","rowCount","lastParams","params","ptShape","length","data","PlAgDataTableRowNumberColId","error","labeledSpec","colId","valueType","columnRenderingSpec","getColumnRenderingSpec","cellStyle","defaultMainMenuItems","isColumnOptional","PlAgColumnHeader","PlAgTextAndButtonCell"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"table-source-v2.js","sources":["../../../../src/components/PlAgDataTable/sources/table-source-v2.ts"],"sourcesContent":["import type {\n PTableColumnSpecColumn } from '@platforma-sdk/model';\nimport {\n canonicalizeJson,\n getAxisId,\n isColumnOptional,\n mapPTableValueToAxisKey,\n pTableValue,\n type PColumnSpec,\n type PFrameDriver,\n type PlDataTableSheet,\n type PTableVector,\n type AxisId,\n type PlDataTableModel,\n type PTableColumnSpec,\n type PTableKey,\n type PlTableColumnId,\n type PlTableColumnIdJson,\n isLabelColumn as isLabelColumnSpec,\n isColumnHidden,\n} from '@platforma-sdk/model';\nimport type {\n CellStyle,\n ColDef,\n GridApi,\n ICellRendererParams,\n IServerSideDatasource,\n IServerSideGetRowsParams,\n ManagedGridOptions,\n} from 'ag-grid-enterprise';\nimport canonicalize from 'canonicalize';\nimport type { PlAgHeaderComponentParams, PlAgHeaderComponentType } from '../../PlAgColumnHeader';\nimport { PlAgColumnHeader } from '../../PlAgColumnHeader';\nimport { PlAgTextAndButtonCell } from '../../PlAgTextAndButtonCell';\nimport type { PlAgDataTableV2Row, PlTableRowId } from '../types';\nimport {\n PTableHidden,\n} from './common';\nimport { defaultMainMenuItems } from './menu-items';\nimport { makeRowNumberColDef, PlAgDataTableRowNumberColId } from './row-number';\nimport { getColumnRenderingSpec } from './value-rendering';\nimport type { Ref } from 'vue';\nimport { isJsonEqual } from '@milaboratories/helpers';\n\nexport function isLabelColumn(column: PTableColumnSpec): column is PTableColumnSpecColumn {\n return column.type === 'column' && isLabelColumnSpec(column.spec);\n}\n\n/** Convert columnar data from the driver to rows, used by ag-grid */\nfunction columns2rows(\n fields: number[],\n columns: PTableVector[],\n axes: number[],\n resultMapping: number[],\n): PlAgDataTableV2Row[] {\n const rowData: PlAgDataTableV2Row[] = [];\n for (let iRow = 0; iRow < columns[0].data.length; ++iRow) {\n const axesKey = axes.map((iAxis) => {\n return mapPTableValueToAxisKey(\n pTableValue(columns[resultMapping[iAxis]], iRow),\n );\n });\n const id = canonicalizeJson<PlTableRowId>(axesKey);\n const row: PlAgDataTableV2Row = { id, axesKey };\n fields.forEach((field, iCol) => {\n row[field.toString() as `${number}`] = resultMapping[iCol] === -1\n ? PTableHidden\n : pTableValue(columns[resultMapping[iCol]], iRow);\n });\n rowData.push(row);\n }\n return rowData;\n}\n\n/** Calculate GridOptions for selected p-table data source */\nexport async function calculateGridOptions({\n generation,\n pfDriver,\n model,\n sheets,\n track,\n hiddenColIds,\n cellButtonAxisParams,\n}: {\n generation: Ref<number>;\n pfDriver: PFrameDriver;\n model: PlDataTableModel;\n sheets: PlDataTableSheet[];\n track: (ctx: GridApi<PlAgDataTableV2Row>) => void;\n hiddenColIds?: PlTableColumnIdJson[];\n cellButtonAxisParams?: PlAgCellButtonAxisParams;\n}): Promise<Pick<ManagedGridOptions<PlAgDataTableV2Row>, 'columnDefs' | 'serverSideDatasource'>> {\n const pt = model.visibleTableHandle;\n const specs = await pfDriver.getSpec(model.fullTableHandle);\n type SpecId = string;\n const specId = (spec: PTableColumnSpec): SpecId =>\n spec.type === 'axis' ? canonicalize(getAxisId(spec.spec))! : spec.id;\n const dataSpecs = await pfDriver.getSpec(pt);\n const dataSpecsMap = new Map<SpecId, number>();\n dataSpecs.forEach((spec, i) => {\n dataSpecsMap.set(specId(spec), i);\n });\n const specsToDataSpecsMapping = new Map<number, number>();\n specs.forEach((spec, i) => {\n const dataSpecIdx = dataSpecsMap.get(specId(spec));\n if (dataSpecIdx === undefined && spec.type === 'axis')\n throw new Error(`axis ${JSON.stringify(spec.spec)} not present in join result`);\n specsToDataSpecsMapping.set(i, dataSpecIdx ?? -1);\n });\n\n let numberOfAxes = specs.findIndex((s) => s.type === 'column');\n if (numberOfAxes === -1) numberOfAxes = specs.length;\n\n // column indices in the specs array that we are going to process\n const indices = specs.keys()\n .filter(\n (i) => {\n const spec = specs[i];\n switch (spec.type) {\n case 'axis':\n {\n return !sheets.some(\n (sheet) => isJsonEqual(getAxisId(sheet.axis), spec.id),\n );\n }\n case 'column':\n {\n if (isLabelColumnSpec(spec.spec)) {\n return !sheets.some(\n (sheet) => isJsonEqual(getAxisId(sheet.axis), getAxisId(spec.spec.axesSpec[0])),\n );\n } else {\n return !isColumnHidden(spec.spec);\n }\n }\n }\n },\n )\n .toArray()\n .sort((a, b) => {\n if (specs[a].type !== specs[b].type) return specs[a].type === 'axis' ? -1 : 1;\n\n const aPriority = specs[a].spec.annotations?.['pl7.app/table/orderPriority'];\n const bPriority = specs[b].spec.annotations?.['pl7.app/table/orderPriority'];\n\n if (aPriority === undefined) return bPriority === undefined ? 0 : 1;\n if (bPriority === undefined) return -1;\n return Number(bPriority) - Number(aPriority);\n });\n\n const fields = [...indices];\n\n // process label columns\n const firstColumnIdx = indices.findIndex((i) => specs[i].type === 'column');\n for (let i = indices.length - 1; i >= firstColumnIdx; --i) {\n const idx = indices[i];\n if (!isLabelColumn(specs[idx])) continue;\n\n // axis of labels\n const axisId = getAxisId((specs[idx].spec as PColumnSpec).axesSpec[0]);\n const axisIdx = indices.findIndex((idx) => isJsonEqual(specs[idx].id, axisId));\n if (axisIdx !== -1) {\n indices[axisIdx] = idx;\n } else {\n console.warn(`multiple label columns match axisId: ${JSON.stringify(axisId)}`);\n }\n\n // remove original axis\n indices.splice(i, 1);\n fields.splice(i, 1);\n }\n\n const columnDefs: ColDef<PlAgDataTableV2Row>[] = [\n makeRowNumberColDef(),\n ...fields.map((field, index) => makeColDef(field, specs[field], specs[indices[index]], hiddenColIds, cellButtonAxisParams)),\n ];\n\n // mixing in axis indices\n\n const allIndices = [...indices];\n\n // axisIdx (0..<axesCount) -> idx in allIndices array\n const axisToFieldIdx = new Map<number, number>();\n for (let i = 0; i < numberOfAxes; ++i) axisToFieldIdx.set(i, -1);\n\n allIndices.forEach((idx, i) => {\n if (axisToFieldIdx.has(idx)) axisToFieldIdx.set(idx, i);\n });\n // at this point we have axis indices that are not listed in indices set to -1 in axisToFieldIdx\n\n // adding those indices at the end of allIndices array, to make sure we have all the axes in our response\n for (const [key, value] of axisToFieldIdx) {\n if (value === -1) {\n axisToFieldIdx.set(key, allIndices.length /* at this index value will be inserted in the next line */);\n allIndices.push(key);\n }\n }\n\n // Construct the `axes` array for key generation in `columns2rows`.\n // The key components should be ordered according to the display order of axis columns from the `fields` array.\n const axes: number[] = fields\n .filter((field) => specs[field].type === 'axis')\n .map((field) => {\n const r = allIndices.indexOf(field);\n if (r === -1) {\n throw new Error(\n `Assertion failed: Original axis spec index ${field} (from fields) for key construction not found in allIndices.`,\n );\n }\n return r;\n });\n\n const requestIndices: number[] = [];\n const resultMapping: number[] = [];\n allIndices.forEach((idx) => {\n const dataSpecIdx = specsToDataSpecsMapping.get(idx)!;\n if (dataSpecIdx !== -1) {\n resultMapping.push(requestIndices.length);\n requestIndices.push(dataSpecIdx);\n } else {\n resultMapping.push(-1);\n }\n });\n\n const stateGeneration = generation.value;\n let rowCount = -1;\n let lastParams: IServerSideGetRowsParams | undefined = undefined;\n const serverSideDatasource: IServerSideDatasource<PlAgDataTableV2Row> = {\n getRows: async (params: IServerSideGetRowsParams) => {\n if (stateGeneration !== generation.value) return params.fail();\n try {\n if (rowCount === -1) {\n const ptShape = await pfDriver.getShape(pt);\n if (stateGeneration !== generation.value || params.api.isDestroyed()) return params.fail();\n rowCount = ptShape.rows;\n }\n\n if (rowCount == 0) {\n params.success({ rowData: [], rowCount });\n // Warning: AgGrid cannot show two overlays at once,\n // so first hide loading overlay, then show no rows overlay\n params.api.setGridOption('loading', false);\n params.api.showNoRowsOverlay();\n return;\n }\n\n // If sort has changed - show skeletons instead of data\n if (lastParams && !isJsonEqual(lastParams.request.sortModel, params.request.sortModel)) {\n return params.success({ rowData: [], rowCount });\n }\n lastParams = params;\n\n let length = 0;\n let rowData: PlAgDataTableV2Row[] = [];\n if (rowCount > 0 && params.request.startRow !== undefined && params.request.endRow !== undefined) {\n length = Math.min(rowCount, params.request.endRow) - params.request.startRow;\n if (length > 0) {\n const data = await pfDriver.getData(pt, requestIndices, {\n offset: params.request.startRow,\n length,\n });\n if (stateGeneration !== generation.value || params.api.isDestroyed()) return params.fail();\n rowData = columns2rows(fields, data, axes, resultMapping);\n }\n }\n\n params.success({ rowData, rowCount });\n params.api.autoSizeColumns(\n params.api.getAllDisplayedColumns()\n .filter((column) => column.getColId() !== PlAgDataTableRowNumberColId),\n );\n params.api.setGridOption('loading', false);\n } catch (error: unknown) {\n if (stateGeneration !== generation.value || params.api.isDestroyed()) return params.fail();\n params.api.setGridOption('loading', true);\n params.fail();\n console.trace(error);\n } finally {\n if (!params.api.isDestroyed()) {\n track(params.api);\n }\n }\n },\n };\n\n return {\n columnDefs,\n serverSideDatasource,\n };\n}\n\nexport type PlAgCellButtonAxisParams = {\n showCellButtonForAxisId?: AxisId;\n cellButtonInvokeRowsOnDoubleClick?: boolean;\n trigger: (key?: PTableKey) => void;\n};\n\n/**\n * Calculates column definition for a given p-table column\n */\nexport function makeColDef(\n iCol: number,\n spec: PTableColumnSpec,\n labeledSpec: PTableColumnSpec,\n hiddenColIds: PlTableColumnIdJson[] | undefined,\n cellButtonAxisParams?: PlAgCellButtonAxisParams,\n): ColDef {\n const colId = canonicalizeJson<PlTableColumnId>({\n source: spec,\n labeled: labeledSpec,\n });\n const valueType = spec.type === 'axis' ? spec.spec.type : spec.spec.valueType;\n const columnRenderingSpec = getColumnRenderingSpec(spec);\n const cellStyle: CellStyle = {};\n if (columnRenderingSpec.fontFamily) {\n if (columnRenderingSpec.fontFamily === 'monospace') {\n cellStyle.fontFamily = 'Spline Sans Mono';\n cellStyle.fontWeight = 300;\n } else {\n cellStyle.fontFamily = columnRenderingSpec.fontFamily;\n }\n }\n return {\n colId,\n mainMenuItems: defaultMainMenuItems,\n context: spec,\n field: iCol.toString(),\n headerName: labeledSpec.spec.annotations?.['pl7.app/label']?.trim() ?? 'Unlabeled ' + spec.type + ' ' + iCol.toString(),\n lockPosition: spec.type === 'axis',\n hide: hiddenColIds?.includes(colId) ?? isColumnOptional(spec.spec),\n valueFormatter: columnRenderingSpec.valueFormatter,\n headerComponent: PlAgColumnHeader,\n cellRendererSelector: cellButtonAxisParams?.showCellButtonForAxisId\n ? (params: ICellRendererParams) => {\n if (spec.type !== 'axis') return;\n\n const axisId = (params.colDef?.context as PTableColumnSpec)?.id as AxisId;\n if (isJsonEqual(axisId, cellButtonAxisParams.showCellButtonForAxisId)) {\n return {\n component: PlAgTextAndButtonCell,\n params: {\n invokeRowsOnDoubleClick: cellButtonAxisParams.cellButtonInvokeRowsOnDoubleClick,\n onClick: (params: ICellRendererParams<PlAgDataTableV2Row>) => {\n cellButtonAxisParams.trigger(params.data?.axesKey);\n },\n },\n };\n }\n }\n : undefined,\n cellStyle,\n headerComponentParams: {\n type: ((): PlAgHeaderComponentType => {\n switch (valueType) {\n case 'Int':\n case 'Long':\n case 'Float':\n case 'Double':\n return 'Number';\n case 'String':\n case 'Bytes':\n return 'Text';\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n } satisfies PlAgHeaderComponentParams,\n cellDataType: (() => {\n switch (valueType) {\n case 'Int':\n case 'Long':\n case 'Float':\n case 'Double':\n return 'number';\n case 'String':\n case 'Bytes':\n return 'text';\n default:\n throw Error(`unsupported data type: ${valueType}`);\n }\n })(),\n };\n}\n"],"names":["isLabelColumn","column","isLabelColumnSpec","columns2rows","fields","columns","axes","resultMapping","rowData","iRow","axesKey","iAxis","mapPTableValueToAxisKey","pTableValue","row","canonicalizeJson","field","iCol","PTableHidden","calculateGridOptions","generation","pfDriver","model","sheets","track","hiddenColIds","cellButtonAxisParams","pt","specs","specId","spec","canonicalize","getAxisId","dataSpecs","dataSpecsMap","i","specsToDataSpecsMapping","dataSpecIdx","numberOfAxes","s","indices","sheet","isJsonEqual","isColumnHidden","a","b","aPriority","_a","bPriority","_b","firstColumnIdx","idx","axisId","axisIdx","columnDefs","makeRowNumberColDef","index","makeColDef","allIndices","axisToFieldIdx","key","value","r","requestIndices","stateGeneration","rowCount","lastParams","params","ptShape","length","data","PlAgDataTableRowNumberColId","error","labeledSpec","colId","valueType","columnRenderingSpec","getColumnRenderingSpec","cellStyle","defaultMainMenuItems","isColumnOptional","PlAgColumnHeader","PlAgTextAndButtonCell"],"mappings":";;;;;;;;;;AA4CO,SAASA,EAAcC,GAA4D;AACxF,SAAOA,EAAO,SAAS,YAAYC,EAAkBD,EAAO,IAAI;AAClE;AAGA,SAASE,EACPC,GACAC,GACAC,GACAC,GACsB;AACtB,QAAMC,IAAgC,CAAC;AAC9B,WAAAC,IAAO,GAAGA,IAAOJ,EAAQ,CAAC,EAAE,KAAK,QAAQ,EAAEI,GAAM;AACxD,UAAMC,IAAUJ,EAAK,IAAI,CAACK,MACjBC;AAAAA,MACLC,EAAYR,EAAQE,EAAcI,CAAK,CAAC,GAAGF,CAAI;AAAA,IACjD,CACD,GAEKK,IAA0B,EAAE,IADvBC,EAA+BL,CAAO,GACX,SAAAA,EAAQ;AACvC,IAAAN,EAAA,QAAQ,CAACY,GAAOC,MAAS;AAC9B,MAAAH,EAAIE,EAAM,SAAA,CAAyB,IAAIT,EAAcU,CAAI,MAAM,KAC3DC,IACAL,EAAYR,EAAQE,EAAcU,CAAI,CAAC,GAAGR,CAAI;AAAA,IAAA,CACnD,GACDD,EAAQ,KAAKM,CAAG;AAAA,EAAA;AAEX,SAAAN;AACT;AAGA,eAAsBW,GAAqB;AAAA,EACzC,YAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,OAAAC;AAAA,EACA,cAAAC;AAAA,EACA,sBAAAC;AACF,GAQiG;AAC/F,QAAMC,IAAKL,EAAM,oBACXM,IAAQ,MAAMP,EAAS,QAAQC,EAAM,eAAe,GAEpDO,IAAS,CAACC,MACdA,EAAK,SAAS,SAASC,EAAaC,EAAUF,EAAK,IAAI,CAAC,IAAKA,EAAK,IAC9DG,IAAY,MAAMZ,EAAS,QAAQM,CAAE,GACrCO,wBAAmB,IAAoB;AACnC,EAAAD,EAAA,QAAQ,CAACH,GAAMK,MAAM;AAC7B,IAAAD,EAAa,IAAIL,EAAOC,CAAI,GAAGK,CAAC;AAAA,EAAA,CACjC;AACK,QAAAC,wBAA8B,IAAoB;AAClD,EAAAR,EAAA,QAAQ,CAACE,GAAMK,MAAM;AACzB,UAAME,IAAcH,EAAa,IAAIL,EAAOC,CAAI,CAAC;AAC7C,QAAAO,MAAgB,UAAaP,EAAK,SAAS;AACvC,YAAA,IAAI,MAAM,QAAQ,KAAK,UAAUA,EAAK,IAAI,CAAC,6BAA6B;AACxD,IAAAM,EAAA,IAAID,GAAGE,KAAe,EAAE;AAAA,EAAA,CACjD;AAED,MAAIC,IAAeV,EAAM,UAAU,CAACW,MAAMA,EAAE,SAAS,QAAQ;AACzD,EAAAD,MAAiB,OAAIA,IAAeV,EAAM;AAGxC,QAAAY,IAAUZ,EAAM,KAAA,EACnB;AAAA,IACC,CAACO,MAAM;AACC,YAAAL,IAAOF,EAAMO,CAAC;AACpB,cAAQL,EAAK,MAAM;AAAA,QACjB,KAAK;AAEH,iBAAO,CAACP,EAAO;AAAA,YACb,CAACkB,MAAUC,EAAYV,EAAUS,EAAM,IAAI,GAAGX,EAAK,EAAE;AAAA,UACvD;AAAA,QAEF,KAAK;AAEC,iBAAA5B,EAAkB4B,EAAK,IAAI,IACtB,CAACP,EAAO;AAAA,YACb,CAACkB,MAAUC,EAAYV,EAAUS,EAAM,IAAI,GAAGT,EAAUF,EAAK,KAAK,SAAS,CAAC,CAAC,CAAC;AAAA,UAChF,IAEO,CAACa,EAAeb,EAAK,IAAI;AAAA,MAEpC;AAAA,IACF;AAAA,IAGH,QAAQ,EACR,KAAK,CAACc,GAAGC,MAAM;;AACd,QAAIjB,EAAMgB,CAAC,EAAE,SAAShB,EAAMiB,CAAC,EAAE,KAAM,QAAOjB,EAAMgB,CAAC,EAAE,SAAS,SAAS,KAAK;AAE5E,UAAME,KAAYC,IAAAnB,EAAMgB,CAAC,EAAE,KAAK,gBAAd,gBAAAG,EAA4B,gCACxCC,KAAYC,IAAArB,EAAMiB,CAAC,EAAE,KAAK,gBAAd,gBAAAI,EAA4B;AAE9C,WAAIH,MAAc,SAAkBE,MAAc,SAAY,IAAI,IAC9DA,MAAc,SAAkB,KAC7B,OAAOA,CAAS,IAAI,OAAOF,CAAS;AAAA,EAAA,CAC5C,GAEG1C,IAAS,CAAC,GAAGoC,CAAO,GAGpBU,IAAiBV,EAAQ,UAAU,CAACL,MAAMP,EAAMO,CAAC,EAAE,SAAS,QAAQ;AAC1E,WAASA,IAAIK,EAAQ,SAAS,GAAGL,KAAKe,GAAgB,EAAEf,GAAG;AACnD,UAAAgB,IAAMX,EAAQL,CAAC;AACrB,QAAI,CAACnC,EAAc4B,EAAMuB,CAAG,CAAC,EAAG;AAG1B,UAAAC,IAASpB,EAAWJ,EAAMuB,CAAG,EAAE,KAAqB,SAAS,CAAC,CAAC,GAC/DE,IAAUb,EAAQ,UAAU,CAACW,MAAQT,EAAYd,EAAMuB,CAAG,EAAE,IAAIC,CAAM,CAAC;AAC7E,IAAIC,MAAY,KACdb,EAAQa,CAAO,IAAIF,IAEnB,QAAQ,KAAK,wCAAwC,KAAK,UAAUC,CAAM,CAAC,EAAE,GAIvEZ,EAAA,OAAOL,GAAG,CAAC,GACZ/B,EAAA,OAAO+B,GAAG,CAAC;AAAA,EAAA;AAGpB,QAAMmB,IAA2C;AAAA,IAC/CC,EAAoB;AAAA,IACpB,GAAGnD,EAAO,IAAI,CAACY,GAAOwC,MAAUC,EAAWzC,GAAOY,EAAMZ,CAAK,GAAGY,EAAMY,EAAQgB,CAAK,CAAC,GAAG/B,GAAcC,CAAoB,CAAC;AAAA,EAC5H,GAIMgC,IAAa,CAAC,GAAGlB,CAAO,GAGxBmB,wBAAqB,IAAoB;AACtC,WAAAxB,IAAI,GAAGA,IAAIG,GAAc,EAAEH,EAAG,CAAAwB,EAAe,IAAIxB,GAAG,EAAE;AAEpD,EAAAuB,EAAA,QAAQ,CAACP,GAAKhB,MAAM;AAC7B,IAAIwB,EAAe,IAAIR,CAAG,KAAkBQ,EAAA,IAAIR,GAAKhB,CAAC;AAAA,EAAA,CACvD;AAID,aAAW,CAACyB,GAAKC,CAAK,KAAKF;AACzB,IAAIE,MAAU,OACGF,EAAA;AAAA,MAAIC;AAAA,MAAKF,EAAW;AAAA;AAAA,IAAkE,GACrGA,EAAW,KAAKE,CAAG;AAMvB,QAAMtD,IAAiBF,EACpB,OAAO,CAACY,MAAUY,EAAMZ,CAAK,EAAE,SAAS,MAAM,EAC9C,IAAI,CAACA,MAAU;AACR,UAAA8C,IAAIJ,EAAW,QAAQ1C,CAAK;AAClC,QAAI8C,MAAM;AACR,YAAM,IAAI;AAAA,QACR,8CAA8C9C,CAAK;AAAA,MACrD;AAEK,WAAA8C;AAAA,EAAA,CACR,GAEGC,IAA2B,CAAC,GAC5BxD,IAA0B,CAAC;AACtB,EAAAmD,EAAA,QAAQ,CAACP,MAAQ;AACpB,UAAAd,IAAcD,EAAwB,IAAIe,CAAG;AACnD,IAAId,MAAgB,MACJ9B,EAAA,KAAKwD,EAAe,MAAM,GACxCA,EAAe,KAAK1B,CAAW,KAE/B9B,EAAc,KAAK,EAAE;AAAA,EACvB,CACD;AAED,QAAMyD,IAAkB5C,EAAW;AACnC,MAAI6C,IAAW,IACXC;AA2DG,SAAA;AAAA,IACL,YAAAZ;AAAA,IACA,sBA5DsE;AAAA,MACtE,SAAS,OAAOa,MAAqC;AACnD,YAAIH,MAAoB5C,EAAW,MAAO,QAAO+C,EAAO,KAAK;AACzD,YAAA;AACF,cAAIF,MAAa,IAAI;AACnB,kBAAMG,IAAU,MAAM/C,EAAS,SAASM,CAAE;AACtC,gBAAAqC,MAAoB5C,EAAW,SAAS+C,EAAO,IAAI,YAAY,EAAU,QAAAA,EAAO,KAAK;AACzF,YAAAF,IAAWG,EAAQ;AAAA,UAAA;AAGrB,cAAIH,KAAY,GAAG;AACjB,YAAAE,EAAO,QAAQ,EAAE,SAAS,CAAC,GAAG,UAAAF,GAAU,GAGjCE,EAAA,IAAI,cAAc,WAAW,EAAK,GACzCA,EAAO,IAAI,kBAAkB;AAC7B;AAAA,UAAA;AAIE,cAAAD,KAAc,CAACxB,EAAYwB,EAAW,QAAQ,WAAWC,EAAO,QAAQ,SAAS;AACnF,mBAAOA,EAAO,QAAQ,EAAE,SAAS,CAAC,GAAG,UAAAF,GAAU;AAEpC,UAAAC,IAAAC;AAEb,cAAIE,IAAS,GACT7D,IAAgC,CAAC;AACjC,cAAAyD,IAAW,KAAKE,EAAO,QAAQ,aAAa,UAAaA,EAAO,QAAQ,WAAW,WAC5EE,IAAA,KAAK,IAAIJ,GAAUE,EAAO,QAAQ,MAAM,IAAIA,EAAO,QAAQ,UAChEE,IAAS,IAAG;AACd,kBAAMC,IAAO,MAAMjD,EAAS,QAAQM,GAAIoC,GAAgB;AAAA,cACtD,QAAQI,EAAO,QAAQ;AAAA,cACvB,QAAAE;AAAA,YAAA,CACD;AACG,gBAAAL,MAAoB5C,EAAW,SAAS+C,EAAO,IAAI,YAAY,EAAU,QAAAA,EAAO,KAAK;AACzF,YAAA3D,IAAUL,EAAaC,GAAQkE,GAAMhE,GAAMC,CAAa;AAAA,UAAA;AAI5D,UAAA4D,EAAO,QAAQ,EAAE,SAAA3D,GAAS,UAAAyD,EAAA,CAAU,GACpCE,EAAO,IAAI;AAAA,YACTA,EAAO,IAAI,yBACR,OAAO,CAAClE,MAAWA,EAAO,SAAS,MAAMsE,CAA2B;AAAA,UACzE,GACOJ,EAAA,IAAI,cAAc,WAAW,EAAK;AAAA,iBAClCK,GAAgB;AACnB,cAAAR,MAAoB5C,EAAW,SAAS+C,EAAO,IAAI,YAAY,EAAU,QAAAA,EAAO,KAAK;AAClF,UAAAA,EAAA,IAAI,cAAc,WAAW,EAAI,GACxCA,EAAO,KAAK,GACZ,QAAQ,MAAMK,CAAK;AAAA,QAAA,UACnB;AACA,UAAKL,EAAO,IAAI,iBACd3C,EAAM2C,EAAO,GAAG;AAAA,QAClB;AAAA,MACF;AAAA,IAEJ;AAAA,EAKA;AACF;AAWO,SAASV,EACdxC,GACAa,GACA2C,GACAhD,GACAC,GACQ;;AACR,QAAMgD,IAAQ3D,EAAkC;AAAA,IAC9C,QAAQe;AAAA,IACR,SAAS2C;AAAA,EAAA,CACV,GACKE,IAAY7C,EAAK,SAAS,SAASA,EAAK,KAAK,OAAOA,EAAK,KAAK,WAC9D8C,IAAsBC,EAAuB/C,CAAI,GACjDgD,IAAuB,CAAC;AAC9B,SAAIF,EAAoB,eAClBA,EAAoB,eAAe,eACrCE,EAAU,aAAa,oBACvBA,EAAU,aAAa,OAEvBA,EAAU,aAAaF,EAAoB,aAGxC;AAAA,IACL,OAAAF;AAAA,IACA,eAAeK;AAAA,IACf,SAASjD;AAAA,IACT,OAAOb,EAAK,SAAS;AAAA,IACrB,cAAYgC,KAAAF,IAAA0B,EAAY,KAAK,gBAAjB,gBAAA1B,EAA+B,qBAA/B,gBAAAE,EAAiD,WAAU,eAAenB,EAAK,OAAO,MAAMb,EAAK,SAAS;AAAA,IACtH,cAAca,EAAK,SAAS;AAAA,IAC5B,OAAML,KAAA,gBAAAA,EAAc,SAASiD,OAAUM,EAAiBlD,EAAK,IAAI;AAAA,IACjE,gBAAgB8C,EAAoB;AAAA,IACpC,iBAAiBK;AAAAA,IACjB,sBAAsBvD,KAAA,QAAAA,EAAsB,0BACxC,CAACyC,MAAgC;;AAC3B,UAAArC,EAAK,SAAS,OAAQ;AAEpB,YAAAsB,KAAUH,KAAAF,IAAAoB,EAAO,WAAP,gBAAApB,EAAe,YAAf,gBAAAE,EAA6C;AAC7D,UAAIP,EAAYU,GAAQ1B,EAAqB,uBAAuB;AAC3D,eAAA;AAAA,UACL,WAAWwD;AAAAA,UACX,QAAQ;AAAA,YACN,yBAAyBxD,EAAqB;AAAA,YAC9C,SAAS,CAACyC,MAAoD;;AACvC,cAAAzC,EAAA,SAAQyC,IAAAA,EAAO,SAAPA,gBAAAA,EAAa,OAAO;AAAA,YAAA;AAAA,UACnD;AAAA,QAEJ;AAAA,IACF,IAEF;AAAA,IACJ,WAAAW;AAAA,IACA,uBAAuB;AAAA,MACrB,OAAO,MAA+B;AACpC,gBAAQH,GAAW;AAAA,UACjB,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AACI,mBAAA;AAAA,UACT,KAAK;AAAA,UACL,KAAK;AACI,mBAAA;AAAA,UACT;AACQ,kBAAA,MAAM,0BAA0BA,CAAS,EAAE;AAAA,QAAA;AAAA,MAEpD,GAAA;AAAA,IACL;AAAA,IACA,eAAe,MAAM;AACnB,cAAQA,GAAW;AAAA,QACjB,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACI,iBAAA;AAAA,QACT,KAAK;AAAA,QACL,KAAK;AACI,iBAAA;AAAA,QACT;AACQ,gBAAA,MAAM,0BAA0BA,CAAS,EAAE;AAAA,MAAA;AAAA,IAEpD,GAAA;AAAA,EACL;AACF;"}
|