import { useState } from "react"; import { useNavigate } from "react-router-dom"; import { Send } from "lucide-react"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Label } from "@/components/ui/label"; import { Spinner } from "@/components/ui/spinner"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { BroadcastTargetPicker } from "@/components/generic/BroadcastTargetPicker"; import { TARGET_TYPE_OPTIONS, TARGET_TYPE_MAP } from "@/data/notificationBroadcast.data"; import { useAdminEmailBroadcasts } from "@/contexts/AdminEmailBroadcastContext"; // Reused from Notification Broadcasts so admins pick an audience the same way // everywhere — same target types, same picker for task list / course / tier plan. export function SendEmailBroadcastDialog({ open, onOpenChange, template }) { const navigate = useNavigate(); const { createBroadcast, loading } = useAdminEmailBroadcasts(); const [targetType, setTargetType] = useState(""); const [targetId, setTargetId] = useState(null); const [error, setError] = useState(""); const needsTarget = TARGET_TYPE_MAP[targetType]?.needsTarget; const reset = () => { setTargetType(""); setTargetId(null); setError(""); }; const handleSend = async () => { if (!targetType) return setError("Please select an audience."); if (needsTarget && !targetId) return setError("Please select a specific target."); setError(""); const result = await createBroadcast({ email_template_id: template.email_template_id, target_type: targetType, target_id: needsTarget ? targetId : null, }); if (result) { reset(); onOpenChange(false); navigate("/admin/email-broadcasts"); } }; return ( { onOpenChange(v); if (!v) reset(); }}> Send to Recipients Send {template?.label} as a real email. Delivery is paced in the background — this won't block or time out.
{targetType && (

{TARGET_TYPE_MAP[targetType]?.description}

)}
{needsTarget && (
)} {error &&

{error}

}
); }