"use client"; import { useState } from "react"; import { useRouter } from "next/navigation"; import { DataFlowDesigner } from "@/components/dataflow/DataFlowDesigner"; import DataFlowList from "@/components/dataflow/DataFlowList"; // 🎨 μƒˆλ‘œμš΄ UI μ»΄ν¬λ„ŒνŠΈ import import DataConnectionDesigner from "@/components/dataflow/connection/redesigned/DataConnectionDesigner"; import { TableRelationship, DataFlowDiagram } from "@/lib/api/dataflow"; import { useAuth } from "@/hooks/useAuth"; import { loadDataflowRelationship } from "@/lib/api/dataflowSave"; import { toast } from "sonner"; type Step = "list" | "design"; export default function DataFlowPage() { const { user } = useAuth(); const router = useRouter(); const [currentStep, setCurrentStep] = useState("list"); const [stepHistory, setStepHistory] = useState(["list"]); const [editingDiagram, setEditingDiagram] = useState(null); const [loadedRelationshipData, setLoadedRelationshipData] = useState(null); // 단계별 제λͺ©κ³Ό μ„€λͺ… const stepConfig = { list: { title: "데이터 흐름 관계도 관리", description: "μƒμ„±λœ 관계도듀을 ν™•μΈν•˜κ³  κ΄€λ¦¬ν•˜μ„Έμš”", icon: "πŸ“Š", }, design: { title: "μƒˆ 관계도 섀계", description: "ν…Œμ΄λΈ” κ°„ 데이터 관계λ₯Ό μ‹œκ°μ μœΌλ‘œ μ„€κ³„ν•˜μ„Έμš”", icon: "🎨", }, }; // λ‹€μŒ λ‹¨κ³„λ‘œ 이동 const goToNextStep = (nextStep: Step) => { setStepHistory((prev) => [...prev, nextStep]); setCurrentStep(nextStep); }; // 이전 λ‹¨κ³„λ‘œ 이동 const goToPreviousStep = () => { if (stepHistory.length > 1) { const newHistory = stepHistory.slice(0, -1); const previousStep = newHistory[newHistory.length - 1]; setStepHistory(newHistory); setCurrentStep(previousStep); } }; // νŠΉμ • λ‹¨κ³„λ‘œ 이동 const goToStep = (step: Step) => { setCurrentStep(step); // ν•΄λ‹Ή λ‹¨κ³„κΉŒμ§€μ˜ νžˆμŠ€ν† λ¦¬λ§Œ μœ μ§€ const stepIndex = stepHistory.findIndex((s) => s === step); if (stepIndex !== -1) { setStepHistory(stepHistory.slice(0, stepIndex + 1)); } }; const handleSave = (relationships: TableRelationship[]) => { console.log("μ €μž₯된 관계:", relationships); // μ €μž₯ ν›„ λͺ©λ‘μœΌλ‘œ λŒμ•„κ°€κΈ° - λ‹€μŒ λ Œλ”λ§ μ‚¬μ΄ν΄λ‘œ μ§€μ—° setTimeout(() => { goToStep("list"); setEditingDiagram(null); setLoadedRelationshipData(null); }, 0); }; // 관계도 μˆ˜μ • ν•Έλ“€λŸ¬ const handleDesignDiagram = async (diagram: DataFlowDiagram | null) => { if (diagram) { // κΈ°μ‘΄ 관계도 μˆ˜μ • - μ €μž₯된 관계 정보 λ‘œλ“œ try { console.log("πŸ“– 관계도 μˆ˜μ • λͺ¨λ“œ:", diagram); // μ €μž₯된 관계 정보 λ‘œλ“œ const relationshipData = await loadDataflowRelationship(diagram.diagramId); console.log("βœ… 관계 정보 λ‘œλ“œ μ™„λ£Œ:", relationshipData); setEditingDiagram(diagram); setLoadedRelationshipData(relationshipData); goToNextStep("design"); toast.success(`"${diagram.diagramName}" 관계λ₯Ό λΆˆλŸ¬μ™”μŠ΅λ‹ˆλ‹€.`); } catch (error: any) { console.error("❌ 관계 정보 λ‘œλ“œ μ‹€νŒ¨:", error); toast.error(error.message || "관계 정보λ₯Ό λΆˆλŸ¬μ˜€λŠ”λ° μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€."); } } else { // μƒˆ 관계도 생성 - ν˜„μž¬ νŽ˜μ΄μ§€μ—μ„œ 처리 setEditingDiagram(null); setLoadedRelationshipData(null); goToNextStep("design"); } }; return (
{/* νŽ˜μ΄μ§€ 제λͺ© */}

데이터 흐름 관리

ν…Œμ΄λΈ” κ°„ 데이터 관계λ₯Ό μ‹œκ°μ μœΌλ‘œ μ„€κ³„ν•˜κ³  κ΄€λ¦¬ν•©λ‹ˆλ‹€

{/* 단계별 λ‚΄μš© */}
{/* 관계도 λͺ©λ‘ 단계 */} {currentStep === "list" && } {/* 관계도 섀계 단계 - 🎨 μƒˆλ‘œμš΄ UI μ‚¬μš© */} {currentStep === "design" && ( { goToStep("list"); setEditingDiagram(null); setLoadedRelationshipData(null); }} initialData={ loadedRelationshipData || { connectionType: "data_save", } } showBackButton={true} /> )}
); }