Skip to content

Commit 230bfb5

Browse files
nguyenhuyAdlai Holler
authored andcommitted
Support native item and section reloads (facebookarchive#3066)
1 parent bf2ed84 commit 230bfb5

File tree

3 files changed

+56
-8
lines changed

3 files changed

+56
-8
lines changed

AsyncDisplayKit/ASCollectionView.mm

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1729,22 +1729,32 @@ - (void)rangeController:(ASRangeController *)rangeController didUpdateWithChange
17291729

17301730
__block NSUInteger numberOfUpdates = 0;
17311731
[self _superPerformBatchUpdates:^{
1732-
for (_ASHierarchyItemChange *change in [changeSet itemChangesOfType:_ASHierarchyChangeTypeDelete]) {
1732+
for (_ASHierarchyItemChange *change in [changeSet itemChangesOfType:_ASHierarchyChangeTypeReload]) {
1733+
[super reloadItemsAtIndexPaths:change.indexPaths];
1734+
numberOfUpdates++;
1735+
}
1736+
1737+
for (_ASHierarchySectionChange *change in [changeSet sectionChangesOfType:_ASHierarchyChangeTypeReload]) {
1738+
[super reloadSections:change.indexSet];
1739+
numberOfUpdates++;
1740+
}
1741+
1742+
for (_ASHierarchyItemChange *change in [changeSet itemChangesOfType:_ASHierarchyChangeTypeOriginalDelete]) {
17331743
[super deleteItemsAtIndexPaths:change.indexPaths];
17341744
numberOfUpdates++;
17351745
}
17361746

1737-
for (_ASHierarchySectionChange *change in [changeSet sectionChangesOfType:_ASHierarchyChangeTypeDelete]) {
1747+
for (_ASHierarchySectionChange *change in [changeSet sectionChangesOfType:_ASHierarchyChangeTypeOriginalDelete]) {
17381748
[super deleteSections:change.indexSet];
17391749
numberOfUpdates++;
17401750
}
17411751

1742-
for (_ASHierarchySectionChange *change in [changeSet sectionChangesOfType:_ASHierarchyChangeTypeInsert]) {
1752+
for (_ASHierarchySectionChange *change in [changeSet sectionChangesOfType:_ASHierarchyChangeTypeOriginalInsert]) {
17431753
[super insertSections:change.indexSet];
17441754
numberOfUpdates++;
17451755
}
17461756

1747-
for (_ASHierarchyItemChange *change in [changeSet itemChangesOfType:_ASHierarchyChangeTypeInsert]) {
1757+
for (_ASHierarchyItemChange *change in [changeSet itemChangesOfType:_ASHierarchyChangeTypeOriginalInsert]) {
17481758
[super insertItemsAtIndexPaths:change.indexPaths];
17491759
numberOfUpdates++;
17501760
}

AsyncDisplayKit/ASTableView.mm

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1442,7 +1442,39 @@ - (void)rangeController:(ASRangeController *)rangeController didUpdateWithChange
14421442
LOG(@"--- UITableView beginUpdates");
14431443
[super beginUpdates];
14441444

1445-
for (_ASHierarchyItemChange *change in [changeSet itemChangesOfType:_ASHierarchyChangeTypeDelete]) {
1445+
for (_ASHierarchyItemChange *change in [changeSet itemChangesOfType:_ASHierarchyChangeTypeReload]) {
1446+
NSArray<NSIndexPath *> *indexPaths = change.indexPaths;
1447+
UITableViewRowAnimation animationOptions = (UITableViewRowAnimation)change.animationOptions;
1448+
1449+
LOG(@"UITableView reloadRows:%ld rows", indexPaths.count);
1450+
BOOL preventAnimation = animationOptions == UITableViewRowAnimationNone;
1451+
ASPerformBlockWithoutAnimation(preventAnimation, ^{
1452+
if (self.test_enableSuperUpdateCallLogging) {
1453+
NSLog(@"-[super reloadRowsAtIndexPaths]: %@", indexPaths);
1454+
}
1455+
[super reloadRowsAtIndexPaths:indexPaths withRowAnimation:animationOptions];
1456+
});
1457+
1458+
numberOfUpdates++;
1459+
}
1460+
1461+
for (_ASHierarchySectionChange *change in [changeSet sectionChangesOfType:_ASHierarchyChangeTypeReload]) {
1462+
NSIndexSet *sectionIndexes = change.indexSet;
1463+
UITableViewRowAnimation animationOptions = (UITableViewRowAnimation)change.animationOptions;
1464+
1465+
LOG(@"UITableView reloadSections:%@", sectionIndexes);
1466+
BOOL preventAnimation = (animationOptions == UITableViewRowAnimationNone);
1467+
ASPerformBlockWithoutAnimation(preventAnimation, ^{
1468+
if (self.test_enableSuperUpdateCallLogging) {
1469+
NSLog(@"-[super reloadSections]: %@", sectionIndexes);
1470+
}
1471+
[super reloadSections:sectionIndexes withRowAnimation:animationOptions];
1472+
});
1473+
1474+
numberOfUpdates++;
1475+
}
1476+
1477+
for (_ASHierarchyItemChange *change in [changeSet itemChangesOfType:_ASHierarchyChangeTypeOriginalDelete]) {
14461478
NSArray<NSIndexPath *> *indexPaths = change.indexPaths;
14471479
UITableViewRowAnimation animationOptions = (UITableViewRowAnimation)change.animationOptions;
14481480

@@ -1458,7 +1490,7 @@ - (void)rangeController:(ASRangeController *)rangeController didUpdateWithChange
14581490
numberOfUpdates++;
14591491
}
14601492

1461-
for (_ASHierarchySectionChange *change in [changeSet sectionChangesOfType:_ASHierarchyChangeTypeDelete]) {
1493+
for (_ASHierarchySectionChange *change in [changeSet sectionChangesOfType:_ASHierarchyChangeTypeOriginalDelete]) {
14621494
NSIndexSet *sectionIndexes = change.indexSet;
14631495
UITableViewRowAnimation animationOptions = (UITableViewRowAnimation)change.animationOptions;
14641496

@@ -1474,7 +1506,7 @@ - (void)rangeController:(ASRangeController *)rangeController didUpdateWithChange
14741506
numberOfUpdates++;
14751507
}
14761508

1477-
for (_ASHierarchySectionChange *change in [changeSet sectionChangesOfType:_ASHierarchyChangeTypeInsert]) {
1509+
for (_ASHierarchySectionChange *change in [changeSet sectionChangesOfType:_ASHierarchyChangeTypeOriginalInsert]) {
14781510
NSIndexSet *sectionIndexes = change.indexSet;
14791511
UITableViewRowAnimation animationOptions = (UITableViewRowAnimation)change.animationOptions;
14801512

@@ -1490,7 +1522,7 @@ - (void)rangeController:(ASRangeController *)rangeController didUpdateWithChange
14901522
numberOfUpdates++;
14911523
}
14921524

1493-
for (_ASHierarchyItemChange *change in [changeSet itemChangesOfType:_ASHierarchyChangeTypeInsert]) {
1525+
for (_ASHierarchyItemChange *change in [changeSet itemChangesOfType:_ASHierarchyChangeTypeOriginalInsert]) {
14941526
NSArray<NSIndexPath *> *indexPaths = change.indexPaths;
14951527
UITableViewRowAnimation animationOptions = (UITableViewRowAnimation)change.animationOptions;
14961528

AsyncDisplayKit/Details/ASDataController.mm

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -512,6 +512,9 @@ - (void)_updateSectionContextsWithChangeSet:(_ASHierarchyChangeSet *)changeSet
512512
return;
513513
}
514514

515+
// TODO if the change set includes solely section reloads that together are equivalent to reloadData (i.e reload the only section),
516+
// do a reloadData here as an optimization.
517+
515518
if (changeSet.includesReloadData) {
516519
[_sections removeAllObjects];
517520

@@ -559,6 +562,9 @@ - (void)_updateElementsWithChangeSet:(_ASHierarchyChangeSet *)changeSet
559562

560563
__weak id<ASTraitEnvironment> environment = [self.environmentDelegate dataControllerEnvironment];
561564

565+
// TODO if the change set includes solely section reloads that together are equivalent to reloadData (i.e reload the only section),
566+
// do a reloadData here as an optimization.
567+
562568
if (changeSet.includesReloadData) {
563569
[_elements removeAllObjects];
564570

0 commit comments

Comments
 (0)