diff --git a/src/api/adminSalesStats.ts b/src/api/adminSalesStats.ts index 26c902a..1adb5c3 100644 --- a/src/api/adminSalesStats.ts +++ b/src/api/adminSalesStats.ts @@ -149,12 +149,19 @@ export interface DailyDepositItem { amount_kopeks: number; } +export interface DailyDepositByMethodItem { + date: string; + method: string; + amount_kopeks: number; +} + export interface DepositsStats { total_deposits: number; total_amount_kopeks: number; avg_deposit_kopeks: number; by_method: DepositByMethodItem[]; daily: DailyDepositItem[]; + daily_by_method: DailyDepositByMethodItem[]; } // ============ API ============ diff --git a/src/components/sales-stats/DepositsTab.tsx b/src/components/sales-stats/DepositsTab.tsx index c913565..cbcf3f2 100644 --- a/src/components/sales-stats/DepositsTab.tsx +++ b/src/components/sales-stats/DepositsTab.tsx @@ -1,3 +1,4 @@ +import { useCallback, useMemo } from 'react'; import { useQuery } from '@tanstack/react-query'; import { useTranslation } from 'react-i18next'; @@ -7,6 +8,7 @@ import { SALES_STATS } from '../../constants/salesStats'; import { useCurrency } from '../../hooks/useCurrency'; import { StatCard } from '../stats'; +import { MultiSeriesAreaChart } from './MultiSeriesAreaChart'; import { SimpleAreaChart } from './SimpleAreaChart'; import { SimpleBarChart } from './SimpleBarChart'; @@ -39,6 +41,36 @@ export function DepositsTab({ params }: DepositsTabProps) { staleTime: SALES_STATS.STALE_TIME, }); + const formatValue = useCallback((v: number) => formatWithCurrency(v), [formatWithCurrency]); + + const methodBarData = useMemo( + () => + data?.by_method.map((item) => ({ + name: METHOD_LABELS[item.method] || item.method, + value: item.amount_kopeks / SALES_STATS.KOPEKS_DIVISOR, + })) ?? [], + [data?.by_method], + ); + + const dailyData = useMemo( + () => + data?.daily.map((item) => ({ + date: item.date, + value: item.amount_kopeks / SALES_STATS.KOPEKS_DIVISOR, + })) ?? [], + [data?.daily], + ); + + const dailyByMethodData = useMemo( + () => + data?.daily_by_method.map((i) => ({ + date: i.date, + key: METHOD_LABELS[i.method] || i.method, + value: i.amount_kopeks / SALES_STATS.KOPEKS_DIVISOR, + })) ?? [], + [data?.daily_by_method], + ); + if (isLoading) { return (