From e3ad1690c52ec43a00eb560c6abdefc756a1076b Mon Sep 17 00:00:00 2001 From: Julien Froidefond Date: Thu, 13 Feb 2025 22:43:34 +0100 Subject: [PATCH] fix: favorites change event for sidebar refresh --- src/components/layout/Sidebar.tsx | 19 ++++++++++++++----- src/lib/services/favorite.service.ts | 9 +++++++++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/components/layout/Sidebar.tsx b/src/components/layout/Sidebar.tsx index e065bdb..180ad7c 100644 --- a/src/components/layout/Sidebar.tsx +++ b/src/components/layout/Sidebar.tsx @@ -70,16 +70,25 @@ export function Sidebar({ isOpen }: SidebarProps) { fetchFavorites(); }, []); // Suppression de la dépendance pathname - // Mettre à jour les favoris quand ils changent dans le localStorage + // Mettre à jour les favoris quand ils changent useEffect(() => { - const handleStorageChange = (e: StorageEvent) => { + const handleFavoritesChange = () => { + fetchFavorites(); + }; + + // Écouter les changements de favoris dans la même fenêtre + window.addEventListener("favoritesChanged", handleFavoritesChange); + // Écouter les changements de favoris dans d'autres fenêtres + window.addEventListener("storage", (e) => { if (e.key === "stripstream_favorites") { fetchFavorites(); } - }; + }); - window.addEventListener("storage", handleStorageChange); - return () => window.removeEventListener("storage", handleStorageChange); + return () => { + window.removeEventListener("favoritesChanged", handleFavoritesChange); + window.removeEventListener("storage", handleFavoritesChange); + }; }, [fetchFavorites]); const handleRefresh = async () => { diff --git a/src/lib/services/favorite.service.ts b/src/lib/services/favorite.service.ts index cec2cef..bb079f9 100644 --- a/src/lib/services/favorite.service.ts +++ b/src/lib/services/favorite.service.ts @@ -1,6 +1,13 @@ import { storageService } from "./storage.service"; export class FavoriteService { + private static readonly FAVORITES_CHANGE_EVENT = "favoritesChanged"; + + private static dispatchFavoritesChanged() { + // Dispatch l'événement pour notifier les changements + window.dispatchEvent(new Event(FavoriteService.FAVORITES_CHANGE_EVENT)); + } + /** * Vérifie si une série est dans les favoris */ @@ -13,6 +20,7 @@ export class FavoriteService { */ static addToFavorites(seriesId: string): void { storageService.addFavorite(seriesId); + this.dispatchFavoritesChanged(); } /** @@ -20,6 +28,7 @@ export class FavoriteService { */ static removeFromFavorites(seriesId: string): void { storageService.removeFavorite(seriesId); + this.dispatchFavoritesChanged(); } /**