"use client"; import { Button } from "@/app/_components/ui/button"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/app/_components/ui/form"; import { Input } from "@/app/_components/ui/input"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/app/_components/ui/select"; import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle, } from "@/app/_components/ui/sheet"; import { zodResolver } from "@hookform/resolvers/zod"; import { useForm } from "react-hook-form"; import * as z from "zod"; import type { User } from "./users-table"; import { useCallback } from "react"; const formSchema = z.object({ firstName: z.string().min(2, { message: "First name must be at least 2 characters.", }), lastName: z.string().min(2, { message: "Last name must be at least 2 characters.", }), email: z.string().email({ message: "Please enter a valid email address.", }), role: z.enum(["admin", "staff", "user"]), status: z.enum(["active", "inactive"]), }); interface EditUserSheetProps { isOpen: boolean; onOpenChange: (open: boolean) => void; selectedUser: User | null; onUserUpdate: (updatedUser: User) => void; } export function EditUserSheet({ isOpen, onOpenChange, selectedUser, onUserUpdate, }: EditUserSheetProps) { const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { firstName: selectedUser?.firstName || "", lastName: selectedUser?.lastName || "", email: selectedUser?.email || "", role: selectedUser?.role || "user", status: selectedUser?.status || "inactive", }, }); const onSubmit = useCallback( (values: z.infer) => { if (!selectedUser) return; const updatedUser: User = { ...selectedUser, firstName: values.firstName, lastName: values.lastName, email: values.email, role: values.role, status: values.status, }; onUserUpdate(updatedUser); onOpenChange(false); }, [selectedUser, onUserUpdate, onOpenChange] ); return ( Edit User Make changes to the user profile here. Click save when you're done.
( First name )} /> ( Last name )} /> ( Email )} /> ( Role )} /> ( Status )} />
); }