/* eslint-disable @next/next/no-img-element */ "use client"; import type { BookReaderProps } from "./types"; import { useOrientation } from "./hooks/useOrientation"; import { usePageNavigation } from "./hooks/usePageNavigation"; import { usePageCache } from "./hooks/usePageCache"; import { usePageUrls } from "./hooks/usePageUrls"; import { usePreloadPages } from "./hooks/usePreloadPages"; import { useFullscreen } from "./hooks/useFullscreen"; import { useState, useEffect, useCallback, useRef } from "react"; import { NavigationBar } from "./components/NavigationBar"; import { ControlButtons } from "./components/ControlButtons"; import { ReaderContent } from "./components/ReaderContent"; import { useReadingDirection } from "./hooks/useReadingDirection"; export function BookReader({ book, pages, onClose }: BookReaderProps) { const [isDoublePage, setIsDoublePage] = useState(false); const [showControls, setShowControls] = useState(false); const readerRef = useRef(null); const isLandscape = useOrientation(); const { direction, toggleDirection, isRTL } = useReadingDirection(); const { isFullscreen, toggleFullscreen } = useFullscreen(); const { currentPage, navigateToPage, isLoading, setIsLoading, secondPageLoading, setSecondPageLoading, handlePreviousPage, handleNextPage, shouldShowDoublePage, zoomLevel, panPosition, handleDoubleClick, } = usePageNavigation({ book, pages, isDoublePage, onClose, direction, }); const { preloadPage, getPageUrl, cleanCache } = usePageCache({ book, pages, }); const { currentPageUrl, nextPageUrl } = usePageUrls({ currentPage, isDoublePage, shouldShowDoublePage, getPageUrl, setIsLoading, setSecondPageLoading, }); usePreloadPages({ currentPage, totalPages: pages.length, isDoublePage, shouldShowDoublePage, preloadPage, cleanCache, }); // Effet pour gérer le mode double page automatiquement en paysage useEffect(() => { setIsDoublePage(isLandscape); }, [isLandscape]); const handleThumbnailLoad = useCallback( (pageNumber: number) => { if (pageNumber === currentPage) { setIsLoading(false); } else if (pageNumber === currentPage + 1) { setSecondPageLoading(false); } }, [currentPage, setIsLoading, setSecondPageLoading] ); return (
setShowControls(!showControls)} >
setShowControls(!showControls)} onPreviousPage={handlePreviousPage} onNextPage={handleNextPage} onPageChange={navigateToPage} onClose={onClose} currentPage={currentPage} totalPages={pages.length} isDoublePage={isDoublePage} onToggleDoublePage={() => setIsDoublePage(!isDoublePage)} isFullscreen={isFullscreen} onToggleFullscreen={() => toggleFullscreen(readerRef.current)} direction={direction} onToggleDirection={toggleDirection} />
); }