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 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 { useRecoilState, useRecoilValue } from 'recoil' import { canvasState, currentMenuState } from '@/store/canvasAtom' import { MENU } from '@/common/common' import { useTrestle } from '@/hooks/module/useTrestle' import { useOrientation } from '@/hooks/module/useOrientation' import { corridorDimensionSelector } from '@/store/settingAtom' /** * 메뉴 처리 훅 * @returns */ export default function useMenu() { const menus = [] const currentMenu = useRecoilValue(currentMenuState) const canvas = useRecoilValue(canvasState) const [popupId, setPopupId] = useState(uuidv4()) const { addPopup, closeAll } = usePopup() const { deleteAllSurfacesAndObjects } = useSurfaceShapeBatch({}) const { clear: trestleClear, setAllModuleSurfaceIsComplete } = useTrestle() const { nextStep } = useOrientation() const [corridorDimension, setCorridorDimension] = useRecoilState(corridorDimensionSelector) const handleMenu = (type) => { closeAll() if (type === 'outline') { // 지붕 덮개 메뉴의 경우는 복도치수로 적용한다. setCorridorDimension(0) 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 case MENU.ROOF_COVERING.ALL_REMOVE: deleteAllSurfacesAndObjects() break } } if (type === 'surface') { // 배치면 메뉴의 경우는 실치수로 적용한다. setCorridorDimension(1) 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') { // 모듈,회로 구성 메뉴의 경우는 실치수로 적용한다. setCorridorDimension(1) switch (currentMenu) { case MENU.MODULE_CIRCUIT_SETTING.BASIC_SETTING: trestleClear() setAllModuleSurfaceIsComplete(false) addPopup(popupId, 1, ) break case MENU.MODULE_CIRCUIT_SETTING.CIRCUIT_TRESTLE_SETTING: const hasModules = canvas.getObjects().some((obj) => obj.name === 'module') if (hasModules) { nextStep() } addPopup(popupId, 1, ) break } } } return { menus, handleMenu, } }