feat: update creatives

This commit is contained in:
ivannoskov
2026-01-07 15:54:31 +03:00
parent 073be940b5
commit 7e0c9e368e

View File

@@ -63,6 +63,14 @@ import {
} from "@/components/ui/tooltip"; } from "@/components/ui/tooltip";
import { Checkbox } from "@/components/ui/checkbox"; import { Checkbox } from "@/components/ui/checkbox";
import { Label } from "@/components/ui/label"; import { Label } from "@/components/ui/label";
import {
Dialog,
DialogContent,
DialogDescription,
DialogHeader,
DialogTitle,
} from "@/components/ui/dialog";
import { BOT_USERNAME } from "@/lib/utils/constants";
import type { Creative, CreativeAnalyticsItem } from "@/lib/types/api"; import type { Creative, CreativeAnalyticsItem } from "@/lib/types/api";
// ============================================================================ // ============================================================================
@@ -125,6 +133,7 @@ export default function CreativesPage() {
const [analyticsData, setAnalyticsData] = useState<CreativeAnalyticsItem[]>([]); const [analyticsData, setAnalyticsData] = useState<CreativeAnalyticsItem[]>([]);
const [loading, setLoading] = useState(true); const [loading, setLoading] = useState(true);
const [loadingAnalytics, setLoadingAnalytics] = useState(false); const [loadingAnalytics, setLoadingAnalytics] = useState(false);
const [showCreateDialog, setShowCreateDialog] = useState(false);
const [search, setSearch] = useState(""); const [search, setSearch] = useState("");
const [includeArchived, setIncludeArchived] = useState(false); const [includeArchived, setIncludeArchived] = useState(false);
const [viewMode, setViewMode] = useState<"table" | "grid">("table"); const [viewMode, setViewMode] = useState<"table" | "grid">("table");
@@ -260,11 +269,9 @@ export default function CreativesPage() {
</Button> </Button>
</div> </div>
{canWrite && ( {canWrite && (
<Button asChild> <Button onClick={() => setShowCreateDialog(true)}>
<Link href={`/dashboard/${workspaceId}/creatives/new`}>
<Plus className="h-4 w-4 mr-2" /> <Plus className="h-4 w-4 mr-2" />
Создать креатив Создать креатив
</Link>
</Button> </Button>
)} )}
</div> </div>
@@ -307,11 +314,9 @@ export default function CreativesPage() {
: "Создайте первый креатив для начала работы"} : "Создайте первый креатив для начала работы"}
</p> </p>
{canWrite && !search && ( {canWrite && !search && (
<Button asChild> <Button onClick={() => setShowCreateDialog(true)}>
<Link href={`/dashboard/${workspaceId}/creatives/new`}>
<Plus className="h-4 w-4 mr-2" /> <Plus className="h-4 w-4 mr-2" />
Создать креатив Создать креатив
</Link>
</Button> </Button>
)} )}
</CardContent> </CardContent>
@@ -583,6 +588,48 @@ export default function CreativesPage() {
</div> </div>
)} )}
</div> </div>
{/* Dialog для создания креатива */}
<Dialog open={showCreateDialog} onOpenChange={setShowCreateDialog}>
<DialogContent className="sm:max-w-md">
<DialogHeader>
<DialogTitle>Создание креатива</DialogTitle>
<DialogDescription>
Создание креатива работает через Telegram бота
</DialogDescription>
</DialogHeader>
<div className="space-y-4 py-4">
<div className="space-y-2">
<p className="text-sm text-muted-foreground">
Чтобы создать креатив:
</p>
<ol className="list-decimal list-inside space-y-2 text-sm">
<li>Перейдите в Telegram бота <strong>@{BOT_USERNAME}</strong></li>
<li>Откройте раздел <strong>Креативы</strong></li>
<li>Нажмите <strong>Создание</strong></li>
<li>Перешлите созданный креатив боту</li>
<li>Креатив автоматически отобразится на платформе</li>
</ol>
</div>
<div className="flex justify-end gap-2 pt-2">
<Button
variant="outline"
onClick={() => setShowCreateDialog(false)}
>
Понятно
</Button>
<Button
onClick={() => {
window.open(`https://t.me/${BOT_USERNAME}`, "_blank");
setShowCreateDialog(false);
}}
>
Открыть бота
</Button>
</div>
</div>
</DialogContent>
</Dialog>
</TooltipProvider> </TooltipProvider>
); );
} }