in src/model/transaction/applyEntityToContentState.js [20:47]
function applyEntityToContentState(
contentState: ContentState,
selectionState: SelectionState,
entityKey: ?string,
): ContentState {
const blockMap = contentState.getBlockMap();
const startKey = selectionState.getStartKey();
const startOffset = selectionState.getStartOffset();
const endKey = selectionState.getEndKey();
const endOffset = selectionState.getEndOffset();
const newBlocks = blockMap
.skipUntil((_, k) => k === startKey)
.takeUntil((_, k) => k === endKey)
.toOrderedMap()
.merge(Immutable.OrderedMap([[endKey, blockMap.get(endKey)]]))
.map((block, blockKey) => {
const sliceStart = blockKey === startKey ? startOffset : 0;
const sliceEnd = blockKey === endKey ? endOffset : block.getLength();
return applyEntityToContentBlock(block, sliceStart, sliceEnd, entityKey);
});
return contentState.merge({
blockMap: blockMap.merge(newBlocks),
selectionBefore: selectionState,
selectionAfter: selectionState,
});
}