This is an automated email from the ASF dual-hosted git repository.
michaelsmolina pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git
The following commit(s) were added to refs/heads/master by this push:
new 87290dd fix: Native filters cyclic dependency (#16921)
87290dd is described below
commit 87290ddcc8e9a50604b16d312be31fefcaf62f77
Author: Michael S. Molina <[email protected]>
AuthorDate: Thu Sep 30 14:55:54 2021 -0300
fix: Native filters cyclic dependency (#16921)
---
.../nativeFilters/FiltersConfigModal/utils.ts | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git
a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/utils.ts
b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/utils.ts
index fd699e9..a6698d2 100644
---
a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/utils.ts
+++
b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/utils.ts
@@ -42,6 +42,7 @@ export const validateForm = async (
errors: [error],
};
form.setFields([fieldError]);
+ setCurrentFilterId(filterId);
};
try {
@@ -57,25 +58,34 @@ export const validateForm = async (
}
}
- const validateCycles = (filterId: string, trace: string[] = []) => {
+ const validateCycles = (
+ filterId: string,
+ trace: string[] = [],
+ ): boolean => {
if (trace.includes(filterId)) {
addValidationError(
filterId,
'parentFilter',
'Cannot create cyclic hierarchy',
);
+ return false;
}
const parentId = formValues.filters?.[filterId]
? formValues.filters[filterId]?.parentFilter?.value
: filterConfigMap[filterId]?.cascadeParentIds?.[0];
if (parentId) {
- validateCycles(parentId, [...trace, filterId]);
+ return validateCycles(parentId, [...trace, filterId]);
}
+ return true;
};
- filterIds
+ const invalid = filterIds
.filter(id => !removedFilters[id])
- .forEach(filterId => validateCycles(filterId));
+ .some(filterId => !validateCycles(filterId));
+
+ if (invalid) {
+ return null;
+ }
return formValues;
} catch (error) {