'use client'; import { useState } from 'react'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { toast } from 'sonner'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Textarea } from '@/components/ui/textarea'; import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { apiFetch } from '@/lib/api/client'; interface Account { id: string; emailAddress: string; isActive: boolean; } interface ComposeDialogProps { open: boolean; onOpenChange: (open: boolean) => void; defaultTo?: string; defaultSubject?: string; } export function ComposeDialog({ open, onOpenChange, defaultTo = '', defaultSubject = '', }: ComposeDialogProps) { const qc = useQueryClient(); const [accountId, setAccountId] = useState(''); const [to, setTo] = useState(defaultTo); const [cc, setCc] = useState(''); const [subject, setSubject] = useState(defaultSubject); const [body, setBody] = useState(''); const { data: accounts = [] } = useQuery({ queryKey: ['email', 'accounts'], queryFn: () => apiFetch<{ data: Account[] }>('/api/v1/email/accounts').then((r) => r.data), }); const activeAccounts = accounts.filter((a) => a.isActive); const sendMutation = useMutation({ mutationFn: () => apiFetch('/api/v1/email/compose', { method: 'POST', body: { accountId, to: to .split(',') .map((s) => s.trim()) .filter(Boolean), cc: cc ? cc .split(',') .map((s) => s.trim()) .filter(Boolean) : undefined, subject, bodyHtml: body.replace(/\n/g, '
'), }, }), onSuccess: () => { toast.success('Email sent'); qc.invalidateQueries({ queryKey: ['email', 'threads'] }); onOpenChange(false); setTo(''); setCc(''); setSubject(''); setBody(''); }, onError: (err) => toast.error(err instanceof Error ? err.message : 'Send failed'), }); return ( Compose email
setTo(e.target.value)} />
setCc(e.target.value)} />
setSubject(e.target.value)} />