import { useState, useEffect } from "react" import { Button } from "@/components/ui/button" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Plus } from "lucide-react" import { Newsletter, updateNewsletter, deleteNewsletter } from "@/lib/api" interface EditNewsletterDialogProps { newsletter: Newsletter | null isOpen: boolean onOpenChange: (isOpen: boolean) => void onSuccess: () => void } export function EditNewsletterDialog({ newsletter, isOpen, onOpenChange, onSuccess }: EditNewsletterDialogProps) { const [editedDetails, setEditedDetails] = useState<{ name: string; emails: string[] }>({ name: "", emails: [], }) useEffect(() => { if (newsletter) { setEditedDetails({ name: newsletter.name, emails: newsletter.senders.map((s) => s.email), }) } }, [newsletter]) if (!newsletter) return null const handleUpdateEmailChange = (index: number, value: string) => { setEditedDetails((prev) => ({ ...prev, emails: prev.emails.map((email, i) => (i === index ? value : email)), })) } const handleAddEmailToEdit = () => { setEditedDetails((prev) => ({ ...prev, emails: [...prev.emails, ""], })) } const handleRemoveEmailFromEdit = (index: number) => { setEditedDetails((prev) => ({ ...prev, emails: prev.emails.filter((_, i) => i !== index), })) } const handleUpdate = async () => { try { await updateNewsletter(newsletter.id, { name: editedDetails.name, sender_emails: editedDetails.emails.filter((email) => email.trim()), }) onOpenChange(false) onSuccess() } catch (error) { console.error("Failed to update newsletter:", error) } } const handleDelete = async () => { if (window.confirm(`Are you sure you want to delete the "${newsletter.name}" newsletter?`)) { try { await deleteNewsletter(newsletter.id) onOpenChange(false) onSuccess() } catch (error) { console.error("Failed to delete newsletter:", error) } } } return ( Edit Newsletter Update the details for {newsletter.name}.
setEditedDetails((prev) => ({ ...prev, name: e.target.value }))} />
{editedDetails.emails.map((email, index) => (
handleUpdateEmailChange(index, e.target.value)} placeholder="Enter email address" type="email" /> {editedDetails.emails.length > 1 && ( )}
))}
) }