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" import { Checkbox } from "@/components/ui/checkbox" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" interface EditNewsletterDialogProps { newsletter: Newsletter | null isOpen: boolean folderOptions: string[] onOpenChange: (isOpen: boolean) => void onSuccess: () => void } export function EditNewsletterDialog({ newsletter, isOpen, folderOptions, onOpenChange, onSuccess }: EditNewsletterDialogProps) { const [editedDetails, setEditedDetails] = useState<{ name: string; emails: string[], move_to_folder: string | null, extract_content: boolean }>({ name: "", emails: [], move_to_folder: "", extract_content: false, }) useEffect(() => { if (newsletter) { setEditedDetails({ name: newsletter.name, emails: newsletter.senders.map((s) => s.email), move_to_folder: newsletter.move_to_folder || "", extract_content: newsletter.extract_content, }) } }, [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()), move_to_folder: editedDetails.move_to_folder, extract_content: editedDetails.extract_content, }) 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 && ( )}
))}
setEditedDetails((prev) => ({ ...prev, extract_content: !!checked })) } />
) }