"use client"; import React from "react"; import Link from "next/link"; import { KeyRound, LogOut, Settings, User } from "lucide-react"; import { useAuth } from "@/components/auth/authContext"; import { logout } from "@/lib/frontend/apiClient"; import { buildLoginUrl, LOGIN_REASONS } from "@/lib/frontend/authRedirect"; import { Button } from "@/components/ui/button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; /** * UserStatus (RHL-020) * * Updated responsibilities (RHL-032): * - Display minimal session info in the TopNav. * - Act as a user action menu trigger (settings/logout). * * UX rule: * - All user-facing strings must be German. */ export default function UserStatus() { const { status, user } = useAuth(); function formatRole(role) { if (role === "branch") return "Niederlassung"; if (role === "admin") return "Admin"; if (role === "dev") return "Entwicklung"; return role ? String(role) : "Unbekannt"; } const isAuthenticated = status === "authenticated" && user; let text = "Nicht geladen"; if (status === "loading") text = "Lädt…"; if (isAuthenticated) { const roleLabel = formatRole(user.role); text = user.branchId ? `${roleLabel} (${user.branchId})` : roleLabel; } if (status === "unauthenticated") text = "Abgemeldet"; if (status === "error") text = "Fehler"; async function handleLogout() { try { await logout(); } catch (err) { // Logout is idempotent; we still redirect to login for predictable UX. console.error("[UserStatus] logout failed:", err); } const loginUrl = buildLoginUrl({ reason: LOGIN_REASONS.LOGGED_OUT }); window.location.replace(loginUrl); } return ( Benutzer
{isAuthenticated ? `Angemeldet als: ${text}` : "Keine aktive Sitzung."}
{ e.preventDefault(); handleLogout(); }} >
); }