mirror of
https://github.com/Instagram/IGListKit
synced 2026-05-15 13:28:18 +00:00
Summary: Adding an API to do item-level (cell) moves on the collection view. This complicates things a little bit because of all the issues that moving sections have while in batch updates (e.g. simultaneous animation UICV bugs). Thankfully we use pretty strict types so the compiler does most of the work for us. Closes #145 - [x] Tests build and pass - [x] Add `IGListBatchUpdateData` tests to check moves during - [x] ~~Moving within a reloaded section (no op)~~ can't reload sections - [x] Moving within a deleted section (no op) - [x] Moving within a moved section (convert section ops to delete+insert) - [x] Moving an index path that is also reloaded (convert to delete+insert path) - [x] Add move unit tests to `IGListAdapterUpdater` - [x] Add move unit tests to `IGListReloadDataUpdater` (mostly for code coverage...) - [x] Add move unit tests to `IGListStackedSectionController` - [x] Add `CHANGELOG.md` entry for 3.0.0 - [x] Test moving without batch Closes https://github.com/Instagram/IGListKit/pull/418 Reviewed By: jessesquires Differential Revision: D4521732 Pulled By: rnystrom fbshipit-source-id: 99a46d1cbb0cc1f857a62ff6ca257aff6e8b7f25
94 lines
2.7 KiB
Objective-C
94 lines
2.7 KiB
Objective-C
/**
|
|
* Copyright (c) 2016-present, Facebook, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
*/
|
|
|
|
#import <Foundation/Foundation.h>
|
|
|
|
#import <IGListKit/IGListMacros.h>
|
|
#import <IGListKit/IGListMoveIndex.h>
|
|
#import <IGListKit/IGListMoveIndexPath.h>
|
|
|
|
NS_ASSUME_NONNULL_BEGIN
|
|
|
|
/**
|
|
An instance of `IGListBatchUpdateData` takes section indexes and item index paths
|
|
and performs cleanup on init in order to perform a crash-free
|
|
update via `-[UICollectionView performBatchUpdates:completion:]`.
|
|
*/
|
|
IGLK_SUBCLASSING_RESTRICTED
|
|
@interface IGListBatchUpdateData : NSObject
|
|
|
|
/**
|
|
Section insert indexes.
|
|
*/
|
|
@property (nonatomic, strong, readonly) NSIndexSet *insertSections;
|
|
|
|
/**
|
|
Section delete indexes.
|
|
*/
|
|
@property (nonatomic, strong, readonly) NSIndexSet *deleteSections;
|
|
|
|
/**
|
|
Section moves.
|
|
*/
|
|
@property (nonatomic, strong, readonly) NSSet<IGListMoveIndex *> *moveSections;
|
|
|
|
/**
|
|
Item insert index paths.
|
|
*/
|
|
@property (nonatomic, strong, readonly) NSSet<NSIndexPath *> *insertIndexPaths;
|
|
|
|
/**
|
|
Item delete index paths.
|
|
*/
|
|
@property (nonatomic, strong, readonly) NSSet<NSIndexPath *> *deleteIndexPaths;
|
|
|
|
/**
|
|
Item moves.
|
|
*/
|
|
@property (nonatomic, strong, readonly) NSSet<IGListMoveIndexPath *> *moveIndexPaths;
|
|
|
|
/**
|
|
Item reload index paths.
|
|
*/
|
|
@property (nonatomic, strong, readonly) NSSet<NSIndexPath *> *reloadIndexPaths;
|
|
|
|
/**
|
|
Creates a new batch update object with section and item operations.
|
|
|
|
@param insertSections Section indexes to insert.
|
|
@param deleteSections Section indexes to delete.
|
|
@param moveSections Section moves.
|
|
@param insertIndexPaths Item index paths to insert.
|
|
@param deleteIndexPaths Item index paths to delete.
|
|
@param moveIndexPaths Item index paths to move.
|
|
@param reloadIndexPaths Item index paths to reload.
|
|
|
|
@return A new batch update object.
|
|
*/
|
|
- (instancetype)initWithInsertSections:(NSIndexSet *)insertSections
|
|
deleteSections:(NSIndexSet *)deleteSections
|
|
moveSections:(NSSet<IGListMoveIndex *> *)moveSections
|
|
insertIndexPaths:(NSSet<NSIndexPath *> *)insertIndexPaths
|
|
deleteIndexPaths:(NSSet<NSIndexPath *> *)deleteIndexPaths
|
|
moveIndexPaths:(NSSet<IGListMoveIndexPath *> *)moveIndexPaths
|
|
reloadIndexPaths:(NSSet<NSIndexPath *> *)reloadIndexPaths NS_DESIGNATED_INITIALIZER;
|
|
|
|
/**
|
|
:nodoc:
|
|
*/
|
|
- (instancetype)init NS_UNAVAILABLE;
|
|
|
|
/**
|
|
:nodoc:
|
|
*/
|
|
+ (instancetype)new NS_UNAVAILABLE;
|
|
|
|
@end
|
|
|
|
NS_ASSUME_NONNULL_END
|