| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | import {  memo,  useEffect,} from 'react'import {  $insertNodes,  COMMAND_PRIORITY_EDITOR,  createCommand,} from 'lexical'import { mergeRegister } from '@lexical/utils'import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'import type { ContextBlockType } from '../../types'import {  $createContextBlockNode,  ContextBlockNode,} from './node'export const INSERT_CONTEXT_BLOCK_COMMAND = createCommand('INSERT_CONTEXT_BLOCK_COMMAND')export const DELETE_CONTEXT_BLOCK_COMMAND = createCommand('DELETE_CONTEXT_BLOCK_COMMAND')export type Dataset = {  id: string  name: string  type: string}const ContextBlock = memo(({  datasets = [],  onAddContext = () => {},  onInsert,  onDelete,  canNotAddContext,}: ContextBlockType) => {  const [editor] = useLexicalComposerContext()  useEffect(() => {    if (!editor.hasNodes([ContextBlockNode]))      throw new Error('ContextBlockPlugin: ContextBlock not registered on editor')    return mergeRegister(      editor.registerCommand(        INSERT_CONTEXT_BLOCK_COMMAND,        () => {          const contextBlockNode = $createContextBlockNode(datasets, onAddContext, canNotAddContext)          $insertNodes([contextBlockNode])          if (onInsert)            onInsert()          return true        },        COMMAND_PRIORITY_EDITOR,      ),      editor.registerCommand(        DELETE_CONTEXT_BLOCK_COMMAND,        () => {          if (onDelete)            onDelete()          return true        },        COMMAND_PRIORITY_EDITOR,      ),    )  }, [editor, datasets, onAddContext, onInsert, onDelete, canNotAddContext])  return null})ContextBlock.displayName = 'ContextBlock'export { ContextBlock }export { ContextBlockNode } from './node'export { default as ContextBlockReplacementBlock } from './context-block-replacement-block'
 |