import { useState, useRef, useEffect, useCallback } from 'react' import { Link, useNavigate } from 'react-router-dom' import { Search, Zap, Bell, LogOut, User, Shield, Settings } from 'lucide-react' import { useAuthStore } from '@/store/authStore' import { usePermissions } from '@/hooks/usePermissions' import { useWorkspaceStore } from '@/store/workspaceStore' import { getWorkspaceLabels } from '@/constants/workspaceLabels' import { BrandLogo } from '@/components/common/BrandLogo' import { CommandPalette } from './CommandPalette' import { QuickLaunch } from './QuickLaunch' import { cn } from '@/lib/utils' export function TopBar() { const navigate = useNavigate() const { user, logout } = useAuthStore() const { effectiveRole, isSuperAdmin } = usePermissions() const activeWorkspace = useWorkspaceStore(s => s.getActiveWorkspace()) const sidebarCollapsed = useWorkspaceStore(s => s.sidebarCollapsed) const labels = getWorkspaceLabels(activeWorkspace?.slug) const [userMenuOpen, setUserMenuOpen] = useState(false) const [commandPaletteOpen, setCommandPaletteOpen] = useState(false) const [quickLaunchOpen, setQuickLaunchOpen] = useState(false) const menuRef = useRef(null) const handleLogout = async () => { setUserMenuOpen(false) await logout() navigate('/login') } useEffect(() => { const handleClickOutside = (e: MouseEvent) => { if (menuRef.current && !menuRef.current.contains(e.target as Node)) { setUserMenuOpen(false) } } if (userMenuOpen) document.addEventListener('mousedown', handleClickOutside) return () => document.removeEventListener('mousedown', handleClickOutside) }, [userMenuOpen]) // ⌘K / Ctrl+K global shortcut const handleGlobalKeyDown = useCallback((e: KeyboardEvent) => { if ((e.metaKey || e.ctrlKey) && e.key === 'k') { e.preventDefault() setCommandPaletteOpen(prev => !prev) } }, []) useEffect(() => { document.addEventListener('keydown', handleGlobalKeyDown) return () => document.removeEventListener('keydown', handleGlobalKeyDown) }, [handleGlobalKeyDown]) const initials = user?.name ? user.name.split(' ').map(n => n[0]).join('').toUpperCase().slice(0, 2) : user?.email?.[0]?.toUpperCase() || '?' return ( <>
{/* Logo area */}
{!sidebarCollapsed && ( Resolution Flow )} {/* Search trigger */} {/* Spacer */}
{/* Action buttons */}
{/* User avatar & menu */}
{userMenuOpen && (

{user?.name || user?.email}

{effectiveRole && effectiveRole !== 'engineer' && ( {effectiveRole === 'super_admin' ? 'Super Admin' : effectiveRole === 'owner' ? 'Owner' : 'Viewer'} )}
setUserMenuOpen(false)} className="flex items-center gap-2 rounded-md px-3 py-2 text-sm text-muted-foreground hover:bg-accent hover:text-foreground" > Account setUserMenuOpen(false)} className="flex items-center gap-2 rounded-md px-3 py-2 text-sm text-muted-foreground hover:bg-accent hover:text-foreground" > Settings {isSuperAdmin && ( setUserMenuOpen(false)} className="flex items-center gap-2 rounded-md px-3 py-2 text-sm text-muted-foreground hover:bg-accent hover:text-foreground" > Admin Panel )}
)}
{/* Command Palette */} setCommandPaletteOpen(false)} /> setQuickLaunchOpen(false)} /> ) }