From b227a7deeafb613d664bb138de7e9abb126c9a39 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Wed, 26 Feb 2025 11:12:36 +0900 Subject: [PATCH] =?UTF-8?q?=F0=9F=91=80fix:=20=ED=94=8C=EB=9E=9C=20?= =?UTF-8?q?=EB=B3=B5=EC=82=AC=20=EC=8B=9C=20=EB=AA=A8=EB=93=88=20=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/useCanvasPopupStatusController.js | 2 +- src/hooks/option/useCanvasSetting.js | 2 +- src/hooks/usePlan.js | 138 ++++++++++++------ 3 files changed, 96 insertions(+), 46 deletions(-) diff --git a/src/hooks/common/useCanvasPopupStatusController.js b/src/hooks/common/useCanvasPopupStatusController.js index 22de7b76..b0c0f6f8 100644 --- a/src/hooks/common/useCanvasPopupStatusController.js +++ b/src/hooks/common/useCanvasPopupStatusController.js @@ -85,5 +85,5 @@ export function useCanvasPopupStatusController(param = 1) { }, ) - return { handleModuleSelectionTotal, trigger } + return { getModuleSelection, handleModuleSelectionTotal, trigger } } diff --git a/src/hooks/option/useCanvasSetting.js b/src/hooks/option/useCanvasSetting.js index cf61ac2b..6567838f 100644 --- a/src/hooks/option/useCanvasSetting.js +++ b/src/hooks/option/useCanvasSetting.js @@ -575,7 +575,7 @@ export function useCanvasSetting(executeEffect = true) { /** 모듈 선택 데이터 초기화 */ resetModuleSelectionData() - moduleSelectedDataTrigger({ common: {}, module: {}, roofConstructions: [] }) + // moduleSelectedDataTrigger({ common: {}, module: {}, roofConstructions: [] }) const isModuleExist = canvas.getObjects().some((obj) => obj.name === POLYGON_TYPE.MODULE) if (!isModuleExist) { resetSelectedModules() diff --git a/src/hooks/usePlan.js b/src/hooks/usePlan.js index c422b7f5..befc05d8 100644 --- a/src/hooks/usePlan.js +++ b/src/hooks/usePlan.js @@ -9,13 +9,16 @@ import { canvasState, currentCanvasPlanState, plansState, canvasSettingState } f import { useAxios } from '@/hooks/useAxios' import { useMessage } from '@/hooks/useMessage' import { useSwal } from '@/hooks/useSwal' -import { SAVE_KEY } from '@/common/common' +import { POLYGON_TYPE, SAVE_KEY } from '@/common/common' import { removeImage } from '@/lib/fileAction' import { FloorPlanContext } from '@/app/floor-plan/FloorPlanProvider' import { useEstimateController } from '@/hooks/floorPlan/estimate/useEstimateController' import { outerLinePointsState } from '@/store/outerLineAtom' import { placementShapeDrawingPointsState } from '@/store/placementShapeDrawingAtom' import { useCanvasSetting } from '@/hooks/option/useCanvasSetting' +import { compasDegAtom } from '@/store/orientationAtom' +import { moduleSelectionDataState, selectedModuleState } from '@/store/selectedModuleOptions' +import { useCanvasPopupStatusController } from './common/useCanvasPopupStatusController' /** * 플랜 처리 훅 @@ -38,7 +41,7 @@ export function usePlan(params = {}) { const { swalFire } = useSwal() const { getMessage } = useMessage() - const { get, promisePost, promisePut, promiseDel, promiseGet } = useAxios() + const { get, post, promisePost, promisePut, promiseDel, promiseGet } = useAxios() const { setEstimateContextState } = useEstimateController() @@ -48,6 +51,14 @@ export function usePlan(params = {}) { const { fetchBasicSettings, basicSettingCopySave } = useCanvasSetting() const [canvasSetting, setCanvasSetting] = useRecoilState(canvasSettingState) + /** + * 플랜 복사 시 모듈이 있을경우 모듈 데이터 복사하기 위한 처리 + */ + const { getModuleSelection } = useCanvasPopupStatusController() + const [compasDeg, setCompasDeg] = useRecoilState(compasDegAtom) + const [moduleSelectionDataStore, setModuleSelectionDataStore] = useRecoilState(moduleSelectionDataState) + const [selectedModules, setSelectedModules] = useRecoilState(selectedModuleState) + /** * 마우스 포인터의 가이드라인 제거 */ @@ -191,54 +202,93 @@ export function usePlan(params = {}) { objectNo: objectNo, copyFlg: '0', } - try { - const res = await promisePost({ url: '/api/object/add-plan', data: planData }) - let newPlan = { - id: res.data.canvasId, - objectNo: objectNo, - planNo: res.data.planNo, - userId: userId, - canvasStatus: '', - isCurrent: true, - bgImageName: null, - mapPositionAddress: null, - } - if (isInitPlan) { - /* 초기 플랜 생성인 경우 플랜 목록 초기화 */ - setCurrentCanvasPlan(newPlan) - setPlans([newPlan]) + const res = await promisePost({ url: '/api/object/add-plan', data: planData }) + let newPlan = { + id: res.data.canvasId, + objectNo: objectNo, + planNo: res.data.planNo, + userId: userId, + canvasStatus: '', + isCurrent: true, + bgImageName: null, + mapPositionAddress: null, + } - /* 플랜 추가 시 배치면초기설정 정보 조회 */ - fetchBasicSettings(newPlan.planNo, null) - } else { - if (isCopy) { - /* 복제 플랜 생성인 경우 현재 캔버스 데이터를 복제 */ - newPlan.canvasStatus = currentCanvasData() - newPlan.bgImageName = currentCanvasPlan?.bgImageName ?? null - newPlan.mapPositionAddress = currentCanvasPlan?.mapPositionAddress ?? null + if (isInitPlan) { + /* 초기 플랜 생성인 경우 플랜 목록 초기화 */ + setCurrentCanvasPlan(newPlan) + setPlans([newPlan]) - /* 복제 시 배치면 초기설정 복사 */ - basicSettingCopySave({ - ...canvasSetting, + /* 플랜 추가 시 배치면초기설정 정보 조회 */ + fetchBasicSettings(newPlan.planNo, null) + } else { + if (isCopy) { + /* 복제 플랜 생성인 경우 현재 캔버스 데이터를 복제 */ + newPlan.canvasStatus = currentCanvasData() + newPlan.bgImageName = currentCanvasPlan?.bgImageName ?? null + newPlan.mapPositionAddress = currentCanvasPlan?.mapPositionAddress ?? null + + /* 복제 시 배치면 초기설정 복사 */ + basicSettingCopySave({ + ...canvasSetting, + planNo: newPlan.planNo, + selectedRoofMaterial: { + ...canvasSetting.selectedRoofMaterial, planNo: newPlan.planNo, - selectedRoofMaterial: { - ...canvasSetting.selectedRoofMaterial, - planNo: newPlan.planNo, - }, - roofsData: canvasSetting.roofsData.map((roof) => ({ - ...roof, - planNo: newPlan.planNo, - })), - }) - } - setCurrentCanvasPlan(newPlan) - setPlans((plans) => [...plans.map((plan) => ({ ...plan, isCurrent: false })), newPlan]) + }, + roofsData: canvasSetting.roofsData.map((roof) => ({ + ...roof, + planNo: newPlan.planNo, + })), + }) - swalFire({ text: getMessage('plan.message.save') }) + /** + * 방위 데이터 복사 + */ + const sourceDegree = await getModuleSelection(1) + console.log('🚀 ~ sourceDegree:', sourceDegree) + const degreeData = { + objectNo, + planNo: parseInt(newPlan.planNo), + popupType: 1, + popupStatus: sourceDegree.popupStatus, + } + console.log('🚀 ~ postObjectPlan ~ degreeData:', degreeData) + await post({ url: `/api/v1/canvas-popup-status`, data: degreeData }) + /** 리코일 세팅 */ + setCompasDeg(sourceDegree.popupStatus) + + /** + * 모듈 선택 데이터 복사 + */ + const moduleSelectionData = await getModuleSelection(2) + console.log('🚀 ~ moduleSelectionData:', moduleSelectionData) + const moduleStatus = moduleSelectionData.popupStatus.replace(/"/g, '\"') + const moduleData = { + objectNo, + planNo: parseInt(newPlan.planNo), + popupType: 2, + popupStatus: moduleStatus, + } + console.log('🚀 ~ postObjectPlan ~ moduleData:', moduleData) + await post({ url: `/api/v1/canvas-popup-status`, data: moduleData }) + const copyData = JSON.parse(moduleStatus) + console.log('🚀 ~ postObjectPlan ~ copyData:', copyData) + + /** 리코일 세팅 */ + setModuleSelectionDataStore(copyData) + if (copyData.module) setSelectedModules(copyData.module) + const roofSurfaceList = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) + const modules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE) + roofSurfaceList.forEach((surface) => { + surface.modules = modules.filter((module) => module.surfaceId === surface.id) + }) } - } catch (error) { - swalFire({ text: error.response.data.message, icon: 'error' }) + setCurrentCanvasPlan(newPlan) + setPlans((plans) => [...plans.map((plan) => ({ ...plan, isCurrent: false })), newPlan]) + + swalFire({ text: getMessage('plan.message.save') }) } }