import React, { useState, useCallback, useEffect } from "react"; import { useTranslation } from 'react-i18next'; import { useSearchParams } from "react-router-dom"; import { useToolParams } from "../hooks/useToolParams"; import AddToPhotosIcon from "@mui/icons-material/AddToPhotos"; import ContentCutIcon from "@mui/icons-material/ContentCut"; import ZoomInMapIcon from "@mui/icons-material/ZoomInMap"; import { Group, Paper, Box, Button, useMantineTheme } from "@mantine/core"; import { useRainbowThemeContext } from "../components/RainbowThemeProvider"; import rainbowStyles from '../styles/rainbow.module.css'; import ToolPicker from "../components/ToolPicker"; import FileManager from "../components/FileManager"; import SplitPdfPanel from "../tools/Split"; import CompressPdfPanel from "../tools/Compress"; import MergePdfPanel from "../tools/Merge"; import PageEditor from "../components/PageEditor"; import PageEditorControls from "../components/PageEditorControls"; import Viewer from "../components/Viewer"; import TopControls from "../components/TopControls"; import ToolRenderer from "../components/ToolRenderer"; import QuickAccessBar from "../components/QuickAccessBar"; type ToolRegistryEntry = { icon: React.ReactNode; name: string; component: React.ComponentType; view: string; }; type ToolRegistry = { [key: string]: ToolRegistryEntry; }; // Base tool registry without translations const baseToolRegistry = { split: { icon: , component: SplitPdfPanel, view: "viewer" }, compress: { icon: , component: CompressPdfPanel, view: "viewer" }, merge: { icon: , component: MergePdfPanel, view: "fileManager" }, }; export default function HomePage() { const { t } = useTranslation(); const [searchParams] = useSearchParams(); const theme = useMantineTheme(); const { isRainbowMode } = useRainbowThemeContext(); // Core app state const [selectedToolKey, setSelectedToolKey] = useState(searchParams.get("t") || "split"); const [currentView, setCurrentView] = useState(searchParams.get("v") || "viewer"); const [pdfFile, setPdfFile] = useState(null); const [files, setFiles] = useState([]); const [downloadUrl, setDownloadUrl] = useState(null); const [sidebarsVisible, setSidebarsVisible] = useState(true); const [leftPanelView, setLeftPanelView] = useState<'toolPicker' | 'toolContent'>('toolPicker'); const [readerMode, setReaderMode] = useState(false); // Page editor functions const [pageEditorFunctions, setPageEditorFunctions] = useState(null); // URL parameter management const { toolParams, updateParams } = useToolParams(selectedToolKey, currentView); const toolRegistry: ToolRegistry = { split: { ...baseToolRegistry.split, name: t("home.split.title", "Split PDF") }, compress: { ...baseToolRegistry.compress, name: t("home.compressPdfs.title", "Compress PDF") }, merge: { ...baseToolRegistry.merge, name: t("home.merge.title", "Merge PDFs") }, }; // Handle tool selection const handleToolSelect = useCallback( (id: string) => { setSelectedToolKey(id); if (toolRegistry[id]?.view) setCurrentView(toolRegistry[id].view); setLeftPanelView('toolContent'); // Switch to tool content view when a tool is selected setReaderMode(false); // Exit reader mode when selecting a tool }, [toolRegistry] ); // Handle quick access actions const handleQuickAccessTools = useCallback(() => { setLeftPanelView('toolPicker'); setReaderMode(false); }, []); const handleReaderToggle = useCallback(() => { setReaderMode(!readerMode); }, [readerMode]); const selectedTool = toolRegistry[selectedToolKey]; return ( {/* Quick Access Bar */} {/* Left: Tool Picker OR Selected Tool Panel */}
{leftPanelView === 'toolPicker' ? ( // Tool Picker View
) : ( // Selected Tool Content View
{/* Back button */}
{/* Tool title */}

{selectedTool?.name}

{/* Tool content */}
)}
{/* Main View */} {/* Top Controls */} {/* Main content area */} {(currentView === "viewer" || currentView === "pageEditor") && !pdfFile ? ( ) : currentView === "viewer" ? ( ) : currentView === "pageEditor" ? ( <> {pdfFile && pageEditorFunctions && ( pageEditorFunctions.showExportPreview(true)} onExportAll={() => pageEditorFunctions.showExportPreview(false)} exportLoading={pageEditorFunctions.exportLoading} selectionMode={pageEditorFunctions.selectionMode} selectedPages={pageEditorFunctions.selectedPages} /> )} ) : ( )}
); }