From 34f535f5c751d1d8bd9bc1aa989814e3596d6a83 Mon Sep 17 00:00:00 2001 From: Viacheslav Pavlov Date: Wed, 11 Aug 2021 10:45:48 +0300 Subject: [PATCH] FIX: Applying filters results in reload loop --- src/dataset/DatasetListPage.tsx | 7 ++++--- src/subset/SubsetListPage.tsx | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/dataset/DatasetListPage.tsx b/src/dataset/DatasetListPage.tsx index de4768f..e3e2c49 100644 --- a/src/dataset/DatasetListPage.tsx +++ b/src/dataset/DatasetListPage.tsx @@ -35,13 +35,15 @@ const DatasetListPage = ({location}: IDatasetListPageProps) => { // state const [datasets, setDatasets] = React.useState>(); const [filter, setFilter] = React.useState(appConfig.filter); + // memo + const {current, filterCode} = React.useMemo(() => parseLocationSearch(location), [location]); const loadData = React.useCallback((filter: string | DatasetFilter, pageR: IPageRequest): Promise> => { return DatasetService .datasetList(filter, pageR) .then((data) => { - setDatasets(data); setFilter(data.filter); + setDatasets(data); return data; }) .catch((e) => { @@ -56,11 +58,10 @@ const DatasetListPage = ({location}: IDatasetListPageProps) => { // effect React.useEffect(() => { - const {current, filterCode} = parseLocationSearch(location); if (!datasets || datasets?.filterCode !== filterCode) { loadData(filterCode || filter || datasets?.filter, current ? {page: current} : {}); } - }, [datasets, filter, loadData, location]) + }, [current, filterCode]) return datasets ? ( <> diff --git a/src/subset/SubsetListPage.tsx b/src/subset/SubsetListPage.tsx index 018f91b..fc62111 100644 --- a/src/subset/SubsetListPage.tsx +++ b/src/subset/SubsetListPage.tsx @@ -37,14 +37,16 @@ const SubsetListPage = ({location}: ISubsetListPageProps) => { const [subsets, setSubsets] = React.useState>(); const [filter, setFilter] = React.useState(appConfig.filter as SubsetFilter); + // memo + const {current, filterCode} = React.useMemo(() => parseLocationSearch(location), [location]); // callback const loadData = React.useCallback((filter: string | SubsetFilter, pageR: IPageRequest): Promise> => { return SubsetService .list(filter, pageR) .then((data) => { - setSubsets(data); setFilter(data.filter); + setSubsets(data); return data; }) .catch((e) => { @@ -59,11 +61,10 @@ const SubsetListPage = ({location}: ISubsetListPageProps) => { // effect React.useEffect(() => { - const {current, filterCode} = parseLocationSearch(location); if (!subsets || subsets?.filterCode !== filterCode) { loadData(filterCode || filter || subsets?.filter, current ? {page: current} : {}); } - }, [filter, loadData, location, subsets]) + }, [filterCode, current]) return subsets ? ( <> -- GitLab