AppFlowy-IO / AppFlowy-IO/appflowy-editor

[Bug] deleteNodes and insertNodes in the same transactions leads to incorrect item order

未关闭
#1,122 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
Dart
星标
684
派生
329
PR 合并指标
30 天内没有已合并 PR

描述

### Bug Description

Clearing a document with `deleteNode` and then adding replacing the content with `insertNodes` messes up the order of the nodes inserted if done in the same transaction.

### How to Reproduce

I added two tests in `transaction_test.dart`, which show the error. The first works as expected, the second fails because items are added in the wrong order:

```dart
test('insertNodes', () async {
final n1 = Node(type: 'paragraph-1');
final n2 = Node(type: 'paragraph-2');
final n3 = Node(type: 'paragraph-3');

final editorState = EditorState(document: Document.blank());
expect(editorState.document.root.children.length, 0);

final transaction = editorState.transaction;
transaction.insertNodes([0], [n1, n2, n3]);
await editorState.apply(transaction);

expect(editorState.document.root.children.length, 3);
expect(editorState.document.root.children[0].type, 'paragraph-1');
expect(editorState.document.root.children[1].type, 'paragraph-2');
expect(editorState.document.root.children[2].type, 'paragraph-3');
});

test('replacing Nodes', () async {
final n1 = Node(type: 'paragraph-1');
final n2 = Node(type: 'paragraph-2');
final n3 = Node(type: 'paragraph-3');
final start = Document.blank()
..insert([0], [paragraphNode(text: 'Initial content')]);

final editorState = EditorState(document: start);
expect(editorState.document.root.children.length, 1);

final transaction = editorState.transaction;
transaction.deleteNode(editorState.document.root.children.first);
transaction.insertNodes([0], [n1, n2, n3]);
await editorState.apply(transaction);

expect(editorState.document.root.children.length, 3);
expect(editorState.document.root.children[0].type, 'paragraph-1');
expect(editorState.document.root.children[1].type, 'paragraph-2');
expect(editorState.document.root.children[2].type, 'paragraph-3');
});
```

### Expected Behavior

The items should have the correct order.

### Operating System

Linux

### AppFlowy Editor Version(s)

5.2.0 / `main`

### Screenshots

n/a

### Additional Context

just applying them as two separate transactions seems to work fine.

贡献指南

这个仓库没有索引到贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。