Skip to content

Commit 08d4c5a

Browse files
authored
Merge pull request #263 from zigzagdev/fix/default-heritage-search-params-initial-state
feat: redirect to list page when no search condition exists
2 parents 7ac638e + 484e615 commit 08d4c5a

2 files changed

Lines changed: 35 additions & 3 deletions

File tree

client/src/app/features/search/containers/search-heritage-result-container.tsx

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,14 @@ const isValidListResult = (
4040
return Array.isArray(value.items) && isObject(value.pagination);
4141
};
4242

43+
/** Determine whether any valid search condition exists */
44+
const hasSearchParams = (params: HeritageSearchParams): boolean =>
45+
params.search_query !== null ||
46+
params.region !== null ||
47+
params.category !== null ||
48+
params.year_inscribed_from !== null ||
49+
params.year_inscribed_to !== null;
50+
4351
const toDraftValues = (params: HeritageSearchParams): SearchValues => ({
4452
region: params.region ?? "",
4553
category: params.category ?? "",
@@ -93,9 +101,18 @@ export function SearchHeritageResultsContainer(): React.ReactElement {
93101
[location.search],
94102
);
95103

104+
// If no search condition exists, redirect to the list page.
105+
const isSearchMode = hasSearchParams(params);
106+
107+
React.useEffect(() => {
108+
if (!isSearchMode) {
109+
navigate({ pathname: "/heritages", search: location.search }, { replace: true });
110+
}
111+
}, [isSearchMode, location.search, navigate]);
112+
96113
const { draft, setDraft, handleChange } = useHeritageSearchDraft(params);
97114

98-
const { data, isLoading, error } = useHeritageSearchQuery(params);
115+
const { data, isLoading, error } = useHeritageSearchQuery(params, { enabled: isSearchMode });
99116

100117
const handleClickItem = React.useCallback(
101118
(id: number) => {

client/src/app/features/search/hooks/use-search-heritage-query.ts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,29 @@ const toSearchParams = (params: HeritageSearchParams): SearchParams => ({
1818
perPage: params.per_page,
1919
});
2020

21-
export function useHeritageSearchQuery(params: HeritageSearchParams) {
21+
type Options = {
22+
/** If false, the API call is skipped. Defaults to true. */
23+
enabled?: boolean;
24+
};
25+
26+
export function useHeritageSearchQuery(
27+
params: HeritageSearchParams,
28+
{ enabled = true }: Options = {},
29+
) {
2230
const [data, setData] = useState<ListResult<ApiWorldHeritageDto> | null>(null);
2331
const [isLoading, setLoading] = useState(false);
2432
const [error, setError] = useState<unknown>(null);
2533

2634
const request: SearchParams = useMemo(() => toSearchParams(params), [params]);
2735

2836
useEffect(() => {
37+
if (!enabled) {
38+
setData(null);
39+
setLoading(false);
40+
setError(null);
41+
return;
42+
}
43+
2944
const abortController = new AbortController();
3045

3146
setLoading(true);
@@ -42,7 +57,7 @@ export function useHeritageSearchQuery(params: HeritageSearchParams) {
4257
.finally(() => setLoading(false));
4358

4459
return () => abortController.abort();
45-
}, [request]);
60+
}, [enabled, request]);
4661

4762
return { data, isLoading, error };
4863
}

0 commit comments

Comments
 (0)