diff --git a/src/App.jsx b/src/App.jsx index 09536fc..e373e85 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react'; +import React, { useCallback, useEffect, useRef, useState } from 'react'; import { ArrowDown, ArrowRight, @@ -207,7 +207,8 @@ const defaultContent = { format: 'glb', programType: 'internal', predecessors: [], - successors: [] + successors: [], + mergeGroup: '' }, wayPrimal: { name: 'WayPrimal', @@ -218,6 +219,7 @@ const defaultContent = { programType: 'internal', predecessors: [], successors: [], + mergeGroup: '', linkLabel: '천지인 산출 모델을 WayPrimal 설계 입력으로 연계' }, comparisons: [], @@ -233,6 +235,7 @@ function normalizeStoredContent(parsed) { programType: getProgramType(parsed.cheonjiin?.programType ?? defaultContent.cheonjiin.programType), predecessors: parsed.cheonjiin?.predecessors ?? [], successors: parsed.cheonjiin?.successors ?? [], + mergeGroup: parsed.cheonjiin?.mergeGroup ?? '', format: !parsed.cheonjiin?.format || parsed.cheonjiin.format === '예: DXF, SHP, GeoTIFF, 수치지형도 v2 등' ? defaultContent.cheonjiin.format @@ -244,17 +247,23 @@ function normalizeStoredContent(parsed) { programType: getProgramType(parsed.wayPrimal?.programType ?? defaultContent.wayPrimal.programType), predecessors: parsed.wayPrimal?.predecessors ?? [], successors: parsed.wayPrimal?.successors ?? [], + mergeGroup: parsed.wayPrimal?.mergeGroup ?? '', format: parsed.wayPrimal?.format === '예: DWG, LandXML, XLSX, 도공계산서, 기본설계 모델 등' ? defaultContent.wayPrimal.format : (parsed.wayPrimal?.format ?? defaultContent.wayPrimal.format) }, - comparisons: parsed.comparisons ?? [], + comparisons: (parsed.comparisons ?? []).map((comparison, index) => ({ + ...comparison, + id: comparison.id ?? `comparison-${comparison.leftProgramId}-${comparison.rightProgramId}-${index}`, + title: comparison.title ?? '' + })), extraPrograms: (parsed.extraPrograms ?? []).map((program, index, programs) => ({ ...program, programType: getProgramType(program.programType), predecessors: program.predecessors ?? [], successors: program.successors ?? [], + mergeGroup: program.mergeGroup ?? '', linkLabel: program.linkLabel ?? `이전 프로그램 산출물을 ${program.name} 입력으로 연계` })) }; @@ -1149,7 +1158,7 @@ function DetailPopup({ ); } -function RelationPopup({ programs, onToggleRelation, onClose }) { +function RelationPopup({ programs, onToggleRelation, onMergeGroupChange, onClose }) { return (
프로그램
하나로 인식
+ ++ 같은 단계로 보는 프로그램을 묶으면 연결도에서는 하나의 박스로 표시됩니다. +
+- 1:1 프로그램 비교 -
+1:1 프로그램 비교