122 lines
5.2 KiB
JavaScript
122 lines
5.2 KiB
JavaScript
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, <WallLineSetting id={popupId} />)
|
|
break
|
|
case MENU.ROOF_COVERING.ROOF_SHAPE_SETTINGS:
|
|
addPopup(popupId, 1, <RoofShapeSetting id={popupId} />)
|
|
break
|
|
case MENU.ROOF_COVERING.ROOF_SHAPE_PASSIVITY_SETTINGS:
|
|
addPopup(popupId, 1, <RoofShapePassivitySetting id={popupId} />)
|
|
break
|
|
case MENU.ROOF_COVERING.HELP_LINE_DRAWING:
|
|
addPopup(popupId, 1, <AuxiliaryDrawing id={popupId} />)
|
|
break
|
|
case MENU.ROOF_COVERING.EAVES_KERAVA_EDIT:
|
|
addPopup(popupId, 1, <EavesGableEdit id={popupId} />)
|
|
break
|
|
case MENU.ROOF_COVERING.MOVEMENT_SHAPE_UPDOWN:
|
|
addPopup(popupId, 1, <MovementSetting id={popupId} />)
|
|
break
|
|
case MENU.ROOF_COVERING.OUTLINE_EDIT_OFFSET:
|
|
addPopup(popupId, 1, <WallLineOffsetSetting id={popupId} />)
|
|
break
|
|
case MENU.ROOF_COVERING.ROOF_SHAPE_ALLOC:
|
|
addPopup(popupId, 1, <RoofAllocationSetting id={popupId} />)
|
|
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, <Slope id={popupId} />)
|
|
// break
|
|
case MENU.BATCH_CANVAS.BATCH_DRAWING:
|
|
addPopup(popupId, 1, <PlacementShapeDrawing id={popupId} />)
|
|
break
|
|
case MENU.BATCH_CANVAS.SURFACE_SHAPE_BATCH:
|
|
addPopup(popupId, 1, <PlacementSurfaceSetting id={popupId} />)
|
|
break
|
|
case MENU.BATCH_CANVAS.OBJECT_BATCH:
|
|
addPopup(popupId, 1, <ObjectSetting id={popupId} />)
|
|
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, <BasicSetting id={popupId} />)
|
|
break
|
|
case MENU.MODULE_CIRCUIT_SETTING.CIRCUIT_TRESTLE_SETTING:
|
|
const hasModules = canvas.getObjects().some((obj) => obj.name === 'module')
|
|
if (hasModules) {
|
|
nextStep()
|
|
}
|
|
addPopup(popupId, 1, <CircuitTrestleSetting id={popupId} />)
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
return {
|
|
menus,
|
|
handleMenu,
|
|
}
|
|
}
|