diff --git a/src/components/floor-plan/modal/object/ObjectSetting.jsx b/src/components/floor-plan/modal/object/ObjectSetting.jsx index 41eaa833..3d1ce3ab 100644 --- a/src/components/floor-plan/modal/object/ObjectSetting.jsx +++ b/src/components/floor-plan/modal/object/ObjectSetting.jsx @@ -30,9 +30,26 @@ export default function ObjectSetting({ id, pos = { x: 50, y: 230 } }) { //오브젝트 배치로 넘어오면 면형상 선택 불가 useEffect(() => { canvas.discardActiveObject() + + // [ROOF-SELECTABLE-RESTORE 2026-05-08] 모달 닫힘 시 roof selectable 원복. + // 누락되어 있어 한 번 진입 후엔 지붕 선택 불가 → 자동배치 단계에서 다른 hook 이 다시 + // selectable=true 로 set 해주기 전까진 클릭 무반응 상태가 지속됐음. + // 무조건 true 로 복원하면 동시에 열린 다른 모드(roof.selectable=false 의도) 와 충돌 가능 → + // 진입 시점의 원래 값을 snapshot 해두고 cleanup 시 그 값으로 복원(다른 모드의 의도 보존). + const prevSelectable = surfaceShapePolygons.map((obj) => ({ obj, selectable: obj.selectable })) + surfaceShapePolygons.forEach((obj) => { obj.set({ selectable: false }) }) + + return () => { + prevSelectable.forEach(({ obj, selectable }) => { + // 객체가 이미 캔버스에서 제거됐을 수도 있으므로 canvas 멤버십 확인 후 복원. + if (canvas?.getObjects().includes(obj)) { + obj.set({ selectable }) + } + }) + } }, []) /**