import React, {useCallback} from 'react'
import {Transforms, Range, Editor} from 'slate'
import {Editable, ReactEditor} from '5e-slate-react'
import {useEditorContext} from '../hooks/useEditContext'
import Element from '../element'
import Leaf from '../leaf'
import {insertMention} from '../global/tool'
interface MentionsProps {
index: number
search: string
target: any
chars: any[]
classNames?: string
setIndex(i: number): void
setTarget(t: any): void
}
const EVENT_PREVENT_DEFAULT = ['ArrowDown', 'ArrowUp', 'Tab', 'Enter', 'Escape']
export const EditorWrapper = ({
readonly,
mentionProps,
}: {
readonly: boolean
mentionProps: MentionsProps
}) => {
const editorContext = useEditorContext()
const {editor} = editorContext
const renderElement = useCallback(elementProps => , [])
const renderLeaf = useCallback(leafProps => , [])
const {index, search, target, setIndex, setTarget, chars, classNames} = mentionProps
const eventKeyBind = (event: React.KeyboardEvent) => {
// console.error(search, '----')
if (event.key === '@') {
sessionStorage.setItem('isFirstMention', 'ok')
} else {
sessionStorage.setItem('isFirstMention', '')
}
if (target) {
if (EVENT_PREVENT_DEFAULT.includes(event.key)) {
event.preventDefault()
}
if (event.key === 'ArrowDown') {
const prevIndex = index >= chars.length - 1 ? 0 : index + 1
setIndex(prevIndex)
}
if (event.key === 'ArrowUp') {
const nextIndex = index <= 0 ? chars.length - 1 : index - 1
setIndex(nextIndex)
}
if (event.key === 'Tab' || event.key === 'Enter') {
if (chars.length !== 0 && chars[index]) {
// 选中画线的模块
Transforms.select(editor, target)
insertMention(editor, chars[index])
Transforms.insertText(editor, ' ')
ReactEditor.focus(editor)
}
setTarget(null)
}
if (event.key === 'Escape') {
setTarget(null)
}
}
}
const onKeyDown = useCallback(eventKeyBind, [index, search, target, editor.selection, chars])
return (
)
}
export default EditorWrapper