diff --git a/frontend/components/dataflow/DataFlowDesigner.tsx b/frontend/components/dataflow/DataFlowDesigner.tsx index 9553a5b2..f0951f6b 100644 --- a/frontend/components/dataflow/DataFlowDesigner.tsx +++ b/frontend/components/dataflow/DataFlowDesigner.tsx @@ -784,6 +784,8 @@ export const DataFlowDesigner: React.FC = ({ // 수정 모드였다면 해제 if (editingRelationshipId) { setEditingRelationshipId(null); + // 편집 모드 취소 시 선택된 컬럼도 초기화 + setSelectedColumns({}); } }, [editingRelationshipId]); @@ -1136,98 +1138,101 @@ export const DataFlowDesigner: React.FC = ({ - {/* 선택된 컬럼 팝업 - 캔버스 좌측 상단 고정 (신규 관계도 생성 시에만 표시) */} - {Object.keys(selectedColumns).length > 0 && !showEdgeActions && !pendingConnection && !diagramId && ( -
- {/* 헤더 */} -
-
-
- 📋 -
-
-
선택된 컬럼
-
{Object.keys(selectedColumns).length}개 테이블
+ {/* 선택된 컬럼 팝업 - 캔버스 좌측 상단 고정 (새 관계 생성 시에만 표시) */} + {Object.keys(selectedColumns).length > 0 && + !showEdgeActions && + !pendingConnection && + !editingRelationshipId && ( +
+ {/* 헤더 */} +
+
+
+ 📋 +
+
+
선택된 컬럼
+
{Object.keys(selectedColumns).length}개 테이블
+
+
- -
- {/* 컨텐츠 */} -
-
- {[...new Set(selectionOrder)] - .filter((tableName) => selectedColumns[tableName] && selectedColumns[tableName].length > 0) - .map((tableName, index, filteredOrder) => { - const columns = selectedColumns[tableName]; - const node = nodes.find((n) => n.data.table.tableName === tableName); - const displayName = node?.data.table.displayName || tableName; + {/* 컨텐츠 */} +
+
+ {[...new Set(selectionOrder)] + .filter((tableName) => selectedColumns[tableName] && selectedColumns[tableName].length > 0) + .map((tableName, index, filteredOrder) => { + const columns = selectedColumns[tableName]; + const node = nodes.find((n) => n.data.table.tableName === tableName); + const displayName = node?.data.table.displayName || tableName; - return ( -
- {/* 테이블 정보 */} -
-
{displayName}
-
- {columns.map((column, columnIndex) => ( - - {column} - - ))} + return ( +
+ {/* 테이블 정보 */} +
+
{displayName}
+
+ {columns.map((column, columnIndex) => ( + + {column} + + ))} +
+ + {/* 화살표 */} + {index === 0 && filteredOrder.length > 1 && ( +
+
+
+ )}
+ ); + })} +
+
- {/* 화살표 */} - {index === 0 && filteredOrder.length > 1 && ( -
-
-
- )} -
- ); - })} + {/* 액션 버튼 */} +
+ +
- - {/* 액션 버튼 */} -
- - -
-
- )} + )} {/* 안내 메시지 */} {nodes.length === 0 && (