Skip to content

Commit

Permalink
open menu with right click on title
Browse files Browse the repository at this point in the history
  • Loading branch information
ruggi committed Oct 21, 2024
1 parent fd3e0ad commit fe86b35
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 7 deletions.
39 changes: 33 additions & 6 deletions editor/src/components/inspector/flex-section.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import { jsx } from '@emotion/react'
import React from 'react'
import { createSelector } from 'reselect'
import { unless, when } from '../../utils/react-conditionals'
import { when } from '../../utils/react-conditionals'
import { Substores, useEditorState, useRefEditorState } from '../editor/store/store-hook'
import { AddRemoveLayoutSystemControl } from './add-remove-layout-system-control'
import { FlexDirectionToggle } from './flex-direction-control'
Expand Down Expand Up @@ -554,9 +554,15 @@ function AxisDimensionControl({
opener: (isOpen: boolean) => React.ReactElement
}) {
const testId = `grid-dimension-${axis}-${index}`
const [isOpen, setIsOpen] = React.useState(false)
const onOpenChange = React.useCallback((isDropdownOpen: boolean) => {
setIsOpen(isDropdownOpen)
const [isDotsMenuOpen, setDotsMenuOpen] = React.useState(false)
const [isTitleMenuOpen, setTitleMenuOpen] = React.useState(false)

const onOpenChangeDotsMenu = React.useCallback((isDropdownOpen: boolean) => {
setDotsMenuOpen(isDropdownOpen)
}, [])

const onOpenChangeTitleMenu = React.useCallback(() => {
setTitleMenuOpen(false)
}, [])

const isDynamic = React.useMemo(() => {
Expand Down Expand Up @@ -584,6 +590,14 @@ function AxisDimensionControl({
setIsHovered(false)
}, [])

const onContextMenuTitle = React.useCallback((e: React.MouseEvent) => {
e.preventDefault()
e.stopPropagation()
setTitleMenuOpen(true)
}, [])

const invisibleOpener = React.useCallback(() => null, [])

return (
<div
key={`col-${value}-${index}`}
Expand Down Expand Up @@ -611,8 +625,16 @@ function AxisDimensionControl({
whiteSpace: 'nowrap',
}}
title={isDynamic ? dynamicIndexTitle : undefined}
onContextMenu={onContextMenuTitle}
>
{title}
<DropdownMenu
align='start'
items={items}
opener={invisibleOpener}
onOpenChange={onOpenChangeTitleMenu}
isOpen={isTitleMenuOpen}
/>
</Subdued>
<GridExpressionInput
testId={testId}
Expand All @@ -625,9 +647,14 @@ function AxisDimensionControl({
defaultValue={gridCSSKeyword(cssKeyword('auto'), null)}
/>
{when(
(isHovered && !gridExpressionInputFocused.focused) || isOpen,
(isHovered && !gridExpressionInputFocused.focused) || isDotsMenuOpen,
<SquareButton>
<DropdownMenu align='end' items={items} opener={opener} onOpenChange={onOpenChange} />
<DropdownMenu
align='end'
items={items}
opener={opener}
onOpenChange={onOpenChangeDotsMenu}
/>
</SquareButton>,
)}
</div>
Expand Down
15 changes: 14 additions & 1 deletion editor/src/uuiui/radix-components.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ export interface DropdownMenuProps {
alignOffset?: number
onOpenChange?: (open: boolean) => void
style?: CSSProperties
isOpen?: boolean
}

export const ItemContainerTestId = (id: string) => `item-container-${id}`
Expand All @@ -103,7 +104,7 @@ export const DropdownMenu = React.memo<DropdownMenuProps>((props) => {
}, [])
const onEscapeKeyDown = React.useCallback((e: KeyboardEvent) => e.stopPropagation(), [])

const [open, setOpen] = React.useState(false)
const [open, setOpen] = useIsDropdownMenuOpen(props.isOpen ?? null)

const shouldShowCheckboxes = props.items.some(
(i) => !isSeparatorDropdownMenuItem(i) && i.checked != null,
Expand Down Expand Up @@ -408,3 +409,15 @@ export const RadixSelect = React.memo(
},
)
RadixSelect.displayName = 'RadixSelect'

function useIsDropdownMenuOpen(isOpenFromProps: boolean | null) {
const state = React.useState(isOpenFromProps || false)
const [, setOpen] = state

// If the `isOpen` value coming from props changes, update the state.
React.useEffect(() => {
setOpen(isOpenFromProps || false)
}, [setOpen, isOpenFromProps])

return state
}

0 comments on commit fe86b35

Please sign in to comment.