(({ page, scale = 1, o
backgroundColor: '#ffffff',
overflow: 'hidden',
boxSizing: 'border-box',
- width: `${794 * scale}px`,
- height: `${1123 * scale}px`,
+ width: `${width}px`,
+ height: `${height}px`,
isolation: 'isolate',
zIndex: 1,
}}
diff --git a/src/pages/viewer/components/BookViewer.tsx b/src/pages/viewer/components/BookViewer.tsx
index d438e4e..d7d8f3b 100644
--- a/src/pages/viewer/components/BookViewer.tsx
+++ b/src/pages/viewer/components/BookViewer.tsx
@@ -1,11 +1,18 @@
-import { type FC, useRef, useCallback, useState, useEffect } from 'react';
+import { type FC, useRef, useCallback, useState, useEffect, useMemo } from 'react';
import HTMLFlipBook from 'react-pageflip';
import { type PageData } from '../types';
import BookPage from './BookPage';
import { ArrowLeft2, ArrowRight2 } from 'iconsax-react';
+import { getPaperDimensions } from '@/config/paperSizes';
-type BookViewerProps = {
+const VIEWER_SCALE = 0.5;
+
+// سایز کتاب همیشه A4 است (ثابت)
+const BOOK_PAPER_SIZE = 'a4';
+
+export type BookViewerProps = {
pages: PageData[];
+ catalogSize?: string;
};
interface PageFlipAPI {
@@ -27,10 +34,24 @@ interface FlipEvent {
* این کامپوننت از HTMLFlipBook استفاده میکند که یک wrapper برای PageFlip است
* از HTML برای رندر صفحات استفاده میشود (نه Canvas) برای سازگاری با Konva در آینده
*/
-const BookViewer: FC
= ({ pages }) => {
+const BookViewer: FC = ({ pages, catalogSize }) => {
const bookRef = useRef(null);
const [currentPage, setCurrentPage] = useState(0);
+ // سایز کتاب ثابت (همیشه A4)
+ const { width: bookWidth, height: bookHeight } = useMemo(
+ () => getPaperDimensions(BOOK_PAPER_SIZE),
+ []
+ );
+ const displayWidth = Math.round(bookWidth * VIEWER_SCALE);
+ const displayHeight = Math.round(bookHeight * VIEWER_SCALE);
+
+ // نسبت محتوا بر اساس catalogSize (A3/A4/A5)
+ const contentScale = useMemo(() => {
+ const { width: contentWidth } = getPaperDimensions(catalogSize ?? 'a4');
+ return VIEWER_SCALE * (bookWidth / contentWidth);
+ }, [catalogSize]);
+
// اطمینان از اینکه currentPage همیشه در محدوده معتبر است
useEffect(() => {
if (currentPage < 0) {
@@ -156,13 +177,13 @@ const BookViewer: FC = ({ pages }) => {
= ({ pages }) => {
onFlip={handlePageFlip}
>
{pages.map((page) => (
-
+
))}