in src/model/transaction/moveBlockInContentState.js [125:171]
children: List(newChildrenArray),
});
});
// update block
transformBlock(originalBlockKey, blocks, block =>
block.merge({
nextSibling: newNextSiblingKey,
prevSibling: newPrevSiblingKey,
parent: newParentKey,
}),
);
});
};
const moveBlockInContentState = (
contentState: ContentState,
blockToBeMoved: BlockNodeRecord,
targetBlock: BlockNodeRecord,
insertionMode: DraftInsertionType,
): ContentState => {
invariant(insertionMode !== 'replace', 'Replacing blocks is not supported.');
const targetKey = targetBlock.getKey();
const blockKey = blockToBeMoved.getKey();
invariant(blockKey !== targetKey, 'Block cannot be moved next to itself.');
const blockMap = contentState.getBlockMap();
const isExperimentalTreeBlock = blockToBeMoved instanceof ContentBlockNode;
let blocksToBeMoved: Array<BlockNodeRecord> = [blockToBeMoved];
let blockMapWithoutBlocksToBeMoved = blockMap.delete(blockKey);
if (isExperimentalTreeBlock) {
blocksToBeMoved = [];
blockMapWithoutBlocksToBeMoved = blockMap.withMutations(blocks => {
const nextSiblingKey = blockToBeMoved.getNextSiblingKey();
const nextDelimiterBlockKey = getNextDelimiterBlockKey(
blockToBeMoved,
blocks,
);
blocks
.toSeq()
.skipUntil(block => block.getKey() === blockKey)
.takeWhile(block => {