diff --git a/superset-frontend/src/components/ListView/Filters/Select.tsx b/superset-frontend/src/components/ListView/Filters/Select.tsx index ecda25a81ff6..b6c1e2764238 100644 --- a/superset-frontend/src/components/ListView/Filters/Select.tsx +++ b/superset-frontend/src/components/ListView/Filters/Select.tsx @@ -32,7 +32,7 @@ import { FilterContainer, BaseFilter, FilterHandler } from './Base'; interface SelectFilterProps extends BaseFilter { fetchSelects?: Filter['fetchSelects']; name?: string; - onSelect: (selected: SelectOption | undefined) => void; + onSelect: (selected: SelectOption | undefined, isClear?: boolean) => void; paginate?: boolean; selects: Filter['selects']; } @@ -58,7 +58,7 @@ function SelectFilter( }; const onClear = () => { - onSelect(undefined); + onSelect(undefined, true); setSelectedOption(undefined); }; diff --git a/superset-frontend/src/components/ListView/Filters/index.tsx b/superset-frontend/src/components/ListView/Filters/index.tsx index 348ed3850dd2..6f839cd7208a 100644 --- a/superset-frontend/src/components/ListView/Filters/index.tsx +++ b/superset-frontend/src/components/ListView/Filters/index.tsx @@ -62,7 +62,18 @@ function UIFilters( return ( <> {filters.map( - ({ Header, fetchSelects, id, input, paginate, selects }, index) => { + ( + { + Header, + fetchSelects, + id, + input, + paginate, + selects, + onFilterUpdate, + }, + index, + ) => { const initialValue = internalFilters[index] && internalFilters[index].value; if (input === 'select') { @@ -74,9 +85,19 @@ function UIFilters( initialValue={initialValue} key={id} name={id} - onSelect={(option: SelectOption | undefined) => - updateFilterValue(index, option) - } + onSelect={( + option: SelectOption | undefined, + isClear?: boolean, + ) => { + if (onFilterUpdate) { + // Filter change triggers both onChange AND onClear, only want to track onChange + if (!isClear) { + onFilterUpdate(option); + } + } + + updateFilterValue(index, option); + }} paginate={paginate} selects={selects} /> @@ -90,7 +111,13 @@ function UIFilters( initialValue={initialValue} key={id} name={id} - onSubmit={(value: string) => updateFilterValue(index, value)} + onSubmit={(value: string) => { + if (onFilterUpdate) { + onFilterUpdate(value); + } + + updateFilterValue(index, value); + }} /> ); } diff --git a/superset-frontend/src/components/ListView/types.ts b/superset-frontend/src/components/ListView/types.ts index a0f495385e49..936900885b2a 100644 --- a/superset-frontend/src/components/ListView/types.ts +++ b/superset-frontend/src/components/ListView/types.ts @@ -52,6 +52,7 @@ export interface Filter { unfilteredLabel?: string; selects?: SelectOption[]; onFilterOpen?: () => void; + onFilterUpdate?: (value?: any) => void; fetchSelects?: ( filterValue: string, page: number,