From 419f8b562ec0e4c099ef7995336a08d9bb334c48 Mon Sep 17 00:00:00 2001 From: Alexey Date: Wed, 4 Jun 2025 22:23:19 +0800 Subject: [PATCH] dbeaver/pro#5910 fix: sorting only for result sets (#3506) * dbeaver/pro#5910 fix: sorting only for result sets * dbeaver/pro#5910 fix: require result set constraints only when needed --- .../src/DataGrid/DataGridTable.tsx | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/webapp/packages/plugin-data-spreadsheet-new/src/DataGrid/DataGridTable.tsx b/webapp/packages/plugin-data-spreadsheet-new/src/DataGrid/DataGridTable.tsx index fcef4babda..d49b833b82 100644 --- a/webapp/packages/plugin-data-spreadsheet-new/src/DataGrid/DataGridTable.tsx +++ b/webapp/packages/plugin-data-spreadsheet-new/src/DataGrid/DataGridTable.tsx @@ -80,7 +80,6 @@ export const DataGridTable = observer(function DataGridT const selectionAction = (model.source as unknown as ResultSetDataSource).getAction(resultIndex, ResultSetSelectAction); const viewAction = (model.source as unknown as ResultSetDataSource).getAction(resultIndex, ResultSetViewAction); - const constraintsAction = (model.source as unknown as ResultSetDataSource).tryGetAction(resultIndex, DatabaseDataConstraintAction); const tableData = useTableData(model as unknown as IDatabaseDataModel, resultIndex, dataGridDivRef); const gridSelectionContext = useGridSelectionContext(tableData, selectionAction); @@ -339,6 +338,10 @@ export const DataGridTable = observer(function DataGridT ); function getColumnSortable(colIdx: number) { + if (!isResultSetDataModel(model)) { + return false; + } + const constraintsAction = (model.source as unknown as ResultSetDataSource).tryGetAction(resultIndex, DatabaseDataConstraintAction); return ( Boolean(tableData.getColumn(colIdx) && constraintsAction?.supported && isResultSetDataModel(model) && !model.isDisabled(resultIndex)) && colIdx !== 0 @@ -348,12 +351,16 @@ export const DataGridTable = observer(function DataGridT const columnSortable = useCreateGridReactiveValue( getColumnSortable, (onValueChange, colIdx) => reaction(() => getColumnSortable(colIdx), onValueChange), - [tableData, constraintsAction, model], + [tableData, model], ); function getColumnSortingState(colIdx: number) { + if (!isResultSetDataModel(model)) { + return null; + } + const constraintsAction = (model.source as unknown as ResultSetDataSource).tryGetAction(resultIndex, DatabaseDataConstraintAction); const column = tableData.getColumn(colIdx)?.key; - if (!column || !constraintsAction) { + if (!column || !constraintsAction?.supported) { return null; } const resultColumn = tableData.getColumnInfo(column); @@ -363,18 +370,19 @@ export const DataGridTable = observer(function DataGridT const columnSortingState = useCreateGridReactiveValue( getColumnSortingState, (onValueChange, colIdx) => reaction(() => getColumnSortingState(colIdx), onValueChange), - [tableData, constraintsAction, model], + [tableData, model], ); function handleSort(colIdx: number, order: 'asc' | 'desc' | null, isMultiple: boolean) { const column = tableData.getColumn(colIdx)?.key; - if (!column || !constraintsAction) { + if (!column) { return; } const resultColumn = tableData.getColumnInfo(column); if (!resultColumn) { return; } + const constraintsAction = (model.source as unknown as ResultSetDataSource).tryGetAction(resultIndex, DatabaseDataConstraintAction); const currentOrder = constraintsAction!.getOrder(resultColumn.position); const nextOrder = getNextOrder(currentOrder); model.request(() => {