diff --git a/src/components/floor-plan/CanvasFrame.jsx b/src/components/floor-plan/CanvasFrame.jsx index 20d6a348..c195a39a 100644 --- a/src/components/floor-plan/CanvasFrame.jsx +++ b/src/components/floor-plan/CanvasFrame.jsx @@ -128,10 +128,10 @@ export default function CanvasFrame() { if (currentCanvasPlan.planNo) { /* 약간의 지연을 줘서 roofMaterials가 로드될 시간을 확보 */ setTimeout(() => { - // 메뉴 이동 시 canvasSetting이 덮어쓰이는 것을 방지 - // 이미 canvasSetting에 roofSizeSet이 있으면 API 호출 건너뛰기 - if (!canvasSetting?.roofSizeSet) { - fetchBasicSettings(Number(currentCanvasPlan.planNo), null) + // 플랜이 변경되었거나 아직 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 a4068f92..f80b2902 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, @@ -454,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], @@ -507,16 +512,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 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) } }