Skip to content

Commit d04b915

Browse files
committed
fix(SelectFilterPlugin): clear all clears all filters
1 parent 77a5969 commit d04b915

2 files changed

Lines changed: 27 additions & 12 deletions

File tree

superset-frontend/src/dashboard/components/nativeFilters/FilterBar/index.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,9 @@ const FilterBar: FC<FiltersBarProps> = ({
289289

290290
const handleClearAll = useCallback(() => {
291291
const newClearAllTriggers = { ...clearAllTriggers };
292-
filtersInScope.filter(isNativeFilter).forEach(filter => {
292+
// Clear all native filters, not just those in scope
293+
// This ensures dependent filters are cleared even if parent was cleared first
294+
nativeFilterValues.forEach(filter => {
293295
const { id } = filter;
294296
if (dataMaskSelected[id]) {
295297
setDataMaskSelected(draft => {
@@ -302,7 +304,12 @@ const FilterBar: FC<FiltersBarProps> = ({
302304
}
303305
});
304306
setClearAllTriggers(newClearAllTriggers);
305-
}, [dataMaskSelected, filtersInScope, setDataMaskSelected, clearAllTriggers]);
307+
}, [
308+
dataMaskSelected,
309+
nativeFilterValues,
310+
setDataMaskSelected,
311+
clearAllTriggers,
312+
]);
306313

307314
const handleClearAllComplete = useCallback((filterId: string) => {
308315
setClearAllTriggers(prev => {

superset-frontend/src/filters/components/Select/SelectFilterPlugin.tsx

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -349,17 +349,21 @@ export default function PluginFilterSelect(props: PluginFilterSelectProps) {
349349
}
350350

351351
// Handle the default to first Value case
352-
if (defaultToFirstItem) {
353-
// Set to first item if defaultToFirstItem is true
354-
const firstItem: SelectValue = data[0]
355-
? (groupby.map(col => data[0][col]) as string[])
356-
: null;
357-
if (firstItem?.[0] !== undefined) {
358-
updateDataMask(firstItem);
352+
// Skip default values when clearAllTrigger is active to prevent
353+
// defaults from being applied during Clear All operation
354+
if (!clearAllTrigger) {
355+
if (defaultToFirstItem) {
356+
// Set to first item if defaultToFirstItem is true
357+
const firstItem: SelectValue = data[0]
358+
? (groupby.map(col => data[0][col]) as string[])
359+
: null;
360+
if (firstItem?.[0] !== undefined) {
361+
updateDataMask(firstItem);
362+
}
363+
} else if (formData?.defaultValue) {
364+
// Handle defalut value case
365+
updateDataMask(formData.defaultValue);
359366
}
360-
} else if (formData?.defaultValue) {
361-
// Handle defalut value case
362-
updateDataMask(formData.defaultValue);
363367
}
364368
}, [
365369
isDisabled,
@@ -370,6 +374,7 @@ export default function PluginFilterSelect(props: PluginFilterSelectProps) {
370374
groupby,
371375
col,
372376
inverseSelection,
377+
clearAllTrigger,
373378
]);
374379

375380
useEffect(() => {
@@ -407,7 +412,9 @@ export default function PluginFilterSelect(props: PluginFilterSelectProps) {
407412
? (groupby.map(col => data[0][col]) as string[])
408413
: null;
409414

415+
// Skip default value update when clearAllTrigger is active
410416
if (
417+
!clearAllTrigger &&
411418
defaultToFirstItem &&
412419
Object.keys(formData?.extraFormData || {}).length &&
413420
filterState.value !== undefined &&
@@ -425,6 +432,7 @@ export default function PluginFilterSelect(props: PluginFilterSelectProps) {
425432
data,
426433
JSON.stringify(filterState.value),
427434
isChangedByUser.current,
435+
clearAllTrigger,
428436
]);
429437

430438
useEffect(() => {

0 commit comments

Comments
 (0)