From e00b7c940fedab16f4d8876102021518c315d906 Mon Sep 17 00:00:00 2001
From: Dorian Koch <doriank@fsmpi.rwth-aachen.de>
Date: Thu, 8 Aug 2024 20:03:40 +0200
Subject: [PATCH] Fix search misbehaving, closes #53

---
 src/components/DefaultLayout.tsx | 4 ++--
 src/pages/search.tsx             | 6 ++++--
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/components/DefaultLayout.tsx b/src/components/DefaultLayout.tsx
index 4c6f56a..cd84d36 100644
--- a/src/components/DefaultLayout.tsx
+++ b/src/components/DefaultLayout.tsx
@@ -291,8 +291,8 @@ function Search({ className }: { className?: string }) {
         e.preventDefault();
         let form = e.currentTarget;
         let query = form.query.value;
-        if (query === "") router.push("/search");
-        router.push("/search?q=" + encodeURIComponent(query));
+        const newPath = query === "" ? "/search" : "/search?q=" + encodeURIComponent(query);
+        if (router.pathname !== newPath) router.push(newPath);
     };
     const onChange = (e: React.ChangeEvent<HTMLInputElement>) => {
         setQuery(e.target.value);
diff --git a/src/pages/search.tsx b/src/pages/search.tsx
index d8c171d..5b7b0e9 100644
--- a/src/pages/search.tsx
+++ b/src/pages/search.tsx
@@ -62,7 +62,9 @@ export default function Search() {
     // TODO: this code needs more cleanup, variable names are not very descriptive
 
     useEffect(() => {
-        setQuery(params.get("q"));
+        if (params.has("q")) setQuery(params.get("q"));
+        else if (query !== undefined && query !== null && query.length > 0) setQuery("");
+        // eslint-disable-next-line react-hooks/exhaustive-deps
     }, [params]);
 
     const updateSearchResults = () => {
@@ -91,7 +93,7 @@ export default function Search() {
     };
 
     // eslint-disable-next-line react-hooks/exhaustive-deps
-    useEffect(updateSearchResults, [query, api, router]);
+    useEffect(updateSearchResults, [query, api]);
 
     const [updateQueryDeferred, updateQueryNow] = useDebounce(() => {
         setQuery(workingQuery.current);
-- 
GitLab