"use client"; import { useState } from "react"; import { useRouter } from "next/navigation"; import { toast } from "sonner"; import { Plus } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; export function CreateUserDialog() { const router = useRouter(); const [open, setOpen] = useState(false); const [email, setEmail] = useState(""); const [name, setName] = useState(""); const [role, setRole] = useState<"user" | "moderator" | "admin">("user"); const [tier, setTier] = useState<"free" | "pro">("free"); const [saving, setSaving] = useState(false); async function handleCreate() { if (!email.trim() || !name.trim()) { toast.error("Email and name are required"); return; } setSaving(true); try { const res = await fetch("/api/v1/admin/users", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ email: email.trim(), name: name.trim(), role, tier }), }); if (!res.ok) { const data = await res.json().catch(() => ({})); throw new Error((data as { error?: string }).error ?? "Failed to create user"); } toast.success("User created — they'll receive an email to set their password"); setOpen(false); setEmail(""); setName(""); setRole("user"); setTier("free"); router.refresh(); } catch (err) { toast.error(err instanceof Error ? err.message : "Failed to create user"); } finally { setSaving(false); } } return ( <> Create user
setEmail(e.target.value)} />
setName(e.target.value)} />
); }