From a614629b897c75557699f1cf1e24cc8f1cc23015 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Sat, 8 Feb 2025 17:26:22 +0900 Subject: [PATCH 1/3] =?UTF-8?q?=EC=A7=80=EB=B6=95=EB=A9=B4=20=ED=95=A0?= =?UTF-8?q?=EB=8B=B9=20=EC=8B=9C=20lengthText=20=EC=9C=84=EC=B9=98=20?= =?UTF-8?q?=EC=9D=B4=EC=83=81=ED=95=B4=EC=A7=80=EB=8A=94=20=ED=98=84?= =?UTF-8?q?=EC=83=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/roofcover/useRoofAllocationSetting.js | 2 +- src/hooks/roofcover/useRoofShapeSetting.js | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/hooks/roofcover/useRoofAllocationSetting.js b/src/hooks/roofcover/useRoofAllocationSetting.js index dc14f2b0..34ec3f13 100644 --- a/src/hooks/roofcover/useRoofAllocationSetting.js +++ b/src/hooks/roofcover/useRoofAllocationSetting.js @@ -319,7 +319,7 @@ export function useRoofAllocationSetting(id) { } const apply = () => { - const roofBases = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.ROOF) + const roofBases = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.ROOF && !obj.roofMaterial) const wallLines = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.WALL) roofBases.forEach((roofBase) => { try { diff --git a/src/hooks/roofcover/useRoofShapeSetting.js b/src/hooks/roofcover/useRoofShapeSetting.js index f242439e..61acfd61 100644 --- a/src/hooks/roofcover/useRoofShapeSetting.js +++ b/src/hooks/roofcover/useRoofShapeSetting.js @@ -425,7 +425,11 @@ export function useRoofShapeSetting(id) { const removeTargets = canvas .getObjects() - .filter((obj) => (obj.name === 'pitchText' || obj.name === 'lengthText') && outerLines.map((id) => id).includes(obj.parentId)) + .filter( + (obj) => + (obj.name === 'pitchText' || obj.name === 'lengthText') && + canvas.getObjects().find((parent) => parent.id === obj.parentId)?.name !== POLYGON_TYPE.ROOF, + ) removeTargets.forEach((obj) => { canvas.remove(obj) }) From d570703bb872f7399044c2699c45d0e2e57cfe01 Mon Sep 17 00:00:00 2001 From: yoosangwook Date: Sat, 8 Feb 2025 17:45:33 +0900 Subject: [PATCH 2/3] =?UTF-8?q?=F0=9F=93=8Cfix:=20=ED=8C=9D=EC=97=85=20?= =?UTF-8?q?=EC=83=81=ED=83=9C=20=EC=A1=B0=ED=9A=8C=20=EC=A1=B0=EA=B1=B4=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/common/useCanvasPopupStatusController.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/hooks/common/useCanvasPopupStatusController.js b/src/hooks/common/useCanvasPopupStatusController.js index 5e560136..40bef95b 100644 --- a/src/hooks/common/useCanvasPopupStatusController.js +++ b/src/hooks/common/useCanvasPopupStatusController.js @@ -49,10 +49,12 @@ export function useCanvasPopupStatusController(param = 1) { for (let i = 1; i < 3; i++) { const result = await getModuleSelection(i) // setModuleSelectionTotal((prev) => ({ ...prev, [i]: JSON.parse(unescapeString(result.popupStatus)) })) - if (i === 1) { - setCompasDeg(result.popupStatus) - } else if (i === 2) { - setModuleSelectionDataStore(JSON.parse(unescapeString(result.popupStatus))) + if (result) { + if (i === 1) { + setCompasDeg(result.popupStatus) + } else if (i === 2) { + setModuleSelectionDataStore(JSON.parse(unescapeString(result.popupStatus))) + } } } } From decec520c1206c20ca043a36094d7e6a30159665 Mon Sep 17 00:00:00 2001 From: Daseul Kim Date: Sat, 8 Feb 2025 17:46:58 +0900 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20=EC=BA=94=EB=B2=84=EC=8A=A4=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=EC=97=90=EC=84=9C=20=EB=B2=97=EC=96=B4?= =?UTF-8?q?=EB=82=9C=20=EB=92=A4=20=EA=B8=B0=EC=A1=B4=EA=B3=BC=20=EB=8B=A4?= =?UTF-8?q?=EB=A5=B8=20plan=EC=9C=BC=EB=A1=9C=20=EC=A7=84=EC=9E=85=20?= =?UTF-8?q?=EC=8B=9C=20=EC=9D=B4=EC=A0=84=20=EC=BA=94=EB=B2=84=EC=8A=A4=20?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=EA=B0=80=20=ED=91=9C=EC=B6=9C?= =?UTF-8?q?=EB=90=98=EB=8A=94=20=ED=98=84=EC=83=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/floor-plan/CanvasFrame.jsx | 30 ++++++++++++++--------- src/hooks/usePlan.js | 9 +++++++ 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/components/floor-plan/CanvasFrame.jsx b/src/components/floor-plan/CanvasFrame.jsx index 52553529..f5ecb10d 100644 --- a/src/components/floor-plan/CanvasFrame.jsx +++ b/src/components/floor-plan/CanvasFrame.jsx @@ -34,7 +34,7 @@ export default function CanvasFrame() { const currentMenu = useRecoilValue(currentMenuState) const { floorPlanState } = useContext(FloorPlanContext) const { contextMenu, handleClick } = useContextMenu() - const { plans, currentCanvasPlan } = usePlan() + const { plans, currentCanvasPlan, resetCanvasStatus } = usePlan() const totalDisplay = useRecoilValue(totalDisplaySelector) // 집계표 표시 여부 const { setIsGlobalLoading } = useContext(QcastContext) const resetModuleStatisticsState = useResetRecoilState(moduleStatisticsState) @@ -45,20 +45,21 @@ export default function CanvasFrame() { const resetSelectedModelsState = useResetRecoilState(selectedModelsState) const resetPcsCheckState = useResetRecoilState(pcsCheckState) const { handleModuleSelectionTotal } = useCanvasPopupStatusController() + const loadCanvas = () => { - if (canvas) { - canvas?.clear() // 캔버스를 초기화합니다. - if (currentCanvasPlan) { - const plan = plans.find((plan) => plan.id === currentCanvasPlan.id) - if (plan?.canvasStatus && floorPlanState.objectNo === currentCanvasPlan.objectNo) { - canvas?.loadFromJSON(JSON.parse(plan.canvasStatus), function () { - canvasLoadInit() //config된 상태로 캔버스 객체를 그린다 - canvas?.renderAll() // 캔버스를 다시 그립니다. - }) - } + if (!canvas) return + + canvas?.clear() // 캔버스를 초기화합니다. + if (currentCanvasPlan) { + const plan = plans.find((plan) => plan.id === currentCanvasPlan.id) + if (plan?.canvasStatus && floorPlanState.objectNo === currentCanvasPlan.objectNo) { + canvas?.loadFromJSON(JSON.parse(plan.canvasStatus), function () { + canvasLoadInit() //config된 상태로 캔버스 객체를 그린다 + canvas?.renderAll() // 캔버스를 다시 그립니다. + }) } - gridInit() } + gridInit() } useEffect(() => { @@ -69,6 +70,11 @@ export default function CanvasFrame() { useEffect(() => { setIsGlobalLoading(false) + + return () => { + canvas?.clear() + resetCanvasStatus() + } }, []) const resetRecoilData = () => { diff --git a/src/hooks/usePlan.js b/src/hooks/usePlan.js index e0853282..70f7e0db 100644 --- a/src/hooks/usePlan.js +++ b/src/hooks/usePlan.js @@ -407,6 +407,14 @@ export function usePlan(params = {}) { }) } + /** + * plan canvasStatus 초기화 + */ + const resetCanvasStatus = () => { + setCurrentCanvasPlan((prev) => ({ ...prev, canvasStatus: null })) + setPlans((plans) => plans.map((plan) => ({ ...plan, canvasStatus: null }))) + } + /** * 현재 plan 이동 -> 새로운 링크로 이동 */ @@ -425,5 +433,6 @@ export function usePlan(params = {}) { handleAddPlan, handleDeletePlan, loadCanvasPlanData, + resetCanvasStatus, } }