"use client"; import * as React from "react"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { z } from "zod"; import { Plus, Loader2 } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { Textarea } from "@/components/ui/textarea"; import { createIntegration } from "../service"; import { toast } from "sonner"; const createIntegrationSchema = z.object({ code: z.string().min(1, "코드는 필수입니다."), name: z.string().min(1, "이름은 필수입니다."), type: z.enum(["rest_api", "soap", "db_to_db"], { required_error: "타입은 필수입니다." }), description: z.string().optional(), sourceSystem: z.string().min(1, "소스 시스템은 필수입니다."), targetSystem: z.string().min(1, "타겟 시스템은 필수입니다."), status: z.enum(["active", "inactive", "deprecated"]).default("active"), metadata: z.any().optional(), }); type CreateIntegrationFormValues = z.infer; interface IntegrationAddDialogProps { onSuccess?: () => void; } export function IntegrationAddDialog({ onSuccess }: IntegrationAddDialogProps) { const [open, setOpen] = React.useState(false); const [isLoading, setIsLoading] = React.useState(false); const form = useForm({ resolver: zodResolver(createIntegrationSchema), defaultValues: { code: "", name: "", type: "rest_api", description: "", sourceSystem: "", targetSystem: "", status: "active", metadata: {}, }, }); const handleOpenChange = (newOpen: boolean) => { setOpen(newOpen); if (!newOpen) { form.reset(); } }; const handleCancel = () => { form.reset(); setOpen(false); }; const onSubmit = async (data: CreateIntegrationFormValues) => { setIsLoading(true); try { const result = await createIntegration(data); if (result.data) { toast.success("인터페이스가 성공적으로 추가되었습니다."); form.reset(); setOpen(false); if (onSuccess) { onSuccess(); } } else { toast.error(result.error || "생성 중 오류가 발생했습니다."); } } catch (error) { console.error("인터페이스 생성 오류:", error); toast.error("인터페이스 생성에 실패했습니다."); } finally { setIsLoading(false); } }; return ( 새 인터페이스 추가 새로운 인터페이스를 추가합니다. 필수 정보를 입력해주세요. * 표시된 항목은 필수 입력사항입니다.
( 코드 * )} /> ( 이름 * )} /> ( 타입 * )} /> ( 소스 시스템 * )} /> ( 타겟 시스템 * )} /> ( 상태 * )} /> ( 설명