"use client"; import { useState, useEffect } from "react"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import * as z from "zod"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Switch } from "@/components/ui/switch"; import { User } from "@/types"; import { toast } from "sonner"; const createSchema = z.object({ name: z.string().min(1, "Name is required"), email: z.string().email("Invalid email address"), password: z.string().min(6, "Password must be at least 6 characters"), role: z.string().min(1, "Role is required"), active: z.boolean(), }); type UserFormValues = z.infer; interface UserFormDialogProps { open: boolean; onOpenChange: (open: boolean) => void; user?: User | null; onUserCreated?: () => void; } export function UserFormDialog({ open, onOpenChange, user, onUserCreated, }: UserFormDialogProps) { const isEditing = !!user; const [submitting, setSubmitting] = useState(false); const form = useForm({ resolver: zodResolver(createSchema), defaultValues: { name: "", email: "", password: "", role: "sales_user", active: true, }, }); useEffect(() => { if (user) { form.reset({ name: user.name, email: user.email, password: "", role: user.role, active: user.active, }); } else { form.reset({ name: "", email: "", password: "", role: "sales_user", active: true, }); } }, [user, form]); async function onSubmit(values: UserFormValues) { setSubmitting(true); try { const res = await fetch("/api/users", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(values), }); const data = await res.json(); if (!res.ok) { toast.error(data.error || "Failed to create user"); return; } toast.success("User created"); onOpenChange(false); onUserCreated?.(); } catch { toast.error("Failed to create user"); } finally { setSubmitting(false); } } return ( {isEditing ? "Edit User" : "Add New User"} {isEditing ? "Update the user's information and permissions." : "Create a new user account that can sign in."}
( Name )} /> ( Email )} /> ( Role )} /> ( Password )} /> (
Active

User can access the system

)} />
); }