Spaces:
Running
Running
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' | |