'use client'; import { useRouter } from 'next/navigation'; import { useState } from 'react'; type Props = { campaign: { id: string; name: string; status: string; totalRecipients: number; templateName: string; language: string; messageTitle: string; messageBody: string; primaryButton: string; secondaryButton: string; bannerImageUrl: string; }; }; function toDateTimeLocal(value: string | null | undefined) { if (!value) return ''; const date = new Date(value); const offset = date.getTimezoneOffset(); const local = new Date(date.getTime() - offset * 60000); return local.toISOString().slice(0, 16); } export function CampaignDetailActions({ campaign }: Props) { const router = useRouter(); const [isDuplicating, setIsDuplicating] = useState(false); const [isSaving, setIsSaving] = useState(false); const [isSendingNow, setIsSendingNow] = useState(false); const [isScheduling, setIsScheduling] = useState(false); const [isDeleting, setIsDeleting] = useState(false); const [message, setMessage] = useState(null); const [isEditing, setIsEditing] = useState(false); const [scheduledAt, setScheduledAt] = useState(''); const [form, setForm] = useState({ name: campaign.name, status: campaign.status, totalRecipients: String(campaign.totalRecipients), templateName: campaign.templateName, language: campaign.language, messageTitle: campaign.messageTitle, messageBody: campaign.messageBody, primaryButton: campaign.primaryButton, secondaryButton: campaign.secondaryButton, bannerImageUrl: campaign.bannerImageUrl, }); async function readPayload(response: Response) { const payload = await response.json().catch(() => ({})); if (!response.ok) { throw new Error(typeof payload?.message === 'string' ? payload.message : 'Request failed'); } return payload; } return ( <>
download Export CSV download Export XLSX
{message ?

{message}

: null} {isEditing ? (
{ event.preventDefault(); try { setMessage(null); setIsSaving(true); const response = await fetch(`/api/campaigns/${campaign.id}`, { method: 'PATCH', credentials: 'include', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ ...form, totalRecipients: Number(form.totalRecipients || '0'), }), }); await readPayload(response); setMessage('Campaign updated successfully.'); setIsEditing(false); router.refresh(); } catch (error) { setMessage(error instanceof Error ? error.message : 'Failed to update campaign'); } finally { setIsSaving(false); } }} >