diff --git a/superset-frontend/src/components/Chart/DrillBy/DrillByModal.tsx b/superset-frontend/src/components/Chart/DrillBy/DrillByModal.tsx index afccef4b6..1204a77bd 100644 --- a/superset-frontend/src/components/Chart/DrillBy/DrillByModal.tsx +++ b/superset-frontend/src/components/Chart/DrillBy/DrillByModal.tsx @@ -147,10 +147,7 @@ export default function DrillByModal({ const { column: currentColumn, - filters, groupbyFieldName = drillByConfig.groupbyFieldName, - adhocFilterFieldName = drillByConfig.adhocFilterFieldName || - DEFAULT_ADHOC_FILTER_FIELD_NAME, } = drillByConfigs[drillByConfigs.length - 1] || {}; const initialGroupbyColumns = useMemo( @@ -176,7 +173,7 @@ export default function DrillByModal({ [...initialGroupbyColumns, column].filter(isDefined), ); const [breadcrumbsData, setBreadcrumbsData] = useState([ - { groupby: initialGroupbyColumns, filters }, + { groupby: initialGroupbyColumns, filters: drillByConfig.filters }, { groupby: column || [] }, ]); @@ -220,6 +217,20 @@ export default function DrillByModal({ [getNewGroupby], ); + const getFiltersFromConfigsByFieldName = useCallback( + () => + drillByConfigs.reduce((acc, config) => { + const adhocFilterFieldName = + config.adhocFilterFieldName || DEFAULT_ADHOC_FILTER_FIELD_NAME; + acc[adhocFilterFieldName] = [ + ...(acc[adhocFilterFieldName] || []), + ...config.filters.map(filter => simpleFilterToAdhoc(filter)), + ]; + return acc; + }, {}), + [drillByConfigs], + ); + const onBreadcrumbClick = useCallback( (breadcrumb: DrillByBreadcrumb, index: number) => { setDrillByConfigs(prevConfigs => prevConfigs.slice(0, index)); @@ -263,16 +274,16 @@ export default function DrillByModal({ updatedFormData[groupbyFieldName] = getNewGroupby(currentColumn); } - if (adhocFilterFieldName && Array.isArray(filters)) { - const adhocFilters = filters.map(filter => simpleFilterToAdhoc(filter)); + const adhocFilters = getFiltersFromConfigsByFieldName(); + Object.keys(adhocFilters).forEach(adhocFilterFieldName => { updatedFormData = { ...updatedFormData, [adhocFilterFieldName]: [ ...ensureIsArray(formData[adhocFilterFieldName]), - ...adhocFilters, + ...adhocFilters[adhocFilterFieldName], ], }; - } + }); updatedFormData.slice_id = 0; delete updatedFormData.slice_name; @@ -281,11 +292,10 @@ export default function DrillByModal({ }, [ currentFormData, currentColumn, - filters, - adhocFilterFieldName, - formData, groupbyFieldName, + getFiltersFromConfigsByFieldName, getNewGroupby, + formData, ]); useEffect(() => {