Compare commits

..

No commits in common. "0b2be2b4b1c7a10e5447ea1e71eb573694b99622" and "8b425c35f8722e577913ba51263acbe53b9d6f3b" have entirely different histories.

2 changed files with 17 additions and 55 deletions

View File

@ -1,5 +1,5 @@
'use client'
import { useEffect, useRef } from 'react'
import { useEffect } from 'react'
import '@/styles/contents.scss'
import { useRecoilState, useRecoilValue } from 'recoil'
import { contextMenuListState, contextMenuState } from '@/store/contextMenu'
@ -15,13 +15,8 @@ export default function QContextMenu(props) {
const contextMenuList = useRecoilValue(contextMenuListState)
const currentObject = useRecoilValue(currentObjectState)
const { tempGridMode, setTempGridMode } = useTempGrid()
const { handleKeyup, triggerDelete } = useContextMenu()
const { handleKeyup } = useContextMenu()
const { addDocumentEventListener, removeDocumentEvent } = useEvent()
// [TMP-DEL 2026-05-07] Del : ref
const handleKeyupRef = useRef(handleKeyup)
handleKeyupRef.current = handleKeyup
const triggerDeleteRef = useRef(triggerDelete)
triggerDeleteRef.current = triggerDelete
// const { addDocumentEventListener, removeDocumentEvent } = useContext(EventContext)
const getYPosition = (e) => {
@ -44,7 +39,7 @@ export default function QContextMenu(props) {
y: window.innerHeight / 2 < e.pageY ? getYPosition(e) : e.pageY,
}
setContextMenu({ visible: true, ...position, currentMousePos: canvasProps.getPointer(e) })
// [TMP-DEL 2026-05-07] keyup useEffect . .
addDocumentEventListener('keyup', document, handleKeyup)
}
}
@ -57,7 +52,7 @@ export default function QContextMenu(props) {
// e.preventDefault()
if (contextMenu.visible) {
setContextMenu({ ...contextMenu, visible: false })
// [TMP-DEL 2026-05-07] Del keyup
removeDocumentEvent('keyup')
}
}
@ -69,33 +64,13 @@ export default function QContextMenu(props) {
document.addEventListener('click', handleOutsideClick)
return () => {
// [TMP-DEL 2026-05-07] keyup useEffect lifecycle . wrappedKeyup
removeDocumentEvent('keyup')
document.removeEventListener('click', handleClick)
document.removeEventListener('click', handleOutsideClick)
canvasProps?.upperCanvasEl.removeEventListener('contextmenu', handleContextMenu) //
}
}, [contextRef, contextMenuList, currentObject])
// [TMP-DEL 2026-05-07] Del . (M/C ) handleKeyup .
// input/textarea/contentEditable .
useEffect(() => {
if (!currentObject) {
removeDocumentEvent('keyup')
return
}
const wrappedKeyup = (e) => {
const el = document.activeElement
if (el && (el.tagName === 'INPUT' || el.tagName === 'TEXTAREA' || el.isContentEditable)) return
if (e.key === 'Delete' || e.key === 'Backspace') {
triggerDeleteRef.current()
return
}
handleKeyupRef.current(e)
}
addDocumentEventListener('keyup', document, wrappedKeyup)
return () => removeDocumentEvent('keyup')
}, [currentObject])
return (
<>
{contextMenu.visible && (

View File

@ -114,24 +114,6 @@ export function useContextMenu() {
if (menu) handleClick(null, menu)
}
// [TMP-DEL 2026-05-07] Del 키용: 현재 contextMenu 에서 삭제 메뉴를 찾아 실행
// 매칭 규칙: id === 'remove' 또는 id 가 'Remove' 로 끝남 (단, 'wallLineRemove' 제외, 'RemoveAll' 제외)
const triggerDelete = () => {
let target = null
for (const group of contextMenu) {
for (const item of group) {
const id = item?.id || ''
if (id === 'wallLineRemove') continue
if (id === 'remove' || id.endsWith('Remove')) {
target = item
break
}
}
if (target) break
}
if (target?.fn) handleClick(null, target)
}
useEffect(() => {
currentMenuSetting()
}, [gridColor, currentMenu])
@ -150,7 +132,8 @@ export function useContextMenu() {
[
{
id: 'dormerRemove',
name: getMessage('contextmenu.remove'),
shortcut: ['d', 'D'],
name: `${getMessage('contextmenu.remove')}(D)`,
fn: () => deleteObject(),
},
{
@ -223,7 +206,8 @@ export function useContextMenu() {
},
{
id: 'roofMaterialRemove',
name: getMessage('contextmenu.remove'),
shortcut: ['d', 'D'],
name: `${getMessage('contextmenu.remove')}(D)`,
fn: () => deleteObject(),
},
{
@ -316,7 +300,8 @@ export function useContextMenu() {
},
{
id: 'roofMaterialRemove',
name: getMessage('contextmenu.remove'),
shortcut: ['d', 'D'],
name: `${getMessage('contextmenu.remove')}(D)`,
fn: () => deleteObject(),
},
{
@ -379,7 +364,8 @@ export function useContextMenu() {
},
{
id: 'auxiliaryRemove',
name: getMessage('contextmenu.auxiliary.remove'),
shortcut: ['d', 'D'],
name: `${getMessage('contextmenu.auxiliary.remove')}(D)`,
fn: () => {
if (!currentObject) return
const roof = canvas.getObjects().filter((obj) => obj.id === currentObject.attributes.roofId)[0]
@ -488,7 +474,8 @@ export function useContextMenu() {
},
{
id: 'openingRemove',
name: getMessage('contextmenu.remove'),
shortcut: ['d', 'D'],
name: `${getMessage('contextmenu.remove')}(D)`,
fn: () => deleteObject(),
},
{
@ -690,7 +677,8 @@ export function useContextMenu() {
},
{
id: 'remove',
name: getMessage('contextmenu.remove'),
shortcut: ['d', 'D'],
name: `${getMessage('contextmenu.remove')}(D)`,
fn: () => deleteObject(),
},
{
@ -985,6 +973,5 @@ export function useContextMenu() {
setCurrentContextMenu,
handleClick,
handleKeyup,
triggerDelete, // [TMP-DEL 2026-05-07]
}
}