From aa45a891bcddc3d407ebd046163171a0c140fe69 Mon Sep 17 00:00:00 2001 From: ysCha Date: Fri, 12 Jun 2026 16:40:00 +0900 Subject: [PATCH] =?UTF-8?q?[1189=5F4]=20=EB=93=9C=EB=9E=98=EA=B7=B8=20?= =?UTF-8?q?=EB=B0=95=EC=8A=A4=20=EB=AA=A8=EB=93=88=20Del=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20=EB=B6=88=EA=B0=80=20=EC=88=98=EC=A0=95=20=E2=80=94?= =?UTF-8?q?=20roof=20=EB=B3=B5=EC=88=98=EC=84=A0=ED=83=9D=20=EC=8B=9C=20di?= =?UTF-8?q?scardActiveObject=20=EC=B0=A8=EB=8B=A8=20+=20module=20=EC=9A=B0?= =?UTF-8?q?=EC=84=A0=20currentObject=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/useCanvasEvent.js | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/hooks/useCanvasEvent.js b/src/hooks/useCanvasEvent.js index 4293c15f..43fbb3cf 100644 --- a/src/hooks/useCanvasEvent.js +++ b/src/hooks/useCanvasEvent.js @@ -196,9 +196,14 @@ export function useCanvasEvent() { const selectionEvent = { created: (e) => { - const target = e.selected[0] - setCurrentObject(target) const { selected } = e + // [DEL-DRAG-FIX 2026-06-12] 드래그 박스로 roof/surface 등이 섞여 잡히면 e.selected[0] 가 비-module 이 되어 + // currentObject 가 module 로 안 잡힘 → contextMenu 에 module remove 미세팅 → Del 무반응. + // 모듈 기본설정 메뉴에서는 module 을 우선해 currentObject 로 설정. + const selectedModules = selected?.filter((o) => o.name === POLYGON_TYPE.MODULE) ?? [] + const target = + currentMenu === MENU.MODULE_CIRCUIT_SETTING.BASIC_SETTING && selectedModules.length > 0 ? selectedModules[0] : e.selected[0] + setCurrentObject(target) if (selected?.length > 0) { selected.forEach((obj) => { @@ -212,7 +217,12 @@ export function useCanvasEvent() { obj.set({ strokeWidth: 3 }) } if (obj.name === POLYGON_TYPE.ROOF) { - canvas.discardActiveObject() + // [DEL-DRAG-FIX 2026-06-12] 드래그 박스 복수선택에 roof 가 섞이면 discardActiveObject 가 전체 선택을 해제하고 + // selection:cleared → currentObject=null 로 만들어 Del 리스너가 제거됨(삭제 불가). 복수선택은 + // refineModuleSelection 이 모듈만 정제하므로, 단일 roof 클릭일 때만 해제한다. + if (selected.length === 1) { + canvas.discardActiveObject() + } obj.set({ stroke: originStroke }) } } @@ -245,9 +255,12 @@ export function useCanvasEvent() { canvas.renderAll() }, updated: (e) => { - const target = e.selected[0] - setCurrentObject(target) const { selected, deselected } = e + // [DEL-DRAG-FIX 2026-06-12] created 와 동일: 모듈 기본설정 메뉴에서는 module 우선으로 currentObject 설정 + const selectedModules = selected?.filter((o) => o.name === POLYGON_TYPE.MODULE) ?? [] + const target = + currentMenu === MENU.MODULE_CIRCUIT_SETTING.BASIC_SETTING && selectedModules.length > 0 ? selectedModules[0] : e.selected[0] + setCurrentObject(target) if (deselected?.length > 0) { deselected.forEach((obj) => { -- 2.47.2