From fefddac1a9782e54f32ba59a9cafc9d9193927ef Mon Sep 17 00:00:00 2001 From: changkyu choi Date: Wed, 19 Feb 2025 13:21:25 +0900 Subject: [PATCH] =?UTF-8?q?roofMaterials=EA=B0=80=20=EB=A1=9C=EB=93=9C=20?= =?UTF-8?q?=ED=9B=84=20=EC=8B=A4=ED=96=89=20=EB=B0=B0=EC=B9=98=EB=A9=B4?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=EC=84=A4=EC=A0=95=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=EB=B0=8F=20setCanvasSetting=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/option/useCanvasSetting.js | 77 ++++++++++++++++------------ 1 file changed, 45 insertions(+), 32 deletions(-) diff --git a/src/hooks/option/useCanvasSetting.js b/src/hooks/option/useCanvasSetting.js index 5df718ec..08ac6470 100644 --- a/src/hooks/option/useCanvasSetting.js +++ b/src/hooks/option/useCanvasSetting.js @@ -140,8 +140,7 @@ export function useCanvasSetting() { const selectedRoofMaterial = useRecoilValue(selectedRoofMaterialSelector) // 선택된 지붕재 정보 const { floorPlanState } = useContext(FloorPlanContext) // 플랜 상태 const { closeAll } = usePopup() // 팝업 닫기 - // const previousObjectNoRef = useRef(null) // 최초 데이터 설정 확인 - // const previousRoofMaterialsRef = useRef(null) // 최초 데이터 설정 확인 + const [isRoofMaterialsLoaded, setIsRoofMaterialsLoaded] = useState(false) // roofMaterials 로드 상태 확인 useEffect(() => { const tempFetchRoofMaterials = !fetchRoofMaterials @@ -153,6 +152,15 @@ export function useCanvasSetting() { } }, []) + /** + * roofMaterials가 변경될 때마다 로드 상태 업데이트 + */ + useEffect(() => { + if (roofMaterials.length > 0) { + setIsRoofMaterialsLoaded(true) + } + }, [roofMaterials]) + /** * 지붕재 초기세팅 */ @@ -188,26 +196,6 @@ export function useCanvasSetting() { setBasicSettings({ ...basicSetting, selectedRoofMaterial: selectedRoofMaterial }) } - // useEffect(() => { - // // 지붕재 select 정보가 존재해야 배치면초기설정 DB 정보 비교 후 지붕재 정보를 가져올 수 있음 - // if ( - // (!previousObjectNoRef.current && !correntObjectNo && previousObjectNoRef.current !== correntObjectNo) || - // (roofMaterials.length !== 0 && JSON.stringify(previousRoofMaterialsRef.current) !== JSON.stringify(roofMaterials)) - // ) { - // // 1회만 실행 - // if (roofMaterials && previousRoofMaterialsYn === 'N') { - // if (correntObjectNo) { - // //fetchBasicSettings() - // previousRoofMaterialsYn = 'Y' - // } - // } - - // // 이전 값을 업데이트 - // previousObjectNoRef.current = correntObjectNo - // previousRoofMaterialsRef.current = roofMaterials - // } - // }, [roofMaterials, correntObjectNo]) - /** * 배치면 초기설정 화면이 열리지 않아도 데이터 set 하기 위해서 추가 */ @@ -330,13 +318,24 @@ export function useCanvasSetting() { * 기본설정(PlacementShapeSetting) 조회 및 초기화 */ const fetchBasicSettings = async (planNo, openPoint) => { - /* roofMaterials가 로드될 때까지 대기 */ - if (!roofMaterials || roofMaterials.length === 0) { - console.log('Waiting for roofMaterials to load...') - return - } - try { + /* roofMaterials가 로드될 때까지 대기 후 실행 */ + if (!isRoofMaterialsLoaded) { + /* roofMaterials가 아직 로드되지 않았다면 */ + await new Promise((resolve) => { + /* 새로운 Promise 생성 */ + const checkInterval = setInterval(() => { + /* 100ms마다 체크하는 인터벌 설정 */ + console.log('roofMaterials loading... ', roofMaterials.length) + if (roofMaterials.length > 0) { + /* roofMaterials가 로드되었다면 */ + clearInterval(checkInterval) // 인터벌 중지 + resolve() // Promise 완료 + } + }, 100) + }) + } + await get({ url: `/api/canvas-management/canvas-basic-settings/by-object/${correntObjectNo}/${planNo}`, }).then((res) => { @@ -433,6 +432,7 @@ export function useCanvasSetting() { if (addRoofs.length > 0) { setAddedRoofs(addRoofs) + setBasicSettings({ ...basicSetting, roofMaterials: addRoofs[0], @@ -442,13 +442,23 @@ export function useCanvasSetting() { roofsData: roofsArray, selectedRoofMaterial: addRoofs.find((roof) => roof.selected), }) + + setCanvasSetting({ + ...basicSetting, + roofMaterials: addRoofs[0], + planNo: roofsRow[0].planNo, + roofSizeSet: roofsRow[0].roofSizeSet, + roofAngleSet: roofsRow[0].roofAngleSet, + roofsData: roofsArray, + selectedRoofMaterial: addRoofs.find((roof) => roof.selected), + }) } }) } catch (error) { console.error('Data fetching error:', error) } - setCanvasSetting({ ...basicSetting }) + // setCanvasSetting({ ...basicSetting }) } /** @@ -482,12 +492,15 @@ export function useCanvasSetting() { await post({ url: `/api/canvas-management/canvas-basic-settings`, data: patternData }).then((res) => { swalFire({ text: getMessage(res.returnMessage) }) - /* 배치면초기설정 조회 */ + /* BasicSettings Recoil 설정 */ setBasicSettings({ ...params }) }) - /* CanvasSetting Recoil 설정 */ - setCanvasSetting({ ...basicSetting }) + /* CanvasSetting Recoil 설정 - roofSizeSet을 문자열로 변환 */ + setCanvasSetting({ + ...basicSetting, + roofSizeSet: String(params.roofSizeSet), + }) /* 배치면초기설정 조회 */ fetchBasicSettings(params.planNo, null)