IGListKit/Tests/Objects/IGTestDiffingSectionController.m

76 lines
2.9 KiB
Mathematica
Raw Permalink Normal View History

/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#import "IGTestDiffingSectionController.h"
#import "IGTestCell.h"
#import "IGTestDiffingObject.h"
#import "IGTestNumberBindableCell.h"
#import "IGTestObject.h"
#import "IGTestStringBindableCell.h"
@implementation IGTestDiffingSectionController
- (instancetype)init {
if (self = [super init]) {
self.dataSource = self;
self.selectionDelegate = self;
}
return self;
}
#pragma mark - IGListBindingSectionControllerDataSource
- (NSArray<id<IGListDiffable>> *)sectionController:(IGListBindingSectionController *)sectionController viewModelsForObject:(id)object {
return [(IGTestDiffingObject *)object objects];
}
- (UICollectionViewCell<IGListBindable> *)sectionController:(IGListBindingSectionController *)sectionController cellForViewModel:(id)viewModel atIndex:(NSInteger)index {
Class cellClass;
if ([viewModel isKindOfClass:[NSString class]]) {
cellClass = [IGTestStringBindableCell class];
} else if ([viewModel isKindOfClass:[NSNumber class]]) {
cellClass = [IGTestNumberBindableCell class];
} else {
cellClass = [IGTestCell class];
}
id cell = [self.collectionContext dequeueReusableCellOfClass:cellClass forSectionController:self atIndex:index];
return cell;
}
- (CGSize)sectionController:(IGListBindingSectionController *)sectionController sizeForViewModel:(id)viewModel atIndex:(NSInteger)index {
const BOOL isString = [viewModel isKindOfClass:[NSString class]];
return CGSizeMake([self.collectionContext containerSize].width, isString ? 55 : 30);
}
#pragma mark - IGListBindingSectionControllerSelectionDelegate
- (void)sectionController:(IGListBindingSectionController *)sectionController didSelectItemAtIndex:(NSInteger)index viewModel:(id)viewModel {
self.selectedViewModel = viewModel;
}
- (void)sectionController:(IGListBindingSectionController *)sectionController didDeselectItemAtIndex:(NSInteger)index viewModel:(id)viewModel {
self.deselectedViewModel = viewModel;
}
- (void)sectionController:(IGListBindingSectionController *)sectionController didHighlightItemAtIndex:(NSInteger)index viewModel:(id)viewModel {
self.highlightedViewModel = viewModel;
}
- (void)sectionController:(IGListBindingSectionController *)sectionController didUnhighlightItemAtIndex:(NSInteger)index viewModel:(id)viewModel {
self.unhighlightedViewModel = viewModel;
}
#if !TARGET_OS_TV
- (UIContextMenuConfiguration * _Nullable)sectionController:(IGListBindingSectionController *)sectionController contextMenuConfigurationForItemAtIndex:(NSInteger)index point:(CGPoint)point viewModel:(id)viewModel API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos) {
self.contextMenuViewModel = viewModel;
return nil;
}
#endif
@end