From 9463d8d0b64a8ae98160d7cabf0f2710be141bd6 Mon Sep 17 00:00:00 2001 From: SeongHyun Kim Date: Thu, 11 Dec 2025 13:25:13 +0900 Subject: [PATCH] =?UTF-8?q?=EC=88=98=EC=A3=BC=EA=B4=80=EB=A6=AC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EB=AA=A8=EB=8B=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/components/screen/EditModal.tsx | 17 +++++------------ .../lib/registry/DynamicComponentRenderer.tsx | 5 +++-- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/frontend/components/screen/EditModal.tsx b/frontend/components/screen/EditModal.tsx index 2a3050fc..294bca7f 100644 --- a/frontend/components/screen/EditModal.tsx +++ b/frontend/components/screen/EditModal.tsx @@ -176,7 +176,7 @@ export const EditModal: React.FC = ({ className }) => { loadGroupData(); } } - }, [modalState.isOpen, modalState.screenId]); + }, [modalState.isOpen, modalState.screenId, modalState.groupByColumns, modalState.tableName]); // 🆕 그룹 데이터 조회 함수 const loadGroupData = async () => { @@ -225,7 +225,7 @@ export const EditModal: React.FC = ({ className }) => { const dataArray = Array.isArray(response) ? response : response?.data || []; if (dataArray.length > 0) { - console.log("✅ 그룹 데이터 조회 성공:", dataArray); + console.log("✅ 그룹 데이터 조회 성공:", dataArray.length, "건"); setGroupData(dataArray); setOriginalGroupData(JSON.parse(JSON.stringify(dataArray))); // Deep copy toast.info(`${dataArray.length}개의 관련 품목을 불러왔습니다.`); @@ -749,15 +749,8 @@ export const EditModal: React.FC = ({ className }) => { }, }; - // 🔍 디버깅: 컴포넌트 렌더링 시점의 groupData 확인 - if (component.id === screenData.components[0]?.id) { - console.log("🔍 [EditModal] InteractiveScreenViewerDynamic props:", { - componentId: component.id, - groupDataLength: groupData.length, - groupData: groupData, - formData: groupData.length > 0 ? groupData[0] : formData, - }); - } + + const groupedDataProp = groupData.length > 0 ? groupData : undefined; return ( = ({ className }) => { onSave={handleSave} isInModal={true} // 🆕 그룹 데이터를 ModalRepeaterTable에 전달 - groupedData={groupData.length > 0 ? groupData : undefined} + groupedData={groupedDataProp} // 🆕 수정 모달에서 읽기 전용 필드 지정 (수주번호, 거래처) disabledFields={["order_no", "partner_id"]} /> diff --git a/frontend/lib/registry/DynamicComponentRenderer.tsx b/frontend/lib/registry/DynamicComponentRenderer.tsx index b039ac38..4d12309b 100644 --- a/frontend/lib/registry/DynamicComponentRenderer.tsx +++ b/frontend/lib/registry/DynamicComponentRenderer.tsx @@ -317,7 +317,7 @@ export const DynamicComponentRenderer: React.FC = // modal-repeater-table은 배열 데이터를 다루므로 빈 배열로 초기화 let currentValue; - if (componentType === "modal-repeater-table") { + if (componentType === "modal-repeater-table" || componentType === "repeat-screen-modal") { // EditModal에서 전달된 groupedData가 있으면 우선 사용 currentValue = props.groupedData || formData?.[fieldName] || []; } else { @@ -449,7 +449,8 @@ export const DynamicComponentRenderer: React.FC = // 🆕 그룹 데이터 전달 (EditModal → ConditionalContainer → ModalRepeaterTable) // Note: 이 props들은 DOM 요소에 전달되면 안 됨 // 각 컴포넌트에서 명시적으로 destructure하여 사용해야 함 - _groupedData: props.groupedData, + groupedData: props.groupedData, // ✅ 언더스코어 제거하여 직접 전달 + _groupedData: props.groupedData, // 하위 호환성 유지 // 🆕 UniversalFormModal용 initialData 전달 // originalData를 사용 (최초 전달된 값, formData는 계속 변경되므로 사용하면 안됨) _initialData: originalData || formData,