import { type FC, useRef, useCallback, useState } from 'react'; import HTMLFlipBook from 'react-pageflip'; import { type PageData } from '../types'; import BookPage from './BookPage'; import { ArrowLeft2, ArrowRight2 } from 'iconsax-react'; type BookViewerProps = { pages: PageData[]; }; interface PageFlipAPI { flipNext: () => void; flipPrev: () => void; } interface FlipBookInstance { pageFlip: () => PageFlipAPI | undefined; } interface FlipEvent { data: number; } /** * کامپوننت اصلی کتابخوان با استفاده از react-pageflip * این کامپوننت از HTMLFlipBook استفاده می‌کند که یک wrapper برای PageFlip است * از HTML برای رندر صفحات استفاده می‌شود (نه Canvas) برای سازگاری با Konva در آینده */ const BookViewer: FC = ({ pages }) => { const bookRef = useRef(null); const [currentPage, setCurrentPage] = useState(0); const handlePageFlip = useCallback((e: FlipEvent) => { const pageNum = e.data; setCurrentPage(pageNum); }, []); const goToNextPage = useCallback(() => { bookRef.current?.pageFlip()?.flipNext(); }, []); const goToPrevPage = useCallback(() => { bookRef.current?.pageFlip()?.flipPrev(); }, []); return (
{/* نمایش کتاب */}
{/* Border و Shadow عمودی در وسط کتاب */}
{pages.map((page) => ( ))}
{/* کنترل‌های ناوبری */}
{/* دکمه صفحه بعد (در RTL، صفحه سمت چپ) */} {/* شماره صفحه */}
صفحه {currentPage + 1} از {pages.length}
{/* دکمه صفحه قبل (در RTL، صفحه سمت راست) */}
); }; export default BookViewer;