From 1e3364e306d855404fbbb828f5a76cff91118ae1 Mon Sep 17 00:00:00 2001 From: Naumov Alexey Date: Wed, 16 Feb 2022 15:47:27 +0300 Subject: [PATCH] feat(plugin-data-spreadsheet-new): CB-1623 enable sorting in readonly mode --- .../TableColumnHeader/OrderButton.tsx | 23 ++++++++----------- .../TableColumnHeader/TableColumnHeader.tsx | 5 ++-- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/webapp/packages/plugin-data-spreadsheet-new/src/DataGrid/TableColumnHeader/OrderButton.tsx b/webapp/packages/plugin-data-spreadsheet-new/src/DataGrid/TableColumnHeader/OrderButton.tsx index 8382008896..4755ce26ba 100644 --- a/webapp/packages/plugin-data-spreadsheet-new/src/DataGrid/TableColumnHeader/OrderButton.tsx +++ b/webapp/packages/plugin-data-spreadsheet-new/src/DataGrid/TableColumnHeader/OrderButton.tsx @@ -7,7 +7,7 @@ */ import { observer } from 'mobx-react-lite'; -import styled, { css, use } from 'reshadow'; +import styled, { css } from 'reshadow'; import { IconOrImage } from '@cloudbeaver/core-blocks'; import { useTranslate } from '@cloudbeaver/core-localization'; @@ -24,6 +24,9 @@ const styles = css` width: 20px; box-sizing: border-box; cursor: pointer; + background: transparent; + outline: none; + color: inherit; } order-button > IconOrImage { width: 12px; @@ -31,10 +34,6 @@ const styles = css` order-button:hover > IconOrImage { width: 13px; } - order-button[|disabled] { - opacity: 0.7; - cursor: default; - } `; interface Props { @@ -53,7 +52,7 @@ export const OrderButton = observer(function OrderButton({ const translate = useTranslate(); const constraints = model.source.getAction(resultIndex, ResultSetConstraintAction); const currentOrder = constraints.getOrder(attributePosition); - const loading = model.isLoading(); + const disabled = model.isDisabled(resultIndex) || model.isLoading(); let icon = 'order-arrow-unknown'; if (currentOrder === EOrder.asc) { @@ -62,11 +61,7 @@ export const OrderButton = observer(function OrderButton({ icon = 'order-arrow-down'; } - const handleSort = async (e: React.MouseEvent) => { - if (loading) { - return; - } - + const handleSort = async (e: React.MouseEvent) => { const nextOrder = getNextOrder(currentOrder); await model.requestDataAction(async () => { constraints.setOrder(attributePosition, nextOrder, e.ctrlKey || e.metaKey); @@ -74,18 +69,18 @@ export const OrderButton = observer(function OrderButton({ }); }; - function preventFocus(event: React.MouseEvent) { + function preventFocus(event: React.MouseEvent) { event.preventDefault(); } return styled(styles)( >(function Tab const resultIndex = dataGridContext.resultIndex; const model = dataGridContext.model; const dataReadonly = getComputed(() => tableDataContext.isReadOnly() || model.isReadonly()); + const sortingDisabled = getComputed(() => model.source.results.length > 1 || !model.source.executionContext?.context); let resultColumn: SqlResultColumn | undefined; let icon = calculatedColumn.icon; @@ -112,7 +113,7 @@ export const TableColumnHeader = observer>(function Tab {columnName} - {!(dataReadonly || columnReadOnly) && resultColumn && ( + {!(sortingDisabled || columnReadOnly) && resultColumn && (