'use client'; import React from 'react'; import { Card } from '@/ui/Card'; import { Table, TableHead, TableBody, TableRow, TableHeader, TableCell } from '@/ui/Table'; import { Button } from '@/ui/Button'; import { Text } from '@/ui/Text'; import { Heading } from '@/ui/Heading'; import { Box } from '@/ui/Box'; import { Stack } from '@/ui/Stack'; import { Container } from '@/ui/Container'; import { Icon } from '@/ui/Icon'; import { StatusBadge } from '@/ui/StatusBadge'; import { InfoBox } from '@/ui/InfoBox'; import { RefreshCw, Shield, Trash2, Users } from 'lucide-react'; import { AdminUsersViewData } from '@/lib/view-data/AdminUsersViewData'; import { UserFilters } from '@/components/admin/UserFilters'; import { UserStatsSummary } from '@/components/admin/UserStatsSummary'; import { Surface } from '@/ui/Surface'; interface AdminUsersTemplateProps { viewData: 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; } export function AdminUsersTemplate({ viewData, onRefresh, onSearch, onFilterRole, onFilterStatus, onClearFilters, onUpdateStatus, onDeleteUser, search, roleFilter, statusFilter, loading, error, deletingUser }: AdminUsersTemplateProps) { const getStatusBadgeVariant = (status: string): 'success' | 'warning' | 'error' | 'info' => { switch (status) { case 'active': return 'success'; case 'suspended': return 'warning'; case 'deleted': return 'error'; default: return 'info'; } }; const getRoleBadgeProps = (role: string): { bg: string; color: string; borderColor: string } => { switch (role) { case 'owner': return { bg: 'bg-purple-500/20', color: '#d8b4fe', borderColor: 'border-purple-500/30' }; case 'admin': return { bg: 'bg-blue-500/20', color: '#93c5fd', borderColor: 'border-blue-500/30' }; default: return { bg: 'bg-neutral-500/20', color: '#d1d5db', borderColor: 'border-neutral-500/30' }; } }; return ( {/* Header */} User Management Manage and monitor all system users {/* Error Banner */} {error && ( )} {/* Filters Card */} {/* Users Table */} {loading ? ( Loading users... ) : !viewData.users || viewData.users.length === 0 ? ( No users found ) : ( User Email Roles Status Last Login Actions {viewData.users.map((user) => ( {user.displayName} ID: {user.id} {user.primaryDriverId && ( Driver: {user.primaryDriverId} )} {user.email} {user.roles.map((role, idx) => { const badgeProps = getRoleBadgeProps(role); return ( {role.charAt(0).toUpperCase() + role.slice(1)} ); })} {user.status.charAt(0).toUpperCase() + user.status.slice(1)} {user.lastLoginAt ? new Date(user.lastLoginAt).toLocaleDateString() : 'Never'} {user.status === 'active' && ( )} {user.status === 'suspended' && ( )} {user.status !== 'deleted' && ( )} ))}
)}
{/* Stats Summary */} {viewData.users.length > 0 && ( )}
); }