From 273f35a42f9a798b7a7eea508e1252aacf697b1f Mon Sep 17 00:00:00 2001 From: XingfenD Date: Tue, 8 Sep 2026 19:08:05 +0800 Subject: [PATCH] fix(web): shelf search debounce merges against live searchParams (no lost sort/group clicks) --- frontend/src/pages/Shelf.tsx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/frontend/src/pages/Shelf.tsx b/frontend/src/pages/Shelf.tsx index 764db60..643587b 100644 --- a/frontend/src/pages/Shelf.tsx +++ b/frontend/src/pages/Shelf.tsx @@ -98,13 +98,15 @@ export default function Shelf() { useEffect(() => { if (qRaw.trim() === serverQ) return; const t = setTimeout(() => { - const next = new URLSearchParams(sp); - if (qRaw.trim()) next.set("q", qRaw.trim()); - else next.delete("q"); - setSp(next, { replace: true }); + setSp((prev) => { + const next = new URLSearchParams(prev); + if (qRaw.trim()) next.set("q", qRaw.trim()); + else next.delete("q"); + return next; + }, { replace: true }); }, 300); return () => clearTimeout(t); - }, [qRaw]); // eslint-disable-line + }, [qRaw, serverQ, sp, setSp]); const libsQ = useQuery({ queryKey: ["libraries"], queryFn: api.listLibraries }); const booksQ = useQuery({ queryKey: ["books", lib, serverQ], queryFn: () => api.listBooks({ library: lib || undefined, q: serverQ }) });