Update compress to work with new tool system

This commit is contained in:
Reece 2025-07-23 10:46:03 +01:00
parent 22d7ca5479
commit 4a5a709836
2 changed files with 28 additions and 36 deletions

View File

@ -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<string, ToolDefinition> = {
split: {
id: "split",
@ -23,25 +17,16 @@ const toolDefinitions: Record<string, ToolDefinition> = {
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: <ZoomInMapIcon />,
// component: React.lazy(() => import("../tools/Compress")),
// maxFiles: 1,
// category: "optimization",
// description: "Reduce PDF file size",
// endpoints: ["compress-pdf"]
// },
// merge: {
// id: "merge",
// icon: <AddToPhotosIcon />,
// component: React.lazy(() => import("../tools/Merge")),
// maxFiles: -1,
// category: "manipulation",
// description: "Combine multiple PDF files",
// endpoints: ["merge-pdfs"]
// },
compress: {
id: "compress",
icon: <ZoomInMapIcon />,
component: React.lazy(() => import("../tools/Compress")),
maxFiles: -1,
category: "optimization",
description: "Reduce PDF file size",
endpoints: ["compress-pdf"]
},
};

View File

@ -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) => {