Spaces:
Running
Running
import type { FC } from 'react' | |
import { useEffect, useRef } from 'react' | |
import { | |
BLUR_COMMAND, | |
COMMAND_PRIORITY_EDITOR, | |
FOCUS_COMMAND, | |
KEY_ESCAPE_COMMAND, | |
} from 'lexical' | |
import { mergeRegister } from '@lexical/utils' | |
import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext' | |
import { CLEAR_HIDE_MENU_TIMEOUT } from './workflow-variable-block' | |
type OnBlurBlockProps = { | |
onBlur?: () => void | |
onFocus?: () => void | |
} | |
const OnBlurBlock: FC<OnBlurBlockProps> = ({ | |
onBlur, | |
onFocus, | |
}) => { | |
const [editor] = useLexicalComposerContext() | |
const ref = useRef<any>(null) | |
useEffect(() => { | |
return mergeRegister( | |
editor.registerCommand( | |
CLEAR_HIDE_MENU_TIMEOUT, | |
() => { | |
if (ref.current) { | |
clearTimeout(ref.current) | |
ref.current = null | |
} | |
return true | |
}, | |
COMMAND_PRIORITY_EDITOR, | |
), | |
editor.registerCommand( | |
BLUR_COMMAND, | |
() => { | |
ref.current = setTimeout(() => { | |
editor.dispatchCommand(KEY_ESCAPE_COMMAND, new KeyboardEvent('keydown', { key: 'Escape' })) | |
}, 200) | |
if (onBlur) | |
onBlur() | |
return true | |
}, | |
COMMAND_PRIORITY_EDITOR, | |
), | |
editor.registerCommand( | |
FOCUS_COMMAND, | |
() => { | |
if (onFocus) | |
onFocus() | |
return true | |
}, | |
COMMAND_PRIORITY_EDITOR, | |
), | |
) | |
}, [editor, onBlur, onFocus]) | |
return null | |
} | |
export default OnBlurBlock | |