import { useEffect } 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 { useToolFileSelection } from "../contexts/FileSelectionContext"; 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 SanitizeSettings from "../components/tools/sanitize/SanitizeSettings"; import { useSanitizeParameters } from "../hooks/tools/sanitize/useSanitizeParameters"; import { useSanitizeOperation } from "../hooks/tools/sanitize/useSanitizeOperation"; import { BaseToolProps } from "../types/tool"; import { useFileContext } from "../contexts/FileContext"; const Sanitize = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => { const { t } = useTranslation(); const { selectedFiles } = useToolFileSelection(); const { setCurrentMode } = useFileContext(); const sanitizeParams = useSanitizeParameters(); const sanitizeOperation = useSanitizeOperation(); // Endpoint validation const { enabled: endpointEnabled, loading: endpointLoading } = useEndpointEnabled( sanitizeParams.getEndpointName() ); useEffect(() => { sanitizeOperation.resetResults(); onPreviewFile?.(null); }, [sanitizeParams.parameters, selectedFiles]); const handleSanitize = async () => { try { await sanitizeOperation.executeOperation( sanitizeParams.parameters, selectedFiles, ); if (sanitizeOperation.files && onComplete) { onComplete(sanitizeOperation.files); } } catch (error) { if (onError) { onError(error instanceof Error ? error.message : t('sanitize.error.generic', 'Sanitization failed')); } } }; const handleSettingsReset = () => { sanitizeOperation.resetResults(); onPreviewFile?.(null); }; const handleThumbnailClick = (file: File) => { onPreviewFile?.(file); sessionStorage.setItem('previousMode', 'sanitize'); setCurrentMode('viewer'); }; const hasFiles = selectedFiles.length > 0; const hasResults = sanitizeOperation.files.length > 0; const filesCollapsed = hasFiles; const settingsCollapsed = hasResults; return ( {/* Files Step */} {/* Settings Step */} {/* Results Step */} {sanitizeOperation.status && ( {sanitizeOperation.status} )} {sanitizeOperation.downloadUrl && ( )} ({ file, thumbnail: sanitizeOperation.thumbnails[index] }))} onFileClick={handleThumbnailClick} isGeneratingThumbnails={sanitizeOperation.isGeneratingThumbnails} title={t("sanitize.sanitizationResults", "Sanitization Results")} /> ); } export default Sanitize;