"use client" import { useQuery } from "@tanstack/react-query" import { Card, CardContent } from "@/components/ui/card" import { Users, UserCheck, UserX } from "lucide-react" import { fetchUsers } from "@/app/protected/(admin)/dashboard/user-management/action" import { User } from "@/src/models/users/users.model" function calculateUserStats(users: User[]) { const totalUsers = users.length const activeUsers = users.filter((user) => !user.banned_until && user.email_confirmed_at).length const inactiveUsers = totalUsers - activeUsers return { totalUsers, activeUsers, inactiveUsers, activePercentage: totalUsers > 0 ? ((activeUsers / totalUsers) * 100).toFixed(1) : "0.0", inactivePercentage: totalUsers > 0 ? ((inactiveUsers / totalUsers) * 100).toFixed(1) : "0.0", } } export function UserStats() { const { data: users = [], isLoading } = useQuery({ queryKey: ["users"], queryFn: fetchUsers, }) const stats = calculateUserStats(users) if (isLoading) { return ( <> {[...Array(3)].map((_, i) => (
))} ) } const cards = [ { title: "Total Users", value: stats.totalUsers, subtitle: "Updated just now", icon: Users, }, { title: "Active Users", value: stats.activeUsers, subtitle: `${stats.activePercentage}% of total users`, icon: UserCheck, }, { title: "Inactive Users", value: stats.inactiveUsers, subtitle: `${stats.inactivePercentage}% of total users`, icon: UserX, }, ] return ( <> {cards.map((card, index) => (
{card.title}
{card.value}
{card.subtitle}
))} ) }