import {
FC,
HTMLProps,
PropsWithChildren,
useEffect,
useRef,
useState,
} from 'react'
import Icon from '../../../../shared/components/icon'
import { Overlay, Popover } from 'react-bootstrap'
import { useTranslation } from 'react-i18next'
import { EditorView } from '@codemirror/view'
import { PastedContent } from '../../extensions/visual/pasted-content'
import useEventListener from '../../../../shared/hooks/use-event-listener'
import SplitTestBadge from '../../../../shared/components/split-test-badge'
import { useSplitTestContext } from '../../../../shared/context/split-test-context'
const isMac = /Mac/.test(window.navigator?.platform)
export const PastedContentMenu: FC<{
insertPastedContent: (
view: EditorView,
pastedContent: PastedContent,
formatted: boolean
) => void
pastedContent: PastedContent
view: EditorView
formatted: boolean
}> = ({ view, insertPastedContent, pastedContent, formatted }) => {
const [menuOpen, setMenuOpen] = useState(false)
const toggleButtonRef = useRef(null)
const { t } = useTranslation()
const { splitTestInfo } = useSplitTestContext()
const feedbackURL = splitTestInfo['paste-html']?.badgeInfo?.url
// record whether the Shift key is currently down, for use in the `paste` event handler
const shiftRef = useRef(false)
useEventListener('keydown', (event: KeyboardEvent) => {
shiftRef.current = event.shiftKey
})
useEffect(() => {
if (menuOpen) {
const abortController = new AbortController()
view.dom.addEventListener(
'paste',
event => {
event.preventDefault()
event.stopPropagation()
insertPastedContent(view, pastedContent, !shiftRef.current)
setMenuOpen(false)
},
{ signal: abortController.signal, capture: true }
)
return () => {
abortController.abort()
}
}
}, [view, menuOpen, pastedContent, insertPastedContent])
// TODO: keyboard navigation
return (
<>
{menuOpen && (
setMenuOpen(false)}
animation={false}
container={view.scrollDOM}
containerPadding={0}
placement="bottom"
rootClose
target={toggleButtonRef.current ?? undefined}
>
)}
>
)
}
const MenuItem = ({
children,
...buttonProps
}: PropsWithChildren>) => (
)