import { useState } from 'react'; import { AppBar, Toolbar, Typography, IconButton, Menu, MenuItem, Avatar, ListItemIcon, Divider, Box, Tooltip, } from '@mui/material'; import { LocalFireDepartment, Person, Settings, Logout, Menu as MenuIcon, Launch, Chat, } from '@mui/icons-material'; import { useQuery } from '@tanstack/react-query'; import { useAuth } from '../../contexts/AuthContext'; import { useNavigate } from 'react-router-dom'; import NotificationBell from './NotificationBell'; import { configApi } from '../../services/config'; import { useLayout } from '../../contexts/LayoutContext'; interface HeaderProps { onMenuClick: () => void; } function Header({ onMenuClick }: HeaderProps) { const { user, logout } = useAuth(); const navigate = useNavigate(); const { toggleChatPanel } = useLayout(); const [anchorEl, setAnchorEl] = useState(null); const [toolsAnchorEl, setToolsAnchorEl] = useState(null); const { data: externalLinks } = useQuery({ queryKey: ['external-links'], queryFn: () => configApi.getExternalLinks(), staleTime: 10 * 60 * 1000, enabled: !!user, }); const handleMenuOpen = (event: React.MouseEvent) => { setAnchorEl(event.currentTarget); }; const handleMenuClose = () => { setAnchorEl(null); }; const handleToolsOpen = (event: React.MouseEvent) => { setToolsAnchorEl(event.currentTarget); }; const handleToolsClose = () => { setToolsAnchorEl(null); }; const handleProfile = () => { handleMenuClose(); navigate('/profile'); }; const handleSettings = () => { handleMenuClose(); navigate('/settings'); }; const handleLogout = () => { handleMenuClose(); logout(); }; const handleOpenExternal = (url: string) => { handleToolsClose(); window.open(url, '_blank', 'noopener,noreferrer'); }; // Get initials for avatar const getInitials = () => { if (!user) return '?'; const initials = (user.given_name?.[0] || '') + (user.family_name?.[0] || ''); return initials || user.name?.[0] || '?'; }; const linkEntries = externalLinks ? Object.entries(externalLinks).filter(([, url]) => !!url) : []; const linkLabels: Record = { nextcloud: 'Nextcloud', bookstack: 'BookStack', vikunja: 'Vikunja', }; return ( theme.zIndex.drawer + 1, }} > Feuerwehr Dashboard {user && ( <> {linkEntries.length > 0 && ( <> {linkEntries.map(([key, url]) => ( handleOpenExternal(url)}> {linkLabels[key] || key} ))} )} {getInitials()} {user.name} {user.email} Profil Einstellungen Abmelden )} ); } export default Header;