"use client" import { useState } from "react" import { useRouter } from "next/navigation" import { useForm } from "react-hook-form" import { zodResolver } from "@hookform/resolvers/zod" import * as z from "zod" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" import { Card, CardContent } from "@/components/ui/card" import { toast } from "sonner" import { Loader2 } from "lucide-react" import { createUser, updateUser } from "@/app/(dashboard)/dashboard/users/actions" const userSchema = z.object({ firstName: z.string().min(2, "Ad en az 2 karakter olmalıdır."), lastName: z.string().min(2, "Soyad en az 2 karakter olmalıdır."), email: z.string().email("Geçerli bir e-posta adresi giriniz."), password: z.string().optional(), // Password is optional on edit role: z.enum(["admin", "user"]), }).refine((data) => { // If we are creating a NEW user (no ID passed in props effectively, but schema doesn't know props), // we generally want password required. But here we'll handle it in the component logic or strictly separate schemas. // For simplicity, we make password optional in Zod but check it in onSubmit if it's a create action. return true }) type UserFormValues = z.infer interface UserFormProps { initialData?: { id: string firstName: string lastName: string email: string role: "admin" | "user" } } export function UserForm({ initialData }: UserFormProps) { const router = useRouter() const [loading, setLoading] = useState(false) const form = useForm({ resolver: zodResolver(userSchema), defaultValues: initialData ? { firstName: initialData.firstName, lastName: initialData.lastName, email: initialData.email, password: "", // Empty password means no change role: initialData.role, } : { firstName: "", lastName: "", email: "", password: "", role: "user", }, }) const onSubmit = async (data: UserFormValues) => { setLoading(true) try { let result; if (initialData) { // Update result = await updateUser(initialData.id, data) } else { // Create if (!data.password || data.password.length < 6) { toast.error("Yeni kullanıcı için şifre gereklidir (min 6 karakter).") setLoading(false) return } result = await createUser(data.firstName, data.lastName, data.email, data.password, data.role) } if (result.error) { toast.error(result.error) return } toast.success(initialData ? "Kullanıcı güncellendi." : "Kullanıcı oluşturuldu.") router.push("/dashboard/users") router.refresh() } catch (error) { toast.error("Bir sorun oluştu.") } finally { setLoading(false) } } return (
( Ad )} /> ( Soyad )} />
( E-posta )} /> ( Şifre )} /> ( Rol )} />
) }