[1189_4] 드래그 박스 모듈 Del 삭제 불가 수정 — roof 복수선택 시 discardActiveObject 차단 + module 우선 currentObject 설정 #913

Merged
ysCha merged 1 commits from dev into dev-deploy 2026-06-12 16:42:19 +09:00

View File

@ -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) => {