fix(native-filters): fix removing native filter (#13688)

* fix: fix removeing native filter

* fix: fix native-cross filters

* fix: fix native-cross filters

* fix: fix native-cross filters

* fix: fix function declaration
This commit is contained in:
simcha90 2021-03-18 21:11:50 +02:00 committed by GitHub
parent e6c5bf4d54
commit 7e6beb5ebf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 35 additions and 13 deletions

View File

@ -96,6 +96,7 @@ export const setFilterConfiguration = (
});
dispatch({
type: SET_DATA_MASK_FOR_FILTER_CONFIG_COMPLETE,
unitName: DataMaskType.NativeFilters,
filterConfig,
});
} catch (err) {

View File

@ -240,6 +240,30 @@ const FilterBar: React.FC<FiltersBarProps> = ({
}
}, [filterValues.length]);
useEffect(() => {
// Remove deleted filters from local state
Object.keys(dataMaskSelected).forEach(selectedId => {
if (!filters[selectedId]) {
setDataMaskSelected(draft => {
delete draft[selectedId];
});
}
});
Object.keys(dataMaskApplied).forEach(appliedId => {
if (!filters[appliedId]) {
setLastAppliedFilterData(draft => {
delete draft[appliedId];
});
}
});
}, [
dataMaskApplied,
dataMaskSelected,
filters,
setDataMaskSelected,
setLastAppliedFilterData,
]);
const cascadeChildren = useMemo(
() => mapParentFiltersToChildren(filterValues),
[filterValues],

View File

@ -33,6 +33,7 @@ export const SET_DATA_MASK_FOR_FILTER_CONFIG_COMPLETE =
export interface SetDataMaskForFilterConfigComplete {
type: typeof SET_DATA_MASK_FOR_FILTER_CONFIG_COMPLETE;
filterConfig: FilterConfiguration;
unitName: DataMaskType;
}
export const SET_DATA_MASK_FOR_FILTER_CONFIG_FAIL =
'SET_DATA_MASK_FOR_FILTER_CONFIG_FAIL';

View File

@ -49,14 +49,9 @@ const setUnitDataMask = (
}
};
const emptyDataMask = {
[DataMaskType.NativeFilters]: {},
[DataMaskType.CrossFilters]: {},
[DataMaskType.OwnFilters]: {},
};
const dataMaskReducer = produce(
(draft: DataMaskStateWithId, action: AnyDataMaskAction) => {
const oldData = { ...draft };
switch (action.type) {
case UPDATE_DATA_MASK:
Object.values(DataMaskType).forEach(unitName =>
@ -65,20 +60,21 @@ const dataMaskReducer = produce(
break;
case SET_DATA_MASK_FOR_FILTER_CONFIG_COMPLETE:
Object.values(DataMaskType).forEach(unitName => {
draft[unitName] = emptyDataMask[unitName];
});
draft[action.unitName] = {};
(action.filterConfig ?? []).forEach(filter => {
draft[DataMaskType.NativeFilters][filter.id] =
draft[DataMaskType.NativeFilters][filter.id] ??
getInitialMask(filter.id);
draft[action.unitName][filter.id] =
oldData[action.unitName][filter.id] ?? getInitialMask(filter.id);
});
break;
default:
}
},
emptyDataMask,
{
[DataMaskType.NativeFilters]: {},
[DataMaskType.CrossFilters]: {},
[DataMaskType.OwnFilters]: {},
},
);
export default dataMaskReducer;