import { useState } from "react" import { Navigate } from "react-router-dom" import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Badge } from "@/components/ui/badge" import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" import { Search, UserPlus } from "lucide-react" import { systemMemberService } from "@/services" import { useAdminRole } from "@/hooks/use-admin-role" import { AdminRole, type AdminRoleValue } from "@/lib/admin-roles" import { toast } from "sonner" export default function SystemMembersPage() { const { canAccessSystemMembers, canManageSystem } = useAdminRole() const queryClient = useQueryClient() const [page, setPage] = useState(1) const [search, setSearch] = useState("") const [open, setOpen] = useState(false) const [form, setForm] = useState<{ email: string firstName: string lastName: string password: string role: AdminRoleValue }>({ email: "", firstName: "", lastName: "", password: "", role: AdminRole.CUSTOMER_SUPPORT, }) const { data, isLoading, error } = useQuery({ queryKey: ["admin", "system-members", page, search], queryFn: () => systemMemberService.list({ page, limit: 10, search: search.trim() || undefined, }), enabled: canAccessSystemMembers, }) const createMutation = useMutation({ mutationFn: () => systemMemberService.create(form), onSuccess: () => { toast.success("System user created") queryClient.invalidateQueries({ queryKey: ["admin", "system-members"] }) setOpen(false) setForm({ email: "", firstName: "", lastName: "", password: "", role: AdminRole.CUSTOMER_SUPPORT, }) }, onError: () => toast.error("Failed to create user"), }) if (!canAccessSystemMembers) { return } return (

System users

Internal staff who can access this panel. Actors: System Admin (full access), Admin (view & edit), Customer Support (view-only on most areas; cannot manage this list).

{canManageSystem && ( )}
Directory
{ setSearch(e.target.value) setPage(1) }} />
{error && (

Could not reach{" "} GET /admin/system-members. Add this route on your API to populate the table.

)}
{isLoading ? ( ) : data?.data?.length ? ( data.data.map((m) => ( )) ) : ( )}
Name Email Panel role Status
Loading…
{m.firstName} {m.lastName} {m.email} {m.role} {m.isActive ? "Active" : "Disabled"}
No system users loaded.
Add system user
setForm((f) => ({ ...f, email: e.target.value })) } className="rounded-none" />
setForm((f) => ({ ...f, firstName: e.target.value })) } className="rounded-none" />
setForm((f) => ({ ...f, lastName: e.target.value })) } className="rounded-none" />
setForm((f) => ({ ...f, password: e.target.value })) } className="rounded-none" />
) }