Skip to content

Commit d873cee

Browse files
committed
Fix tag into zustand when coming via runway
1 parent 8d2fa67 commit d873cee

2 files changed

Lines changed: 28 additions & 3 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: 27 additions & 2 deletions
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;
@@ -12,7 +12,7 @@ export const useInitialiseFilters = (filterOptions, searchParams, selectedFilter
1212
}
1313
}
1414
return { filters: any ? f : selectedFilters, urlHadParams: any };
15-
}, [filterOptions, searchParams, selectedFilters]);
15+
}, [filterOptions, searchParams]);
1616

1717
useEffect(() => {
1818
if (!urlHadParams && selectedFilters && Object.keys(selectedFilters).length > 0) {
@@ -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)