From 0104e04c6be28f48be102d23ff4f9d0e018483ab Mon Sep 17 00:00:00 2001 From: Julien Froidefond Date: Mon, 17 Feb 2025 22:25:01 +0100 Subject: [PATCH] fix: double call and fav on seriesheader KO --- src/components/layout/Sidebar.tsx | 10 +++++++--- src/components/series/SeriesHeader.tsx | 20 +++++++++++++------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/components/layout/Sidebar.tsx b/src/components/layout/Sidebar.tsx index 7e741c3..098d8eb 100644 --- a/src/components/layout/Sidebar.tsx +++ b/src/components/layout/Sidebar.tsx @@ -105,10 +105,14 @@ export function Sidebar({ isOpen, onClose }: SidebarProps) { router.push("/login"); }; - const handleLinkClick = (path: string) => { - onClose(); + const handleLinkClick = useCallback((path: string) => { + if (pathname === path) { + onClose(); + return; + } router.push(path); - }; + onClose(); + }, [pathname, router, onClose]); const navigation = [ { diff --git a/src/components/series/SeriesHeader.tsx b/src/components/series/SeriesHeader.tsx index 6e9dd0f..b3cbf72 100644 --- a/src/components/series/SeriesHeader.tsx +++ b/src/components/series/SeriesHeader.tsx @@ -19,10 +19,10 @@ export const SeriesHeader = ({ series }: SeriesHeaderProps) => { // Vérifier si la série est dans les favoris const checkFavorite = async () => { try { - const response = await fetch(`/api/komga/series/${series.id}/favorite`); + const response = await fetch("/api/komga/favorites"); if (response.ok) { - const data = await response.json(); - setIsFavorite(data.favorite); + const favoriteIds = await response.json(); + setIsFavorite(favoriteIds.includes(series.id)); } } catch (error) { console.error("Erreur lors de la vérification des favoris:", error); @@ -34,16 +34,18 @@ export const SeriesHeader = ({ series }: SeriesHeaderProps) => { const handleToggleFavorite = async () => { try { - const response = await fetch(`/api/komga/series/${series.id}/favorite`, { - method: "POST", + const response = await fetch(`/api/komga/favorites`, { + method: isFavorite ? "DELETE" : "POST", headers: { "Content-Type": "application/json", }, - body: JSON.stringify({ favorite: !isFavorite }), + body: JSON.stringify({ seriesId: series.id }), }); if (response.ok) { setIsFavorite(!isFavorite); + // Déclencher l'événement pour mettre à jour la sidebar + window.dispatchEvent(new Event("favoritesChanged")); toast({ title: !isFavorite ? "Ajouté aux favoris" : "Retiré des favoris", description: series.metadata.title, @@ -144,7 +146,11 @@ export const SeriesHeader = ({ series }: SeriesHeaderProps) => { onClick={handleToggleFavorite} className="text-white hover:text-white" > - {isFavorite ? : } + {isFavorite ? ( + + ) : ( + + )}