import { FC, Fragment, memo, useEffect, useRef } from 'react' import ReactDOM from 'react-dom' import { getTooltip } from '@codemirror/view' import { Dropdown, DropdownMenu, DropdownItem, DropdownDivider, } from '@/shared/components/dropdown/dropdown-menu' import { useCodeMirrorStateContext, useCodeMirrorViewContext, } from './codemirror-context' import { contextMenuStateField } from '../extensions/context-menu' import { useFeatureFlag } from '@/shared/context/split-test-context' import { useContextMenuItems } from '../hooks/use-context-menu-items' import DropdownListItem from '@/shared/components/dropdown/dropdown-list-item' import { EditorContextMenuFeedback } from './editor-context-menu-feedback' import { sendContextMenuEvent } from '../utils/context-menu-analytics' const EditorContextMenu: FC = () => { const state = useCodeMirrorStateContext() const view = useCodeMirrorViewContext() const editorContextMenuEnabled = useFeatureFlag('editor-context-menu') const menuState = state.field(contextMenuStateField, false) if (!editorContextMenuEnabled || !menuState?.tooltip) { return null } const tooltipView = getTooltip(view, menuState.tooltip) if (!tooltipView) { return null } return ReactDOM.createPortal(, tooltipView.dom) } const EditorContextMenuContent: FC = memo(function EditorContextMenuContent() { const { menuItems, closeMenu, onToggle } = useContextMenuItems() const menuRef = useRef(null) useEffect(() => { sendContextMenuEvent('menu-expand', { location: 'editor-context-menu', }) menuRef.current?.focus() }, []) return (
event.preventDefault()}> { switch (event.code) { case 'Escape': case 'Tab': event.preventDefault() closeMenu() break } }} > {menuItems.map((menuItem, index) => ( {menuItem.separatorAbove && } menuItem.handler()} disabled={menuItem.disabled} trailingIcon={ menuItem.shortcut ? ( {menuItem.shortcut} ) : undefined } > {menuItem.label} ))}
) }) export default EditorContextMenu