"use client"; import React, { useState, useEffect } from "react"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter, } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { Loader2, Copy } from "lucide-react"; import { ScreenDefinition } from "@/types/screen"; import { screenApi } from "@/lib/api/screen"; import { toast } from "sonner"; interface CopyScreenModalProps { isOpen: boolean; onClose: () => void; sourceScreen: ScreenDefinition | null; onCopySuccess: () => void; } export default function CopyScreenModal({ isOpen, onClose, sourceScreen, onCopySuccess }: CopyScreenModalProps) { const [screenName, setScreenName] = useState(""); const [screenCode, setScreenCode] = useState(""); const [description, setDescription] = useState(""); const [isCopying, setIsCopying] = useState(false); // 모달이 열릴 때 초기값 설정 useEffect(() => { if (isOpen && sourceScreen) { setScreenName(`${sourceScreen.screenName} (복사본)`); setDescription(sourceScreen.description || ""); // 화면 코드 자동 생성 generateNewScreenCode(); } }, [isOpen, sourceScreen]); // 새로운 화면 코드 자동 생성 const generateNewScreenCode = async () => { if (!sourceScreen?.companyCode) return; try { const newCode = await screenApi.generateScreenCode(sourceScreen.companyCode); setScreenCode(newCode); } catch (error) { // console.error("화면 코드 생성 실패:", error); toast.error("화면 코드 생성에 실패했습니다."); } }; // 화면 복사 실행 const handleCopy = async () => { if (!sourceScreen) return; // 입력값 검증 if (!screenName.trim()) { toast.error("화면명을 입력해주세요."); return; } if (!screenCode.trim()) { toast.error("화면 코드 생성에 실패했습니다. 잠시 후 다시 시도해주세요."); return; } try { setIsCopying(true); // 화면 복사 API 호출 await screenApi.copyScreen(sourceScreen.screenId, { screenName: screenName.trim(), screenCode: screenCode.trim(), description: description.trim(), }); toast.success("화면이 성공적으로 복사되었습니다."); onCopySuccess(); handleClose(); } catch (error: any) { // console.error("화면 복사 실패:", error); const errorMessage = error.response?.data?.message || "화면 복사에 실패했습니다."; toast.error(errorMessage); } finally { setIsCopying(false); } }; // 모달 닫기 const handleClose = () => { setScreenName(""); setScreenCode(""); setDescription(""); onClose(); }; return ( 화면 복사 {sourceScreen?.screenName} 화면을 복사합니다. 화면 구성도 함께 복사됩니다.
{/* 원본 화면 정보 */}

원본 화면 정보

화면명: {sourceScreen?.screenName}
화면코드: {sourceScreen?.screenCode}
회사코드: {sourceScreen?.companyCode}
{/* 새 화면 정보 입력 */}
setScreenName(e.target.value)} placeholder="복사될 화면의 이름을 입력하세요" className="mt-1" />