You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by el...@apache.org on 2021/11/22 19:41:07 UTC
[superset] 09/12: fix: Unnecessary queries when changing filter values (#16994)
This is an automated email from the ASF dual-hosted git repository.
elizabeth pushed a commit to branch 1.4
in repository https://gitbox.apache.org/repos/asf/superset.git
commit 7db1caa2adaccbc1b8be07a96d45ac5495888e43
Author: Michael S. Molina <70...@users.noreply.github.com>
AuthorDate: Thu Oct 7 13:07:33 2021 -0300
fix: Unnecessary queries when changing filter values (#16994)
(cherry picked from commit c471a851705a9ca85dabf6090eef3ca368210790)
---
.../FilterBar/FilterControls/FilterControls.tsx | 3 ++-
.../nativeFilters/FilterBar/FilterControls/FilterValue.tsx | 13 ++++++++++---
2 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterControls.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterControls.tsx
index 81cb01f..299c9fb 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterControls.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterControls.tsx
@@ -63,7 +63,8 @@ const FilterControls: FC<FilterControlsProps> = ({
dataMask: dataMaskSelected[filter.id],
}));
return buildCascadeFiltersTree(filtersWithValue);
- }, [filterValues, dataMaskSelected]);
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [JSON.stringify(filterValues), dataMaskSelected]);
const cascadeFilterIds = new Set(cascadeFilters.map(item => item.id));
const [filtersInScope, filtersOutOfScope] = useSelectFiltersInScope(
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterValue.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterValue.tsx
index 0ce0ad0..dd0c56c 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterValue.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FilterBar/FilterControls/FilterValue.tsx
@@ -29,7 +29,7 @@ import {
getChartMetadataRegistry,
} from '@superset-ui/core';
import { useDispatch, useSelector } from 'react-redux';
-import { areObjectsEqual } from 'src/reduxUtils';
+import { isEqual, isEqualWith } from 'lodash';
import { getChartDataRequest } from 'src/chart/chartAction';
import Loading from 'src/components/Loading';
import BasicErrorAlert from 'src/components/ErrorMessage/BasicErrorAlert';
@@ -105,10 +105,17 @@ const FilterValue: React.FC<FilterProps> = ({
time_range,
});
const filterOwnState = filter.dataMask?.ownState || {};
+ // TODO: We should try to improve our useEffect hooks to depend more on
+ // granular information instead of big objects that require deep comparison.
+ const customizer = (
+ objValue: Partial<QueryFormData>,
+ othValue: Partial<QueryFormData>,
+ key: string,
+ ) => (key === 'url_params' ? true : undefined);
if (
!isRefreshing &&
- (!areObjectsEqual(formData, newFormData) ||
- !areObjectsEqual(ownState, filterOwnState) ||
+ (!isEqualWith(formData, newFormData, customizer) ||
+ !isEqual(ownState, filterOwnState) ||
isDashboardRefreshing)
) {
setFormData(newFormData);