You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by kg...@apache.org on 2023/03/06 12:43:01 UTC
[superset] branch master updated: fix(dashboard): Allow selecting text in cells in Table and PivotTable without triggering cross filters (#23283)
This is an automated email from the ASF dual-hosted git repository.
kgabryje pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git
The following commit(s) were added to refs/heads/master by this push:
new d16512b775 fix(dashboard): Allow selecting text in cells in Table and PivotTable without triggering cross filters (#23283)
d16512b775 is described below
commit d16512b7758e36a1263fc63bd7d9d1f93060dc93
Author: Kamil Gabryjelski <ka...@gmail.com>
AuthorDate: Mon Mar 6 13:42:52 2023 +0100
fix(dashboard): Allow selecting text in cells in Table and PivotTable without triggering cross filters (#23283)
---
.../src/utils/{index.ts => getSelectedText.ts} | 15 +----------
.../packages/superset-ui-core/src/utils/index.ts | 1 +
.../utils/getSelectedText.test.ts} | 30 ++++++++++++----------
.../src/PivotTableChart.tsx | 6 +++++
.../plugins/plugin-chart-table/src/TableChart.tsx | 8 +++++-
5 files changed, 31 insertions(+), 29 deletions(-)
diff --git a/superset-frontend/packages/superset-ui-core/src/utils/index.ts b/superset-frontend/packages/superset-ui-core/src/utils/getSelectedText.ts
similarity index 52%
copy from superset-frontend/packages/superset-ui-core/src/utils/index.ts
copy to superset-frontend/packages/superset-ui-core/src/utils/getSelectedText.ts
index 19c5ed5861..d3671d875c 100644
--- a/superset-frontend/packages/superset-ui-core/src/utils/index.ts
+++ b/superset-frontend/packages/superset-ui-core/src/utils/getSelectedText.ts
@@ -16,17 +16,4 @@
* specific language governing permissions and limitations
* under the License.
*/
-export { default as convertKeysToCamelCase } from './convertKeysToCamelCase';
-export { default as ensureIsArray } from './ensureIsArray';
-export { default as ensureIsInt } from './ensureIsInt';
-export { default as isDefined } from './isDefined';
-export { default as isRequired } from './isRequired';
-export { default as isEqualArray } from './isEqualArray';
-export { default as makeSingleton } from './makeSingleton';
-export { default as promiseTimeout } from './promiseTimeout';
-export { default as logging } from './logging';
-export { default as removeDuplicates } from './removeDuplicates';
-export { lruCache } from './lruCache';
-export * from './featureFlags';
-export * from './random';
-export * from './typedMemo';
+export const getSelectedText = () => window.getSelection()?.toString();
diff --git a/superset-frontend/packages/superset-ui-core/src/utils/index.ts b/superset-frontend/packages/superset-ui-core/src/utils/index.ts
index 19c5ed5861..4efc3dedb6 100644
--- a/superset-frontend/packages/superset-ui-core/src/utils/index.ts
+++ b/superset-frontend/packages/superset-ui-core/src/utils/index.ts
@@ -27,6 +27,7 @@ export { default as promiseTimeout } from './promiseTimeout';
export { default as logging } from './logging';
export { default as removeDuplicates } from './removeDuplicates';
export { lruCache } from './lruCache';
+export { getSelectedText } from './getSelectedText';
export * from './featureFlags';
export * from './random';
export * from './typedMemo';
diff --git a/superset-frontend/packages/superset-ui-core/src/utils/index.ts b/superset-frontend/packages/superset-ui-core/test/utils/getSelectedText.test.ts
similarity index 52%
copy from superset-frontend/packages/superset-ui-core/src/utils/index.ts
copy to superset-frontend/packages/superset-ui-core/test/utils/getSelectedText.test.ts
index 19c5ed5861..75682e9e74 100644
--- a/superset-frontend/packages/superset-ui-core/src/utils/index.ts
+++ b/superset-frontend/packages/superset-ui-core/test/utils/getSelectedText.test.ts
@@ -16,17 +16,19 @@
* specific language governing permissions and limitations
* under the License.
*/
-export { default as convertKeysToCamelCase } from './convertKeysToCamelCase';
-export { default as ensureIsArray } from './ensureIsArray';
-export { default as ensureIsInt } from './ensureIsInt';
-export { default as isDefined } from './isDefined';
-export { default as isRequired } from './isRequired';
-export { default as isEqualArray } from './isEqualArray';
-export { default as makeSingleton } from './makeSingleton';
-export { default as promiseTimeout } from './promiseTimeout';
-export { default as logging } from './logging';
-export { default as removeDuplicates } from './removeDuplicates';
-export { lruCache } from './lruCache';
-export * from './featureFlags';
-export * from './random';
-export * from './typedMemo';
+import { getSelectedText } from '@superset-ui/core';
+
+test('Returns null if Selection object is null', () => {
+ jest.spyOn(window, 'getSelection').mockImplementationOnce(() => null);
+ expect(getSelectedText()).toEqual(undefined);
+ jest.restoreAllMocks();
+});
+
+test('Returns selection text if Selection object is not null', () => {
+ jest
+ .spyOn(window, 'getSelection')
+ // @ts-ignore
+ .mockImplementationOnce(() => ({ toString: () => 'test string' }));
+ expect(getSelectedText()).toEqual('test string');
+ jest.restoreAllMocks();
+});
diff --git a/superset-frontend/plugins/plugin-chart-pivot-table/src/PivotTableChart.tsx b/superset-frontend/plugins/plugin-chart-pivot-table/src/PivotTableChart.tsx
index 84a64adfc7..53e98fd31d 100644
--- a/superset-frontend/plugins/plugin-chart-pivot-table/src/PivotTableChart.tsx
+++ b/superset-frontend/plugins/plugin-chart-pivot-table/src/PivotTableChart.tsx
@@ -30,6 +30,7 @@ import {
isAdhocColumn,
BinaryQueryObjectFilterClause,
t,
+ getSelectedText,
} from '@superset-ui/core';
import { PivotTable, sortAs, aggregatorTemplates } from './react-pivottable';
import {
@@ -356,6 +357,11 @@ export default function PivotTableChart(props: PivotTableProps) {
return;
}
+ // allow selecting text in a cell
+ if (getSelectedText()) {
+ return;
+ }
+
const isActiveFilterValue = (key: string, val: DataRecordValue) =>
!!selectedFilters && selectedFilters[key]?.includes(val);
diff --git a/superset-frontend/plugins/plugin-chart-table/src/TableChart.tsx b/superset-frontend/plugins/plugin-chart-table/src/TableChart.tsx
index 9843a4ae8b..ac02a10137 100644
--- a/superset-frontend/plugins/plugin-chart-table/src/TableChart.tsx
+++ b/superset-frontend/plugins/plugin-chart-table/src/TableChart.tsx
@@ -41,6 +41,7 @@ import {
DTTM_ALIAS,
ensureIsArray,
GenericDataType,
+ getSelectedText,
getTimeFormatterForGranularity,
BinaryQueryObjectFilterClause,
styled,
@@ -493,7 +494,12 @@ export default function TableChart<D extends DataRecord = DataRecord>(
title: typeof value === 'number' ? String(value) : undefined,
onClick:
emitCrossFilters && !valueRange && !isMetric
- ? () => toggleFilter(key, value)
+ ? () => {
+ // allow selecting text in a cell
+ if (!getSelectedText()) {
+ toggleFilter(key, value);
+ }
+ }
: undefined,
onContextMenu: (e: MouseEvent) => {
if (handleContextMenu) {