'use client' import { useEffect, useRef, useState, type ReactNode } from 'react' import Link from 'next/link' import { authText, notifyText, overviewText, profileText, themeText, } from '@/lib/i18n/shell' import { ThemeToggle } from '@/components/ThemeToggle' /** * Konto und Einstellungen, oben rechts. * * Alles, was den einzelnen Nutzer betrifft und nicht die Akten, sammelt sich * hinter dem Profilbild: das Thema, die Benachrichtigungen, der eigene Zugang, * das Abmelden. In der Kopfzeile standen diese Dinge vorher zwischen den * Aktenbereichen und nahmen dort Platz weg, den die Arbeit braucht. * * Das Abmelden kommt als Server Action von aussen herein - dieses Fenster darf * die Sitzung nicht selbst beenden können. */ export function ProfileMenu({ displayName, username, avatar, signOutAction, }: { displayName: string username: string avatar: ReactNode signOutAction: () => Promise }) { const [offen, setOffen] = useState(false) const huelle = useRef(null) useEffect(() => { if (!offen) return function daneben(event: PointerEvent) { if (!huelle.current?.contains(event.target as Node)) setOffen(false) } function fluchttaste(event: KeyboardEvent) { if (event.key === 'Escape') setOffen(false) } document.addEventListener('pointerdown', daneben) document.addEventListener('keydown', fluchttaste) return () => { document.removeEventListener('pointerdown', daneben) document.removeEventListener('keydown', fluchttaste) } }, [offen]) return (
{offen ? (

{displayName}

@{username}

{themeText.label}
) : null}
) }