/** * UserSection Component * * Zeigt Benutzerinformationen und Logout-Button in der Sidebar. */ import React, { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { useCurrentUser } from '../../hooks/useUsers'; import { NotificationBell } from '../NotificationBell'; import { _isOnboardingHidden, _showOnboarding } from '../OnboardingAssistant'; import styles from './UserSection.module.css'; import { useLanguage } from '../../providers/language/LanguageContext'; export const UserSection: React.FC = () => { const { t } = useLanguage(); const { user, logout } = useCurrentUser(); const navigate = useNavigate(); const [isLoggingOut, setIsLoggingOut] = useState(false); const [showMenu, setShowMenu] = useState(false); const [showLegalModal, setShowLegalModal] = useState(false); const [onboardingHidden, setOnboardingHidden] = useState(() => _isOnboardingHidden()); const handleLogout = async () => { setIsLoggingOut(true); try { await logout(); } catch (error) { console.error('Logout failed:', error); setIsLoggingOut(false); } }; const handleSettings = () => { navigate('/settings'); setShowMenu(false); }; const handleBilling = () => { navigate('/billing/transactions'); setShowMenu(false); }; const handleLegal = () => { setShowLegalModal(true); setShowMenu(false); }; const handleOnboarding = () => { _showOnboarding(); setOnboardingHidden(false); navigate('/', { state: { showOnboarding: Date.now() } }); setShowMenu(false); }; if (!user) { return null; } // Initialen für Avatar const initials = (() => { const name = user.fullName || user.username || ''; const parts = name.trim().split(/\s+/); if (parts.length >= 2) return (parts[0][0] + parts[parts.length - 1][0]).toLocaleUpperCase(); return [...name.trim()].slice(0, 2).join('').toLocaleUpperCase() || '?'; })(); return (
{t('By using this application')}
{t('To the fullest extent possible, you waive')}