import { useEffect } from "react"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import * as z from "zod"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, } from "@/components/ui/dialog"; 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, SelectGroup, SelectItem, SelectLabel, SelectTrigger, SelectValue, } from "./ui/select"; const memberSchema = z.object({ userId: z.string().optional(), firstname: z.string().min(1, "Prénom est requis."), lastname: z.string().min(1, "Nom de famille est requis."), email: z.string().email("Adresse email invalide."), password: z .string() .min(6, "Le mot de passe doit avoir au moins 6 caractères.") .optional(), phone: z.string().regex(/^\d{10}$/, "Le numéro doit avoir 10 chiffres."), role: z.string().min(1, "Le rôle est requis."), }); const updateMemberSchema = memberSchema.partial(); export type Member = z.infer; interface MemberDialogProps { isOpen: boolean; onClose: () => void; member: Member | null; onSave: (member: Member) => void; } export default function MemberDialog({ isOpen, onClose, member, onSave, }: MemberDialogProps) { const schema = member?.userId ? updateMemberSchema : memberSchema; const form = useForm({ resolver: zodResolver(schema), defaultValues: member?.userId ? member : { userId: "", firstname: "", lastname: "", email: "", password: "", phone: "", role: "", }, }); useEffect(() => { if (member) { form.reset(member); } else { form.reset({ userId: "", firstname: "", lastname: "", email: "", password: "", phone: "", role: "", }); } }, [member, form]); const onSubmit = (data: Member) => { onSave(data); onClose(); }; return ( {member ? "Mise à jour du membre" : "Créer un nouveau membre"}
{/* Firstname Field */} ( Prénom )} />
{/* Firstname Field */} ( Nom )} /> {/* Email Field */} ( Email )} /> {/* Password Field */} {!member?.userId && ( ( Mot de passe )} /> )} ( Role )} /> {/* Phone Field */} ( Phone number )} />
); }