Skip to content

Commit 7424fd2

Browse files
committed
update serach component to use build in routing history for url mutation
1 parent db540a5 commit 7424fd2

File tree

2 files changed

+28
-47
lines changed

2 files changed

+28
-47
lines changed

components/SearchClientComponent.tsx

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,56 @@
11
"use client";
22

33
import React, { Suspense } from "react";
4-
import { useSearchParams } from "next/navigation";
54
import { useGridLayout } from "@/hooks/useGridLayout";
65
import { LoadingSkeleton } from "@/components/LoadingSkeleton";
76
import { ApiGrid } from "@/components/ApiGrid";
87
import { liteClient as algoliasearch } from "algoliasearch/lite";
98
import { InstantSearch } from "react-instantsearch";
109
import { SearchSection } from "@/components/SearchSection";
10+
import { history } from "instantsearch.js/es/lib/routers";
1111

1212
const searchClient = algoliasearch(
1313
"D29MLR0AMY",
14-
"03da9918f8ebfdb40e9b37cfd43ed8c4",
14+
"03da9918f8ebfdb40e9b37cfd43ed8c4"
1515
);
1616

17+
const indexName = "prod_apis_guru";
18+
19+
const routing = {
20+
router: history(),
21+
stateMapping: {
22+
stateToRoute(uiState: any) {
23+
const indexUiState = uiState[indexName] || {};
24+
return {
25+
query: indexUiState.query || undefined,
26+
};
27+
},
28+
routeToState(routeState: any) {
29+
return {
30+
[indexName]: {
31+
query: routeState.query || "",
32+
},
33+
};
34+
},
35+
},
36+
};
37+
1738
interface SearchClientComponentProps {
1839
providerSlug?: string;
1940
}
2041

2142
function SearchClientComponentInner({
2243
providerSlug,
2344
}: SearchClientComponentProps) {
24-
const searchParams = useSearchParams();
25-
const initialSearchTerm = searchParams?.get("q") || "";
26-
const initialCombinedSearchTerm = providerSlug
27-
? `${providerSlug} ${initialSearchTerm}`.trim()
28-
: initialSearchTerm;
29-
3045
const { gridColumns, pageSize } = useGridLayout();
3146

3247
return (
3348
<div className="container mx-auto px-4 relative">
3449
<div className="relative z-10">
3550
<InstantSearch
36-
indexName="prod_apis_guru"
51+
indexName={indexName}
3752
searchClient={searchClient}
38-
initialUiState={{
39-
prod_apis_guru: {
40-
query: initialCombinedSearchTerm,
41-
sortBy: "prod_apis_guru_by_name_asc",
42-
},
43-
}}
53+
routing={routing}
4454
>
4555
<SearchSection />
4656

components/SearchSection.tsx

Lines changed: 3 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
"use client";
22

33
import { SearchIcon } from "lucide-react";
4-
import React, { useEffect, useRef } from "react";
5-
import { useRouter, useSearchParams } from "next/navigation";
4+
import React from "react";
65
import {
76
SearchBox,
87
useInstantSearch,
@@ -12,36 +11,7 @@ import {
1211

1312
export function SearchSection() {
1413
const { results } = useInstantSearch();
15-
const { query, refine } = useSearchBox();
16-
const isInitialMount = useRef(true);
17-
const router = useRouter();
18-
const searchParams = useSearchParams();
19-
20-
useEffect(() => {
21-
if (isInitialMount.current) {
22-
const initialQuery = searchParams.get("query") || "";
23-
if (initialQuery !== query) {
24-
refine(initialQuery);
25-
}
26-
isInitialMount.current = false;
27-
}
28-
}, [refine, searchParams]);
29-
30-
useEffect(() => {
31-
if (isInitialMount.current) return;
32-
33-
const currentQuery = searchParams.get("query") || "";
34-
35-
if (currentQuery !== query) {
36-
const params = new URLSearchParams(searchParams);
37-
if (query) {
38-
params.set("query", query);
39-
} else {
40-
params.delete("query");
41-
}
42-
router.push(`?${params.toString()}`, { scroll: false });
43-
}
44-
}, [query, router, searchParams]);
14+
const { query } = useSearchBox();
4515

4616
return (
4717
<div className="max-w-3xl mx-auto">
@@ -89,3 +59,4 @@ export function SearchSection() {
8959
</div>
9060
);
9161
}
62+

0 commit comments

Comments
 (0)