fix: Preserve filters from previous drillings in drill by (#23831)

This commit is contained in:
Kamil Gabryjelski 2023-04-26 20:07:09 +02:00 committed by GitHub
parent 109f51bbbd
commit 5f035499ac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 21 additions and 11 deletions

View File

@ -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<DrillByBreadcrumb[]>([
{ 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(() => {