import React, { useEffect, useRef } from 'react'; import { Button, Stack, Text } from '@mantine/core'; import { useTranslation } from 'react-i18next'; import DownloadIcon from '@mui/icons-material/Download'; import ErrorNotification from './ErrorNotification'; import ResultsPreview from './ResultsPreview'; import { SuggestedToolsSection } from './SuggestedToolsSection'; import { ToolOperationHook } from '../../../hooks/tools/shared/useToolOperation'; export interface ReviewToolStepProps { isVisible: boolean; operation: ToolOperationHook; title?: string; onFileClick?: (file: File) => void; } function ReviewStepContent({ operation, onFileClick }: { operation: ToolOperationHook; onFileClick?: (file: File) => void }) { const { t } = useTranslation(); const stepRef = useRef(null); const previewFiles = operation.files?.map((file, index) => ({ file, thumbnail: operation.thumbnails[index] })) || []; // Auto-scroll to bottom when content appears useEffect(() => { if (stepRef.current && (previewFiles.length > 0 || operation.downloadUrl || operation.errorMessage)) { const scrollableContainer = stepRef.current.closest('[style*="overflow: auto"]') as HTMLElement; if (scrollableContainer) { setTimeout(() => { scrollableContainer.scrollTo({ top: scrollableContainer.scrollHeight, behavior: 'smooth' }); }, 100); // Small delay to ensure content is rendered } } }, [previewFiles.length, operation.downloadUrl, operation.errorMessage]); return ( {previewFiles.length > 0 && ( )} {operation.downloadUrl && ( )} ); } export function createReviewToolStep( createStep: (title: string, props: any, children?: React.ReactNode) => React.ReactElement, props: ReviewToolStepProps ): React.ReactElement { const { t } = useTranslation(); return createStep(t("review", "Review"), { isVisible: props.isVisible, _excludeFromCount: true, _noPadding: true }, ( )); }