|
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 |
|
|