import { useState, useMemo } from "react"; import { useNavigate } from "react-router-dom"; import { TOOLS } from "@stirling-image/shared"; import { Download, Undo2, ChevronDown, ChevronRight, ArrowRight, } from "lucide-react"; import * as icons from "lucide-react"; import { triggerDownload, formatFileSize } from "@/lib/download"; import { getSuggestedTools } from "@/lib/suggested-tools"; interface ReviewPanelProps { filename: string; fileSize: number; fileType: string; downloadUrl: string; previewUrl?: string; onUndo: () => void; currentToolId: string; } export function ReviewPanel({ filename, fileSize, fileType, downloadUrl, previewUrl, onUndo, currentToolId, }: ReviewPanelProps) { const [isExpanded, setIsExpanded] = useState(true); const [isSuggestionsExpanded, setIsSuggestionsExpanded] = useState(true); const navigate = useNavigate(); const suggestedToolIds = useMemo( () => getSuggestedTools(currentToolId), [currentToolId], ); const suggestedTools = useMemo( () => suggestedToolIds .map((id) => TOOLS.find((t) => t.id === id)) .filter( (t): t is (typeof TOOLS)[number] => t !== undefined, ), [suggestedToolIds], ); const timestamp = useMemo(() => { const now = new Date(); return now.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" }); }, []); const handleDownload = () => { triggerDownload(downloadUrl, filename); }; return (
{/* Review header */} {isExpanded && (
{/* Preview thumbnail */} {previewUrl && (
Processed result
)} {/* File metadata */}

{filename}

Size: {formatFileSize(fileSize)}

Type: {fileType}

Processed: {timestamp}

{/* Action buttons */}
{/* Suggested tools */} {suggestedTools.length > 0 && (
{isSuggestionsExpanded && (
{suggestedTools.map((tool) => { const ToolIcon = ( icons as unknown as Record< string, React.ComponentType<{ className?: string }> > )[tool.icon] || icons.FileImage; return ( ); })}
)}
)}
)}
); }