12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- import {
- useCallback,
- useEffect,
- } from 'react'
- import type { TextNode } from 'lexical'
- import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'
- import { useLexicalTextEntity } from '../../hooks'
- import {
- $createVariableValueBlockNode,
- VariableValueBlockNode,
- } from './node'
- import { getHashtagRegexString } from './utils'
- const REGEX = new RegExp(getHashtagRegexString(), 'i')
- const VariableValueBlock = () => {
- const [editor] = useLexicalComposerContext()
- useEffect(() => {
- if (!editor.hasNodes([VariableValueBlockNode]))
- throw new Error('VariableValueBlockPlugin: VariableValueNode not registered on editor')
- }, [editor])
- const createVariableValueBlockNode = useCallback((textNode: TextNode): VariableValueBlockNode => {
- return $createVariableValueBlockNode(textNode.getTextContent())
- }, [])
- const getVariableValueMatch = useCallback((text: string) => {
- const matchArr = REGEX.exec(text)
- if (matchArr === null)
- return null
- const hashtagLength = matchArr[0].length
- const startOffset = matchArr.index
- const endOffset = startOffset + hashtagLength
- return {
- end: endOffset,
- start: startOffset,
- }
- }, [])
- useLexicalTextEntity<VariableValueBlockNode>(
- getVariableValueMatch,
- VariableValueBlockNode,
- createVariableValueBlockNode,
- )
- return null
- }
- export default VariableValueBlock
|