"use client"; // ============================================================================ // Creative Detail Page // ============================================================================ import React, { useEffect, useState } from "react"; import { use } from "react"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { DashboardHeader } from "@/components/layout/dashboard-header"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { Alert, AlertDescription } from "@/components/ui/alert"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { creativesApi } from "@/lib/api"; import { formatNumber, formatMetric, formatCurrency, formatDate, } from "@/lib/utils/format"; import { Folder, ArrowLeft, Loader2, AlertCircle, Archive, Trash2, BarChart3, Users, TrendingUp, } from "lucide-react"; import type { Creative } from "@/lib/types/api"; interface PageProps { params: Promise<{ id: string }>; } export default function CreativeDetailPage({ params }: PageProps) { const resolvedParams = use(params); const router = useRouter(); const [creative, setCreative] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { const loadCreative = async () => { try { setLoading(true); const data = await creativesApi.get(resolvedParams.id); setCreative(data); } catch (err: any) { setError(err?.error?.message || "Ошибка загрузки креатива"); } finally { setLoading(false); } }; loadCreative(); }, [resolvedParams.id]); const handleArchive = async () => { if (!creative) return; try { await creativesApi.update(creative.id, { status: creative.status === "active" ? "archived" : "active", }); setCreative({ ...creative, status: creative.status === "active" ? "archived" : "active", }); } catch (err: any) { alert(err?.error?.message || "Ошибка обновления креатива"); } }; const handleDelete = async () => { if (!creative) return; if (!confirm(`Удалить креатив "${creative.name}"?`)) return; try { await creativesApi.delete(creative.id); router.push("/creatives"); } catch (err: any) { alert(err?.error?.message || "Ошибка удаления креатива"); } }; if (loading) { return ( <>
); } if (error || !creative) { return ( <>
{error || "Креатив не найден"}
); } const previewText = creative.text.replace( "{link}", "https://t.me/+InviteLinkExample" ); return ( <>

{creative.name}

{creative.status === "archived" && ( Архив )}
Целевой канал: {creative.target_channel_title}
Всего закупов
{formatNumber(creative.placements_count)}

Всего размещений

Целевой канал
{creative.target_channel_title}

Канал для рекламы

Текст креатива Шаблон с переменной {"{link}"}
                  {creative.text}
                
Предпросмотр С подставленной пригласительной ссылкой

{previewText}

Информация о размещениях Статистика использования креатива

Всего размещений:

{creative.placements_count}

Создан:

{formatDate(creative.created_at)}

); }