From 4a5a709836c2e7c41331cd3a75908adb0f7136c2 Mon Sep 17 00:00:00 2001 From: Reece Date: Wed, 23 Jul 2025 10:46:03 +0100 Subject: [PATCH] Update compress to work with new tool system --- frontend/src/hooks/useToolManagement.tsx | 37 +++++++----------------- frontend/src/tools/Compress.tsx | 27 ++++++++++------- 2 files changed, 28 insertions(+), 36 deletions(-) diff --git a/frontend/src/hooks/useToolManagement.tsx b/frontend/src/hooks/useToolManagement.tsx index 73abfb1e4..7ada59024 100644 --- a/frontend/src/hooks/useToolManagement.tsx +++ b/frontend/src/hooks/useToolManagement.tsx @@ -1,18 +1,12 @@ import React, { useState, useCallback, useMemo, useEffect } from 'react'; import { useTranslation } from 'react-i18next'; -import AddToPhotosIcon from "@mui/icons-material/AddToPhotos"; import ContentCutIcon from "@mui/icons-material/ContentCut"; import ZoomInMapIcon from "@mui/icons-material/ZoomInMap"; import { useMultipleEndpointsEnabled } from "./useEndpointConfig"; import { Tool, ToolDefinition, BaseToolProps, ToolRegistry } from "../types/tool"; -// Import types from central location - no need to redefine -// Tool definitions using simplified interface -// IMPORTANT: Adding a new tool is just 2 steps: -// 1. Add entry here with maxFiles, endpoints, and lazy component -// 2. Create the tool component - NO HomePage changes needed! -// The system automatically handles FileEditor, file selection, and rendering +// Add entry here with maxFiles, endpoints, and lazy component const toolDefinitions: Record = { split: { id: "split", @@ -23,25 +17,16 @@ const toolDefinitions: Record = { description: "Split PDF files into smaller parts", endpoints: ["split-pages", "split-pdf-by-sections", "split-by-size-or-count", "split-pdf-by-chapters"] }, - // compress and merge are disabled for now - legacy tools to be overhauled - // compress: { - // id: "compress", - // icon: , - // component: React.lazy(() => import("../tools/Compress")), - // maxFiles: 1, - // category: "optimization", - // description: "Reduce PDF file size", - // endpoints: ["compress-pdf"] - // }, - // merge: { - // id: "merge", - // icon: , - // component: React.lazy(() => import("../tools/Merge")), - // maxFiles: -1, - // category: "manipulation", - // description: "Combine multiple PDF files", - // endpoints: ["merge-pdfs"] - // }, + compress: { + id: "compress", + icon: , + component: React.lazy(() => import("../tools/Compress")), + maxFiles: -1, + category: "optimization", + description: "Reduce PDF file size", + endpoints: ["compress-pdf"] + }, + }; diff --git a/frontend/src/tools/Compress.tsx b/frontend/src/tools/Compress.tsx index b06945610..89b850889 100644 --- a/frontend/src/tools/Compress.tsx +++ b/frontend/src/tools/Compress.tsx @@ -4,6 +4,7 @@ import { useTranslation } from "react-i18next"; import DownloadIcon from "@mui/icons-material/Download"; import { useEndpointEnabled } from "../hooks/useEndpointConfig"; import { useFileContext } from "../contexts/FileContext"; +import { useToolFileSelection } from "../contexts/FileSelectionContext"; import ToolStep, { ToolStepContainer } from "../components/tools/shared/ToolStep"; import OperationButton from "../components/tools/shared/OperationButton"; @@ -15,15 +16,12 @@ import CompressSettings from "../components/tools/compress/CompressSettings"; import { useCompressParameters } from "../hooks/tools/compress/useCompressParameters"; import { useCompressOperation } from "../hooks/tools/compress/useCompressOperation"; +import { BaseToolProps } from "../types/tool"; -interface CompressProps { - selectedFiles?: File[]; - onPreviewFile?: (file: File | null) => void; -} - -const Compress = ({ selectedFiles = [], onPreviewFile }: CompressProps) => { +const Compress = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => { const { t } = useTranslation(); const { setCurrentMode } = useFileContext(); + const { selectedFiles } = useToolFileSelection(); const compressParams = useCompressParameters(); const compressOperation = useCompressOperation(); @@ -37,10 +35,19 @@ const Compress = ({ selectedFiles = [], onPreviewFile }: CompressProps) => { }, [compressParams.parameters, selectedFiles]); const handleCompress = async () => { - await compressOperation.executeOperation( - compressParams.parameters, - selectedFiles - ); + try { + await compressOperation.executeOperation( + compressParams.parameters, + selectedFiles + ); + if (compressOperation.files && onComplete) { + onComplete(compressOperation.files); + } + } catch (error) { + if (onError) { + onError(error instanceof Error ? error.message : 'Compress operation failed'); + } + } }; const handleThumbnailClick = (file: File) => {