From 2cc2814709c06d5c236217b979211163ab936d33 Mon Sep 17 00:00:00 2001 From: ysCha Date: Thu, 12 Mar 2026 11:08:17 +0900 Subject: [PATCH 1/3] =?UTF-8?q?roofWidth,roofHeight=20null=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/option/useCanvasSetting.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/hooks/option/useCanvasSetting.js b/src/hooks/option/useCanvasSetting.js index a4068f92..9176c1d2 100644 --- a/src/hooks/option/useCanvasSetting.js +++ b/src/hooks/option/useCanvasSetting.js @@ -507,16 +507,16 @@ export function useCanvasSetting(executeEffect = true) { roofMatlCd: params.roofsData.roofMatlCd === null || params.roofsData.roofMatlCd === undefined ? 'ROOF_ID_WA_53A' : params.roofsData.roofMatlCd, roofWidth: - params.selectedRoofMaterial.width === null || params.selectedRoofMaterial.width === undefined - ? !params.selectedRoofMaterial.widBase - ? 0 - : Number(params.roofsData.widBase) - : Number(params.selectedRoofMaterial.width), + params.roofsData.roofWidth === null || params.roofsData.roofWidth === undefined + ? params.selectedRoofMaterial.widBase + ? Number(params.selectedRoofMaterial.widBase) + : 0 + : Number(params.roofsData.roofWidth), roofHeight: - params.selectedRoofMaterial.height === null || params.selectedRoofMaterial.height === undefined - ? !params.selectedRoofMaterial.lenBase - ? 0 - : Number(params.selectedRoofMaterial.lenBase) + params.roofsData.roofHeight === null || params.roofsData.roofHeight === undefined + ? params.selectedRoofMaterial.lenBase + ? Number(params.selectedRoofMaterial.lenBase) + : 0 : Number(params.roofsData.roofHeight), roofHajebichi: params.selectedRoofMaterial.hajebichi === null || params.selectedRoofMaterial.hajebichi === undefined From 63578276aa189d5a2079ffc95c4034d8dd3a72d3 Mon Sep 17 00:00:00 2001 From: ysCha Date: Thu, 12 Mar 2026 12:54:18 +0900 Subject: [PATCH 2/3] =?UTF-8?q?fetchBasicSettings=EC=97=90=EC=84=9C=20corr?= =?UTF-8?q?entObjectNo=EB=A5=BC=20Recoil=20state=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=A7=81=EC=A0=91=20=EC=9D=BD=EA=B3=A0=20=EC=9E=88=EC=96=B4?= =?UTF-8?q?=EC=84=9C,=20=EC=83=88=20=EC=98=A4=EB=B8=8C=EC=A0=9D=ED=8A=B8?= =?UTF-8?q?=EA=B0=80=20=EC=83=9D=EC=84=B1=EB=90=A0=20=EB=95=8C=20=EC=95=84?= =?UTF-8?q?=EC=A7=81=20=EC=9D=B4=EC=A0=84=20=EA=B0=92=EC=9D=B4=20=EB=82=A8?= =?UTF-8?q?=EC=95=84=EC=9E=88=EB=8A=94=20stale=20closure=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/floor-plan/CanvasFrame.jsx | 2 +- src/hooks/option/useCanvasSetting.js | 9 ++++++--- src/hooks/usePlan.js | 4 ++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/components/floor-plan/CanvasFrame.jsx b/src/components/floor-plan/CanvasFrame.jsx index 20d6a348..bd4c6dbb 100644 --- a/src/components/floor-plan/CanvasFrame.jsx +++ b/src/components/floor-plan/CanvasFrame.jsx @@ -131,7 +131,7 @@ export default function CanvasFrame() { // 메뉴 이동 시 canvasSetting이 덮어쓰이는 것을 방지 // 이미 canvasSetting에 roofSizeSet이 있으면 API 호출 건너뛰기 if (!canvasSetting?.roofSizeSet) { - fetchBasicSettings(Number(currentCanvasPlan.planNo), null) + fetchBasicSettings(Number(currentCanvasPlan.planNo), null, currentCanvasPlan.objectNo) } }, 100) } diff --git a/src/hooks/option/useCanvasSetting.js b/src/hooks/option/useCanvasSetting.js index 9176c1d2..1a54e537 100644 --- a/src/hooks/option/useCanvasSetting.js +++ b/src/hooks/option/useCanvasSetting.js @@ -316,7 +316,10 @@ export function useCanvasSetting(executeEffect = true) { /** * 기본설정(PlacementShapeSetting) 조회 및 초기화 */ - const fetchBasicSettings = async (planNo, openPoint) => { + const fetchBasicSettings = async (planNo, openPoint, objectNo) => { + // objectNo가 전달되면 사용, 아니면 Recoil state의 correntObjectNo 사용 + const targetObjectNo = objectNo || correntObjectNo + // 지붕재 데이터가 없으면 먼저 로드 let materials = roofMaterials if (!materials || materials.length === 0) { @@ -326,9 +329,9 @@ export function useCanvasSetting(executeEffect = true) { } try { - const apiUrl = `/api/canvas-management/canvas-basic-settings/by-object/${correntObjectNo}/${planNo}` + const apiUrl = `/api/canvas-management/canvas-basic-settings/by-object/${targetObjectNo}/${planNo}` logger.log('🔍 fetchBasicSettings API 호출:', apiUrl) - logger.log('🔍 correntObjectNo:', correntObjectNo, 'planNo:', planNo) + logger.log('🔍 targetObjectNo:', targetObjectNo, 'planNo:', planNo) await get({ url: apiUrl, diff --git a/src/hooks/usePlan.js b/src/hooks/usePlan.js index cdb02fef..5c4a9a38 100644 --- a/src/hooks/usePlan.js +++ b/src/hooks/usePlan.js @@ -254,7 +254,7 @@ export function usePlan(params = {}) { setPlans([newPlan]) /* 플랜 추가 시 배치면초기설정 정보 조회 */ - fetchBasicSettings(newPlan.planNo, null) + fetchBasicSettings(newPlan.planNo, null, objectNo) } else { if (isCopy) { const currentSelectedMenu = selectedMenu @@ -579,7 +579,7 @@ export function usePlan(params = {}) { setPlans((plans) => plans.map((plan) => ({ ...plan, isCurrent: plan.id === lastPlan.id }))) /* 플랜 삭제 시 그 전 플랫의 배치면초기설정 정보 조회 */ - fetchBasicSettings(lastPlan.planNo, null) + fetchBasicSettings(lastPlan.planNo, null, lastPlan.objectNo) } } From 64ba5ad36ef841ccea6aaa2d6a1006247f46f84a Mon Sep 17 00:00:00 2001 From: ysCha Date: Thu, 12 Mar 2026 13:39:43 +0900 Subject: [PATCH 3/3] =?UTF-8?q?=ED=94=8C=EB=9E=9C=EB=B3=84=20=EC=A7=80?= =?UTF-8?q?=EB=B6=95=EC=9E=AC=20=EB=B3=80=EA=B2=BD=EC=A0=80=EC=9E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/floor-plan/CanvasFrame.jsx | 6 +++--- src/hooks/option/useCanvasSetting.js | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/components/floor-plan/CanvasFrame.jsx b/src/components/floor-plan/CanvasFrame.jsx index bd4c6dbb..c195a39a 100644 --- a/src/components/floor-plan/CanvasFrame.jsx +++ b/src/components/floor-plan/CanvasFrame.jsx @@ -128,9 +128,9 @@ export default function CanvasFrame() { if (currentCanvasPlan.planNo) { /* 약간의 지연을 줘서 roofMaterials가 로드될 시간을 확보 */ setTimeout(() => { - // 메뉴 이동 시 canvasSetting이 덮어쓰이는 것을 방지 - // 이미 canvasSetting에 roofSizeSet이 있으면 API 호출 건너뛰기 - if (!canvasSetting?.roofSizeSet) { + // 플랜이 변경되었거나 아직 roofSizeSet이 없는 경우에만 fetch + const isPlanChanged = canvasSetting?.planNo !== undefined && Number(canvasSetting.planNo) !== Number(currentCanvasPlan.planNo) + if (!canvasSetting?.roofSizeSet || isPlanChanged) { fetchBasicSettings(Number(currentCanvasPlan.planNo), null, currentCanvasPlan.objectNo) } }, 100) diff --git a/src/hooks/option/useCanvasSetting.js b/src/hooks/option/useCanvasSetting.js index 1a54e537..f80b2902 100644 --- a/src/hooks/option/useCanvasSetting.js +++ b/src/hooks/option/useCanvasSetting.js @@ -457,7 +457,9 @@ export function useCanvasSetting(executeEffect = true) { if (openPoint !== 'basicSettingSave') { // canvasSetting은 현재 값을 유지하고 basicSetting만 업데이트 // 새로고침 시 canvasSetting이 바뀌는 문제 방지 - if (!canvasSetting?.roofSizeSet) { + // 단, 플랜이 변경된 경우에는 항상 업데이트 + const isPlanChanged = canvasSetting?.planNo !== undefined && Number(canvasSetting.planNo) !== Number(roofsRow[0].planNo) + if (!canvasSetting?.roofSizeSet || isPlanChanged) { setCanvasSetting({ ...basicSetting, roofMaterials: addRoofs[0],