"use client"; import { useState, useTransition } from "react"; import { useRouter } from "next/navigation"; import { Eye, EyeOff, RefreshCw } from "lucide-react"; import { createUser } from "@/app/admin/users/actions"; const ROLES = [ { value: "student", label: "Ученик" }, { value: "curator", label: "Куратор" }, { value: "admin", label: "Администратор" }, ]; function generatePassword() { const chars = "abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ23456789!@#$"; return Array.from({ length: 12 }, () => chars[Math.floor(Math.random() * chars.length)]).join(""); } const inputStyle: React.CSSProperties = { border: "2px solid var(--border)", background: "var(--background)", outline: "none", width: "100%", padding: "0.5rem 0.75rem", fontSize: "0.875rem", fontFamily: "inherit", }; const focusHandlers = { onFocus: (e: React.FocusEvent) => (e.currentTarget.style.borderColor = "var(--foreground)"), onBlur: (e: React.FocusEvent) => (e.currentTarget.style.borderColor = "var(--border)"), }; function Field({ label, required, children }: { label: string; required?: boolean; children: React.ReactNode }) { return (
{children}
); } function Toggle({ label, hint, checked, onChange }: { label: string; hint?: string; checked: boolean; onChange: (v: boolean) => void }) { return (

{label}

{hint &&

{hint}

}
); } export function CreateUserForm() { const router = useRouter(); const [pending, startTransition] = useTransition(); const [error, setError] = useState(null); const [showPassword, setShowPassword] = useState(false); const [name, setName] = useState(""); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [role, setRole] = useState("student"); const [emailVerified, setEmailVerified] = useState(true); const [sendWelcome, setSendWelcome] = useState(true); function handleGenerate() { setPassword(generatePassword()); setShowPassword(true); } function handleSubmit(e: React.FormEvent) { e.preventDefault(); setError(null); startTransition(async () => { const result = await createUser({ name, email, password, role, emailVerified, sendWelcome }); if (!result.success) { setError(result.error); return; } router.push(`/admin/users/${result.userId}`); router.refresh(); }); } return (
{/* Name */} setName(e.target.value)} placeholder="Иван Иванов" required style={inputStyle} {...focusHandlers} /> {/* Email */} setEmail(e.target.value)} placeholder="user@example.com" required style={{ ...inputStyle, fontFamily: "var(--font-mono)" }} {...focusHandlers} /> {/* Password */}
setPassword(e.target.value)} placeholder="Минимум 8 символов" required minLength={8} style={{ ...inputStyle, paddingRight: "2.5rem", fontFamily: "var(--font-mono)" }} {...focusHandlers} />
{password && showPassword && (

{password}

)}
{/* Role */} {/* Toggles */}
{/* Error */} {error && (

{error}

)} {/* Actions */}
); }