import React, { useEffect, useRef } from "react"; import { Button, Stack } from "@mantine/core"; import { useTranslation } from "react-i18next"; import DownloadIcon from "@mui/icons-material/Download"; import UndoIcon from "@mui/icons-material/Undo"; import ErrorNotification from "./ErrorNotification"; import ResultsPreview from "./ResultsPreview"; import { SuggestedToolsSection } from "./SuggestedToolsSection"; import { ToolOperationHook } from "../../../hooks/tools/shared/useToolOperation"; import { Tooltip } from "../../shared/Tooltip"; export interface ReviewToolStepProps { isVisible: boolean; operation: ToolOperationHook; title?: string; onFileClick?: (file: File) => void; onUndo: () => void; isCollapsed?: boolean; onCollapsedClick?: () => void; } function ReviewStepContent({ operation, onFileClick, onUndo, }: { operation: ToolOperationHook; onFileClick?: (file: File) => void; onUndo: () => void; }) { const { t } = useTranslation(); const stepRef = useRef(null); const handleUndo = async () => { try { onUndo(); } catch (error) { // Error is already handled by useToolOperation, just reset loading state console.error("Undo operation failed:", error); } }; 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, isCollapsed: props.isCollapsed, onCollapsedClick: props.onCollapsedClick, _excludeFromCount: true, _noPadding: true, }, ); }