diff --git a/src/components/common/color-picker/ColorPickerModal.jsx b/src/components/common/color-picker/ColorPickerModal.jsx
index 9d0074e0..03d9899f 100644
--- a/src/components/common/color-picker/ColorPickerModal.jsx
+++ b/src/components/common/color-picker/ColorPickerModal.jsx
@@ -52,7 +52,7 @@ export default function ColorPickerModal(props) {
closePopup(id, isConfig)
}}
>
- {getMessage('common.message.save')}
+ {getMessage('modal.common.save')}
diff --git a/src/components/common/context-menu/QContextMenu.jsx b/src/components/common/context-menu/QContextMenu.jsx
index 9d3eb4f3..f6665930 100644
--- a/src/components/common/context-menu/QContextMenu.jsx
+++ b/src/components/common/context-menu/QContextMenu.jsx
@@ -1,16 +1,20 @@
'use client'
import { useEffect } from 'react'
import '@/styles/contents.scss'
-import { useRecoilState } from 'recoil'
+import { useRecoilState, useRecoilValue } from 'recoil'
import { contextMenuListState, contextMenuState } from '@/store/contextMenu'
import { useTempGrid } from '@/hooks/useTempGrid'
+import { useContextMenu } from '@/hooks/useContextMenu'
+import { useEvent } from '@/hooks/useEvent'
export default function QContextMenu(props) {
- const { contextRef, canvasProps, handleKeyup } = props
+ const { contextRef, canvasProps } = props
const [contextMenu, setContextMenu] = useRecoilState(contextMenuState)
- const [contextMenuList, setContextMenuList] = useRecoilState(contextMenuListState)
+ const contextMenuList = useRecoilValue(contextMenuListState)
const activeObject = canvasProps?.getActiveObject() //액티브된 객체를 가져옴
const { tempGridMode, setTempGridMode } = useTempGrid()
+ const { handleKeyup } = useContextMenu()
+ const { addDocumentEventListener, removeDocumentEvent } = useEvent()
let contextType = ''
@@ -22,13 +26,13 @@ export default function QContextMenu(props) {
}
}
}
-
const getYPosition = (e) => {
const contextLength = contextMenuList.reduce((acc, cur, index) => {
return acc + cur.length
}, 0)
return e?.clientY - (contextLength * 25 + contextMenuList.length * 2 * 17)
}
+
useEffect(() => {
if (!contextRef.current) return
@@ -40,7 +44,7 @@ export default function QContextMenu(props) {
y: window.innerHeight / 2 < e.pageY ? getYPosition(e) : e.pageY,
}
setContextMenu({ visible: true, ...position })
- document.addEventListener('keyup', (e) => handleKeyup(e))
+ addDocumentEventListener('keyup', document, handleKeyup)
canvasProps?.upperCanvasEl.removeEventListener('contextmenu', handleContextMenu) //한번 노출 후 이벤트 삭제
}
@@ -51,8 +55,9 @@ export default function QContextMenu(props) {
const handleOutsideClick = (e) => {
// e.preventDefault()
- if (contextMenu.visible && !ref.current.contains(e.target)) {
+ if (contextMenu.visible) {
setContextMenu({ ...contextMenu, visible: false })
+ removeDocumentEvent('keyup')
}
}
@@ -61,10 +66,11 @@ export default function QContextMenu(props) {
document.addEventListener('click', handleOutsideClick)
return () => {
+ removeDocumentEvent('keyup')
document.removeEventListener('click', handleClick)
document.removeEventListener('click', handleOutsideClick)
}
- }, [contextRef, contextMenu])
+ }, [contextRef, contextMenuList])
const handleObjectMove = () => {
activeObject.set({
diff --git a/src/components/common/draggable/WithDraggable.jsx b/src/components/common/draggable/WithDraggable.jsx
index 29952981..76656837 100644
--- a/src/components/common/draggable/WithDraggable.jsx
+++ b/src/components/common/draggable/WithDraggable.jsx
@@ -1,18 +1,18 @@
'use client'
-import { useEffect, useState } from 'react'
+import { useState } from 'react'
import Draggable from 'react-draggable'
-export default function WithDraggable({ isShow, children, pos, handle = '' }) {
- const [position, setPosition] = useState({ x: 0, y: 0 })
+export default function WithDraggable({ isShow, children, pos = { x: 0, y: 0 }, handle = '' }) {
+ const [position, setPosition] = useState(pos)
const handleOnDrag = (e, data) => {
e.stopPropagation()
setPosition({ x: data.x, y: data.y })
}
- useEffect(() => {
- setPosition({ ...pos })
- }, [])
+ // useEffect(() => {
+ // setPosition({ ...pos })
+ // }, [])
return (
<>
diff --git a/src/components/common/popupManager/PopupManager.jsx b/src/components/common/popupManager/PopupManager.jsx
index f24a8526..e84ee610 100644
--- a/src/components/common/popupManager/PopupManager.jsx
+++ b/src/components/common/popupManager/PopupManager.jsx
@@ -1,10 +1,10 @@
'use client'
-import { useRecoilState } from 'recoil'
+import { useRecoilValue } from 'recoil'
import { popupState } from '@/store/popupAtom'
import { Fragment } from 'react'
export default function PopupManager() {
- const [popup, setPopup] = useRecoilState(popupState)
+ const popup = useRecoilValue(popupState)
return [
...popup?.config.map((child) =>