'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 getRoleBadgeStyle = (role: string) => { switch (role) { case 'owner': return { backgroundColor: 'rgba(168, 85, 247, 0.2)', color: '#d8b4fe', border: '1px solid rgba(168, 85, 247, 0.3)' }; case 'admin': return { backgroundColor: 'rgba(59, 130, 246, 0.2)', color: '#93c5fd', border: '1px solid rgba(59, 130, 246, 0.3)' }; default: return { backgroundColor: 'rgba(115, 115, 115, 0.2)', color: '#d1d5db', border: '1px solid rgba(115, 115, 115, 0.3)' }; } }; 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 style = getRoleBadgeStyle(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 && ( )}
); }