import React, { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { useAuth } from '../../context/AuthContext'; import api from '../../utils/api'; import { Card } from '../../components/ui/card'; import { Button } from '../../components/ui/button'; import { Input } from '../../components/ui/input'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../../components/ui/select'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '../../components/ui/tabs'; import CreateStaffDialog from '../../components/CreateStaffDialog'; import InviteStaffDialog from '../../components/InviteStaffDialog'; import PendingInvitationsTable from '../../components/PendingInvitationsTable'; import { toast } from 'sonner'; import { UserCog, Search, Shield, UserPlus, Mail, Edit, Eye, Trash2, UserCheck, UserX, ShieldIcon } from 'lucide-react'; import StatusBadge from '../../components/StatusBadge'; import { StatCard } from '@/components/StatCard'; import { CircleMinus, CreditCard, Users } from 'lucide-react'; import { useStaff } from '../../hooks/use-users'; const AdminStaff = () => { const navigate = useNavigate(); const { hasPermission, user } = useAuth(); const { users, filteredUsers, loading, searchQuery, setSearchQuery, filterValue: roleFilter, setFilterValue: setRoleFilter, refetch, } = useStaff({ initialFilter: 'all', filterKey: 'role', }); const [createDialogOpen, setCreateDialogOpen] = useState(false); const [inviteDialogOpen, setInviteDialogOpen] = useState(false); const [activeTab, setActiveTab] = useState('staff-list'); const handleToggleStatus = async (userId, currentStatus) => { const newStatus = currentStatus === 'active' ? 'inactive' : 'active'; try { await api.put(`/admin/users/${userId}/status`, { status: newStatus }); toast.success(`User ${newStatus === 'active' ? 'activated' : 'deactivated'} successfully`); refetch(); // Refresh list } catch (error) { toast.error(error.response?.data?.detail || 'Failed to update user status'); } }; const handleDeleteUser = async (userId, userName) => { if (!window.confirm(`Are you sure you want to delete ${userName}? This action cannot be undone.`)) { return; } try { await api.delete(`/admin/users/${userId}`); toast.success('User deleted successfully'); refetch(); // Refresh list } catch (error) { toast.error(error.response?.data?.detail || 'Failed to delete user'); } }; return ( <>
Manage internal team members and their roles.
Loading staff...
Email: {user.email}
Phone: {user.phone}
Joined: {joinedDate ? new Date(joinedDate).toLocaleDateString() : 'N/A'}
{user.last_login && (Last Login: {new Date(user.last_login).toLocaleDateString()}
)}{searchQuery || roleFilter !== 'all' ? 'Try adjusting your filters' : 'No staff members yet'}