Merge pull request #287 from DioxusLabs/jk/diff-keyed-fix

This commit is contained in:
Jonathan Kelley authored and GitHub committed 2022-02-27 18:20:34 -05:00
commit 0350d25a33
2 files changed
+14 -3

No files matched your search

+9
View File
@@ -813,6 +813,15 @@ impl<'b> DiffState<'b> {
return; return;
} }
// remove any old children that are not shared
// todo: make this an iterator
for child in old {
let key = child.key().unwrap();
if !shared_keys.contains(&key) {
self.remove_nodes([child], true);
}
}
// 4. Compute the LIS of this list // 4. Compute the LIS of this list
let mut lis_sequence = Vec::default(); let mut lis_sequence = Vec::default();
lis_sequence.reserve(new_index_to_old_index.len()); lis_sequence.reserve(new_index_to_old_index.len());
+5 -3
View File
@@ -623,16 +623,17 @@ fn controlled_keyed_diffing_out_of_order() {
assert_eq!( assert_eq!(
changes.edits, changes.edits,
[ [
Remove { root: 4 },
// move 4 to after 6 // move 4 to after 6
PushRoot { root: 1 }, PushRoot { root: 1 },
InsertAfter { n: 1, root: 3 }, InsertAfter { n: 1, root: 3 },
// remove 7 // remove 7
// create 9 and insert before 6 // create 9 and insert before 6
CreateElement { root: 5, tag: "div" }, CreateElement { root: 4, tag: "div" },
InsertBefore { n: 1, root: 3 }, InsertBefore { n: 1, root: 3 },
// create 0 and insert before 5 // create 0 and insert before 5
CreateElement { root: 6, tag: "div" }, CreateElement { root: 5, tag: "div" },
InsertBefore { n: 1, root: 2 }, InsertBefore { n: 1, root: 2 },
] ]
); );
@@ -659,7 +660,8 @@ fn controlled_keyed_diffing_out_of_order_max_test() {
assert_eq!( assert_eq!(
changes.edits, changes.edits,
[ [
CreateElement { root: 6, tag: "div" }, Remove { root: 5 },
CreateElement { root: 5, tag: "div" },
InsertBefore { n: 1, root: 3 }, InsertBefore { n: 1, root: 3 },
PushRoot { root: 4 }, PushRoot { root: 4 },
InsertBefore { n: 1, root: 1 }, InsertBefore { n: 1, root: 1 },