"use client"; // ============================================================================ // Dashboard Home Page // ============================================================================ import React, { useEffect, useState } from "react"; import { DashboardHeader } from "@/components/layout/dashboard-header"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import { analyticsApi } from "@/lib/api"; import { formatCurrency, formatNumber, formatMetric, formatPercent, } from "@/lib/utils/format"; import { BarChart3, TrendingUp, Users, ShoppingCart, Loader2, } from "lucide-react"; import type { AnalyticsOverview } from "@/lib/types/api"; export default function DashboardPage() { const [overview, setOverview] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { const loadOverview = async () => { try { const data = await analyticsApi.overview(); setOverview(data); } catch (error) { console.error("Error loading overview:", error); } finally { setLoading(false); } }; loadOverview(); }, []); return ( <>
Всего закупов {loading ? ( ) : ( <>
{formatNumber(overview?.totalPurchases)}

{formatNumber(overview?.purchasesChange || 0, true)} за прошлый месяц

)}
Подписчиков привлечено {loading ? ( ) : ( <>
{formatNumber(overview?.totalFollowers)}

{formatNumber(overview?.followersChange || 0, true)} за прошлый месяц

)}
Средний CPF {loading ? ( ) : ( <>
₽{formatMetric(overview?.averageCpf)}

{formatPercent(overview?.cpfChange || 0, true)} от прошлого месяца

)}
Средний CPM {loading ? ( ) : ( <>
₽{formatMetric(overview?.averageCpm)}

{formatPercent(overview?.cpmChange || 0, true)} от прошлого месяца

)}
Быстрый старт Начните с основных действий → Создать новый закуп → Создать креатив → Импортировать каналы → Посмотреть аналитику
); }