From 37a1c24667bf39f57d6dc26f85690dec745fff48 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Wed, 20 May 2026 15:30:52 +0900 Subject: [PATCH] =?UTF-8?q?=EB=AA=A8=EB=93=88/=EA=B0=80=EB=8C=80=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20undo,=20redo=20=EC=9D=B4=EC=83=81=20?= =?UTF-8?q?=EB=8F=99=EC=9E=91=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/module/useModuleBasicSetting.js | 5 ++++- src/hooks/useUndoRedo.js | 9 +++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/hooks/module/useModuleBasicSetting.js b/src/hooks/module/useModuleBasicSetting.js index 3f472210..c7450aff 100644 --- a/src/hooks/module/useModuleBasicSetting.js +++ b/src/hooks/module/useModuleBasicSetting.js @@ -1,5 +1,5 @@ import { useEffect, useState } from 'react' -import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil' +import { useRecoilState, useRecoilValue, useResetRecoilState, useSetRecoilState } from 'recoil' import { canvasSettingState, @@ -40,12 +40,14 @@ export function useModuleBasicSetting(tabNum) { const { getMessage } = useMessage() const roofDisplay = useRecoilValue(roofDisplaySelector) const [moduleSetupSurface, setModuleSetupSurface] = useRecoilState(moduleSetupSurfaceState) + const resetModuleSetupSurface = useResetRecoilState(moduleSetupSurfaceState) const { addCanvasMouseEventListener, initEvent, removeMouseEvent, addTargetMouseEventListener } = useEvent() const { swalFire } = useSwal() const compasDeg = useRecoilValue(compasDegAtom) const { setSurfaceShapePattern } = useRoofFn() const checkedModule = useRecoilValue(checkedModuleState) const [isManualModuleSetup, setIsManualModuleSetup] = useRecoilState(isManualModuleSetupState) + const [isManualModuleLayoutSetup, setIsManualModuleLayoutSetup] = useRecoilState(isManualModuleLayoutSetupState) const canvasSetting = useRecoilValue(canvasSettingState) const moduleSelectionData = useRecoilValue(moduleSelectionDataState) @@ -67,6 +69,7 @@ export function useModuleBasicSetting(tabNum) { useEffect(() => { initEvent() + resetModuleSetupSurface() return () => { //수동 설치시 초기화 removeMouseEvent('mouse:up') diff --git a/src/hooks/useUndoRedo.js b/src/hooks/useUndoRedo.js index e0f8bebc..bdce19a6 100644 --- a/src/hooks/useUndoRedo.js +++ b/src/hooks/useUndoRedo.js @@ -69,6 +69,15 @@ function _restoreFromJSON(canvas, snapshot, restoreAtomSnapshot, rebuildCanvasAt canvas.loadFromJSON(snapshot.canvasJSON, () => { rebuildCanvasAtoms() + + // undo/redo 후 모듈 설치영역이 active 인 채로 남으면 + // 사용자가 다시 클릭하지 않아도 선택된 것처럼 보여 자동 배치 등 부작용 발생. + // 활성 객체가 MODULE_SETUP_SURFACE 이면 선택 해제한다. + const active = canvas.getActiveObject() + if (active && active.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) { + canvas.discardActiveObject() + } + canvas.renderAll() restoreAtomSnapshot(snapshot.atomSnapshot)