"use client" import * as React from "react" import { zodResolver } from "@hookform/resolvers/zod" 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, } from "@/components/ui/form" import { Input } from "@/components/ui/input" import { Select, SelectTrigger, SelectContent, SelectItem, SelectValue, SelectGroup, } from "@/components/ui/select" // import your MultiSelect or other role selection import { RoleView, userRoles, type UserView } from "@/db/schema/users" import { getAllCompanies, modifiUser } from "@/lib/admin-users/service" import { modifiRole } from "../services" import { updateRoleSchema, UpdateRoleSchema } from "../validations" import { Check, ChevronsUpDown, Loader } from "lucide-react" import { Textarea } from "@/components/ui/textarea" import { Popover, PopoverTrigger, PopoverContent, } from "@/components/ui/popover" import { Command, CommandInput, CommandList, CommandGroup, CommandItem, CommandEmpty, } from "@/components/ui/command" import { Company } from "@/db/schema/companies" import { cn } from "@/lib/utils" export interface UpdateRoleSheetProps extends React.ComponentPropsWithRef { role: RoleView | null } const domainOptions = [ { value: "partners", label: "협력업체" }, { value: "evcp", label: "삼성중공업" }, ] export function UpdateRolesSheet({ role, ...props }: UpdateRoleSheetProps) { const [isUpdatePending, startUpdateTransition] = React.useTransition() const [companies, setCompanies] = React.useState([]) // 회사 목록 React.useEffect(() => { getAllCompanies().then((res) => { setCompanies(res) }) }, []) // 1) RHF 설정 const form = useForm({ resolver: zodResolver(updateRoleSchema), defaultValues: { name: role?.name ?? "", description: role?.description ?? "", domain: (role?.domain === "evcp" || role?.domain === "partners") ? role?.domain : undefined, }, }) // 2) user prop 바뀔 때마다 form.reset React.useEffect(() => { if (role) { form.reset({ name: role.name, description: role.description, domain: role.domain as "evcp" | "partners" | undefined, }) } }, [role, form]) const selectedDomain = form.watch("domain") // 3) onSubmit async function onSubmit(input: UpdateRoleSchema) { startUpdateTransition(async () => { if (!role) return const { error } = await modifiRole({ id: role.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 */} ( Role Name )} /> ( Role Description