From 3d445d4e63bf90db9641fba8e5d2a8a093b4922f Mon Sep 17 00:00:00 2001 From: HappyOnigiri <253838257+NodeMeld@users.noreply.github.com> Date: Tue, 3 Mar 2026 09:32:49 +0900 Subject: [PATCH] fix: toggle favorites add/remove and show success toast in SearchBar --- ui/src/features/search/components/SearchBar.tsx | 10 ++++++---- ui/src/features/search/hooks/useFavoritesLogic.ts | 10 +++++++--- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/ui/src/features/search/components/SearchBar.tsx b/ui/src/features/search/components/SearchBar.tsx index d8195f2..bfc6b17 100644 --- a/ui/src/features/search/components/SearchBar.tsx +++ b/ui/src/features/search/components/SearchBar.tsx @@ -52,11 +52,13 @@ export const SearchBar: React.FC = () => { const handleSaveFavorite = async () => { const isAlreadyFavorite = state.favorites.some((f) => f.query === state.searchQuery); - if (isAlreadyFavorite) { - setToastMessage("This query is already in your favorites.", "error"); - return; + const success = await handleSaveFavoriteLogic(); + if (success) { + setToastMessage( + isAlreadyFavorite ? "Removed from favorites." : "Added to favorites.", + "info", + ); } - await handleSaveFavoriteLogic(); }; useEscapeToClose({ diff --git a/ui/src/features/search/hooks/useFavoritesLogic.ts b/ui/src/features/search/hooks/useFavoritesLogic.ts index 1b6f2c3..5c36e24 100644 --- a/ui/src/features/search/hooks/useFavoritesLogic.ts +++ b/ui/src/features/search/hooks/useFavoritesLogic.ts @@ -62,8 +62,8 @@ export const useFavoritesLogic = () => { } }, [editingFavorite, editFavoriteName, editFavoriteQuery, refreshFavorites]); - const handleSaveFavorite = useCallback(async () => { - if (!state.searchQuery || isSaving) return; + const handleSaveFavorite = useCallback(async (): Promise => { + if (!state.searchQuery || isSaving) return false; const isAlreadyFavorite = state.favorites.some((f) => f.query === state.searchQuery); if (isAlreadyFavorite) { @@ -73,21 +73,25 @@ export const useFavoritesLogic = () => { try { await searchApi.deleteFavorite(fav.id); await refreshFavorites(); + return true; } catch (err) { logger.error("Failed to delete favorite:", err); + return false; } finally { setIsSaving(false); } } - return; + return false; } setIsSaving(true); try { await searchApi.saveFavorite(state.searchQuery, state.searchQuery); await refreshFavorites(); + return true; } catch (err) { logger.error("Failed to save favorite:", err); + return false; } finally { setIsSaving(false); }