로그 제거
This commit is contained in:
parent
6bfc1a97a3
commit
cded99d644
|
|
@ -104,7 +104,7 @@ function ScreenViewPage() {
|
||||||
// 편집 모달 이벤트 리스너 등록
|
// 편집 모달 이벤트 리스너 등록
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const handleOpenEditModal = (event: CustomEvent) => {
|
const handleOpenEditModal = (event: CustomEvent) => {
|
||||||
console.log("🎭 편집 모달 열기 이벤트 수신:", event.detail);
|
// console.log("🎭 편집 모달 열기 이벤트 수신:", event.detail);
|
||||||
|
|
||||||
setEditModalConfig({
|
setEditModalConfig({
|
||||||
screenId: event.detail.screenId,
|
screenId: event.detail.screenId,
|
||||||
|
|
|
||||||
|
|
@ -261,7 +261,7 @@ export const ScreenModal: React.FC<ScreenModalProps> = ({ className }) => {
|
||||||
// dataSourceId 파라미터 제거
|
// dataSourceId 파라미터 제거
|
||||||
currentUrl.searchParams.delete("dataSourceId");
|
currentUrl.searchParams.delete("dataSourceId");
|
||||||
window.history.pushState({}, "", currentUrl.toString());
|
window.history.pushState({}, "", currentUrl.toString());
|
||||||
console.log("🧹 URL 파라미터 제거");
|
// console.log("🧹 URL 파라미터 제거");
|
||||||
}
|
}
|
||||||
|
|
||||||
setModalState({
|
setModalState({
|
||||||
|
|
@ -277,7 +277,7 @@ export const ScreenModal: React.FC<ScreenModalProps> = ({ className }) => {
|
||||||
setSelectedData([]); // 🆕 선택된 데이터 초기화
|
setSelectedData([]); // 🆕 선택된 데이터 초기화
|
||||||
setContinuousMode(false);
|
setContinuousMode(false);
|
||||||
localStorage.setItem("screenModal_continuousMode", "false"); // localStorage에 저장
|
localStorage.setItem("screenModal_continuousMode", "false"); // localStorage에 저장
|
||||||
console.log("🔄 연속 모드 초기화: false");
|
// console.log("🔄 연속 모드 초기화: false");
|
||||||
};
|
};
|
||||||
|
|
||||||
// 저장 성공 이벤트 처리 (연속 등록 모드 지원)
|
// 저장 성공 이벤트 처리 (연속 등록 모드 지원)
|
||||||
|
|
@ -285,36 +285,36 @@ export const ScreenModal: React.FC<ScreenModalProps> = ({ className }) => {
|
||||||
// 🆕 모달이 열린 후 500ms 이내의 저장 성공 이벤트는 무시 (이전 이벤트 방지)
|
// 🆕 모달이 열린 후 500ms 이내의 저장 성공 이벤트는 무시 (이전 이벤트 방지)
|
||||||
const timeSinceOpen = Date.now() - modalOpenedAtRef.current;
|
const timeSinceOpen = Date.now() - modalOpenedAtRef.current;
|
||||||
if (timeSinceOpen < 500) {
|
if (timeSinceOpen < 500) {
|
||||||
console.log("⏭️ [ScreenModal] 모달 열린 직후 저장 성공 이벤트 무시:", { timeSinceOpen });
|
// console.log("⏭️ [ScreenModal] 모달 열린 직후 저장 성공 이벤트 무시:", { timeSinceOpen });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const isContinuousMode = continuousMode;
|
const isContinuousMode = continuousMode;
|
||||||
console.log("💾 저장 성공 이벤트 수신");
|
// console.log("💾 저장 성공 이벤트 수신");
|
||||||
console.log("📌 현재 연속 모드 상태:", isContinuousMode);
|
// console.log("📌 현재 연속 모드 상태:", isContinuousMode);
|
||||||
console.log("📌 localStorage:", localStorage.getItem("screenModal_continuousMode"));
|
// console.log("📌 localStorage:", localStorage.getItem("screenModal_continuousMode"));
|
||||||
|
|
||||||
if (isContinuousMode) {
|
if (isContinuousMode) {
|
||||||
// 연속 모드: 폼만 초기화하고 모달은 유지
|
// 연속 모드: 폼만 초기화하고 모달은 유지
|
||||||
console.log("✅ 연속 모드 활성화 - 폼 초기화 및 화면 리셋");
|
// console.log("✅ 연속 모드 활성화 - 폼 초기화 및 화면 리셋");
|
||||||
|
|
||||||
// 1. 폼 데이터 초기화
|
// 1. 폼 데이터 초기화
|
||||||
setFormData({});
|
setFormData({});
|
||||||
|
|
||||||
// 2. 리셋 키 변경 (컴포넌트 강제 리마운트)
|
// 2. 리셋 키 변경 (컴포넌트 강제 리마운트)
|
||||||
setResetKey((prev) => prev + 1);
|
setResetKey((prev) => prev + 1);
|
||||||
console.log("🔄 resetKey 증가 - 컴포넌트 리마운트");
|
// console.log("🔄 resetKey 증가 - 컴포넌트 리마운트");
|
||||||
|
|
||||||
// 3. 화면 데이터 다시 로드 (채번 규칙 새로 생성)
|
// 3. 화면 데이터 다시 로드 (채번 규칙 새로 생성)
|
||||||
if (modalState.screenId) {
|
if (modalState.screenId) {
|
||||||
console.log("🔄 화면 데이터 다시 로드:", modalState.screenId);
|
// console.log("🔄 화면 데이터 다시 로드:", modalState.screenId);
|
||||||
loadScreenData(modalState.screenId);
|
loadScreenData(modalState.screenId);
|
||||||
}
|
}
|
||||||
|
|
||||||
toast.success("저장되었습니다. 계속 입력하세요.");
|
toast.success("저장되었습니다. 계속 입력하세요.");
|
||||||
} else {
|
} else {
|
||||||
// 일반 모드: 모달 닫기
|
// 일반 모드: 모달 닫기
|
||||||
console.log("❌ 일반 모드 - 모달 닫기");
|
// console.log("❌ 일반 모드 - 모달 닫기");
|
||||||
handleCloseModal();
|
handleCloseModal();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -190,14 +190,14 @@ export const EditModal: React.FC<EditModalProps> = ({ className }) => {
|
||||||
const innerLayoutData = await screenApi.getLayout(section.screenId);
|
const innerLayoutData = await screenApi.getLayout(section.screenId);
|
||||||
saveButton = findSaveButtonInComponents(innerLayoutData?.components || []);
|
saveButton = findSaveButtonInComponents(innerLayoutData?.components || []);
|
||||||
if (saveButton) {
|
if (saveButton) {
|
||||||
console.log("[EditModal] 조건부 컨테이너 내부에서 저장 버튼 발견:", {
|
// console.log("[EditModal] 조건부 컨테이너 내부에서 저장 버튼 발견:", {
|
||||||
sectionScreenId: section.screenId,
|
// sectionScreenId: section.screenId,
|
||||||
sectionLabel: section.label,
|
// sectionLabel: section.label,
|
||||||
});
|
// });
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} catch (innerError) {
|
} catch (innerError) {
|
||||||
console.warn("[EditModal] 내부 화면 레이아웃 조회 실패:", section.screenId);
|
// console.warn("[EditModal] 내부 화면 레이아웃 조회 실패:", section.screenId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -207,7 +207,7 @@ export const EditModal: React.FC<EditModalProps> = ({ className }) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!saveButton) {
|
if (!saveButton) {
|
||||||
console.log("[EditModal] 저장 버튼을 찾을 수 없음:", targetScreenId);
|
// console.log("[EditModal] 저장 버튼을 찾을 수 없음:", targetScreenId);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -219,14 +219,14 @@ export const EditModal: React.FC<EditModalProps> = ({ className }) => {
|
||||||
dataflowConfig: webTypeConfig.dataflowConfig,
|
dataflowConfig: webTypeConfig.dataflowConfig,
|
||||||
dataflowTiming: webTypeConfig.dataflowConfig?.flowConfig?.executionTiming || "after",
|
dataflowTiming: webTypeConfig.dataflowConfig?.flowConfig?.executionTiming || "after",
|
||||||
};
|
};
|
||||||
console.log("[EditModal] 저장 버튼 제어로직 설정 발견:", config);
|
// console.log("[EditModal] 저장 버튼 제어로직 설정 발견:", config);
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("[EditModal] 저장 버튼에 제어로직 설정 없음");
|
// console.log("[EditModal] 저장 버튼에 제어로직 설정 없음");
|
||||||
return null;
|
return null;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.warn("[EditModal] 저장 버튼 설정 조회 실패:", error);
|
// console.warn("[EditModal] 저장 버튼 설정 조회 실패:", error);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -309,16 +309,16 @@ export const EditModal: React.FC<EditModalProps> = ({ className }) => {
|
||||||
// 🆕 그룹 데이터 조회 함수
|
// 🆕 그룹 데이터 조회 함수
|
||||||
const loadGroupData = async () => {
|
const loadGroupData = async () => {
|
||||||
if (!modalState.tableName || !modalState.groupByColumns || modalState.groupByColumns.length === 0) {
|
if (!modalState.tableName || !modalState.groupByColumns || modalState.groupByColumns.length === 0) {
|
||||||
console.warn("테이블명 또는 그룹핑 컬럼이 없습니다.");
|
// console.warn("테이블명 또는 그룹핑 컬럼이 없습니다.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
console.log("🔍 그룹 데이터 조회 시작:", {
|
// console.log("🔍 그룹 데이터 조회 시작:", {
|
||||||
tableName: modalState.tableName,
|
// tableName: modalState.tableName,
|
||||||
groupByColumns: modalState.groupByColumns,
|
// groupByColumns: modalState.groupByColumns,
|
||||||
editData: modalState.editData,
|
// editData: modalState.editData,
|
||||||
});
|
// });
|
||||||
|
|
||||||
// 그룹핑 컬럼 값 추출 (예: order_no = "ORD-20251124-001")
|
// 그룹핑 컬럼 값 추출 (예: order_no = "ORD-20251124-001")
|
||||||
const groupValues: Record<string, any> = {};
|
const groupValues: Record<string, any> = {};
|
||||||
|
|
@ -329,14 +329,14 @@ export const EditModal: React.FC<EditModalProps> = ({ className }) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
if (Object.keys(groupValues).length === 0) {
|
if (Object.keys(groupValues).length === 0) {
|
||||||
console.warn("그룹핑 컬럼 값이 없습니다:", modalState.groupByColumns);
|
// console.warn("그룹핑 컬럼 값이 없습니다:", modalState.groupByColumns);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("🔍 그룹 조회 요청:", {
|
// console.log("🔍 그룹 조회 요청:", {
|
||||||
tableName: modalState.tableName,
|
// tableName: modalState.tableName,
|
||||||
groupValues,
|
// groupValues,
|
||||||
});
|
// });
|
||||||
|
|
||||||
// 같은 그룹의 모든 레코드 조회 (entityJoinApi 사용)
|
// 같은 그룹의 모든 레코드 조회 (entityJoinApi 사용)
|
||||||
const { entityJoinApi } = await import("@/lib/api/entityJoin");
|
const { entityJoinApi } = await import("@/lib/api/entityJoin");
|
||||||
|
|
@ -347,13 +347,13 @@ export const EditModal: React.FC<EditModalProps> = ({ className }) => {
|
||||||
enableEntityJoin: true,
|
enableEntityJoin: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log("🔍 그룹 조회 응답:", response);
|
// console.log("🔍 그룹 조회 응답:", response);
|
||||||
|
|
||||||
// entityJoinApi는 배열 또는 { data: [] } 형식으로 반환
|
// entityJoinApi는 배열 또는 { data: [] } 형식으로 반환
|
||||||
const dataArray = Array.isArray(response) ? response : response?.data || [];
|
const dataArray = Array.isArray(response) ? response : response?.data || [];
|
||||||
|
|
||||||
if (dataArray.length > 0) {
|
if (dataArray.length > 0) {
|
||||||
console.log("✅ 그룹 데이터 조회 성공:", dataArray.length, "건");
|
// console.log("✅ 그룹 데이터 조회 성공:", dataArray.length, "건");
|
||||||
setGroupData(dataArray);
|
setGroupData(dataArray);
|
||||||
setOriginalGroupData(JSON.parse(JSON.stringify(dataArray))); // Deep copy
|
setOriginalGroupData(JSON.parse(JSON.stringify(dataArray))); // Deep copy
|
||||||
toast.info(`${dataArray.length}개의 관련 품목을 불러왔습니다.`);
|
toast.info(`${dataArray.length}개의 관련 품목을 불러왔습니다.`);
|
||||||
|
|
@ -374,7 +374,7 @@ export const EditModal: React.FC<EditModalProps> = ({ className }) => {
|
||||||
try {
|
try {
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
|
|
||||||
console.log("화면 데이터 로딩 시작:", screenId);
|
// console.log("화면 데이터 로딩 시작:", screenId);
|
||||||
|
|
||||||
// 화면 정보와 레이아웃 데이터 로딩
|
// 화면 정보와 레이아웃 데이터 로딩
|
||||||
const [screenInfo, layoutData] = await Promise.all([
|
const [screenInfo, layoutData] = await Promise.all([
|
||||||
|
|
@ -382,7 +382,7 @@ export const EditModal: React.FC<EditModalProps> = ({ className }) => {
|
||||||
screenApi.getLayout(screenId),
|
screenApi.getLayout(screenId),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
console.log("API 응답:", { screenInfo, layoutData });
|
// console.log("API 응답:", { screenInfo, layoutData });
|
||||||
|
|
||||||
if (screenInfo && layoutData) {
|
if (screenInfo && layoutData) {
|
||||||
const components = layoutData.components || [];
|
const components = layoutData.components || [];
|
||||||
|
|
@ -395,11 +395,11 @@ export const EditModal: React.FC<EditModalProps> = ({ className }) => {
|
||||||
components,
|
components,
|
||||||
screenInfo: screenInfo,
|
screenInfo: screenInfo,
|
||||||
});
|
});
|
||||||
console.log("화면 데이터 설정 완료:", {
|
// console.log("화면 데이터 설정 완료:", {
|
||||||
componentsCount: components.length,
|
// componentsCount: components.length,
|
||||||
dimensions,
|
// dimensions,
|
||||||
screenInfo,
|
// screenInfo,
|
||||||
});
|
// });
|
||||||
} else {
|
} else {
|
||||||
throw new Error("화면 데이터가 없습니다");
|
throw new Error("화면 데이터가 없습니다");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -306,11 +306,11 @@ export const ButtonPrimaryComponent: React.FC<ButtonPrimaryComponentProps> = ({
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const newData = splitPanelContext?.selectedLeftData ?? null;
|
const newData = splitPanelContext?.selectedLeftData ?? null;
|
||||||
setTrackedSelectedLeftData(newData);
|
setTrackedSelectedLeftData(newData);
|
||||||
console.log("🔄 [ButtonPrimary] selectedLeftData 변경 감지:", {
|
// console.log("🔄 [ButtonPrimary] selectedLeftData 변경 감지:", {
|
||||||
label: component.label,
|
// label: component.label,
|
||||||
hasData: !!newData,
|
// hasData: !!newData,
|
||||||
dataKeys: newData ? Object.keys(newData) : [],
|
// dataKeys: newData ? Object.keys(newData) : [],
|
||||||
});
|
// });
|
||||||
}, [splitPanelContext?.selectedLeftData, component.label]);
|
}, [splitPanelContext?.selectedLeftData, component.label]);
|
||||||
|
|
||||||
// modalDataStore 상태 구독 (실시간 업데이트)
|
// modalDataStore 상태 구독 (실시간 업데이트)
|
||||||
|
|
|
||||||
|
|
@ -53,11 +53,11 @@ export function useEntitySearch({
|
||||||
limit: pagination.limit.toString(),
|
limit: pagination.limit.toString(),
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log("[useEntitySearch] 검색 실행:", {
|
// console.log("[useEntitySearch] 검색 실행:", {
|
||||||
tableName,
|
// tableName,
|
||||||
filterCondition: filterConditionRef.current,
|
// filterCondition: filterConditionRef.current,
|
||||||
searchText: text,
|
// searchText: text,
|
||||||
});
|
// });
|
||||||
|
|
||||||
const response = await apiClient.get<EntitySearchResponse>(
|
const response = await apiClient.get<EntitySearchResponse>(
|
||||||
`/entity-search/${tableName}?${params.toString()}`
|
`/entity-search/${tableName}?${params.toString()}`
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ import { RepeatScreenModalDefinition } from "./index";
|
||||||
// 컴포넌트 자동 등록
|
// 컴포넌트 자동 등록
|
||||||
if (typeof window !== "undefined") {
|
if (typeof window !== "undefined") {
|
||||||
ComponentRegistry.registerComponent(RepeatScreenModalDefinition);
|
ComponentRegistry.registerComponent(RepeatScreenModalDefinition);
|
||||||
console.log("✅ RepeatScreenModal 컴포넌트 등록 완료");
|
// console.log("✅ RepeatScreenModal 컴포넌트 등록 완료");
|
||||||
}
|
}
|
||||||
|
|
||||||
export {};
|
export {};
|
||||||
|
|
|
||||||
|
|
@ -205,12 +205,12 @@ export const SplitPanelLayoutComponent: React.FC<SplitPanelLayoutComponentProps>
|
||||||
const splitPanelId = `split-panel-${component.id}`;
|
const splitPanelId = `split-panel-${component.id}`;
|
||||||
|
|
||||||
// 디버깅: Context 연결 상태 확인
|
// 디버깅: Context 연결 상태 확인
|
||||||
console.log("🔗 [SplitPanelLayout] Context 연결 상태:", {
|
// console.log("🔗 [SplitPanelLayout] Context 연결 상태:", {
|
||||||
componentId: component.id,
|
// componentId: component.id,
|
||||||
splitPanelId,
|
// splitPanelId,
|
||||||
hasRegisterFunc: typeof ctxRegisterSplitPanel === "function",
|
// hasRegisterFunc: typeof ctxRegisterSplitPanel === "function",
|
||||||
splitPanelsSize: splitPanelContext.splitPanels?.size ?? "없음",
|
// splitPanelsSize: splitPanelContext.splitPanels?.size ?? "없음",
|
||||||
});
|
// });
|
||||||
|
|
||||||
// Context에 분할 패널 등록 (좌표 정보 포함) - 마운트 시 1회만 실행
|
// Context에 분할 패널 등록 (좌표 정보 포함) - 마운트 시 1회만 실행
|
||||||
const ctxRegisterRef = useRef(ctxRegisterSplitPanel);
|
const ctxRegisterRef = useRef(ctxRegisterSplitPanel);
|
||||||
|
|
@ -235,15 +235,15 @@ export const SplitPanelLayoutComponent: React.FC<SplitPanelLayoutComponentProps>
|
||||||
isDragging: false,
|
isDragging: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
console.log("📦 [SplitPanelLayout] Context에 분할 패널 등록:", {
|
// console.log("📦 [SplitPanelLayout] Context에 분할 패널 등록:", {
|
||||||
splitPanelId,
|
// splitPanelId,
|
||||||
panelInfo,
|
// panelInfo,
|
||||||
});
|
// });
|
||||||
|
|
||||||
ctxRegisterRef.current(splitPanelId, panelInfo);
|
ctxRegisterRef.current(splitPanelId, panelInfo);
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
console.log("📦 [SplitPanelLayout] Context에서 분할 패널 해제:", splitPanelId);
|
// console.log("📦 [SplitPanelLayout] Context에서 분할 패널 해제:", splitPanelId);
|
||||||
ctxUnregisterRef.current(splitPanelId);
|
ctxUnregisterRef.current(splitPanelId);
|
||||||
};
|
};
|
||||||
// 마운트/언마운트 시에만 실행, 위치/크기 변경은 별도 업데이트로 처리
|
// 마운트/언마운트 시에만 실행, 위치/크기 변경은 별도 업데이트로 처리
|
||||||
|
|
@ -311,11 +311,11 @@ export const SplitPanelLayoutComponent: React.FC<SplitPanelLayoutComponentProps>
|
||||||
|
|
||||||
// 🆕 그룹별 합산된 데이터 계산
|
// 🆕 그룹별 합산된 데이터 계산
|
||||||
const summedLeftData = useMemo(() => {
|
const summedLeftData = useMemo(() => {
|
||||||
console.log("🔍 [그룹합산] leftGroupSumConfig:", leftGroupSumConfig);
|
// console.log("🔍 [그룹합산] leftGroupSumConfig:", leftGroupSumConfig);
|
||||||
|
|
||||||
// 그룹핑이 비활성화되었거나 그룹 기준 컬럼이 없으면 원본 데이터 반환
|
// 그룹핑이 비활성화되었거나 그룹 기준 컬럼이 없으면 원본 데이터 반환
|
||||||
if (!leftGroupSumConfig?.enabled || !leftGroupSumConfig?.groupByColumn) {
|
if (!leftGroupSumConfig?.enabled || !leftGroupSumConfig?.groupByColumn) {
|
||||||
console.log("🔍 [그룹합산] 그룹핑 비활성화 - 원본 데이터 반환");
|
// console.log("🔍 [그룹합산] 그룹핑 비활성화 - 원본 데이터 반환");
|
||||||
return leftData;
|
return leftData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -756,8 +756,8 @@ export const SplitPanelLayoutComponent: React.FC<SplitPanelLayoutComponentProps>
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log("🔗 [분할패널] additionalJoinColumns:", additionalJoinColumns);
|
// console.log("🔗 [분할패널] additionalJoinColumns:", additionalJoinColumns);
|
||||||
console.log("🔗 [분할패널] configuredColumns:", configuredColumns);
|
// console.log("🔗 [분할패널] configuredColumns:", configuredColumns);
|
||||||
|
|
||||||
const result = await entityJoinApi.getTableDataWithJoins(leftTableName, {
|
const result = await entityJoinApi.getTableDataWithJoins(leftTableName, {
|
||||||
page: 1,
|
page: 1,
|
||||||
|
|
@ -769,10 +769,10 @@ export const SplitPanelLayoutComponent: React.FC<SplitPanelLayoutComponentProps>
|
||||||
});
|
});
|
||||||
|
|
||||||
// 🔍 디버깅: API 응답 데이터의 키 확인
|
// 🔍 디버깅: API 응답 데이터의 키 확인
|
||||||
if (result.data && result.data.length > 0) {
|
// if (result.data && result.data.length > 0) {
|
||||||
console.log("🔗 [분할패널] API 응답 첫 번째 데이터 키:", Object.keys(result.data[0]));
|
// console.log("🔗 [분할패널] API 응답 첫 번째 데이터 키:", Object.keys(result.data[0]));
|
||||||
console.log("🔗 [분할패널] API 응답 첫 번째 데이터:", result.data[0]);
|
// console.log("🔗 [분할패널] API 응답 첫 번째 데이터:", result.data[0]);
|
||||||
}
|
// }
|
||||||
|
|
||||||
// 가나다순 정렬 (좌측 패널의 표시 컬럼 기준)
|
// 가나다순 정렬 (좌측 패널의 표시 컬럼 기준)
|
||||||
const leftColumn = componentConfig.rightPanel?.relation?.leftColumn;
|
const leftColumn = componentConfig.rightPanel?.relation?.leftColumn;
|
||||||
|
|
@ -1000,7 +1000,7 @@ export const SplitPanelLayoutComponent: React.FC<SplitPanelLayoutComponentProps>
|
||||||
if (leftTableName && !isDesignMode) {
|
if (leftTableName && !isDesignMode) {
|
||||||
import("@/stores/modalDataStore").then(({ useModalDataStore }) => {
|
import("@/stores/modalDataStore").then(({ useModalDataStore }) => {
|
||||||
useModalDataStore.getState().setData(leftTableName, [item]);
|
useModalDataStore.getState().setData(leftTableName, [item]);
|
||||||
console.log(`✅ 분할 패널 좌측 선택: ${leftTableName}`, item);
|
// console.log(`✅ 분할 패널 좌측 선택: ${leftTableName}`, item);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -1198,7 +1198,7 @@ export const SplitPanelLayoutComponent: React.FC<SplitPanelLayoutComponentProps>
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
setLeftColumnLabels(labels);
|
setLeftColumnLabels(labels);
|
||||||
console.log("✅ 좌측 컬럼 라벨 로드:", labels);
|
// console.log("✅ 좌측 컬럼 라벨 로드:", labels);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("좌측 테이블 컬럼 라벨 로드 실패:", error);
|
console.error("좌측 테이블 컬럼 라벨 로드 실패:", error);
|
||||||
}
|
}
|
||||||
|
|
@ -1227,7 +1227,7 @@ export const SplitPanelLayoutComponent: React.FC<SplitPanelLayoutComponentProps>
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
setRightColumnLabels(labels);
|
setRightColumnLabels(labels);
|
||||||
console.log("✅ 우측 컬럼 라벨 로드:", labels);
|
// console.log("✅ 우측 컬럼 라벨 로드:", labels);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("우측 테이블 컬럼 정보 로드 실패:", error);
|
console.error("우측 테이블 컬럼 정보 로드 실패:", error);
|
||||||
}
|
}
|
||||||
|
|
@ -1269,7 +1269,7 @@ export const SplitPanelLayoutComponent: React.FC<SplitPanelLayoutComponentProps>
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
mappings[columnName] = valueMap;
|
mappings[columnName] = valueMap;
|
||||||
console.log(`✅ 좌측 카테고리 매핑 로드 [${columnName}]:`, valueMap);
|
// console.log(`✅ 좌측 카테고리 매핑 로드 [${columnName}]:`, valueMap);
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(`좌측 카테고리 값 조회 실패 [${columnName}]:`, error);
|
console.error(`좌측 카테고리 값 조회 실패 [${columnName}]:`, error);
|
||||||
|
|
@ -1307,7 +1307,7 @@ export const SplitPanelLayoutComponent: React.FC<SplitPanelLayoutComponentProps>
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log("🔍 우측 패널 카테고리 로드 대상 테이블:", Array.from(tablesToLoad));
|
// console.log("🔍 우측 패널 카테고리 로드 대상 테이블:", Array.from(tablesToLoad));
|
||||||
|
|
||||||
// 각 테이블에 대해 카테고리 매핑 로드
|
// 각 테이블에 대해 카테고리 매핑 로드
|
||||||
for (const tableName of tablesToLoad) {
|
for (const tableName of tablesToLoad) {
|
||||||
|
|
@ -1940,7 +1940,7 @@ export const SplitPanelLayoutComponent: React.FC<SplitPanelLayoutComponentProps>
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const handleRefreshTable = () => {
|
const handleRefreshTable = () => {
|
||||||
if (!isDesignMode) {
|
if (!isDesignMode) {
|
||||||
console.log("🔄 [SplitPanel] refreshTable 이벤트 수신 - 데이터 새로고침");
|
// console.log("🔄 [SplitPanel] refreshTable 이벤트 수신 - 데이터 새로고침");
|
||||||
loadLeftData();
|
loadLeftData();
|
||||||
// 선택된 항목이 있으면 우측 패널도 새로고침
|
// 선택된 항목이 있으면 우측 패널도 새로고침
|
||||||
if (selectedLeftItem) {
|
if (selectedLeftItem) {
|
||||||
|
|
@ -2104,12 +2104,12 @@ export const SplitPanelLayoutComponent: React.FC<SplitPanelLayoutComponentProps>
|
||||||
(() => {
|
(() => {
|
||||||
// 🆕 그룹별 합산된 데이터 사용
|
// 🆕 그룹별 합산된 데이터 사용
|
||||||
const dataSource = summedLeftData;
|
const dataSource = summedLeftData;
|
||||||
console.log(
|
// console.log(
|
||||||
"🔍 [테이블모드 렌더링] dataSource 개수:",
|
// "🔍 [테이블모드 렌더링] dataSource 개수:",
|
||||||
dataSource.length,
|
// dataSource.length,
|
||||||
"leftGroupSumConfig:",
|
// "leftGroupSumConfig:",
|
||||||
leftGroupSumConfig,
|
// leftGroupSumConfig,
|
||||||
);
|
// );
|
||||||
|
|
||||||
// 🔧 로컬 검색 필터 적용
|
// 🔧 로컬 검색 필터 적용
|
||||||
const filteredData = leftSearchQuery
|
const filteredData = leftSearchQuery
|
||||||
|
|
|
||||||
|
|
@ -820,10 +820,10 @@ export function TableSectionRenderer({
|
||||||
const initialData = formData[tableSectionKey];
|
const initialData = formData[tableSectionKey];
|
||||||
|
|
||||||
if (Array.isArray(initialData) && initialData.length > 0) {
|
if (Array.isArray(initialData) && initialData.length > 0) {
|
||||||
console.log("[TableSectionRenderer] 초기 데이터 로드:", {
|
// console.log("[TableSectionRenderer] 초기 데이터 로드:", {
|
||||||
sectionId,
|
// sectionId,
|
||||||
itemCount: initialData.length,
|
// itemCount: initialData.length,
|
||||||
});
|
// });
|
||||||
setTableData(initialData);
|
setTableData(initialData);
|
||||||
initialDataLoadedRef.current = true;
|
initialDataLoadedRef.current = true;
|
||||||
|
|
||||||
|
|
@ -1327,7 +1327,7 @@ export function TableSectionRenderer({
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
console.log("[TableSectionRenderer] baseFilterCondition:", condition, "preFilters:", filters?.preFilters);
|
// console.log("[TableSectionRenderer] baseFilterCondition:", condition, "preFilters:", filters?.preFilters);
|
||||||
return condition;
|
return condition;
|
||||||
}, [filters?.preFilters]);
|
}, [filters?.preFilters]);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -216,11 +216,11 @@ export function UniversalFormModalComponent({
|
||||||
|
|
||||||
// 초기화 - 최초 마운트 시 또는 initialData가 변경되었을 때 실행
|
// 초기화 - 최초 마운트 시 또는 initialData가 변경되었을 때 실행
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
console.log("[UniversalFormModal] useEffect 시작", {
|
// console.log("[UniversalFormModal] useEffect 시작", {
|
||||||
initialData,
|
// initialData,
|
||||||
hasInitialized: hasInitialized.current,
|
// hasInitialized: hasInitialized.current,
|
||||||
lastInitializedId: lastInitializedId.current,
|
// lastInitializedId: lastInitializedId.current,
|
||||||
});
|
// });
|
||||||
|
|
||||||
// initialData에서 ID 값 추출 (id, ID, objid 등)
|
// initialData에서 ID 값 추출 (id, ID, objid 등)
|
||||||
const currentId = initialData?.id || initialData?.ID || initialData?.objid;
|
const currentId = initialData?.id || initialData?.ID || initialData?.objid;
|
||||||
|
|
@ -235,7 +235,7 @@ export function UniversalFormModalComponent({
|
||||||
if (hasInitialized.current && lastInitializedId.current === currentIdString) {
|
if (hasInitialized.current && lastInitializedId.current === currentIdString) {
|
||||||
// 생성 모드에서 데이터가 새로 전달된 경우는 재초기화 필요
|
// 생성 모드에서 데이터가 새로 전달된 경우는 재초기화 필요
|
||||||
if (!createModeDataHash || capturedInitialData.current) {
|
if (!createModeDataHash || capturedInitialData.current) {
|
||||||
console.log("[UniversalFormModal] 초기화 스킵 - 이미 초기화됨");
|
// console.log("[UniversalFormModal] 초기화 스킵 - 이미 초기화됨");
|
||||||
// 🆕 채번 플래그가 true인데 formData에 값이 없으면 재생성 필요
|
// 🆕 채번 플래그가 true인데 formData에 값이 없으면 재생성 필요
|
||||||
// (컴포넌트 remount로 인해 state가 초기화된 경우)
|
// (컴포넌트 remount로 인해 state가 초기화된 경우)
|
||||||
return;
|
return;
|
||||||
|
|
@ -245,18 +245,18 @@ export function UniversalFormModalComponent({
|
||||||
// 🆕 컴포넌트 remount 감지: hasInitialized가 true인데 formData가 비어있으면 재초기화
|
// 🆕 컴포넌트 remount 감지: hasInitialized가 true인데 formData가 비어있으면 재초기화
|
||||||
// (React의 Strict Mode나 EmbeddedScreen 리렌더링으로 인한 remount)
|
// (React의 Strict Mode나 EmbeddedScreen 리렌더링으로 인한 remount)
|
||||||
if (hasInitialized.current && !currentIdString) {
|
if (hasInitialized.current && !currentIdString) {
|
||||||
console.log("[UniversalFormModal] 컴포넌트 remount 감지 - 채번 플래그 초기화");
|
// console.log("[UniversalFormModal] 컴포넌트 remount 감지 - 채번 플래그 초기화");
|
||||||
numberingGeneratedRef.current = false;
|
numberingGeneratedRef.current = false;
|
||||||
isGeneratingRef.current = false;
|
isGeneratingRef.current = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 🆕 수정 모드: initialData에 데이터가 있으면서 ID가 변경된 경우 재초기화
|
// 🆕 수정 모드: initialData에 데이터가 있으면서 ID가 변경된 경우 재초기화
|
||||||
if (hasInitialized.current && currentIdString && lastInitializedId.current !== currentIdString) {
|
if (hasInitialized.current && currentIdString && lastInitializedId.current !== currentIdString) {
|
||||||
console.log("[UniversalFormModal] ID 변경 감지 - 재초기화:", {
|
// console.log("[UniversalFormModal] ID 변경 감지 - 재초기화:", {
|
||||||
prevId: lastInitializedId.current,
|
// prevId: lastInitializedId.current,
|
||||||
newId: currentIdString,
|
// newId: currentIdString,
|
||||||
initialData: initialData,
|
// initialData: initialData,
|
||||||
});
|
// });
|
||||||
// 채번 플래그 초기화 (새 항목이므로)
|
// 채번 플래그 초기화 (새 항목이므로)
|
||||||
numberingGeneratedRef.current = false;
|
numberingGeneratedRef.current = false;
|
||||||
isGeneratingRef.current = false;
|
isGeneratingRef.current = false;
|
||||||
|
|
@ -266,10 +266,10 @@ export function UniversalFormModalComponent({
|
||||||
if (initialData && Object.keys(initialData).length > 0) {
|
if (initialData && Object.keys(initialData).length > 0) {
|
||||||
capturedInitialData.current = JSON.parse(JSON.stringify(initialData)); // 깊은 복사
|
capturedInitialData.current = JSON.parse(JSON.stringify(initialData)); // 깊은 복사
|
||||||
lastInitializedId.current = currentIdString;
|
lastInitializedId.current = currentIdString;
|
||||||
console.log("[UniversalFormModal] 초기 데이터 캡처:", capturedInitialData.current);
|
// console.log("[UniversalFormModal] 초기 데이터 캡처:", capturedInitialData.current);
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("[UniversalFormModal] initializeForm 호출 예정");
|
// console.log("[UniversalFormModal] initializeForm 호출 예정");
|
||||||
hasInitialized.current = true;
|
hasInitialized.current = true;
|
||||||
initializeForm();
|
initializeForm();
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
|
|
@ -279,7 +279,7 @@ export function UniversalFormModalComponent({
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!hasInitialized.current) return; // 최초 초기화 전이면 스킵
|
if (!hasInitialized.current) return; // 최초 초기화 전이면 스킵
|
||||||
|
|
||||||
console.log("[useEffect config 변경] 재초기화 스킵 (채번 중복 방지)");
|
// console.log("[useEffect config 변경] 재초기화 스킵 (채번 중복 방지)");
|
||||||
// initializeForm(); // 주석 처리 - config 변경 시 재초기화 안 함 (채번 중복 방지)
|
// initializeForm(); // 주석 처리 - config 변경 시 재초기화 안 함 (채번 중복 방지)
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [config]);
|
}, [config]);
|
||||||
|
|
@ -287,7 +287,7 @@ export function UniversalFormModalComponent({
|
||||||
// 컴포넌트 unmount 시 채번 플래그 초기화
|
// 컴포넌트 unmount 시 채번 플래그 초기화
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
return () => {
|
return () => {
|
||||||
console.log("[채번] 컴포넌트 unmount - 플래그 초기화");
|
// console.log("[채번] 컴포넌트 unmount - 플래그 초기화");
|
||||||
numberingGeneratedRef.current = false;
|
numberingGeneratedRef.current = false;
|
||||||
isGeneratingRef.current = false;
|
isGeneratingRef.current = false;
|
||||||
};
|
};
|
||||||
|
|
@ -359,14 +359,14 @@ export function UniversalFormModalComponent({
|
||||||
// 테이블 타입 섹션 찾기
|
// 테이블 타입 섹션 찾기
|
||||||
const tableSection = config.sections.find((s) => s.type === "table");
|
const tableSection = config.sections.find((s) => s.type === "table");
|
||||||
if (!tableSection) {
|
if (!tableSection) {
|
||||||
console.log("[UniversalFormModal] 테이블 섹션 없음 - _groupedData 무시");
|
// console.log("[UniversalFormModal] 테이블 섹션 없음 - _groupedData 무시");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("[UniversalFormModal] 수정 모드 - 테이블 섹션 초기화:", {
|
// console.log("[UniversalFormModal] 수정 모드 - 테이블 섹션 초기화:", {
|
||||||
sectionId: tableSection.id,
|
// sectionId: tableSection.id,
|
||||||
itemCount: _groupedData.length,
|
// itemCount: _groupedData.length,
|
||||||
});
|
// });
|
||||||
|
|
||||||
// 원본 데이터 저장 (수정/삭제 추적용)
|
// 원본 데이터 저장 (수정/삭제 추적용)
|
||||||
setOriginalGroupedData(JSON.parse(JSON.stringify(_groupedData)));
|
setOriginalGroupedData(JSON.parse(JSON.stringify(_groupedData)));
|
||||||
|
|
@ -421,31 +421,31 @@ export function UniversalFormModalComponent({
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isGeneratingRef.current) {
|
if (isGeneratingRef.current) {
|
||||||
console.log("[채번] 생성 진행 중 - 스킵");
|
// console.log("[채번] 생성 진행 중 - 스킵");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
isGeneratingRef.current = true; // 진행 중 표시
|
isGeneratingRef.current = true; // 진행 중 표시
|
||||||
console.log("[채번] 생성 시작", { sectionsCount: config.sections.length });
|
// console.log("[채번] 생성 시작", { sectionsCount: config.sections.length });
|
||||||
|
|
||||||
const updatedData = { ...currentFormData };
|
const updatedData = { ...currentFormData };
|
||||||
let hasChanges = false;
|
let hasChanges = false;
|
||||||
|
|
||||||
for (const section of config.sections) {
|
for (const section of config.sections) {
|
||||||
console.log("[채번] 섹션 검사:", section.title, { type: section.type, repeatable: section.repeatable, fieldsCount: section.fields?.length });
|
// console.log("[채번] 섹션 검사:", section.title, { type: section.type, repeatable: section.repeatable, fieldsCount: section.fields?.length });
|
||||||
if (section.repeatable || section.type === "table") continue;
|
if (section.repeatable || section.type === "table") continue;
|
||||||
|
|
||||||
for (const field of (section.fields || [])) {
|
for (const field of (section.fields || [])) {
|
||||||
// generateOnOpen은 기본값 true (undefined일 경우 true로 처리)
|
// generateOnOpen은 기본값 true (undefined일 경우 true로 처리)
|
||||||
const shouldGenerateOnOpen = field.numberingRule?.generateOnOpen !== false;
|
const shouldGenerateOnOpen = field.numberingRule?.generateOnOpen !== false;
|
||||||
console.log("[채번] 필드 검사:", field.columnName, {
|
// console.log("[채번] 필드 검사:", field.columnName, {
|
||||||
hasNumberingRule: !!field.numberingRule,
|
// hasNumberingRule: !!field.numberingRule,
|
||||||
enabled: field.numberingRule?.enabled,
|
// enabled: field.numberingRule?.enabled,
|
||||||
generateOnOpen: field.numberingRule?.generateOnOpen,
|
// generateOnOpen: field.numberingRule?.generateOnOpen,
|
||||||
shouldGenerateOnOpen,
|
// shouldGenerateOnOpen,
|
||||||
ruleId: field.numberingRule?.ruleId,
|
// ruleId: field.numberingRule?.ruleId,
|
||||||
currentValue: updatedData[field.columnName],
|
// currentValue: updatedData[field.columnName],
|
||||||
});
|
// });
|
||||||
if (
|
if (
|
||||||
field.numberingRule?.enabled &&
|
field.numberingRule?.enabled &&
|
||||||
shouldGenerateOnOpen &&
|
shouldGenerateOnOpen &&
|
||||||
|
|
@ -453,7 +453,7 @@ export function UniversalFormModalComponent({
|
||||||
!updatedData[field.columnName]
|
!updatedData[field.columnName]
|
||||||
) {
|
) {
|
||||||
try {
|
try {
|
||||||
console.log(`[채번 미리보기 API 호출] ${field.columnName}, ruleId: ${field.numberingRule.ruleId}`);
|
// console.log(`[채번 미리보기 API 호출] ${field.columnName}, ruleId: ${field.numberingRule.ruleId}`);
|
||||||
// generateOnOpen: 미리보기만 표시 (DB 시퀀스 증가 안 함)
|
// generateOnOpen: 미리보기만 표시 (DB 시퀀스 증가 안 함)
|
||||||
const response = await previewNumberingCode(field.numberingRule.ruleId);
|
const response = await previewNumberingCode(field.numberingRule.ruleId);
|
||||||
if (response.success && response.data?.generatedCode) {
|
if (response.success && response.data?.generatedCode) {
|
||||||
|
|
@ -465,10 +465,10 @@ export function UniversalFormModalComponent({
|
||||||
|
|
||||||
hasChanges = true;
|
hasChanges = true;
|
||||||
numberingGeneratedRef.current = true; // 생성 완료 표시
|
numberingGeneratedRef.current = true; // 생성 완료 표시
|
||||||
console.log(
|
// console.log(
|
||||||
`[채번 미리보기 완료] ${field.columnName} = ${response.data.generatedCode} (저장 시 실제 할당)`,
|
// `[채번 미리보기 완료] ${field.columnName} = ${response.data.generatedCode} (저장 시 실제 할당)`,
|
||||||
);
|
// );
|
||||||
console.log(`[채번 규칙 ID 저장] ${ruleIdKey} = ${field.numberingRule.ruleId}`);
|
// console.log(`[채번 규칙 ID 저장] ${ruleIdKey} = ${field.numberingRule.ruleId}`);
|
||||||
|
|
||||||
// 부모 컴포넌트에도 ruleId 전달 (ModalRepeaterTable → ScreenModal)
|
// 부모 컴포넌트에도 ruleId 전달 (ModalRepeaterTable → ScreenModal)
|
||||||
if (onChange) {
|
if (onChange) {
|
||||||
|
|
@ -476,7 +476,7 @@ export function UniversalFormModalComponent({
|
||||||
...updatedData,
|
...updatedData,
|
||||||
[ruleIdKey]: field.numberingRule.ruleId,
|
[ruleIdKey]: field.numberingRule.ruleId,
|
||||||
});
|
});
|
||||||
console.log(`[채번] 부모에게 ruleId 전달: ${ruleIdKey}`);
|
// console.log(`[채번] 부모에게 ruleId 전달: ${ruleIdKey}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|
@ -497,17 +497,17 @@ export function UniversalFormModalComponent({
|
||||||
|
|
||||||
// 폼 초기화
|
// 폼 초기화
|
||||||
const initializeForm = useCallback(async () => {
|
const initializeForm = useCallback(async () => {
|
||||||
console.log("[initializeForm] 시작");
|
// console.log("[initializeForm] 시작");
|
||||||
|
|
||||||
// 캡처된 initialData 사용 (props로 전달된 initialData가 아닌)
|
// 캡처된 initialData 사용 (props로 전달된 initialData가 아닌)
|
||||||
const effectiveInitialData = capturedInitialData.current || initialData;
|
const effectiveInitialData = capturedInitialData.current || initialData;
|
||||||
|
|
||||||
console.log("[initializeForm] 초기 데이터:", {
|
// console.log("[initializeForm] 초기 데이터:", {
|
||||||
capturedInitialData: capturedInitialData.current,
|
// capturedInitialData: capturedInitialData.current,
|
||||||
initialData: initialData,
|
// initialData: initialData,
|
||||||
effectiveInitialData: effectiveInitialData,
|
// effectiveInitialData: effectiveInitialData,
|
||||||
hasData: effectiveInitialData && Object.keys(effectiveInitialData).length > 0,
|
// hasData: effectiveInitialData && Object.keys(effectiveInitialData).length > 0,
|
||||||
});
|
// });
|
||||||
|
|
||||||
const newFormData: FormDataState = {};
|
const newFormData: FormDataState = {};
|
||||||
const newRepeatSections: { [sectionId: string]: RepeatSectionItem[] } = {};
|
const newRepeatSections: { [sectionId: string]: RepeatSectionItem[] } = {};
|
||||||
|
|
@ -671,9 +671,9 @@ export function UniversalFormModalComponent({
|
||||||
}
|
}
|
||||||
|
|
||||||
// 채번규칙 자동 생성
|
// 채번규칙 자동 생성
|
||||||
console.log("[initializeForm] generateNumberingValues 호출");
|
// console.log("[initializeForm] generateNumberingValues 호출");
|
||||||
await generateNumberingValues(newFormData);
|
await generateNumberingValues(newFormData);
|
||||||
console.log("[initializeForm] 완료");
|
// console.log("[initializeForm] 완료");
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [config]); // initialData는 의존성에서 제거 (capturedInitialData.current 사용)
|
}, [config]); // initialData는 의존성에서 제거 (capturedInitialData.current 사용)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3022,11 +3022,11 @@ export class ButtonActionExecutor {
|
||||||
comp.componentType === "split-panel-layout",
|
comp.componentType === "split-panel-layout",
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
console.log("🔍 [openEditModal] 분할 패널 확인:", {
|
// console.log("🔍 [openEditModal] 분할 패널 확인:", {
|
||||||
targetScreenId: config.targetScreenId,
|
// targetScreenId: config.targetScreenId,
|
||||||
hasSplitPanel,
|
// hasSplitPanel,
|
||||||
componentTypes: layoutData?.components?.map((c: any) => c.type || c.componentType) || [],
|
// componentTypes: layoutData?.components?.map((c: any) => c.type || c.componentType) || [],
|
||||||
});
|
// });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.warn("레이아웃 정보를 가져오지 못했습니다:", error);
|
console.warn("레이아웃 정보를 가져오지 못했습니다:", error);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@ export const useModalDataStore = create<ModalDataState>()(
|
||||||
dataRegistry: {},
|
dataRegistry: {},
|
||||||
|
|
||||||
setData: (sourceId, items) => {
|
setData: (sourceId, items) => {
|
||||||
console.log("📦 [ModalDataStore] 데이터 저장:", { sourceId, itemCount: items.length, items });
|
// console.log("📦 [ModalDataStore] 데이터 저장:", { sourceId, itemCount: items.length, items });
|
||||||
set((state) => ({
|
set((state) => ({
|
||||||
dataRegistry: {
|
dataRegistry: {
|
||||||
...state.dataRegistry,
|
...state.dataRegistry,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue