You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

74 lines
2.4 KiB

'use client'
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'
import { BarChart3, Smartphone, Key, MessageSquare, TrendingUp } from 'lucide-react'
import GetStartedCard from './get-started'
import { ApiEndpoints } from '@/config/api'
import httpBrowserClient from '@/lib/httpBrowserClient'
import { useQuery } from '@tanstack/react-query'
import { Skeleton } from '@/components/ui/skeleton'
// import GetStartedCard from "@/components/get-started-card";
export const StatCard = ({ title, value, icon: Icon, description }) => {
return (
<Card className="overflow-hidden transition-all hover:shadow-md">
<CardHeader className='flex flex-row items-center justify-between space-y-0 pb-2'>
<CardTitle className='text-sm font-medium'>{title}</CardTitle>
<div className="rounded-full bg-primary/10 p-2">
<Icon className='h-4 w-4 text-primary' />
</div>
</CardHeader>
<CardContent>
<div className='text-2xl font-bold'>
{value !== undefined ? value : <Skeleton className='h-6 w-16' />}
</div>
<p className='text-xs text-muted-foreground mt-1 flex items-center'>
{description}
{value !== undefined && <TrendingUp className="ml-1 h-3 w-3 text-green-500" />}
</p>
</CardContent>
</Card>
)
}
export default function Overview() {
const { data: stats } = useQuery({
queryKey: ['stats'],
queryFn: () =>
httpBrowserClient
.get(ApiEndpoints.gateway.getStats())
.then((res) => res.data?.data),
})
return (
<div className='space-y-6'>
<GetStartedCard />
<div className='grid gap-4 md:grid-cols-2 lg:grid-cols-4'>
<StatCard
title='Total SMS Sent'
value={stats?.totalSentSMSCount?.toLocaleString()}
icon={MessageSquare}
description='Since last year'
/>
<StatCard
title='Active Devices'
value={stats?.totalDeviceCount}
icon={Smartphone}
description='Connected now'
/>
<StatCard
title='API Keys'
value={stats?.totalApiKeyCount}
icon={Key}
description='Active keys'
/>
<StatCard
title='SMS Received'
value={stats?.totalReceivedSMSCount?.toLocaleString()}
icon={BarChart3}
description='Since last year'
/>
</div>
</div>
)
}