import { useState } from "react"; import { Avatar, AvatarFallback } from "~/components/ui/avatar"; import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "~/components/ui/dropdown-menu"; import { ChevronDown, LineChartIcon, LogOut, Moon, Settings, Sun, } from "lucide-react"; import { useDisplayedTheme } from "~/components/theme-provider"; import { useNavigate } from "react-router"; import { logout, type User } from "~/lib/api"; import { useQueryClient } from "@tanstack/react-query"; export default function UserDropdown({ user }: { user: User }) { const { theme, setTheme } = useDisplayedTheme(); const [open, setOpen] = useState(false); const navigate = useNavigate(); const useLogout = () => { const queryClient = useQueryClient(); // Logout, invalidate user cache, and redirect to login return async () => { try { await logout(); queryClient.removeQueries({ queryKey: ["user"] }); navigate("/login", { replace: true }); } catch (error) { console.error("Logout failed:", error); } }; }; const handleLogout = useLogout(); return (

{user.fullName}

{user.className}

setTheme(theme === "dark" ? "light" : "dark")} > {theme === "dark" ? ( <> Mode clair ) : ( <> Mode sombre )} { e.stopPropagation(); e.preventDefault(); navigate("/settings"); }} > Paramètres { e.stopPropagation(); e.preventDefault(); navigate("/progress"); }} > Progression Se déconnecter
); } const getAvatar = (name: string) => { return name .split(" ") .map((word) => word.charAt(0)) .join("") .toUpperCase(); };