import { CircleUser } from "lucide-react"; import StatusCircle from "~/components/StatusCircle"; import { Machine, User } from "~/types"; import cn from "~/utils/cn"; import MenuOptions from "./menu"; interface UserRowProps { role: string; user: User & { machines: Machine[] }; headscaleUsers: { id: string; name: string; claimed: boolean }[]; currentLink?: string; } export default function UserRow({ user, role, headscaleUsers, currentLink }: UserRowProps) { const isOnline = user.machines.some((machine) => machine.online); const lastSeen = user.machines.reduce( (acc, machine) => Math.max(acc, new Date(machine.lastSeen).getTime()), 0, ); return (
{user.name || user.displayName}
{user.email}
{mapRoleToName(role)}
{new Date(user.createdAt).toLocaleDateString()}
{isOnline ? "Connected" : new Date(lastSeen).toLocaleString()}
Unmanaged
; case "invalid-oidc": returnInvalid
; case "no-role": returnUnregistered
; case "owner": return "Owner"; case "admin": return "Admin"; case "network_admin": return "Network Admin"; case "it_admin": return "IT Admin"; case "auditor": return "Auditor"; case "member": returnNo Access
; default: return "Unknown"; } }