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 7bc9123fe5 fix: Filter dependencies are not being applied in default
values (#19698)
7bc9123fe5 is described below
commit 7bc9123fe569c47ebb9eb049c96ff833478f7ded
Author: Michael S. Molina <[email protected]>
AuthorDate: Thu Apr 14 12:58:34 2022 -0300
fix: Filter dependencies are not being applied in default values (#19698)
---
.../FiltersConfigForm/FiltersConfigForm.tsx | 40 +++++++++++++++++++---
1 file changed, 36 insertions(+), 4 deletions(-)
diff --git
a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FiltersConfigForm.tsx
b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FiltersConfigForm.tsx
index 50fb6e8ffe..ff04e0ebe5 100644
---
a/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FiltersConfigForm.tsx
+++
b/superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/FiltersConfigForm/FiltersConfigForm.tsx
@@ -73,7 +73,10 @@ import { waitForAsyncData } from 'src/middleware/asyncEvent';
import { cacheWrapper } from 'src/utils/cacheWrapper';
import { ClientErrorObject } from 'src/utils/getClientErrorObject';
import { SingleValueType } from 'src/filters/components/Range/SingleValueType';
-import { getFormData } from 'src/dashboard/components/nativeFilters/utils';
+import {
+ getFormData,
+ mergeExtraFormData,
+} from 'src/dashboard/components/nativeFilters/utils';
import {
ALLOW_DEPENDENCIES as TYPES_SUPPORT_DEPENDENCIES,
getFiltersConfigModalTestId,
@@ -346,10 +349,11 @@ const FiltersConfigForm = (
const forceUpdate = useForceUpdate();
const [datasetDetails, setDatasetDetails] = useState<Record<string, any>>();
const defaultFormFilter = useMemo(() => ({}), []);
- const formValues = form.getFieldValue('filters')?.[filterId];
+ const filters = form.getFieldValue('filters');
+ const formValues = filters?.[filterId];
const formFilter = formValues || undoFormValues || defaultFormFilter;
- const dependencies =
+ const dependencies: string[] =
formFilter?.dependencies || filterToEdit?.cascadeParentIds;
const nativeFilterItems = getChartMetadataRegistry().items;
@@ -439,6 +443,21 @@ const FiltersConfigForm = (
forceUpdate();
};
+ // Calculates the dependencies default values to be used
+ // to extract the available values to the filter
+ let dependenciesDefaultValues = {};
+ if (dependencies && dependencies.length > 0 && filters) {
+ dependencies.forEach(dependency => {
+ const extraFormData =
filters[dependency]?.defaultDataMask?.extraFormData;
+ dependenciesDefaultValues = mergeExtraFormData(
+ dependenciesDefaultValues,
+ extraFormData,
+ );
+ });
+ }
+
+ const dependenciesText = JSON.stringify(dependenciesDefaultValues);
+
const refreshHandler = useCallback(
(force = false) => {
if (!hasDataset || !formFilter?.dataset?.value) {
@@ -450,6 +469,9 @@ const FiltersConfigForm = (
groupby: formFilter?.column,
...formFilter,
});
+
+ formData.extra_form_data = dependenciesDefaultValues;
+
setNativeFilterFieldValuesWrapper({
defaultValueQueriesData: null,
isDataDirty: false,
@@ -499,14 +521,19 @@ const FiltersConfigForm = (
});
});
},
- [filterId, forceUpdate, form, formFilter, hasDataset],
+ [filterId, forceUpdate, form, formFilter, hasDataset, dependenciesText],
);
+ // TODO: refreshHandler changes itself because of the dependencies. Needs
refactor.
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ useEffect(() => refreshHandler(), [dependenciesText]);
+
const newFormData = getFormData({
datasetId,
groupby: hasColumn ? formFilter?.column : undefined,
...formFilter,
});
+ newFormData.extra_form_data = dependenciesDefaultValues;
const [hasDefaultValue, isRequired, defaultValueTooltip, setHasDefaultValue]
=
useDefaultValue(formFilter, filterToEdit);
@@ -1084,6 +1111,11 @@ const FiltersConfigForm = (
tooltip={defaultValueTooltip}
onChange={value => {
setHasDefaultValue(value);
+ if (!value) {
+ setNativeFilterFieldValues(form, filterId, {
+ defaultDataMask: null,
+ });
+ }
formChanged();
}}
>