"use client"; import { useState } from "react"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { createUser } from "@/actions/users"; import { useToast } from "@/components/ui/use-toast"; import { Eye, EyeOff } from "lucide-react"; interface NewUserDialogProps { open: boolean; onClose: () => void; onSuccess?: () => void; } export function NewUserDialog({ open, onClose, onSuccess }: NewUserDialogProps) { const { toast } = useToast(); const [isSubmitting, setIsSubmitting] = useState(false); const [showPassword, setShowPassword] = useState(false); const [form, setForm] = useState({ name: "", email: "", password: "", role: "ARTIST", }); const [errors, setErrors] = useState>({}); const validate = () => { const e: Record = {}; if (!form.email.trim()) e.email = "Email is required"; else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(form.email)) e.email = "Invalid email"; if (!form.password) e.password = "Password is required"; else if (form.password.length < 8) e.password = "At least 8 characters"; return e; }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); const errs = validate(); if (Object.keys(errs).length) { setErrors(errs); return; } setIsSubmitting(true); try { await createUser({ name: form.name || undefined, email: form.email.trim().toLowerCase(), password: form.password, role: form.role as "ADMIN" | "PRODUCER" | "SUPERVISOR" | "ARTIST" | "CLIENT", }); toast({ title: "User created" }); setForm({ name: "", email: "", password: "", role: "ARTIST" }); setErrors({}); onSuccess?.(); onClose(); } catch (err) { toast({ title: "Failed to create user", description: err instanceof Error ? err.message : undefined, variant: "destructive" }); } finally { setIsSubmitting(false); } }; const set = (key: string, value: string) => { setForm((f) => ({ ...f, [key]: value })); setErrors((e) => { const n = { ...e }; delete n[key]; return n; }); }; return ( !v && onClose()}> New User
set("name", e.target.value)} placeholder="Jane Smith" />
set("email", e.target.value)} placeholder="jane@studio.com" autoComplete="off" /> {errors.email &&

{errors.email}

}
set("password", e.target.value)} placeholder="Min. 8 characters" autoComplete="new-password" className="pr-10" />
{errors.password &&

{errors.password}

}
); }