mirror of
https://github.com/Instagram/IGListKit
synced 2026-04-21 21:47:34 +00:00
Summary: ## Changes in this pull request Following up on https://github.com/instagram/IGListKit/issues/1401! This PR pulls in koenpunt's PR for tvOS test support and updates it against the latest version of IGListKit. A few changes: * I disabled the unit tests that require storyboards/NIBs for tvOS since we only have iOS formatted assets. We can follow this up in a future PR if need be. * Rewrote the Travis build command for GitHub Actions * Went through and gated any UIKit APIs that aren't available on tvOS. * A few unit tests were failing since UICollectionView on tvOS does have a few implicit behavioral differences. I gated these for now, but if anyone using IGListKit on tvOS actually encounters these errors, please open an issue so we can track it and adjust our test suite accordingly. ### Checklist - [x] All tests pass. Demo project builds and runs. - [x] I added tests, an experiment, or detailed why my change isn't tested. - [x] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes. - [x] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/main/.github/CONTRIBUTING.md) Pull Request resolved: https://github.com/instagram/IGListKit/pull/1649 Reviewed By: jurmarcus Differential Revision: D88921781 Pulled By: TimOliver fbshipit-source-id: fb8b0becde96a504a88b651343049e51ec438b6c
75 lines
2.9 KiB
Objective-C
75 lines
2.9 KiB
Objective-C
/*
|
|
* 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
|