UNPKG

draft-js-modifiers

Version:
45 lines (43 loc) 1.82 kB
import { EditorState, ContentBlock, CharacterMetadata, genKey } from 'draft-js'; import { Map, List, Repeat } from 'immutable'; import getCurrentBlock from './utils/getCurrentBlock'; var insertNewBlock = function insertNewBlock(editorState) { var blockType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'unstyled'; var text = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ''; var data = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; var content = editorState.getCurrentContent(); var selection = editorState.getSelection(); var currentBlock = getCurrentBlock(editorState); var emptyBlockKey = genKey(); var emptyBlock = new ContentBlock({ key: emptyBlockKey, type: blockType, text: text, characterList: List(Repeat(CharacterMetadata.create(), text.length)), data: Map().merge(data) }); var blockMap = content.getBlockMap(); var blocksBefore = blockMap.toSeq().takeUntil(function (value) { return value === currentBlock; }); var blocksAfter = blockMap.toSeq().skipUntil(function (value) { return value === currentBlock; }).rest(); var augmentedBlocks = [[currentBlock.getKey(), currentBlock], [emptyBlockKey, emptyBlock]]; var newBlocks = blocksBefore.concat(augmentedBlocks, blocksAfter).toOrderedMap(); var focusKey = emptyBlockKey; var newContent = content.merge({ blockMap: newBlocks, selectionBefore: selection, selectionAfter: selection.merge({ anchorKey: focusKey, anchorOffset: 0, focusKey: focusKey, focusOffset: 0, isBackward: false }) }); var newState = EditorState.push(editorState, newContent, 'split-block'); return EditorState.forceSelection(newState, newContent.getSelectionAfter()); }; export default insertNewBlock;