index.tsx 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import { useEffect } from 'react'
  2. import {
  3. $insertNodes,
  4. COMMAND_PRIORITY_EDITOR,
  5. createCommand,
  6. } from 'lexical'
  7. import { mergeRegister } from '@lexical/utils'
  8. import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'
  9. import { CustomTextNode } from '../custom-text/node'
  10. export const INSERT_VARIABLE_BLOCK_COMMAND = createCommand('INSERT_VARIABLE_BLOCK_COMMAND')
  11. export const INSERT_VARIABLE_VALUE_BLOCK_COMMAND = createCommand('INSERT_VARIABLE_VALUE_BLOCK_COMMAND')
  12. const VariableBlock = () => {
  13. const [editor] = useLexicalComposerContext()
  14. useEffect(() => {
  15. return mergeRegister(
  16. editor.registerCommand(
  17. INSERT_VARIABLE_BLOCK_COMMAND,
  18. () => {
  19. const textNode = new CustomTextNode('{')
  20. $insertNodes([textNode])
  21. return true
  22. },
  23. COMMAND_PRIORITY_EDITOR,
  24. ),
  25. editor.registerCommand(
  26. INSERT_VARIABLE_VALUE_BLOCK_COMMAND,
  27. (value: string) => {
  28. const textNode = new CustomTextNode(value)
  29. $insertNodes([textNode])
  30. return true
  31. },
  32. COMMAND_PRIORITY_EDITOR,
  33. ),
  34. )
  35. }, [editor])
  36. return null
  37. }
  38. export default VariableBlock