diff --git a/frontend/components/common/Search.tsx b/frontend/components/common/Search.tsx index 94b517ac..c2a11917 100644 --- a/frontend/components/common/Search.tsx +++ b/frontend/components/common/Search.tsx @@ -1,44 +1,47 @@ "use client"; import Icon from "./Icon"; -import { useDebouncedCallback } from "use-debounce"; +import { useDebounce } from "@uidotdev/usehooks"; import { usePathname, useSearchParams, useRouter } from "next/navigation"; +import { useEffect, useState, useTransition } from "react"; const Search = () => { const searchParams = useSearchParams(); const pathname = usePathname(); const { replace } = useRouter(); - const searchKeyword = searchParams.get("search") ?? ""; + const [isPending, startTransition] = useTransition(); - const handleSearch = useDebouncedCallback((term) => { + const initialSearchTerm = searchParams.get("search") ?? ""; + const [searchTerm, setSearchTerm] = useState(""); + const debouncedSearchTerm = useDebounce(searchTerm, 300); + + useEffect(() => { const params = new URLSearchParams(Object.fromEntries(searchParams)); - if (term) { - params.set("search", term); - } else { - params.delete("search"); - } - replace(`${pathname}?${params.toString()}`); - }, 300); + startTransition(() => { + if (debouncedSearchTerm) { + params.set("search", debouncedSearchTerm); + } else { + params.delete("search"); + } + + replace(`${pathname}?${params.toString()}`); + }); + }, [debouncedSearchTerm, pathname]); return ( -