diff --git a/src/components/floor-plan/CanvasMenu.jsx b/src/components/floor-plan/CanvasMenu.jsx
index c916a0fc..d4b7e40b 100644
--- a/src/components/floor-plan/CanvasMenu.jsx
+++ b/src/components/floor-plan/CanvasMenu.jsx
@@ -5,19 +5,24 @@ import MenuDepth01 from './MenuDepth01'
import QSelectBox from '@/components/common/select/QSelectBox'
import { useMessage } from '@/hooks/useMessage'
import { post } from '@/lib/Axios'
-import { useRecoilState, useRecoilValue } from 'recoil'
+import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'
import { settingModalFirstOptionsState, settingModalSecondOptionsState } from '@/store/settingAtom'
-import { canvasZoomState, verticalHorizontalModeState } from '@/store/canvasAtom'
+import { canvasState, canvasZoomState, currentMenuState, verticalHorizontalModeState } from '@/store/canvasAtom'
+import { outerLinePointsState } from '@/store/outerLineAtom'
+import { MENU } from '@/common/common'
export default function CanvasMenu(props) {
const [objectNo] = useState('test123240912001') // 이후 삭제 필요
const { setShowCanvasSettingModal, showOutlineModal, setShowOutlineModal } = props
const [menuNumber, setMenuNumber] = useState(null)
const [verticalHorizontalMode, setVerticalHorizontalMode] = useRecoilState(verticalHorizontalModeState)
- const [vertical, setVertical] = useState(true)
const [type, setType] = useState('')
const { getMessage } = useMessage()
const canvasZoom = useRecoilValue(canvasZoomState)
+ const canvas = useRecoilValue(canvasState)
+ const setCurrentMenu = useSetRecoilState(currentMenuState)
+ const setPoints = useSetRecoilState(outerLinePointsState)
+
const SelectOption = [{ name: '瓦53A' }, { name: '瓦53A' }]
const onClickNav = (number) => {
setMenuNumber(number)
@@ -91,6 +96,11 @@ export default function CanvasMenu(props) {
}
}
+ const handleClear = () => {
+ setPoints([])
+ canvas?.clear()
+ }
+
return (
@@ -111,6 +121,7 @@ export default function CanvasMenu(props) {
className={`canvas-menu-item ${menuNumber === 2 ? 'active' : ''}`}
onClick={() => {
onClickNav(2)
+ setCurrentMenu(MENU.ROOF_COVERING.DEFAULT)
}}
>
-
onClickNav(3)}>
+ {
+ onClickNav(3)
+ setCurrentMenu(MENU.BATCH_CANVAS.DEFAULT)
+ }}
+ >
- onClickNav(4)}>
+ {
+ onClickNav(4)
+ setCurrentMenu(MENU.MODULE_CIRCUIT_SETTING.DEFAULT)
+ }}
+ >
- onClickNav(5)}>
+ {
+ onClickNav(5)
+ setCurrentMenu(MENU.ESTIMATE.DEFAULT)
+ }}
+ >
- onClickNav(6)}>
+ {
+ onClickNav(6)
+ setCurrentMenu(MENU.POWER_GENERATION_SIMULATION.DEFAULT)
+ }}
+ >
-
+
diff --git a/src/components/floor-plan/MenuDepth01.jsx b/src/components/floor-plan/MenuDepth01.jsx
index cf0ad1e8..98ea5d2b 100644
--- a/src/components/floor-plan/MenuDepth01.jsx
+++ b/src/components/floor-plan/MenuDepth01.jsx
@@ -3,14 +3,19 @@
import { ToggleonMouse } from '@/components/header/Header'
import { useMessage } from '@/hooks/useMessage'
import { useEffect, useState } from 'react'
+import { MENU } from '@/common/common'
+import { currentMenuState } from '@/store/canvasAtom'
+import { useSetRecoilState } from 'recoil'
export default function MenuDepth01(props) {
const { setShowOutlineModal, type } = props
const { getMessage } = useMessage()
const [activeMenu, setActiveMenu] = useState()
- const onClickMenu = (menuNum) => {
- setActiveMenu(menuNum)
- setShowOutlineModal(menuNum === 0)
+ const setCurrentMenu = useSetRecoilState(currentMenuState)
+ const onClickMenu = ({ id, menu, name }) => {
+ setActiveMenu(id)
+ setShowOutlineModal(menu === MENU.ROOF_COVERING.EXTERIOR_WALL_LINE)
+ setCurrentMenu(menu)
}
const menus = [
@@ -26,21 +31,21 @@ export default function MenuDepth01(props) {
const menuInfo = {
outline: [
// 지붕덮개
- { id: 0, name: 'plan.menu.roof.cover.outline.drawing' },
- { id: 1, name: 'plan.menu.roof.cover.roof.shape.setting' },
- { id: 2, name: 'plan.menu.roof.cover.roof.shape.edit' },
- { id: 3, name: 'plan.menu.roof.cover.auxiliary.line.drawing' },
+ { id: 0, name: 'plan.menu.roof.cover.outline.drawing', menu: MENU.ROOF_COVERING.EXTERIOR_WALL_LINE },
+ { id: 1, name: 'plan.menu.roof.cover.roof.shape.setting', menu: MENU.ROOF_COVERING.ROOF_SHAPE_SETTINGS },
+ { id: 2, name: 'plan.menu.roof.cover.roof.shape.edit', menu: MENU.ROOF_COVERING.ROOF_SHAPE_EDITING },
+ { id: 3, name: 'plan.menu.roof.cover.auxiliary.line.drawing', menu: MENU.ROOF_COVERING.HELP_LINE_DRAWING },
],
surface: [
// 배치면
- { id: 0, name: 'plan.menu.placement.surface.drawing' },
- { id: 1, name: 'plan.menu.placement.surface.surface' },
- { id: 2, name: 'plan.menu.placement.surface.object' },
+ { id: 0, name: 'plan.menu.placement.surface.drawing', menu: MENU.BATCH_CANVAS.BATCH_DRAWING },
+ { id: 1, name: 'plan.menu.placement.surface.surface', menu: MENU.BATCH_CANVAS.SURFACE_SHAPE_BATCH },
+ { id: 2, name: 'plan.menu.placement.surface.object', menu: MENU.BATCH_CANVAS.OBJECT_BATCH },
],
module: [
// 모듈, 회로 구성
- { id: 0, name: 'plan.menu.module.circuit.setting.default' },
- { id: 1, name: 'plan.menu.module.circuit.setting.circuit.trestle.setting' },
+ { id: 0, name: 'plan.menu.module.circuit.setting.default', menu: MENU.MODULE_CIRCUIT_SETTING.BASIC_SETTING },
+ { id: 1, name: 'plan.menu.module.circuit.setting.circuit.trestle.setting', menu: MENU.MODULE_CIRCUIT_SETTING.CIRCUIT_TRESTLE_SETTING },
],
}
@@ -55,7 +60,7 @@ export default function MenuDepth01(props) {
{menuInfo[type].map((menu) => {
return (
- onClickMenu(menu.id)}>{getMessage(menu.name)}
+ onClickMenu(menu)}>{getMessage(menu.name)}
)
})}
diff --git a/src/components/floor-plan/modal/outerlinesetting/OuterLineWall.jsx b/src/components/floor-plan/modal/outerlinesetting/OuterLineWall.jsx
index 05d7cb0c..229bf54c 100644
--- a/src/components/floor-plan/modal/outerlinesetting/OuterLineWall.jsx
+++ b/src/components/floor-plan/modal/outerlinesetting/OuterLineWall.jsx
@@ -22,7 +22,8 @@ import { distanceBetweenPoints } from '@/util/canvas-util'
export default function OuterLineWall(props) {
const { setShowOutlineModal } = props
const { getMessage } = useMessage()
- const { addCanvasMouseEventListener, addDocumentEventListener, removeAllMouseEventListeners, removeAllDocumentEventListeners } = useEvent()
+ const { addCanvasMouseEventListener, addDocumentEventListener, removeAllMouseEventListeners, removeAllDocumentEventListeners, removeMouseEvent } =
+ useEvent()
const { addLineText, removeLineText } = useLine()
const verticalHorizontalMode = useRecoilValue(verticalHorizontalModeState)
@@ -40,8 +41,11 @@ export default function OuterLineWall(props) {
const canvas = useRecoilValue(canvasState)
useEffect(() => {
- removeAllMouseEventListeners()
+ removeMouseEvent('mouse:down', mouseDown)
addCanvasMouseEventListener('mouse:down', mouseDown)
+ return () => {
+ removeAllMouseEventListeners()
+ }
}, [verticalHorizontalMode, points])
useEffect(() => {
diff --git a/src/hooks/useEvent.js b/src/hooks/useEvent.js
index f3b81115..c41b189f 100644
--- a/src/hooks/useEvent.js
+++ b/src/hooks/useEvent.js
@@ -1,5 +1,5 @@
import { useEffect, useRef } from 'react'
-import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'
+import { useRecoilState, useRecoilValue } from 'recoil'
import { canvasState, canvasZoomState, currentMenuState } from '@/store/canvasAtom'
import { fabric } from 'fabric'
@@ -8,7 +8,7 @@ export function useEvent() {
const currentMenu = useRecoilValue(currentMenuState)
const keyboardEventListeners = useRef([])
const mouseEventListeners = useRef([])
- const setCanvasZoom = useSetRecoilState(canvasZoomState)
+ const [canvasZoom, setCanvasZoom] = useRecoilState(canvasZoomState)
useEffect(() => {
if (!canvas) {
@@ -16,6 +16,13 @@ export function useEvent() {
}
removeAllMouseEventListeners()
removeAllDocumentEventListeners()
+
+ /**
+ * wheelEvent
+ */
+ canvas?.off('mouse:wheel')
+ canvas?.on('mouse:wheel', wheelEvent)
+
addDefaultEvent()
}, [currentMenu, canvas])
@@ -23,7 +30,7 @@ export function useEvent() {
//default Event 추가
addCanvasMouseEventListener('mouse:move', defaultMouseMoveEvent)
addCanvasMouseEventListener('mouse:out', defaultMouseOutEvent)
- addCanvasMouseEventListener('mouse:wheel', wheelEvent)
+
addDocumentEventListener('keydown', document, defaultKeyboardEvent)
}
@@ -126,10 +133,21 @@ export function useEvent() {
keyboardEventListeners.current.length = 0 // 배열 초기화
}
+ const removeMouseEvent = (type, handler) => {
+ mouseEventListeners.current = mouseEventListeners.current.filter((event) => {
+ if (event.type === type && event.handler === handler) {
+ canvas.off(type, handler)
+ return false
+ }
+ return true
+ })
+ }
+
return {
addDocumentEventListener,
addCanvasMouseEventListener,
removeAllMouseEventListeners,
removeAllDocumentEventListeners,
+ removeMouseEvent,
}
}