import React from 'react'; import { Text, Checkbox, Tooltip, ActionIcon } from '@mantine/core'; import ArrowBackIcon from '@mui/icons-material/ArrowBack'; import ArrowForwardIcon from '@mui/icons-material/ArrowForward'; import RotateLeftIcon from '@mui/icons-material/RotateLeft'; import RotateRightIcon from '@mui/icons-material/RotateRight'; import DeleteIcon from '@mui/icons-material/Delete'; import ContentCutIcon from '@mui/icons-material/ContentCut'; import DragIndicatorIcon from '@mui/icons-material/DragIndicator'; import { PDFPage } from '../../types/pageEditor'; import styles from './PageEditor.module.css'; interface PageThumbnailProps { page: PDFPage; index: number; totalPages: number; selectedPages: string[]; selectionMode: boolean; draggedPage: string | null; dropTarget: string | null; movingPage: string | null; isAnimating: boolean; pageRefs: React.MutableRefObject>; onDragStart: (pageId: string) => void; onDragEnd: () => void; onDragOver: (e: React.DragEvent) => void; onDragEnter: (pageId: string) => void; onDragLeave: () => void; onDrop: (e: React.DragEvent, pageId: string) => void; onTogglePage: (pageId: string) => void; onAnimateReorder: (pageId: string, targetIndex: number) => void; onExecuteCommand: (command: any) => void; onSetStatus: (status: string) => void; onSetMovingPage: (pageId: string | null) => void; RotatePagesCommand: any; DeletePagesCommand: any; ToggleSplitCommand: any; pdfDocument: any; setPdfDocument: any; } const PageThumbnail = ({ page, index, totalPages, selectedPages, selectionMode, draggedPage, dropTarget, movingPage, isAnimating, pageRefs, onDragStart, onDragEnd, onDragOver, onDragEnter, onDragLeave, onDrop, onTogglePage, onAnimateReorder, onExecuteCommand, onSetStatus, onSetMovingPage, RotatePagesCommand, DeletePagesCommand, ToggleSplitCommand, pdfDocument, setPdfDocument, }: PageThumbnailProps) => { return (
{ if (!isAnimating && draggedPage && page.id !== draggedPage && dropTarget === page.id) { return 'translateX(20px)'; } return 'translateX(0)'; })(), transition: isAnimating ? 'none' : 'transform 0.2s ease-in-out' }} draggable onDragStart={() => onDragStart(page.id)} onDragEnd={onDragEnd} onDragOver={onDragOver} onDragEnter={() => onDragEnter(page.id)} onDragLeave={onDragLeave} onDrop={(e) => onDrop(e, page.id)} > {selectionMode && (
e.stopPropagation()} onDragStart={(e) => { e.preventDefault(); e.stopPropagation(); }} > { event.stopPropagation(); onTogglePage(page.id); }} onClick={(e) => e.stopPropagation()} size="sm" />
)}
{`Page
{page.pageNumber}
{ e.stopPropagation(); if (index > 0 && !movingPage && !isAnimating) { onSetMovingPage(page.id); onAnimateReorder(page.id, index - 1); setTimeout(() => onSetMovingPage(null), 500); onSetStatus(`Moved page ${page.pageNumber} left`); } }} > { e.stopPropagation(); if (index < totalPages - 1 && !movingPage && !isAnimating) { onSetMovingPage(page.id); onAnimateReorder(page.id, index + 1); setTimeout(() => onSetMovingPage(null), 500); onSetStatus(`Moved page ${page.pageNumber} right`); } }} > { e.stopPropagation(); const command = new RotatePagesCommand( pdfDocument, setPdfDocument, [page.id], -90 ); onExecuteCommand(command); onSetStatus(`Rotated page ${page.pageNumber} left`); }} > { e.stopPropagation(); const command = new RotatePagesCommand( pdfDocument, setPdfDocument, [page.id], 90 ); onExecuteCommand(command); onSetStatus(`Rotated page ${page.pageNumber} right`); }} > { e.stopPropagation(); const command = new DeletePagesCommand( pdfDocument, setPdfDocument, [page.id] ); onExecuteCommand(command); onSetStatus(`Deleted page ${page.pageNumber}`); }} > {index > 0 && ( { e.stopPropagation(); const command = new ToggleSplitCommand( pdfDocument, setPdfDocument, [page.id] ); onExecuteCommand(command); onSetStatus(`Split marker toggled for page ${page.pageNumber}`); }} > )}
); }; export default PageThumbnail;