Spaces:
Running
Running
import { $insertNodes } from 'lexical' | |
import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext' | |
import { textToEditorState } from '../utils' | |
import { CustomTextNode } from './custom-text/node' | |
import { CLEAR_HIDE_MENU_TIMEOUT } from './workflow-variable-block' | |
import { useEventEmitterContextContext } from '@/context/event-emitter' | |
export const PROMPT_EDITOR_UPDATE_VALUE_BY_EVENT_EMITTER = 'PROMPT_EDITOR_UPDATE_VALUE_BY_EVENT_EMITTER' | |
export const PROMPT_EDITOR_INSERT_QUICKLY = 'PROMPT_EDITOR_INSERT_QUICKLY' | |
type UpdateBlockProps = { | |
instanceId?: string | |
} | |
const UpdateBlock = ({ | |
instanceId, | |
}: UpdateBlockProps) => { | |
const { eventEmitter } = useEventEmitterContextContext() | |
const [editor] = useLexicalComposerContext() | |
eventEmitter?.useSubscription((v: any) => { | |
if (v.type === PROMPT_EDITOR_UPDATE_VALUE_BY_EVENT_EMITTER && v.instanceId === instanceId) { | |
const editorState = editor.parseEditorState(textToEditorState(v.payload)) | |
editor.setEditorState(editorState) | |
} | |
}) | |
eventEmitter?.useSubscription((v: any) => { | |
if (v.type === PROMPT_EDITOR_INSERT_QUICKLY && v.instanceId === instanceId) { | |
editor.focus() | |
editor.update(() => { | |
const textNode = new CustomTextNode('/') | |
$insertNodes([textNode]) | |
editor.dispatchCommand(CLEAR_HIDE_MENU_TIMEOUT, undefined) | |
}) | |
} | |
}) | |
return null | |
} | |
export default UpdateBlock | |