"use client"; import { BadgeCheck, LogOut } from "lucide-react"; import { useRouter } from "next/navigation"; import { useState } from "react"; import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; import { Button } from "@/components/ui/button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Spinner } from "@/components/ui/spinner"; import { logout } from "@/lib/auth-utils"; import { cleanupElectric } from "@/lib/electric/client"; import { resetUser, trackLogout } from "@/lib/posthog/events"; export function UserDropdown({ user, }: { user: { name: string; email: string; avatar: string; }; }) { const router = useRouter(); const [isLoggingOut, setIsLoggingOut] = useState(false); const handleLogout = async () => { if (isLoggingOut) return; setIsLoggingOut(true); try { // Track logout event and reset PostHog identity trackLogout(); resetUser(); // Best-effort cleanup of Electric SQL / PGlite // Even if this fails, login-time cleanup will handle it try { await cleanupElectric(); } catch (err) { console.warn("[Logout] Electric cleanup failed (will be handled on next login):", err); } // Revoke refresh token on server and clear all tokens from localStorage await logout(); if (typeof window !== "undefined") { window.location.href = "/"; } } catch (error) { console.error("Error during logout:", error); // Even if there's an error, try to clear tokens and redirect await logout(); if (typeof window !== "undefined") { window.location.href = "/"; } } }; return (

{user.name}

{user.email}

router.push(`/dashboard/api-key`)} className="text-xs md:text-sm" > API Key {isLoggingOut ? ( ) : ( )} {isLoggingOut ? "Logging out..." : "Log out"}
); }