From 62114b8fcb1494cae1c1fa2e0c67c1ac5826b9ca Mon Sep 17 00:00:00 2001 From: Julien Froidefond Date: Sun, 16 Feb 2025 17:37:47 +0100 Subject: [PATCH] feat(bookreader): escape for key close reader --- src/components/reader/BookReader.tsx | 6 ++++++ src/components/reader/hooks/usePageNavigation.ts | 12 ++++++++++-- src/components/reader/types.ts | 7 +++++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/components/reader/BookReader.tsx b/src/components/reader/BookReader.tsx index 4ed6136..912e08e 100644 --- a/src/components/reader/BookReader.tsx +++ b/src/components/reader/BookReader.tsx @@ -65,6 +65,12 @@ export function BookReader({ book, pages, onClose }: BookReaderProps) { } catch (error) { console.error("Erreur lors du chargement des URLs:", error); setImageError(true); + } finally { + // On s'assure que le chargement est terminé même en cas d'erreur + if (isMounted) { + setIsLoading(false); + setSecondPageLoading(false); + } } }; diff --git a/src/components/reader/hooks/usePageNavigation.ts b/src/components/reader/hooks/usePageNavigation.ts index b8a018a..ebdc775 100644 --- a/src/components/reader/hooks/usePageNavigation.ts +++ b/src/components/reader/hooks/usePageNavigation.ts @@ -5,9 +5,15 @@ interface UsePageNavigationProps { book: KomgaBook; pages: number[]; isDoublePage: boolean; + onClose: () => void; } -export const usePageNavigation = ({ book, pages, isDoublePage }: UsePageNavigationProps) => { +export const usePageNavigation = ({ + book, + pages, + isDoublePage, + onClose, +}: UsePageNavigationProps) => { const [currentPage, setCurrentPage] = useState(book.readProgress?.page || 1); const [isLoading, setIsLoading] = useState(true); const [secondPageLoading, setSecondPageLoading] = useState(true); @@ -122,6 +128,8 @@ export const usePageNavigation = ({ book, pages, isDoublePage }: UsePageNavigati handlePreviousPage(); } else if (event.key === "ArrowRight") { handleNextPage(); + } else if (event.key === "Escape" && onClose) { + onClose(); } }; @@ -134,7 +142,7 @@ export const usePageNavigation = ({ book, pages, isDoublePage }: UsePageNavigati window.removeEventListener("touchstart", handleTouchStart); window.removeEventListener("touchend", handleTouchEnd); }; - }, [handlePreviousPage, handleNextPage, handleTouchStart, handleTouchEnd]); + }, [handlePreviousPage, handleNextPage, handleTouchStart, handleTouchEnd, onClose]); useEffect(() => { return () => { diff --git a/src/components/reader/types.ts b/src/components/reader/types.ts index d767713..6c82873 100644 --- a/src/components/reader/types.ts +++ b/src/components/reader/types.ts @@ -44,3 +44,10 @@ export interface ControlButtonsProps { isDoublePage: boolean; onToggleDoublePage: () => void; } + +export interface UsePageNavigationProps { + book: KomgaBook; + pages: number[]; + isDoublePage: boolean; + onClose?: () => void; +}