From bc9a754563b6ad4bc2455d143321c65745bb59cf Mon Sep 17 00:00:00 2001 From: Julien Froidefond Date: Sat, 15 Feb 2025 18:01:11 +0100 Subject: [PATCH] feat(bookReader): autoorientation, showcontrols on click, no more toast on load --- src/components/reader/BookReader.tsx | 93 +++++++++++++++++---- src/components/reader/ClientBookReader.tsx | 9 -- src/components/reader/ClientBookWrapper.tsx | 11 --- 3 files changed, 78 insertions(+), 35 deletions(-) diff --git a/src/components/reader/BookReader.tsx b/src/components/reader/BookReader.tsx index 61607e4..bce793e 100644 --- a/src/components/reader/BookReader.tsx +++ b/src/components/reader/BookReader.tsx @@ -29,6 +29,30 @@ interface BookReaderProps { onClose?: () => void; } +// Ajout du hook pour détecter l'orientation +const useOrientation = () => { + const [isLandscape, setIsLandscape] = useState(false); + + useEffect(() => { + const checkOrientation = () => { + // Vérifier si la fenêtre est plus large que haute + setIsLandscape(window.innerWidth > window.innerHeight); + }; + + // Vérification initiale + checkOrientation(); + + // Écouter les changements de taille de fenêtre + window.addEventListener("resize", checkOrientation); + + return () => { + window.removeEventListener("resize", checkOrientation); + }; + }, []); + + return isLandscape; +}; + export function BookReader({ book, pages, onClose }: BookReaderProps) { const [currentPage, setCurrentPage] = useState(book.readProgress?.page || 1); const [isLoading, setIsLoading] = useState(true); @@ -36,7 +60,9 @@ export function BookReader({ book, pages, onClose }: BookReaderProps) { const [imageError, setImageError] = useState(false); const [isDoublePage, setIsDoublePage] = useState(false); const [showNavigation, setShowNavigation] = useState(false); + const [showControls, setShowControls] = useState(false); const pageCache = useRef({}); + const isLandscape = useOrientation(); // Ajout d'un état pour le chargement des miniatures const [loadedThumbnails, setLoadedThumbnails] = useState<{ [key: number]: boolean }>({}); @@ -384,6 +410,11 @@ export function BookReader({ book, pages, onClose }: BookReaderProps) { } }; + // Effet pour gérer le mode double page automatiquement en paysage + useEffect(() => { + setIsDoublePage(isLandscape); + }, [isLandscape]); + return (
setShowControls(!showControls)} > {/* Contenu principal */}
{/* Boutons en haut */} -
+
); diff --git a/src/components/reader/ClientBookReader.tsx b/src/components/reader/ClientBookReader.tsx index 279efa2..9648662 100644 --- a/src/components/reader/ClientBookReader.tsx +++ b/src/components/reader/ClientBookReader.tsx @@ -5,7 +5,6 @@ import { useRouter } from "next/navigation"; import { KomgaBook } from "@/types/komga"; import { BookReader } from "./BookReader"; import { Button } from "@/components/ui/button"; -import { useToast } from "@/components/ui/use-toast"; interface ClientBookReaderProps { book: KomgaBook; @@ -14,17 +13,9 @@ interface ClientBookReaderProps { export function ClientBookReader({ book, pages }: ClientBookReaderProps) { const router = useRouter(); - const { toast } = useToast(); const [isReading, setIsReading] = useState(false); const handleStartReading = () => { - // Si le livre a une progression de lecture, on l'affiche dans un toast - if (book.readProgress && book.readProgress.page && book.readProgress.page > 0) { - toast({ - title: "Reprise de la lecture", - description: `Reprise à la page ${book.readProgress.page}`, - }); - } setIsReading(true); }; diff --git a/src/components/reader/ClientBookWrapper.tsx b/src/components/reader/ClientBookWrapper.tsx index 8862b09..203651c 100644 --- a/src/components/reader/ClientBookWrapper.tsx +++ b/src/components/reader/ClientBookWrapper.tsx @@ -13,17 +13,6 @@ interface ClientBookWrapperProps { export function ClientBookWrapper({ book, pages }: ClientBookWrapperProps) { const router = useRouter(); - const { toast } = useToast(); - - useEffect(() => { - // Si le livre a une progression de lecture, on l'affiche dans un toast - if (book.readProgress && book.readProgress.page && book.readProgress.page > 0) { - toast({ - title: "Reprise de la lecture", - description: `Reprise à la page ${book.readProgress.page}`, - }); - } - }, [book.readProgress, toast]); const handleCloseReader = () => { router.back();