feat: implement delete multiple text node and merge the text.

This commit is contained in:
Lucas.Xu 2022-07-31 16:14:12 +08:00
parent 89a0a5599e
commit b577489c2f
2 changed files with 17 additions and 18 deletions

View File

@ -48,6 +48,10 @@ class TransactionBuilder {
add(DeleteOperation(path: node.path, removedValue: node));
}
deleteNodes(List<Node> nodes) {
nodes.forEach(deleteNode);
}
textEdit(TextNode node, Delta Function() f) {
beforeSelection = state.cursorSelection;
final path = node.path;

View File

@ -57,24 +57,19 @@ FlowyKeyEventHandler deleteTextHandler = (editorState, event) {
);
}
} else {
for (var i = 0; i < textNodes.length; i++) {
final textNode = textNodes[i];
if (i == 0) {
transactionBuilder.deleteText(
textNode,
selection.start.offset,
textNode.toRawString().length - selection.start.offset,
);
} else if (i == textNodes.length - 1) {
transactionBuilder.deleteText(
textNode,
0,
selection.end.offset,
);
} else {
transactionBuilder.deleteNode(textNode);
}
}
final first = textNodes.first;
var content = textNodes.last.toRawString();
content = content.substring(selection.end.offset, content.length);
// Merge the fist and the last text node content,
// and delete the all nodes expect for the first.
transactionBuilder
..deleteNodes(textNodes.sublist(1))
..replaceText(
first,
selection.start.offset,
first.toRawString().length - selection.start.offset,
content,
);
}
transactionBuilder.commit();