import { useModelingContext } from 'hooks/useModelingContext'
import { AxisNames, VIEW_NAMES_SEMANTIC } from 'lib/constants'
import { sceneInfra } from 'lib/singletons'
import { reportRejection } from 'lib/trap'
import { useSettings } from 'machines/appMachine'
import { useMemo } from 'react'
import {
ContextMenu,
ContextMenuDivider,
ContextMenuItem,
ContextMenuItemRefresh,
ContextMenuProps,
} from './ContextMenu'
export function useViewControlMenuItems() {
const { state: modelingState, send: modelingSend } = useModelingContext()
const settings = useSettings()
const shouldLockView =
modelingState.matches('Sketch') &&
!settings.app.allowOrbitInSketchMode.current
const menuItems = useMemo(
() => [
...Object.entries(VIEW_NAMES_SEMANTIC).map(([axisName, axisSemantic]) => (
{
sceneInfra.camControls
.updateCameraToAxis(axisName as AxisNames)
.catch(reportRejection)
}}
disabled={shouldLockView}
>
{axisSemantic} view
)),
,
{
sceneInfra.camControls.resetCameraPosition().catch(reportRejection)
}}
disabled={shouldLockView}
>
Reset view
,
{
modelingSend({ type: 'Center camera on selection' })
}}
disabled={shouldLockView}
>
Center view on selection
,
,
,
],
[VIEW_NAMES_SEMANTIC, shouldLockView]
)
return menuItems
}
export function ViewControlContextMenu({
menuTargetElement: wrapperRef,
...props
}: ContextMenuProps) {
const menuItems = useViewControlMenuItems()
return (
)
}