'use client'; import { queryRevenueStatistics } from '@/services/admin/console'; import { useQuery } from '@tanstack/react-query'; import { Card, CardContent, CardFooter, CardHeader, CardTitle, } from '@workspace/ui/components/card'; import { ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent, } from '@workspace/ui/components/chart'; import { Separator } from '@workspace/ui/components/separator'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@workspace/ui/components/tabs'; import { unitConversion } from '@workspace/ui/utils'; import { useLocale, useTranslations } from 'next-intl'; import { Area, AreaChart, Bar, BarChart, CartesianGrid, Label, Pie, PieChart, XAxis, } from 'recharts'; import { Display } from '../display'; import { Empty } from '../empty'; export function RevenueStatisticsCard() { const t = useTranslations('index'); const locale = useLocale(); const IncomeStatisticsConfig = { new_purchase: { label: t('newPurchase'), color: 'hsl(var(--chart-1))', }, repurchase: { label: t('repurchase'), color: 'hsl(var(--chart-2))', }, total: { label: t('totalIncome'), color: 'hsl(var(--chart-3))', }, }; const { data: RevenueStatistics } = useQuery({ queryKey: ['queryRevenueStatistics'], queryFn: async () => { const { data } = await queryRevenueStatistics(); return data.data; }, }); return ( {t('revenueTitle')} {t('today')} {t('month')} {t('total')} {RevenueStatistics?.today.new_order_amount || RevenueStatistics?.today.renewal_order_amount ? ( } /> } /> ) : (
)}
{t('totalIncome')}
{IncomeStatisticsConfig.new_purchase.label}
{IncomeStatisticsConfig.repurchase.label}
{RevenueStatistics?.monthly.list && RevenueStatistics?.monthly.list.length > 0 ? ( ({ date: item.date, new_purchase: unitConversion('centsToDollars', item.new_order_amount), repurchase: unitConversion('centsToDollars', item.renewal_order_amount), total: unitConversion( 'centsToDollars', item.new_order_amount + item.renewal_order_amount, ), })) || [] } > { const [year, month, day] = value.split('-'); return new Date(year, month - 1, day).toLocaleDateString(locale, { month: 'short', day: 'numeric', }); }} /> ( <>
{IncomeStatisticsConfig[name as keyof typeof IncomeStatisticsConfig] ?.label || name}
{value}
{index === 1 && (
{t('totalIncome')}
{item.payload.total}
)} )} /> } cursor={false} /> } /> ) : (
)}
{t('totalIncome')}
{IncomeStatisticsConfig.new_purchase.label}
{IncomeStatisticsConfig.repurchase.label}
{RevenueStatistics?.all.list && RevenueStatistics?.all.list.length > 0 ? ( ({ date: item.date, new_purchase: unitConversion('centsToDollars', item.new_order_amount), repurchase: unitConversion('centsToDollars', item.renewal_order_amount), total: unitConversion( 'centsToDollars', item.new_order_amount + item.renewal_order_amount, ), })) || [] } margin={{ left: 12, right: 12, }} > { const [year, month] = value.split('-'); return new Date(year, month - 1).toLocaleDateString(locale, { month: 'short', }); }} /> ( <>
{IncomeStatisticsConfig[name as keyof typeof IncomeStatisticsConfig] ?.label || name}
{value}
{index === 1 && (
{t('totalIncome')}
{item.payload.total}
)} )} /> } /> } /> ) : (
)}
{t('totalIncome')}
); }