import Card from '@/components/ui/Card'; import StatusBadge from '@/components/ui/StatusBadge'; import { Search, Filter, RefreshCw, Users, Shield, Trash2, AlertTriangle } from 'lucide-react'; import { AdminUsersViewData } from '@/lib/view-data/AdminUsersViewData'; /** * AdminUsersTemplate * * Pure template for admin users page. * Accepts ViewData only, no business logic. */ export function AdminUsersTemplate(props: { adminUsersViewData: AdminUsersViewData; onRefresh: () => void; onSearch: (search: string) => void; onFilterRole: (role: string) => void; onFilterStatus: (status: string) => void; onClearFilters: () => void; onUpdateStatus: (userId: string, status: string) => void; onDeleteUser: (userId: string) => void; search: string; roleFilter: string; statusFilter: string; loading: boolean; error: string | null; deletingUser: string | null; }) { const { adminUsersViewData: viewData, onRefresh, onSearch, onFilterRole, onFilterStatus, onClearFilters, onUpdateStatus, onDeleteUser, search, roleFilter, statusFilter, loading, error, deletingUser } = props; const toStatusBadgeProps = ( status: string, ): { status: 'success' | 'warning' | 'error' | 'neutral'; label: string } => { switch (status) { case 'active': return { status: 'success', label: 'Active' }; case 'suspended': return { status: 'warning', label: 'Suspended' }; case 'deleted': return { status: 'error', label: 'Deleted' }; default: return { status: 'neutral', label: status }; } }; const getRoleBadgeClass = (role: string) => { switch (role) { case 'owner': return 'bg-purple-500/20 text-purple-300 border border-purple-500/30'; case 'admin': return 'bg-blue-500/20 text-blue-300 border border-blue-500/30'; default: return 'bg-gray-500/20 text-gray-300 border border-gray-500/30'; } }; const getRoleBadgeLabel = (role: string) => { switch (role) { case 'owner': return 'Owner'; case 'admin': return 'Admin'; case 'user': return 'User'; default: return role; } }; return (
Manage and monitor all system users
| User | Roles | Status | Last Login | Actions | |
|---|---|---|---|---|---|
|
{user.displayName}
ID: {user.id}
{user.primaryDriverId && (
Driver: {user.primaryDriverId}
)}
|
{user.email}
|
{user.roles.map((role: string, idx: number) => (
{getRoleBadgeLabel(role)}
))}
|
{(() => {
const badge = toStatusBadgeProps(user.status);
return |
{user.lastLoginAt ? new Date(user.lastLoginAt).toLocaleDateString() : 'Never'}
|
{user.status === 'active' && (
)}
{user.status === 'suspended' && (
)}
{user.status !== 'deleted' && (
)}
|