diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-07-28 09:19:42 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-07-28 09:19:42 +0000 |
| commit | 50ae0b8f02c034e60d4cbb504620dfa1575a836f (patch) | |
| tree | 24c661a0c7354e15ad56e2bded4d300bd7fd2b41 /lib/docu-list-rule/combo-box-settings/table/combo-box-options-edit-sheet.tsx | |
| parent | 738f956aa61264ffa761e30398eca23393929f8c (diff) | |
(박서영) 설계 document Numbering Rule 개발-최겸 업로드
Diffstat (limited to 'lib/docu-list-rule/combo-box-settings/table/combo-box-options-edit-sheet.tsx')
| -rw-r--r-- | lib/docu-list-rule/combo-box-settings/table/combo-box-options-edit-sheet.tsx | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/lib/docu-list-rule/combo-box-settings/table/combo-box-options-edit-sheet.tsx b/lib/docu-list-rule/combo-box-settings/table/combo-box-options-edit-sheet.tsx new file mode 100644 index 00000000..5732674e --- /dev/null +++ b/lib/docu-list-rule/combo-box-settings/table/combo-box-options-edit-sheet.tsx @@ -0,0 +1,147 @@ +"use client" + +import * as React from "react" +import { zodResolver } from "@hookform/resolvers/zod" +import { useForm } from "react-hook-form" +import { toast } from "sonner" +import * as z from "zod" +import { Loader } from "lucide-react" + +import { Button } from "@/components/ui/button" +import { + Form, + FormControl, + FormField, + FormItem, + FormLabel, + FormMessage, +} from "@/components/ui/form" +import { Input } from "@/components/ui/input" +import { + Sheet, + SheetContent, + SheetDescription, + SheetFooter, + SheetHeader, + SheetTitle, +} from "@/components/ui/sheet" + +import { updateComboBoxOption } from "../service" + +const updateOptionSchema = z.object({ + value: z.string().min(1, "값은 필수입니다."), +}) + +type UpdateOptionSchema = z.infer<typeof updateOptionSchema> + +interface ComboBoxOption { + id: number + codeGroupId: number + code: string + description: string + remark: string | null + isActive: boolean + createdAt: Date + updatedAt: Date +} + +interface ComboBoxOptionsEditSheetProps { + open: boolean + onOpenChange: (open: boolean) => void + data: ComboBoxOption | null + onSuccess?: () => void +} + +export function ComboBoxOptionsEditSheet({ + open, + onOpenChange, + data, + onSuccess, +}: ComboBoxOptionsEditSheetProps) { + const [isPending, startTransition] = React.useTransition() + + const form = useForm<UpdateOptionSchema>({ + resolver: zodResolver(updateOptionSchema), + defaultValues: { + value: "", + }, + }) + + React.useEffect(() => { + if (data) { + form.reset({ + value: data.description, + }) + } + }, [data, form]) + + const handleSubmit = (formData: UpdateOptionSchema) => { + if (!data) return + + startTransition(async () => { + try { + const result = await updateComboBoxOption({ + id: data.id, + value: formData.value, + }) + + if (result.success) { + toast.success("옵션이 성공적으로 수정되었습니다.") + onOpenChange(false) + onSuccess?.() + } else { + toast.error(`옵션 수정 실패: ${result.error}`) + } + } catch (error) { + console.error("Update error:", error) + toast.error("옵션 수정 중 오류가 발생했습니다.") + } + }) + } + + const handleCancel = () => { + onOpenChange(false) + form.reset() + } + + return ( + <Sheet open={open} onOpenChange={onOpenChange}> + <SheetContent> + <SheetHeader> + <SheetTitle>옵션 수정</SheetTitle> + <SheetDescription> + ComboBox 옵션을 수정합니다. + </SheetDescription> + </SheetHeader> + <Form {...form}> + <form onSubmit={form.handleSubmit(handleSubmit)} className="space-y-4"> + <FormField + control={form.control} + name="value" + render={({ field }) => ( + <FormItem> + <FormLabel>값</FormLabel> + <FormControl> + <Input {...field} placeholder="옵션 값" /> + </FormControl> + <FormMessage /> + </FormItem> + )} + /> + <SheetFooter> + <Button type="button" variant="outline" onClick={handleCancel}> + 취소 + </Button> + <Button type="submit" disabled={isPending || !form.formState.isValid}> + {isPending && ( + <Loader className="mr-2 size-4 animate-spin" aria-hidden="true" /> + )} + 수정 + </Button> + </SheetFooter> + </form> + </Form> + </SheetContent> + </Sheet> + ) +}
\ No newline at end of file |
