"use client"; // ============================================================================ // Create Creative Page // ============================================================================ import React, { useEffect, useState } from "react"; 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 { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; import { Label } from "@/components/ui/label"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Alert, AlertDescription } from "@/components/ui/alert"; import { creativesApi, channelsApi } from "@/lib/api"; import { AlertCircle, Loader2, ArrowLeft, Info } from "lucide-react"; import type { TargetChannel } from "@/lib/types/api"; import { useTargetChannel } from "@/components/providers/target-channel-provider"; export default function CreateCreativePage() { const router = useRouter(); const { selectedChannel } = useTargetChannel(); const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(null); const [formData, setFormData] = useState({ name: "", text: "", }); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(null); // Validation if (!formData.name.trim()) { setError("Введите название креатива"); return; } if (!formData.text.trim()) { setError("Введите текст креатива"); return; } if (!formData.text.includes("{link}")) { setError("Текст должен содержать переменную {link} для вставки ссылки"); return; } if (!selectedChannel) { setError("Выберите целевой канал в верхнем меню"); return; } try { setIsLoading(true); await creativesApi.create({ ...formData, target_channel_id: selectedChannel.id, }); router.push("/creatives"); } catch (err: any) { setError(err?.error?.message || "Ошибка создания креатива"); } finally { setIsLoading(false); } }; const previewText = formData.text.replace( "{link}", "https://t.me/+InviteLinkExample" ); return ( <>

Создать креатив

Новый шаблон рекламного сообщения

{error && ( {error} )}
Основная информация Название и целевой канал креатива
setFormData({ ...formData, name: e.target.value }) } placeholder='Например: Креатив "Присоединяйся"' />
{selectedChannel && ( Креатив будет создан для канала: {selectedChannel.title} )}
Текст сообщения Используйте переменную {"{link}"} для вставки ссылки