import { useEffect, useMemo, useState } from "react" import { useNavigate } from "react-router-dom" import { Bell, Mail, MailOpen, Megaphone } from "lucide-react" import { Card, CardContent } from "../../components/ui/card" import { Button } from "../../components/ui/button" import { Input } from "../../components/ui/input" import { Textarea } from "../../components/ui/textarea" import { FileUpload } from "../../components/ui/file-upload" import { SpinnerIcon } from "../../components/ui/spinner-icon" import { cn } from "../../lib/utils" import { getTeamMembers } from "../../api/team.api" import type { TeamMember } from "../../types/team.types" export function CreateNotificationPage() { const navigate = useNavigate() const [composeChannels, setComposeChannels] = useState>(["push"]) const [composeAudience, setComposeAudience] = useState<"all" | "selected">("all") const [teamRecipients, setTeamRecipients] = useState([]) const [recipientsLoading, setRecipientsLoading] = useState(false) const [selectedRecipientIds, setSelectedRecipientIds] = useState([]) const [composeTitle, setComposeTitle] = useState("") const [composeMessage, setComposeMessage] = useState("") const [sending, setSending] = useState(false) const [, setComposeImage] = useState(null) useEffect(() => { setRecipientsLoading(true) getTeamMembers(1, 50) .then((res) => { setTeamRecipients(res.data.data ?? []) }) .catch(() => { setTeamRecipients([]) }) .finally(() => { setRecipientsLoading(false) }) }, []) const selectedRecipients = useMemo( () => teamRecipients.filter((m) => selectedRecipientIds.includes(m.id)), [teamRecipients, selectedRecipientIds], ) const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() if (!composeTitle.trim() || !composeMessage.trim()) return if (composeChannels.length === 0) return setSending(true) try { // Hook up to backend send API here when available. await new Promise((resolve) => setTimeout(resolve, 400)) setComposeTitle("") setComposeMessage("") setComposeAudience("all") setComposeChannels(["push"]) setSelectedRecipientIds([]) setComposeImage(null) navigate("/notifications") } finally { setSending(false) } } return (
{/* Breadcrumb + Header */}

Notifications

Create notification Composer

Send a one-off push or SMS notification to your users.

{/* Left: message setup */}
{/* Channel & audience */}

Channel

Audience

{/* Title & message */}
setComposeTitle(e.target.value)} />