import React, { useEffect, useMemo } from "react"; import { Button, Stack, Text } from "@mantine/core"; import { useTranslation } from "react-i18next"; import DownloadIcon from "@mui/icons-material/Download"; import { useEndpointEnabled } from "../hooks/useEndpointConfig"; import { useFileContext } from "../contexts/FileContext"; import ToolStep, { ToolStepContainer } from "../components/tools/shared/ToolStep"; import OperationButton from "../components/tools/shared/OperationButton"; import ErrorNotification from "../components/tools/shared/ErrorNotification"; import FileStatusIndicator from "../components/tools/shared/FileStatusIndicator"; import ResultsPreview from "../components/tools/shared/ResultsPreview"; import CompressSettings from "../components/tools/compress/CompressSettings"; import { useCompressParameters } from "../hooks/tools/compress/useCompressParameters"; import { useCompressOperation } from "../hooks/tools/compress/useCompressOperation"; interface CompressProps { selectedFiles?: File[]; onPreviewFile?: (file: File | null) => void; } const Compress = ({ selectedFiles = [], onPreviewFile }: CompressProps) => { const { t } = useTranslation(); const { setCurrentMode } = useFileContext(); const compressParams = useCompressParameters(); const compressOperation = useCompressOperation(); // Endpoint validation const { enabled: endpointEnabled, loading: endpointLoading } = useEndpointEnabled("compress-pdf"); useEffect(() => { compressOperation.resetResults(); onPreviewFile?.(null); }, [compressParams.parameters, selectedFiles]); const handleCompress = async () => { await compressOperation.executeOperation( compressParams.parameters, selectedFiles ); }; const handleThumbnailClick = (file: File) => { onPreviewFile?.(file); sessionStorage.setItem('previousMode', 'compress'); setCurrentMode('viewer'); }; const handleSettingsReset = () => { compressOperation.resetResults(); onPreviewFile?.(null); setCurrentMode('compress'); }; const hasFiles = selectedFiles.length > 0; const hasResults = compressOperation.downloadUrl !== null; const filesCollapsed = hasFiles; const settingsCollapsed = hasResults; const previewResults = useMemo(() => compressOperation.files?.map((file, index) => ({ file, thumbnail: compressOperation.thumbnails[index] })) || [], [compressOperation.files, compressOperation.thumbnails] ); return ( {/* Files Step */} {/* Settings Step */} {/* Results Step */} {compressOperation.status && ( {compressOperation.status} )} {compressOperation.downloadUrl && ( )} ); } export default Compress;