"use client" import { useState, useEffect, useCallback } from "react" import { PageHeader } from "@/components/shared/page-header" import { UsersTable } from "@/components/users/users-table" import { UserFormDialog } from "@/components/users/user-form-dialog" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Plus, Search, Users as UsersIcon } from "lucide-react" import { User } from "@/types" import { toast } from "sonner" export default function UsersPage() { const [createOpen, setCreateOpen] = useState(false) const [users, setUsers] = useState([]) const [loading, setLoading] = useState(true) const [searchQuery, setSearchQuery] = useState("") const fetchUsers = useCallback(async () => { try { const res = await fetch("/api/users") const data = await res.json() if (data.users) setUsers(data.users) } catch { toast.error("Failed to load users") } finally { setLoading(false) } }, []) useEffect(() => { fetchUsers() }, [fetchUsers]) const filteredUsers = searchQuery.trim() ? users.filter((u) => u.name.toLowerCase().includes(searchQuery.toLowerCase()) || u.email.toLowerCase().includes(searchQuery.toLowerCase()) ) : users const stats = [ { label: "Total Users", value: users.length, color: "bg-blue-500/10", textColor: "text-blue-600 dark:text-blue-400" }, { label: "Active", value: users.filter((u) => u.active).length, color: "bg-emerald-500/10", textColor: "text-emerald-600 dark:text-emerald-400" }, { label: "Admins", value: users.filter((u) => u.role === "admin" || u.role === "super_admin").length, color: "bg-purple-500/10", textColor: "text-purple-600 dark:text-purple-400" }, { label: "Sales", value: users.filter((u) => u.role === "sales_user").length, color: "bg-amber-500/10", textColor: "text-amber-600 dark:text-amber-400" }, ] return (
{stats.map((s) => (

{s.value}

{s.label}

))}
setSearchQuery(e.target.value)} placeholder="Search users by name or email..." className="h-9 pl-9" />
) }