"use client"; import * as React from "react"; import { useRouter } from "next/navigation"; import { MailPlus, Send, Trash2, UserPlus } from "lucide-react"; import { allowEmails, resendInvite, revokeAllow } from "@/actions/access"; import type { AdminActionResult } from "@/actions/admin"; import { Button } from "@/components/ui/button"; import { Input, Textarea } from "@/components/ui/input"; import { Field, Hint, Label } from "@/components/ui/label"; import { Switch } from "@/components/ui/switch"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog"; import { ActionButton, ResultMessage } from "./action-button"; export function AddEmailsDialog({ variant = "primary" }: { variant?: "primary" | "outline" }) { const router = useRouter(); const [open, setOpen] = React.useState(false); const [pending, start] = React.useTransition(); const [emails, setEmails] = React.useState(""); const [note, setNote] = React.useState(""); const [sendInvite, setSendInvite] = React.useState(true); const [result, setResult] = React.useState | null>(null); const count = emails.split(/[\s,;]+/).filter((s) => s.includes("@")).length; const reset = () => { setEmails(""); setNote(""); setSendInvite(true); setResult(null); }; return ( <> { setOpen(v); if (!v) reset(); }} > Add emails to the access list Only listed addresses can create an account. Paste one or many emails separated by commas, spaces or new lines.
{ e.preventDefault(); start(async () => { const r = await allowEmails({ emails, note, sendInvite }); setResult(r); if (r.ok) { router.refresh(); if (!r.warning) { setOpen(false); reset(); } else { setEmails(""); } } }); }} >