"use client"; import { useState, useTransition, useRef, useEffect } from "react"; import type { UserDto } from "@/lib/api"; export function UserSwitcher({ users, activeUserId, setActiveUserAction, }: { users: UserDto[]; activeUserId: string | null; setActiveUserAction: (formData: FormData) => Promise; }) { const [open, setOpen] = useState(false); const [, startTransition] = useTransition(); const ref = useRef(null); const activeUser = users.find((u) => u.id === activeUserId) ?? null; useEffect(() => { function handleClickOutside(e: MouseEvent) { if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false); } document.addEventListener("mousedown", handleClickOutside); return () => document.removeEventListener("mousedown", handleClickOutside); }, []); function select(userId: string | null) { setOpen(false); startTransition(async () => { const fd = new FormData(); fd.append("user_id", userId ?? ""); await setActiveUserAction(fd); }); } if (users.length === 0) return null; const isImpersonating = activeUserId !== null; return (
{open && (
{users.map((user) => ( ))}
)}
); }