import { useMemo } from 'react' import type { ContextMenuProps } from '@src/components/ContextMenu' import { ContextMenu, ContextMenuDivider, ContextMenuItem, ContextMenuItemRefresh, } from '@src/components/ContextMenu' import { useModelingContext } from '@src/hooks/useModelingContext' import type { AxisNames } from '@src/lib/constants' import { VIEW_NAMES_SEMANTIC } from '@src/lib/constants' import { sceneInfra } from '@src/lib/singletons' import { reportRejection } from '@src/lib/trap' import { useSettings } from '@src/lib/singletons' import { resetCameraPosition } from '@src/lib/resetCameraPosition' 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 )), , { 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 ( ) }