You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by be...@apache.org on 2025/05/01 21:20:13 UTC
(superset) branch improve-function-detection created (now 503933756e)
This is an automated email from the ASF dual-hosted git repository.
beto pushed a change to branch improve-function-detection
in repository https://gitbox.apache.org/repos/asf/superset.git
at 503933756e fix: show only filterable columns on filter dropdown
This branch includes the following new commits:
new 503933756e fix: show only filterable columns on filter dropdown
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
(superset) 01/01: fix: show only filterable columns on filter dropdown
Posted by be...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
beto pushed a commit to branch improve-function-detection
in repository https://gitbox.apache.org/repos/asf/superset.git
commit 503933756efc2063a54b7b8dd31049efabd3de8e
Author: Beto Dealmeida <ro...@dealmeida.net>
AuthorDate: Thu May 1 17:20:02 2025 -0400
fix: show only filterable columns on filter dropdown
---
.../FiltersConfigForm/ColumnSelect.tsx | 1 +
.../FiltersConfigForm/getControlItemsMap.test.tsx | 70 +++++++++++++++++++++-
.../FiltersConfigForm/getControlItemsMap.tsx | 5 +-
3 files changed, 73 insertions(+), 3 deletions(-)
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/ColumnSelect.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/ColumnSelect.tsx
index 72d4197acc..888e230350 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/ColumnSelect.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/ColumnSelect.tsx
@@ -99,6 +99,7 @@ export function ColumnSelect({
'columns.column_name',
'columns.is_dttm',
'columns.type_generic',
+ 'columns.filterable',
],
})}`,
})
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/getControlItemsMap.test.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/getControlItemsMap.test.tsx
index 6d6966f709..c4efde92ad 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/getControlItemsMap.test.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/getControlItemsMap.test.tsx
@@ -20,11 +20,38 @@ import { Filter, NativeFilterType } from '@superset-ui/core';
import { render, screen, userEvent } from 'spec/helpers/testing-library';
import { FormInstance } from 'src/components';
import getControlItemsMap, { ControlItemsProps } from './getControlItemsMap';
-import { getControlItems, setNativeFilterFieldValues } from './utils';
+import {
+ getControlItems,
+ setNativeFilterFieldValues,
+ doesColumnMatchFilterType,
+} from './utils';
jest.mock('./utils', () => ({
getControlItems: jest.fn(),
setNativeFilterFieldValues: jest.fn(),
+ doesColumnMatchFilterType: jest.fn(),
+}));
+
+// Mock ColumnSelect to test filterValues logic
+jest.mock('./ColumnSelect', () => ({
+ ColumnSelect: ({
+ filterValues,
+ }: {
+ filterValues: (column: any) => boolean;
+ }) => {
+ const columns = [
+ { name: 'col1', filterable: true },
+ { name: 'col2', filterable: false },
+ { name: 'col3', filterable: true },
+ ];
+ return (
+ <>
+ {columns.filter(filterValues).map(column => (
+ <div key={column.name}>{column.name}</div>
+ ))}
+ </>
+ );
+ },
}));
const formMock: FormInstance = {
@@ -62,7 +89,7 @@ const filterMock: Filter = {
description: '',
};
-const createProps: () => ControlItemsProps = () => ({
+const createProps = (): ControlItemsProps => ({
expanded: false,
datasetId: 1,
disabled: false,
@@ -179,3 +206,42 @@ test('Clicking on checkbox when resetConfig:false', () => {
expect(props.forceUpdate).toHaveBeenCalled();
expect(setNativeFilterFieldValues).not.toHaveBeenCalled();
});
+
+describe('ColumnSelect filterValues behavior', () => {
+ beforeEach(() => {
+ (getControlItems as jest.Mock).mockReturnValue([
+ {
+ name: 'groupby',
+ config: { label: 'Column', multiple: false, required: false },
+ },
+ ]);
+ });
+
+ test('only renders filterable columns when doesColumnMatchFilterType returns true', () => {
+ (doesColumnMatchFilterType as jest.Mock).mockReturnValue(true);
+ const props = {
+ ...createProps(),
+ formFilter: { filterType: 'filterType' },
+ };
+ const element = getControlItemsMap(props).mainControlItems.groupby
+ .element as React.ReactElement;
+ render(element);
+ expect(screen.getByText('col1')).toBeInTheDocument();
+ expect(screen.getByText('col3')).toBeInTheDocument();
+ expect(screen.queryByText('col2')).not.toBeInTheDocument();
+ });
+
+ test('renders no columns when doesColumnMatchFilterType returns false', () => {
+ (doesColumnMatchFilterType as jest.Mock).mockReturnValue(false);
+ const props = {
+ ...createProps(),
+ formFilter: { filterType: 'filterType' },
+ };
+ const element = getControlItemsMap(props).mainControlItems.groupby
+ .element as React.ReactElement;
+ render(element);
+ expect(screen.queryByText('col1')).not.toBeInTheDocument();
+ expect(screen.queryByText('col3')).not.toBeInTheDocument();
+ expect(screen.queryByText('col2')).not.toBeInTheDocument();
+ });
+});
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/getControlItemsMap.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/getControlItemsMap.tsx
index ed92809988..4f297a3f23 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/getControlItemsMap.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/getControlItemsMap.tsx
@@ -131,7 +131,10 @@ export default function getControlItemsMap({
filterId={filterId}
datasetId={datasetId}
filterValues={column =>
- doesColumnMatchFilterType(formFilter?.filterType || '', column)
+ doesColumnMatchFilterType(
+ formFilter?.filterType || '',
+ column,
+ ) && column.filterable
}
onChange={() => {
// We need reset default value when column changed