import React, { useState, useRef, useEffect } from 'react'; import { Download, LogOut, Undo2, CloudUpload, Loader2, ChevronDown, RotateCcw, Maximize2, X } from 'lucide-react'; import { cn } from '../lib/utils'; interface TopBarProps { stats: any; activeModule?: string; onExport: () => void; onRefresh?: () => void; hasData: boolean; hasUnsavedChanges: boolean; userEmail?: string; onSignOut?: () => void; canUndo: boolean; onUndo: () => void; undoMessage?: string; undoSteps: number; pendingCount: number; pendingChanges: Record; onSaveAll: () => Promise; onRevertRow: (articleNo: string) => void; isSavingAll: boolean; isMaximized: boolean; onToggleMaximize: () => void; } export function TopBar({ stats, activeModule, onExport, onRefresh, hasData, hasUnsavedChanges, userEmail, onSignOut, canUndo, onUndo, undoMessage, undoSteps, pendingCount, pendingChanges, onSaveAll, onRevertRow, isSavingAll, isMaximized, onToggleMaximize }: TopBarProps) { const [showPending, setShowPending] = useState(false); const dropdownRef = useRef(null); useEffect(() => { if (!showPending) return; const handler = (e: MouseEvent) => { if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) { setShowPending(false); } }; document.addEventListener('mousedown', handler); return () => document.removeEventListener('mousedown', handler); }, [showPending]); // Close dropdown when all changes are saved/reverted useEffect(() => { if (pendingCount === 0) setShowPending(false); }, [pendingCount]); return (
Craze Scan
{stats && activeModule === 'descriptions' && (
Total {stats.total}
Missing DE Long {stats.missingDeLong}
Missing EN Long {stats.missingEnLong}
Missing DE Short {stats.missingDeShort}
Missing EN Short {stats.missingEnShort}
Fully Complete {stats.fullyComplete}
)}
{/* Split button: Save All + dropdown toggle */}
0 ? "shadow-green-900/30" : "shadow-none opacity-40" )}>
{/* Dropdown: list of pending changes */} {showPending && pendingCount > 0 && (
Pending changes {pendingCount} unsaved
{Object.entries(pendingChanges).map(([articleNo, { articleName }]) => (

{articleNo}

{articleName}

))}
)}
{hasData && ( )} {onRefresh && ( )} {userEmail && (
{userEmail}
)}
); }