'use client'; import React from 'react'; import { TrendingUp, Calendar, Wallet, Loader2 } from 'lucide-react'; import { useQuery } from '@tanstack/react-query'; import { useTranslations } from 'next-intl'; import { apiRequest } from '@/shared/request/apiRequest'; import { links } from '@/shared/request/links'; // ─── Types ───────────────────────────────────────────────────────────────────── type Stats = { total_documents: number; this_month_documents: number; paid_price: number; }; // ─── Single stat card ────────────────────────────────────────────────────────── interface StatCardProps { icon: React.ElementType; label: string; value: string; sub?: string; iconColor: string; iconBg: string; } const StatCard: React.FC = ({ icon: Icon, label, value, sub, iconColor, iconBg, }) => (

{value}

{label}

{sub &&

{sub}

}
); const StatCardSkeleton = () => (
); // ─── Grid ────────────────────────────────────────────────────────────────────── export const StatsCards = () => { const t = useTranslations('Cabinet'); const { data, isLoading } = useQuery({ queryKey: ['statistics'], queryFn: (): Promise => apiRequest('GET', links.statistics).then((res) => res.data as Stats), }); if (isLoading) { return (
); } if (!data) { return (
{t('noData')}
); } return (
); };