import { Tooltip, ActionIcon, } from "@mantine/core"; import UndoIcon from "@mui/icons-material/Undo"; import RedoIcon from "@mui/icons-material/Redo"; import ContentCutIcon from "@mui/icons-material/ContentCut"; import RotateLeftIcon from "@mui/icons-material/RotateLeft"; import RotateRightIcon from "@mui/icons-material/RotateRight"; import DeleteIcon from "@mui/icons-material/Delete"; import InsertPageBreakIcon from "@mui/icons-material/InsertPageBreak"; interface PageEditorControlsProps { // Close/Reset functions onClosePdf: () => void; // Undo/Redo onUndo: () => void; onRedo: () => void; canUndo: boolean; canRedo: boolean; // Page operations onRotate: (direction: 'left' | 'right') => void; onDelete: () => void; onSplit: () => void; onSplitAll: () => void; onPageBreak: () => void; onPageBreakAll: () => void; // Export functions (moved to right rail) onExportAll: () => void; exportLoading: boolean; // Selection state selectionMode: boolean; selectedPageIds: string[]; displayDocument?: { pages: { id: string; pageNumber: number }[] }; // Split state (for tooltip logic) splitPositions?: Set; totalPages?: number; } const PageEditorControls = ({ onUndo, onRedo, canUndo, canRedo, onRotate, onDelete, onSplit, onPageBreak, selectedPageIds, displayDocument, splitPositions, totalPages }: PageEditorControlsProps) => { // Calculate split tooltip text using smart toggle logic const getSplitTooltip = () => { if (!splitPositions || !totalPages || selectedPageIds.length === 0) { return "Split Selected"; } // Convert selected pages to split positions (same logic as handleSplit) const selectedPageNumbers = displayDocument ? selectedPageIds.map(id => { const page = displayDocument.pages.find(p => p.id === id); return page?.pageNumber || 0; }).filter(num => num > 0) : []; const selectedSplitPositions = selectedPageNumbers.map(pageNum => pageNum - 1).filter(pos => pos < totalPages - 1); if (selectedSplitPositions.length === 0) { return "Split Selected"; } // Smart toggle logic: follow the majority, default to adding splits if equal const existingSplitsCount = selectedSplitPositions.filter(pos => splitPositions.has(pos)).length; const noSplitsCount = selectedSplitPositions.length - existingSplitsCount; // Remove splits only if majority already have splits // If equal (50/50), default to adding splits const willRemoveSplits = existingSplitsCount > noSplitsCount; if (willRemoveSplits) { return existingSplitsCount === selectedSplitPositions.length ? "Remove All Selected Splits" : "Remove Selected Splits"; } else { return existingSplitsCount === 0 ? "Split Selected" : "Complete Selected Splits"; } }; // Calculate page break tooltip text const getPageBreakTooltip = () => { return selectedPageIds.length > 0 ? `Insert ${selectedPageIds.length} Page Break${selectedPageIds.length > 1 ? 's' : ''}` : "Insert Page Breaks"; }; return (
{/* Undo/Redo */}
{/* Page Operations */} onRotate('left')} disabled={selectedPageIds.length === 0} variant="subtle" style={{ color: 'var(--mantine-color-dimmed)' }} radius="md" size="lg" > onRotate('right')} disabled={selectedPageIds.length === 0} variant="subtle" style={{ color: 'var(--mantine-color-dimmed)' }} radius="md" size="lg" >
); }; export default PageEditorControls;