"use client"; /** * 플로우 불러오기 다이얼로그 */ import { useEffect, useState } from "react"; import { Loader2, FileJson, Calendar, Trash2 } from "lucide-react"; import { ResizableDialog, ResizableDialogContent, ResizableDialogDescription, ResizableDialogHeader, DialogTitle } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { ScrollArea } from "@/components/ui/scroll-area"; import { getNodeFlows, deleteNodeFlow } from "@/lib/api/nodeFlows"; interface Flow { flowId: number; flowName: string; flowDescription: string; createdAt: string; updatedAt: string; } interface LoadFlowDialogProps { open: boolean; onOpenChange: (open: boolean) => void; onLoad: (flowId: number) => void; } export function LoadFlowDialog({ open, onOpenChange, onLoad }: LoadFlowDialogProps) { const [flows, setFlows] = useState([]); const [loading, setLoading] = useState(false); const [selectedFlowId, setSelectedFlowId] = useState(null); const [deleting, setDeleting] = useState(null); // 플로우 목록 조회 const fetchFlows = async () => { setLoading(true); try { const flows = await getNodeFlows(); setFlows(flows); } catch (error) { console.error("플로우 목록 조회 오류:", error); alert(error instanceof Error ? error.message : "플로우 목록을 불러올 수 없습니다."); } finally { setLoading(false); } }; // 플로우 삭제 const handleDelete = async (flowId: number, flowName: string) => { if (!confirm(`"${flowName}" 플로우를 삭제하시겠습니까?\n\n이 작업은 되돌릴 수 없습니다.`)) { return; } setDeleting(flowId); try { await deleteNodeFlow(flowId); alert("✅ 플로우가 삭제되었습니다."); fetchFlows(); // 목록 새로고침 } catch (error) { console.error("플로우 삭제 오류:", error); alert(error instanceof Error ? error.message : "플로우를 삭제할 수 없습니다."); } finally { setDeleting(null); } }; // 플로우 불러오기 const handleLoad = () => { if (selectedFlowId === null) { alert("불러올 플로우를 선택해주세요."); return; } onLoad(selectedFlowId); onOpenChange(false); }; // 다이얼로그 열릴 때 목록 조회 useEffect(() => { if (open) { fetchFlows(); setSelectedFlowId(null); } }, [open]); // 날짜 포맷팅 const formatDate = (dateString: string) => { const date = new Date(dateString); return new Intl.DateTimeFormat("ko-KR", { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", }).format(date); }; return ( 플로우 불러오기 저장된 플로우를 선택하여 불러옵니다. {loading ? (
) : flows.length === 0 ? (

저장된 플로우가 없습니다.

) : (
{flows.map((flow) => (
setSelectedFlowId(flow.flowId)} >

{flow.flowName}

#{flow.flowId}
{flow.flowDescription &&

{flow.flowDescription}

}
수정: {formatDate(flow.updatedAt)}
))}
)}
); }