diff --git a/src/components/floor-plan/CanvasMenu.jsx b/src/components/floor-plan/CanvasMenu.jsx
index b2ff69f6..ebcac837 100644
--- a/src/components/floor-plan/CanvasMenu.jsx
+++ b/src/components/floor-plan/CanvasMenu.jsx
@@ -12,53 +12,51 @@ import { useMessage } from '@/hooks/useMessage'
import { usePlan } from '@/hooks/usePlan'
import { useSwal } from '@/hooks/useSwal'
import { useEvent } from '@/hooks/useEvent'
-import { canvasState, canvasZoomState, currentCanvasPlanState, currentMenuState, verticalHorizontalModeState } from '@/store/canvasAtom'
+import {
+ canvasSettingState,
+ canvasState,
+ canvasZoomState,
+ currentCanvasPlanState,
+ currentMenuState,
+ verticalHorizontalModeState,
+} from '@/store/canvasAtom'
import { sessionStore } from '@/store/commonAtom'
import { outerLinePointsState } from '@/store/outerLineAtom'
import { appMessageStore, globalLocaleStore } from '@/store/localeAtom'
-import { settingModalFirstOptionsState, wordDisplaySelector } from '@/store/settingAtom'
-import { MENU } from '@/common/common'
+import { settingModalFirstOptionsState } from '@/store/settingAtom'
import KO from '@/locales/ko.json'
import JA from '@/locales/ja.json'
import { useCanvasEvent } from '@/hooks/useCanvasEvent'
-import { popupState } from '@/store/popupAtom'
import SettingModal01 from '@/components/floor-plan/modal/setting01/SettingModal01'
import { usePopup } from '@/hooks/usePopup'
import { placementShapeDrawingPointsState } from '@/store/placementShapeDrawingAtom'
import PlacementShapeSetting from '@/components/floor-plan/modal/placementShape/PlacementShapeSetting'
import { useCommonUtils } from '@/hooks/common/useCommonUtils'
-
-const canvasMenus = [
- { index: 0, name: 'plan.menu.plan.drawing', icon: 'con00', title: MENU.PLAN_DRAWING },
- { index: 1, name: 'plan.menu.placement.surface.initial.setting', icon: 'con01', title: MENU.INITIAL_CANVAS_SETTING },
- { index: 2, name: 'plan.menu.roof.cover', icon: 'con02', title: MENU.ROOF_COVERING.DEFAULT },
- { index: 3, name: 'plan.menu.placement.surface', icon: 'con03', title: MENU.BATCH_CANVAS.DEFAULT },
- { index: 4, name: 'plan.menu.module.circuit.setting', icon: 'con04', title: MENU.MODULE_CIRCUIT_SETTING.DEFAULT },
- { index: 5, name: 'plan.menu.estimate', icon: 'con06', title: MENU.ESTIMATE.DEFAULT },
- { index: 6, name: 'plan.menu.simulation', icon: 'con05', title: MENU.POWER_GENERATION_SIMULATION.DEFAULT },
-]
+import { menusState, menuTypeState } from '@/store/menuAtom'
+import useMenu from '@/hooks/common/useMenu'
+import { MENU } from '@/common/common'
export default function CanvasMenu(props) {
const { menuNumber, setMenuNumber } = props
const pathname = usePathname()
const router = useRouter()
-
- const { addPopup, closePopup } = usePopup()
- const [type, setType] = useState('')
-
+ const { addPopup } = usePopup()
+ const canvasMenus = useRecoilValue(menusState)
+ const [type, setType] = useRecoilState(menuTypeState)
const [verticalHorizontalMode, setVerticalHorizontalMode] = useRecoilState(verticalHorizontalModeState)
const [appMessageState, setAppMessageState] = useRecoilState(appMessageStore)
const setCurrentMenu = useSetRecoilState(currentMenuState)
const setOuterLinePoints = useSetRecoilState(outerLinePointsState)
const setPlacementPoints = useSetRecoilState(placementShapeDrawingPointsState)
+ const canvasSetting = useRecoilValue(canvasSettingState)
const [canvasZoom, setCanvasZoom] = useRecoilState(canvasZoomState)
const [currentCanvasPlan, setcurrentCanvasPlan] = useRecoilState(currentCanvasPlanState)
- const { handleZoomClear } = useCanvasEvent()
-
+ const sessionState = useRecoilValue(sessionStore)
const globalLocale = useRecoilValue(globalLocaleStore)
const canvas = useRecoilValue(canvasState)
- const sessionState = useRecoilValue(sessionStore)
+ const { handleZoomClear } = useCanvasEvent()
+ const { handleMenu } = useMenu()
const { getMessage } = useMessage()
const { saveCanvas } = usePlan()
@@ -70,14 +68,11 @@ export default function CanvasMenu(props) {
dimension: false,
distance: false,
})
-
const { commonFunctions } = useCommonUtils({
commonFunctionState,
setCommonFunctionState,
})
- const [popup, setPopup] = useRecoilState(popupState)
-
const SelectOption = [{ name: '瓦53A' }, { name: '瓦53A' }]
const onClickNav = (menu) => {
@@ -102,9 +97,6 @@ export default function CanvasMenu(props) {
if (pathname !== '/floor-plan') router.push('/floor-plan')
}
- const menuProps = {
- type,
- }
const settingsModalOptions = useRecoilState(settingModalFirstOptionsState)
@@ -135,7 +127,6 @@ export default function CanvasMenu(props) {
}
const onClickPlacementInitialMenu = () => {
addPopup(placementInitialId, 1, )
- // setShowPlaceShapeModal(true)
}
const handleClear = () => {
@@ -162,7 +153,19 @@ export default function CanvasMenu(props) {
} else {
setAppMessageState(JA)
}
- }, [menuNumber, type, globalLocale])
+ }, [type, globalLocale])
+
+ useEffect(() => {
+ if (['2', '3'].includes(canvasSetting?.roofSizeSet?.toString())) {
+ setMenuNumber(3)
+ setType('surface')
+ setCurrentMenu(MENU.BATCH_CANVAS.BATCH_DRAWING)
+ } else {
+ setMenuNumber(2)
+ setType('outline')
+ setCurrentMenu(MENU.ROOF_COVERING.EXTERIOR_WALL_LINE)
+ }
+ }, [canvasSetting])
return (
@@ -173,9 +176,12 @@ export default function CanvasMenu(props) {
onClickNav(menu)}
+ onClick={() => {
+ if (['2', '3'].includes(canvasSetting?.roofSizeSet?.toString()) && menu.index === 2) return
+ onClickNav(menu)
+ }}
>
-
- {(menuNumber === 2 || menuNumber === 3 || menuNumber === 4) && }
+ {(menuNumber === 2 || menuNumber === 3 || menuNumber === 4) && }
)
diff --git a/src/components/floor-plan/MenuDepth01.jsx b/src/components/floor-plan/MenuDepth01.jsx
index 113a1f0e..63e5e67a 100644
--- a/src/components/floor-plan/MenuDepth01.jsx
+++ b/src/components/floor-plan/MenuDepth01.jsx
@@ -1,150 +1,32 @@
'use client'
import { useMessage } from '@/hooks/useMessage'
-import { useEffect, useState } from 'react'
-import { MENU } from '@/common/common'
import { currentMenuState } from '@/store/canvasAtom'
-import { useSetRecoilState } from 'recoil'
-import { useSurfaceShapeBatch } from '@/hooks/surface/useSurfaceShapeBatch'
-import { usePopup } from '@/hooks/usePopup'
-import { v4 as uuidv4 } from 'uuid'
-import WallLineSetting from '@/components/floor-plan/modal/outerlinesetting/WallLineSetting'
-import RoofShapeSetting from '@/components/floor-plan/modal/roofShape/RoofShapeSetting'
-import RoofShapePassivitySetting from '@/components/floor-plan/modal/roofShape/RoofShapePassivitySetting'
-import AuxiliaryDrawing from '@/components/floor-plan/modal/auxiliary/AuxiliaryDrawing'
-import EavesGableEdit from '@/components/floor-plan/modal/eavesGable/EavesGableEdit'
-import MovementSetting from '@/components/floor-plan/modal/movement/MovementSetting'
-import WallLineOffsetSetting from '@/components/floor-plan/modal/wallLineOffset/WallLineOffsetSetting'
-import RoofAllocationSetting from '@/components/floor-plan/modal/roofAllocation/RoofAllocationSetting'
-import Slope from '@/components/floor-plan/modal/Slope'
-import ObjectSetting from '@/components/floor-plan/modal/object/ObjectSetting'
-import PlacementShapeDrawing from '@/components/floor-plan/modal/placementShape/PlacementShapeDrawing'
-import PlacementSurfaceSetting from '@/components/floor-plan/modal/placementSurface/PlacementSurfaceSetting'
-import BasicSetting from '@/components/floor-plan/modal/basic/BasicSetting'
-import CircuitTrestleSetting from '@/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting'
+import { useRecoilState, useRecoilValue } from 'recoil'
+import { menuTypeState, subMenusState } from '@/store/menuAtom'
+import useMenu from '@/hooks/common/useMenu'
+import { useEffect } from 'react'
-export default function MenuDepth01(props) {
- const { type } = props
+export default function MenuDepth01() {
+ const type = useRecoilValue(menuTypeState)
const { getMessage } = useMessage()
- const [activeMenu, setActiveMenu] = useState()
- const setCurrentMenu = useSetRecoilState(currentMenuState)
- const { deleteAllSurfacesAndObjects } = useSurfaceShapeBatch()
- const { addPopup } = usePopup()
- const [outlineId, setOutlineId] = useState(uuidv4())
- const onClickMenu = ({ id, menu, name }) => {
- setActiveMenu(menu)
+ const { handleMenu } = useMenu()
+ const [currentMenu, setCurrentMenu] = useRecoilState(currentMenuState)
+ const subMenus = useRecoilValue(subMenusState)
+
+ const onClickMenu = ({ id, menu }) => {
setCurrentMenu(menu)
- if (type === 'outline') {
- switch (id) {
- case 0:
- addPopup(outlineId, 1, )
- break
- case 1:
- addPopup(outlineId, 1, )
- break
- case 2:
- addPopup(outlineId, 1, )
- break
- case 3:
- addPopup(outlineId, 1, )
- break
- case 4:
- addPopup(outlineId, 1, )
- break
- case 5:
- addPopup(outlineId, 1, )
- break
- case 6:
- addPopup(outlineId, 1, )
- break
- case 7:
- addPopup(outlineId, 1, )
- break
- }
- }
-
- if (type === 'surface') {
- switch (id) {
- case 0:
- addPopup(outlineId, 1, )
- break
- case 1:
- addPopup(outlineId, 1, )
- break
- case 2:
- addPopup(outlineId, 1, )
- break
- case 3:
- addPopup(outlineId, 1, )
- break
- case 4:
- deleteAllSurfacesAndObjects()
- break
- }
- }
-
- if (type === 'module') {
- switch (id) {
- case 0:
- addPopup(outlineId, 1, )
- break
- case 1:
- addPopup(outlineId, 1, )
- break
- }
- }
}
useEffect(() => {
- setActiveMenu(null)
- }, [type])
-
- const menuInfo = {
- outline: [
- // 지붕덮개
- { 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.passivity.setting',
- menu: MENU.ROOF_COVERING.ROOF_SHAPE_PASSIVITY_SETTINGS,
- },
- { id: 3, name: 'plan.menu.roof.cover.auxiliary.line.drawing', menu: MENU.ROOF_COVERING.HELP_LINE_DRAWING },
- { id: 4, name: 'plan.menu.roof.cover.eaves.kerava.edit', menu: MENU.ROOF_COVERING.EAVES_KERAVA_EDIT },
- { id: 5, name: 'plan.menu.roof.cover.movement.shape.updown', menu: MENU.ROOF_COVERING.MOVEMENT_SHAPE_UPDOWN },
- { id: 6, name: 'plan.menu.roof.cover.outline.edit.offset', menu: MENU.ROOF_COVERING.OUTLINE_EDIT_OFFSET },
- { id: 7, name: 'plan.menu.roof.cover.roof.surface.alloc', menu: MENU.ROOF_COVERING.ROOF_SHAPE_ALLOC },
- ],
- surface: [
- // 배치면
- { id: 0, name: 'plan.menu.placement.surface.slope.setting', menu: MENU.BATCH_CANVAS.SLOPE_SETTING },
- { id: 1, name: 'plan.menu.placement.surface.drawing', menu: MENU.BATCH_CANVAS.BATCH_DRAWING },
- { id: 2, name: 'plan.menu.placement.surface.arrangement', menu: MENU.BATCH_CANVAS.SURFACE_SHAPE_BATCH },
- { id: 3, name: 'plan.menu.placement.surface.object', menu: MENU.BATCH_CANVAS.OBJECT_BATCH },
- { id: 4, name: 'plan.menu.placement.surface.all.remove', menu: MENU.BATCH_CANVAS.ALL_REMOVE },
- ],
- module: [
- // 모듈, 회로 구성
-
- { 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,
- },
- {
- id: 2,
- name: 'plan.menu.module.circuit.setting.plan.orientation',
- menu: MENU.MODULE_CIRCUIT_SETTING.PLAN_ORIENTATION,
- },
- ],
- }
+ handleMenu(type)
+ }, [currentMenu])
return (
- {menuInfo[type].map((menu) => {
+ {subMenus[type]?.map((menu) => {
return (
- -
+
-
onClickMenu(menu)}>{getMessage(menu.name)}
)
diff --git a/src/hooks/common/useMenu.js b/src/hooks/common/useMenu.js
new file mode 100644
index 00000000..75905a73
--- /dev/null
+++ b/src/hooks/common/useMenu.js
@@ -0,0 +1,95 @@
+import WallLineSetting from '@/components/floor-plan/modal/outerlinesetting/WallLineSetting'
+import RoofShapeSetting from '@/components/floor-plan/modal/roofShape/RoofShapeSetting'
+import RoofShapePassivitySetting from '@/components/floor-plan/modal/roofShape/RoofShapePassivitySetting'
+import AuxiliaryDrawing from '@/components/floor-plan/modal/auxiliary/AuxiliaryDrawing'
+import EavesGableEdit from '@/components/floor-plan/modal/eavesGable/EavesGableEdit'
+import MovementSetting from '@/components/floor-plan/modal/movement/MovementSetting'
+import WallLineOffsetSetting from '@/components/floor-plan/modal/wallLineOffset/WallLineOffsetSetting'
+import RoofAllocationSetting from '@/components/floor-plan/modal/roofAllocation/RoofAllocationSetting'
+import Slope from '@/components/floor-plan/modal/Slope'
+import PlacementShapeDrawing from '@/components/floor-plan/modal/placementShape/PlacementShapeDrawing'
+import PlacementSurfaceSetting from '@/components/floor-plan/modal/placementSurface/PlacementSurfaceSetting'
+import ObjectSetting from '@/components/floor-plan/modal/object/ObjectSetting'
+import BasicSetting from '@/components/floor-plan/modal/basic/BasicSetting'
+import CircuitTrestleSetting from '@/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting'
+import { usePopup } from '@/hooks/usePopup'
+import { useState } from 'react'
+import { v4 as uuidv4 } from 'uuid'
+import { useSurfaceShapeBatch } from '@/hooks/surface/useSurfaceShapeBatch'
+import { useRecoilValue } from 'recoil'
+import { currentMenuState } from '@/store/canvasAtom'
+import { MENU } from '@/common/common'
+
+export default function useMenu() {
+ const menus = []
+ const currentMenu = useRecoilValue(currentMenuState)
+ const [popupId, setPopupId] = useState(uuidv4())
+ const { addPopup } = usePopup()
+ const { deleteAllSurfacesAndObjects } = useSurfaceShapeBatch()
+ const handleMenu = (type) => {
+ if (type === 'outline') {
+ switch (currentMenu) {
+ case MENU.ROOF_COVERING.EXTERIOR_WALL_LINE:
+ addPopup(popupId, 1, )
+ break
+ case MENU.ROOF_COVERING.ROOF_SHAPE_SETTINGS:
+ addPopup(popupId, 1, )
+ break
+ case MENU.ROOF_COVERING.ROOF_SHAPE_PASSIVITY_SETTINGS:
+ addPopup(popupId, 1, )
+ break
+ case MENU.ROOF_COVERING.HELP_LINE_DRAWING:
+ addPopup(popupId, 1, )
+ break
+ case MENU.ROOF_COVERING.EAVES_KERAVA_EDIT:
+ addPopup(popupId, 1, )
+ break
+ case MENU.ROOF_COVERING.MOVEMENT_SHAPE_UPDOWN:
+ addPopup(popupId, 1, )
+ break
+ case MENU.ROOF_COVERING.OUTLINE_EDIT_OFFSET:
+ addPopup(popupId, 1, )
+ break
+ case MENU.ROOF_COVERING.ROOF_SHAPE_ALLOC:
+ addPopup(popupId, 1, )
+ break
+ }
+ }
+
+ if (type === 'surface') {
+ switch (currentMenu) {
+ case MENU.BATCH_CANVAS.SLOPE_SETTING:
+ addPopup(popupId, 1, )
+ break
+ case MENU.BATCH_CANVAS.BATCH_DRAWING:
+ addPopup(popupId, 1, )
+ break
+ case MENU.BATCH_CANVAS.SURFACE_SHAPE_BATCH:
+ addPopup(popupId, 1, )
+ break
+ case MENU.BATCH_CANVAS.OBJECT_BATCH:
+ addPopup(popupId, 1, )
+ break
+ case MENU.BATCH_CANVAS.ALL_REMOVE:
+ deleteAllSurfacesAndObjects()
+ break
+ }
+ }
+
+ if (type === 'module') {
+ switch (currentMenu) {
+ case MENU.MODULE_CIRCUIT_SETTING.BASIC_SETTING:
+ addPopup(popupId, 1, )
+ break
+ case MENU.MODULE_CIRCUIT_SETTING.CIRCUIT_TRESTLE_SETTING:
+ addPopup(popupId, 1, )
+ break
+ }
+ }
+ }
+
+ return {
+ menus,
+ handleMenu,
+ }
+}
diff --git a/src/store/menuAtom.js b/src/store/menuAtom.js
index b86ecbd0..834498f0 100644
--- a/src/store/menuAtom.js
+++ b/src/store/menuAtom.js
@@ -1,6 +1,74 @@
import { atom } from 'recoil'
+import { MENU } from '@/common/common'
export const menuNumberState = atom({
key: 'menuNumberState',
default: null,
})
+
+export const menuTypeState = atom({
+ key: 'menuTypeState',
+ default: null,
+})
+
+export const menusState = atom({
+ key: 'menusState',
+ default: [
+ { index: 0, name: 'plan.menu.plan.drawing', icon: 'con00', title: MENU.PLAN_DRAWING },
+ {
+ index: 1,
+ name: 'plan.menu.placement.surface.initial.setting',
+ icon: 'con01',
+ title: MENU.INITIAL_CANVAS_SETTING,
+ },
+ { index: 2, name: 'plan.menu.roof.cover', icon: 'con02', title: MENU.ROOF_COVERING.DEFAULT },
+ { index: 3, name: 'plan.menu.placement.surface', icon: 'con03', title: MENU.BATCH_CANVAS.DEFAULT },
+ { index: 4, name: 'plan.menu.module.circuit.setting', icon: 'con04', title: MENU.MODULE_CIRCUIT_SETTING.DEFAULT },
+ { index: 5, name: 'plan.menu.estimate', icon: 'con06', title: MENU.ESTIMATE.DEFAULT },
+ { index: 6, name: 'plan.menu.simulation', icon: 'con05', title: MENU.POWER_GENERATION_SIMULATION.DEFAULT },
+ ],
+})
+
+export const subMenusState = atom({
+ key: 'subMenusState',
+ default: {
+ outline: [
+ // 지붕덮개
+ { 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.passivity.setting',
+ menu: MENU.ROOF_COVERING.ROOF_SHAPE_PASSIVITY_SETTINGS,
+ },
+ { id: 3, name: 'plan.menu.roof.cover.auxiliary.line.drawing', menu: MENU.ROOF_COVERING.HELP_LINE_DRAWING },
+ { id: 4, name: 'plan.menu.roof.cover.eaves.kerava.edit', menu: MENU.ROOF_COVERING.EAVES_KERAVA_EDIT },
+ { id: 5, name: 'plan.menu.roof.cover.movement.shape.updown', menu: MENU.ROOF_COVERING.MOVEMENT_SHAPE_UPDOWN },
+ { id: 6, name: 'plan.menu.roof.cover.outline.edit.offset', menu: MENU.ROOF_COVERING.OUTLINE_EDIT_OFFSET },
+ { id: 7, name: 'plan.menu.roof.cover.roof.surface.alloc', menu: MENU.ROOF_COVERING.ROOF_SHAPE_ALLOC },
+ ],
+ surface: [
+ // 배치면
+ { id: 0, name: 'plan.menu.placement.surface.slope.setting', menu: MENU.BATCH_CANVAS.SLOPE_SETTING },
+ { id: 1, name: 'plan.menu.placement.surface.drawing', menu: MENU.BATCH_CANVAS.BATCH_DRAWING },
+ { id: 2, name: 'plan.menu.placement.surface.arrangement', menu: MENU.BATCH_CANVAS.SURFACE_SHAPE_BATCH },
+ { id: 3, name: 'plan.menu.placement.surface.object', menu: MENU.BATCH_CANVAS.OBJECT_BATCH },
+ { id: 4, name: 'plan.menu.placement.surface.all.remove', menu: MENU.BATCH_CANVAS.ALL_REMOVE },
+ ],
+ module: [
+ // 모듈, 회로 구성
+
+ { 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,
+ },
+ {
+ id: 2,
+ name: 'plan.menu.module.circuit.setting.plan.orientation',
+ menu: MENU.MODULE_CIRCUIT_SETTING.PLAN_ORIENTATION,
+ },
+ ],
+ },
+})