/* eslint-disable @typescript-eslint/no-explicit-any */ import { Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Input, Label, Select, SelectContent, SelectItemWithDescription, SelectTrigger, SelectValue, } from '@plunk/ui'; import type {Segment, Template} from '@plunk/db'; import {CampaignAudienceType, TemplateType} from '@plunk/db'; import {NextSeo} from 'next-seo'; import {DashboardLayout} from '../../components/DashboardLayout'; import {EmailSettings} from '../../components/EmailSettings'; import {EmailEditor} from '../../components/EmailEditor'; import {network} from '../../lib/network'; import {EmailFormValidator} from '../../lib/validation'; import {ArrowLeft, TriangleAlert} from 'lucide-react'; import Link from 'next/link'; import {useRouter} from 'next/router'; import {useEffect, useState} from 'react'; import {toast} from 'sonner'; import useSWR from 'swr'; import {detectUnsubscribeSignal} from '@plunk/shared'; import {useActiveProject} from '../../lib/contexts/ActiveProjectProvider'; export default function CreateCampaignPage() { const router = useRouter(); const {activeProject} = useActiveProject(); const [name, setName] = useState(''); const [description, setDescription] = useState(''); const [subject, setSubject] = useState(''); const [body, setBody] = useState(''); const [from, setFrom] = useState(''); const [fromName, setFromName] = useState(''); const [replyTo, setReplyTo] = useState(''); const [campaignType, setCampaignType] = useState(TemplateType.MARKETING); const [audienceType, setAudienceType] = useState(CampaignAudienceType.ALL); const [segmentId, setSegmentId] = useState(''); const [saving, setSaving] = useState(false); const [loadingTemplate, setLoadingTemplate] = useState(false); const {data: segments} = useSWR('/segments', {revalidateOnFocus: false}); useEffect(() => { const loadData = async () => { const { templateId, campaignId, name: queryName, subject: querySubject, from: queryFrom, fromName: queryFromName, replyTo: queryReplyTo, audienceType: queryAudienceType, segmentId: querySegmentId, } = router.query; if (templateId && typeof templateId === 'string') { setLoadingTemplate(true); try { const template = await network.fetch