Skip to content

Commit 9fab475

Browse files
committed
Merge branch 'main' of github.com:Citizen-Knowledge-Graph/foerderfunke-react-app
2 parents ed7e9d8 + ce11ecd commit 9fab475

2 files changed

Lines changed: 27 additions & 2 deletions

File tree

src/ui/screens/eligibilty-overview/EligibilityOverviewScreenContainer.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ const EligibilityOverviewScreenContainer = () => {
2020
const { validationReport } = useProduceValidationReport();
2121
const metadata = useMetadataStore((state) => state.metadata);
2222
const { eligibilityData, filterOptions } = useEligibilityData(validationReport, metadata, hydrationData, language);
23-
const filters = useInitialiseFilters(filterOptions, searchParams, selectedFilters, setSearchParams);
23+
const filters = useInitialiseFilters(filterOptions, searchParams, selectedFilters, setSearchParams, setSelectedFilters);
2424
const handleChangeFilters = useFilterChangeHandler({ filters, setSearchParams, setSelectedFilters });
2525
const filteredEligibilityData = useFilterEligibilityData(eligibilityData, filters);
2626

src/ui/screens/eligibilty-overview/hooks/useBuildFilterSetup.js

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { useCallback, useMemo, useEffect } from 'react';
22

3-
export const useInitialiseFilters = (filterOptions, searchParams, selectedFilters = {}, setSearchParams) => {
3+
export const useInitialiseFilters = (filterOptions, searchParams, selectedFilters = {}, setSearchParams, setSelectedFilters) => {
44
const { filters, urlHadParams } = useMemo(() => {
55
const f = {};
66
let any = false;
@@ -24,6 +24,31 @@ export const useInitialiseFilters = (filterOptions, searchParams, selectedFilter
2424
}
2525
}, [urlHadParams, selectedFilters, setSearchParams]);
2626

27+
const areFiltersEqual = (a = {}, b = {}) => {
28+
const aKeys = Object.keys(a);
29+
const bKeys = Object.keys(b);
30+
if (aKeys.length !== bKeys.length) return false;
31+
for (const k of aKeys) {
32+
const aVals = a[k] || [];
33+
const bVals = b[k] || [];
34+
if (aVals.length !== bVals.length) return false;
35+
for (let i = 0; i < aVals.length; i++) {
36+
if (aVals[i] !== bVals[i]) return false;
37+
}
38+
}
39+
return true;
40+
};
41+
42+
// if the URL contained filter params on first load, push them into selected state
43+
useEffect(() => {
44+
if (urlHadParams) {
45+
// only set if different to avoid update loops
46+
if (!areFiltersEqual(selectedFilters, filters)) {
47+
setSelectedFilters(filters);
48+
}
49+
}
50+
}, [urlHadParams, filters, selectedFilters, setSelectedFilters]);
51+
2752
return filters;
2853
};
2954

0 commit comments

Comments
 (0)