feat: update creatives
This commit is contained in:
@@ -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>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user