'use client'; import { DateFormatter } from '@/lib/formatters/DateFormatter'; import { AdminUsersViewData } from '@/lib/view-data/AdminUsersViewData'; import { Badge } from '@/ui/Badge'; import { Button } from '@/ui/Button'; import { DriverIdentity } from '@/ui/DriverIdentity'; import { Group } from '@/ui/Group'; import { IconButton } from '@/ui/IconButton'; import { SimpleCheckbox } from '@/ui/SimpleCheckbox'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/ui/Table'; import { Text } from '@/ui/Text'; import { MoreVertical, Trash2 } from 'lucide-react'; import { UserStatusTag } from './UserStatusTag'; interface AdminUsersTableProps { users: AdminUsersViewData['users']; selectedUserIds: string[]; onSelectUser: (userId: string) => void; onSelectAll: () => void; onUpdateStatus: (userId: string, status: string) => void; onDeleteUser: (userId: string) => void; deletingUserId?: string | null; } /** * AdminUsersTable * * Semantic table for managing users. * High-density, instrument-grade UI. */ export function AdminUsersTable({ users, selectedUserIds, onSelectUser, onSelectAll, onUpdateStatus, onDeleteUser, deletingUserId }: AdminUsersTableProps) { const allSelected = users.length > 0 && selectedUserIds.length === users.length; return ( User Roles Status Last Login Actions {users.map((user) => ( onSelectUser(user.id)} aria-label={`Select user ${user.displayName}`} /> {user.roles.map((role) => ( {role} ))} {user.lastLoginAt ? DateFormatter.formatShort(user.lastLoginAt) : 'Never'} {user.status === 'active' ? ( ) : user.status === 'suspended' ? ( ) : null} onDeleteUser(user.id)} disabled={deletingUserId === user.id} icon={Trash2} title="Delete" /> ))}
); }