UNPKG

@portabletext/editor

Version:

Portable Text Editor made in React

47 lines (39 loc) 1.17 kB
import {applyOperationToPortableText} from '../../internal-utils/apply-operation-to-portable-text' import {buildIndexMaps} from '../../internal-utils/build-index-maps' import type {PortableTextSlateEditor} from '../../types/editor' import type {EditorContext} from '../editor-snapshot' export function pluginUpdateValue( context: Pick<EditorContext, 'keyGenerator' | 'schema'>, editor: PortableTextSlateEditor, ) { const {apply} = editor editor.apply = (operation) => { if (operation.type === 'set_selection') { apply(operation) return } editor.value = applyOperationToPortableText( context, editor.value, operation, ) if (operation.type === 'insert_text' || operation.type === 'remove_text') { // Inserting and removing text has no effect on index maps so there is // no need to rebuild those. apply(operation) return } buildIndexMaps( { schema: context.schema, value: editor.value, }, { blockIndexMap: editor.blockIndexMap, listIndexMap: editor.listIndexMap, }, ) apply(operation) } return editor }