"use client"; 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 Empty from "@workspace/ui/composed/empty"; import { queryRevenueStatistics } from "@workspace/ui/services/admin/console"; import { unitConversion } from "@workspace/ui/utils/unit-conversions"; import { useTranslation } from "react-i18next"; import { Area, AreaChart, Bar, BarChart, CartesianGrid, Label, Pie, PieChart, XAxis, } from "recharts"; import { Display } from "@/components/display"; export function RevenueStatisticsCard() { const { t, i18n } = useTranslation("dashboard"); const locale = i18n.language; const IncomeStatisticsConfig = { new_purchase: { label: t("newPurchase", "New Purchase"), color: "var(--color-chart-1)", }, repurchase: { label: t("repurchase", "Repurchase"), color: "var(--color-chart-2)", }, total: { label: t("totalIncome", "Total Income"), color: "var(--color-chart-3)", }, }; const { data: RevenueStatistics } = useQuery({ queryKey: ["queryRevenueStatistics"], queryFn: async () => { const { data } = await queryRevenueStatistics(); return data.data; }, }); return ( {t("revenueTitle", "Revenue Statistics")} {t("today", "Today")} {t("month", "Month")} {t("total", "Total")} {RevenueStatistics?.today.new_order_amount || RevenueStatistics?.today.renewal_order_amount ? ( } /> } cursor={false} /> ) : (
)}
{t("totalIncome", "Total Income")}
{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", } ); }} tickLine={false} tickMargin={10} /> ( <>
{IncomeStatisticsConfig[ name as keyof typeof IncomeStatisticsConfig ]?.label || name}
{value}
{index === 1 && (
{t("totalIncome", "Total Income")}
{item.payload.total}
)} )} /> } cursor={false} /> } /> ) : (
)}
{t("totalIncome", "Total Income")}
{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", } ); }} tickLine={false} /> ( <>
{IncomeStatisticsConfig[ name as keyof typeof IncomeStatisticsConfig ]?.label || name}
{value}
{index === 1 && (
{t("totalIncome", "Total Income")}
{item.payload.total}
)} )} /> } cursor={false} /> } /> ) : (
)}
{t("totalIncome", "Total Income")}
); }