From 0fce444df8ec0b6a326f940e691119c59a3dd7ff Mon Sep 17 00:00:00 2001 From: Zamitto <167933696+zamitto@users.noreply.github.com> Date: Thu, 12 Sep 2024 13:12:42 -0300 Subject: [PATCH] feat: abort controller and i18n --- src/locales/en/translation.json | 3 +- src/locales/pt-BR/translation.json | 3 +- src/locales/pt-PT/translation.json | 3 +- .../src/pages/home/search-results.tsx | 45 +++++++++---------- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json index ae9c2712..6979854b 100644 --- a/src/locales/en/translation.json +++ b/src/locales/en/translation.json @@ -7,7 +7,8 @@ "featured": "Featured", "trending": "Trending", "surprise_me": "Surprise me", - "no_results": "No results found" + "no_results": "No results found", + "start_typing": "Starting typing to search..." }, "sidebar": { "catalogue": "Catalogue", diff --git a/src/locales/pt-BR/translation.json b/src/locales/pt-BR/translation.json index 1adac376..d3b0f0a4 100644 --- a/src/locales/pt-BR/translation.json +++ b/src/locales/pt-BR/translation.json @@ -7,7 +7,8 @@ "featured": "Destaques", "trending": "Populares", "surprise_me": "Surpreenda-me", - "no_results": "Nenhum resultado encontrado" + "no_results": "Nenhum resultado encontrado", + "start_typing": "Comece a digitar para pesquisar…" }, "sidebar": { "catalogue": "Catálogo", diff --git a/src/locales/pt-PT/translation.json b/src/locales/pt-PT/translation.json index 67f99921..3384bdf7 100644 --- a/src/locales/pt-PT/translation.json +++ b/src/locales/pt-PT/translation.json @@ -7,7 +7,8 @@ "featured": "Destaques", "trending": "Populares", "surprise_me": "Surpreende-me", - "no_results": "Nenhum resultado encontrado" + "no_results": "Nenhum resultado encontrado", + "start_typing": "Comece a digitar para pesquisar…" }, "sidebar": { "catalogue": "Catálogo", diff --git a/src/renderer/src/pages/home/search-results.tsx b/src/renderer/src/pages/home/search-results.tsx index aedab79b..abd58535 100644 --- a/src/renderer/src/pages/home/search-results.tsx +++ b/src/renderer/src/pages/home/search-results.tsx @@ -25,9 +25,10 @@ export function SearchResults() { const [searchResults, setSearchResults] = useState([]); const [isLoading, setIsLoading] = useState(false); - const [showMessage, setShowMessage] = useState(false); + const [showTypingMessage, setShowTypingMessage] = useState(false); const debouncedFunc = useRef void> | null>(null); + const abortControllerRef = useRef(null); const navigate = useNavigate(); @@ -36,40 +37,36 @@ export function SearchResults() { navigate(buildGameDetailsPath(game)); }; - const fetchGames = (query: string) => { - window.electron - .searchGames(query) - .then((results) => { - console.log( - "original query: ", - query, - "current value: ", - searchParams.get("query") - ); - if (query != searchParams.get("query")) return; - setSearchResults(results); - }) - .finally(() => { - setIsLoading(false); - }); - }; - useEffect(() => { setIsLoading(true); if (debouncedFunc.current) debouncedFunc.current.cancel(); + if (abortControllerRef.current) abortControllerRef.current.abort(); + + const abortController = new AbortController(); + abortControllerRef.current = abortController; debouncedFunc.current = debounce(() => { const query = searchParams.get("query") ?? ""; if (query.length < 3) { setIsLoading(false); - setShowMessage(true); + setShowTypingMessage(true); setSearchResults([]); return; } - setShowMessage(false); - fetchGames(query); + setShowTypingMessage(false); + window.electron + .searchGames(query) + .then((results) => { + if (abortController.signal.aborted) return; + + setSearchResults(results); + setIsLoading(false); + }) + .catch(() => { + setIsLoading(false); + }); }, 500); debouncedFunc.current(); @@ -97,11 +94,11 @@ export function SearchResults() { )} - {!isLoading && showMessage && ( + {!isLoading && showTypingMessage && (
-

{"Comece a digitar para pesquisar…"}

+

{t("start_typing")}

)}