* Make the Reset View button do the same view_isometric behavior as load Just copying some logic from the EngineStream code to make that button behave the same way: old initial camera position while in Playwright, isometric view for normal users. * Move duplicate code into shared `resetCameraPosition` function * Fix lints
78 lines
2.2 KiB
TypeScript
78 lines
2.2 KiB
TypeScript
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]) => (
|
|
<ContextMenuItem
|
|
key={axisName}
|
|
onClick={() => {
|
|
sceneInfra.camControls
|
|
.updateCameraToAxis(axisName as AxisNames)
|
|
.catch(reportRejection)
|
|
}}
|
|
disabled={shouldLockView}
|
|
>
|
|
{axisSemantic} view
|
|
</ContextMenuItem>
|
|
)),
|
|
<ContextMenuDivider />,
|
|
<ContextMenuItem
|
|
onClick={() => {
|
|
resetCameraPosition().catch(reportRejection)
|
|
}}
|
|
disabled={shouldLockView}
|
|
>
|
|
Reset view
|
|
</ContextMenuItem>,
|
|
<ContextMenuItem
|
|
onClick={() => {
|
|
modelingSend({ type: 'Center camera on selection' })
|
|
}}
|
|
disabled={shouldLockView}
|
|
>
|
|
Center view on selection
|
|
</ContextMenuItem>,
|
|
<ContextMenuDivider />,
|
|
<ContextMenuItemRefresh />,
|
|
],
|
|
[VIEW_NAMES_SEMANTIC, shouldLockView]
|
|
)
|
|
return menuItems
|
|
}
|
|
|
|
export function ViewControlContextMenu({
|
|
menuTargetElement: wrapperRef,
|
|
...props
|
|
}: ContextMenuProps) {
|
|
const menuItems = useViewControlMenuItems()
|
|
return (
|
|
<ContextMenu
|
|
data-testid="view-controls-menu"
|
|
menuTargetElement={wrapperRef}
|
|
items={menuItems}
|
|
{...props}
|
|
/>
|
|
)
|
|
}
|