"use client" import * as React from "react" import { zodResolver } from "@hookform/resolvers/zod" import { Loader } from "lucide-react" import { useForm } from "react-hook-form" import { toast } from "sonner" import { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, } from "@/components/ui/sheet" import { Button } from "@/components/ui/button" import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, FormDescription, } from "@/components/ui/form" import { Input } from "@/components/ui/input" import { Select, SelectTrigger, SelectContent, SelectItem, SelectValue, } from "@/components/ui/select" // import your MultiSelect or other role selection import { MultiSelect } from "@/components/ui/multi-select" import { cn } from "@/lib/utils" import { type UserView } from "@/db/schema/users" import { updateUserSchema, type UpdateUserSchema } from "@/lib/admin-users/validations" import { modifiUser } from "@/lib/admin-users/service" export interface UpdateAuserSheetProps extends React.ComponentPropsWithRef { user: UserView | null } const languageOptions = [ { value: "ko", label: "한국어" }, { value: "en", label: "English" }, ] // Phone validation helper const validatePhoneNumber = (phone: string): boolean => { if (!phone) return true; // Optional field // Basic international phone number validation const cleanPhone = phone.replace(/[\s\-\(\)]/g, ''); return /^\+\d{3,20}$/.test(cleanPhone); }; // Get phone placeholder const getPhonePlaceholder = (): string => { return "+82-10-1234-5678"; }; // Get phone description const getPhoneDescription = (): string => { return "국제 전화번호를 입력하세요. (예: +82-10-1234-5678)"; }; export function UpdateAuserSheet({ user, ...props }: UpdateAuserSheetProps) { const [isUpdatePending, startUpdateTransition] = React.useTransition() // 1) RHF 설정 const form = useForm({ resolver: zodResolver(updateUserSchema), defaultValues: { name: user?.user_name ?? "", email: user?.user_email ?? "", phone: user?.user_phone ?? "", // Add phone field companyId: user?.company_id ?? null, roles: user?.roles ?? [], language:'en', }, }) // 2) user prop 바뀔 때마다 form.reset React.useEffect(() => { if (user) { form.reset({ name: user.user_name, email: user.user_email, phone: user.user_phone || "", // Add phone field companyId: user.company_id, roles: user.roles, language: 'en', // You might want to get this from user object }) } }, [user, form]) // 3) onSubmit async function onSubmit(input: UpdateUserSchema & { language?: string; phone?: string }) { // Phone validation is now handled by zod schema startUpdateTransition(async () => { if (!user) return const { error } = await modifiUser({ id: user.user_id, // user.userId ...input, }) if (error) { toast.error(error) return } // 성공 시 form.reset() props.onOpenChange?.(false) toast.success("User updated successfully!") }) } return ( Update user Update the user details and save the changes {/* 4) RHF Form */}
{/* name */} ( User Name )} /> {/* email */} ( Email )} /> {/* 전화번호 - 새로 추가 */} ( Phone Number {getPhoneDescription()} )} /> {/* roles */} ( Roles field.onChange(vals)} /> )} /> ( Language )} /> {/* 5) Footer: Cancel, Save */}
) }