Commit graph

799 commits

Author SHA1 Message Date
Koen Punt
f1ceedc39b Refine dequeueReusableCellOfClass methods for Swift (#1388)
Summary:
## Changes in this pull request

Initial suggested implementation for https://github.com/Instagram/IGListKit/issues/1387.

### 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/master/.github/CONTRIBUTING.md)
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1388

Reviewed By: lorixx

Differential Revision: D18687735

Pulled By: natestedman

fbshipit-source-id: f9cc70ced3f788771fd3f0443b56befbedb04166
2019-12-19 08:13:22 -08:00
Nate Stedman
d4ec467bac Update examples and tests to Swift 5
Summary: Swift 5 came out a while ago, we should definitely be targeting it.

Reviewed By: lorixx

Differential Revision: D19141252

fbshipit-source-id: d6f8fc5209e721a8b28e569855b5e3cc8b8c3431
2019-12-18 21:51:34 -08:00
Jordan Smith
6414e778b4 Add an experiment for inline CATransaction commits
Summary:
**Context**

When performing non-animated updates, `IGListKit` does so by beginning a `CATransaction` before `performBatchUpdates:`, and ending it in the completion block. While this disables animations for the collection view updates, it is feasible that some other changes might be bundled into the same transaction, given that we have no guarantee of the completion block being called inline.

It seems that this is happening in practice and occasionally disrupting `UIViewPropertyAnimator` animations, forcing the completion immediately.

**This Change**

To fix this issue, we can commit the transaction inline. Here we use `performWithoutAnimation:`, although it's possible that this is just a wrapper around `CATransaction` calls anyway.

Because the change may have unknown side effects, this change is gated by an experiment.

Reviewed By: maxolls

Differential Revision: D19150307

fbshipit-source-id: f7cff46ac7141609f42caafaf69bad71a980ad29
2019-12-17 16:57:39 -08:00
Nate Stedman
b5d4560513 Add missing files to Xcode project
Summary: These were added in internal builds (Buck) but broke the external build (Xcode).

Reviewed By: lorixx

Differential Revision: D19141251

fbshipit-source-id: 7dc891ee227e24561e6e4cb20c9c6d20dead5e2d
2019-12-17 13:07:18 -08:00
Nate Stedman
9135cabe28 Use IGListAssert, not IGAssert
Reviewed By: lorixx

Differential Revision: D19141254

fbshipit-source-id: a93ae649be4d2430bf28208391ad027e02cdea3e
2019-12-17 13:07:17 -08:00
Zhisheng Huang
ce7718c289 Add singleItemSectionUpdates to IGListAdapterUpdate to use simpler updates
Summary:
= Problem =

Most of the UICollectionView/List UI only needs to deal with 1 dimensional array of data. The current N section N item setup is a big more complicated for most use case who only deals with 1 dimensional array.

In fact, the IGListDiff algorithm works pretty with 1 dimensional array. Then inside `IGListAdapterUpdater`, we do a lot changes to ensure UICollectionVie do not crash:
1. Convert section moves -> delete+insert;
2. Convert section reload -> delete+insert;

This results in the animation limitation for the UI updates, we lose the move animation support by UICollectionView and the updates for delete+insert does not look great.

= Solution =

Since direct inbox or direct message list view only uses N section, with single item setup.

We don't need to do crazy changes like changing moves->delete+insert, and use -reloadSections etc. for updates.

We can just use whatever the IGListDiffingResult returns and be done with it.

More context, see my post and the Better Animation part I listed in the group: https://fb.workplace.com/groups/iglistkit/permalink/1009885999357045/

Reviewed By: iperry90

Differential Revision: D18856355

fbshipit-source-id: 50cf93a6903f0c86c44e5e1289384efe8db9acc1
2019-12-16 17:50:50 -08:00
Zhisheng Huang
b4dc116e20 Add a IGListBindingSingleSectionController
Summary:
= Problem =

Most of the UICollectionView/List UI only needs to deal with 1 dimensional array of data. The current N section N item setup is a big more complicated for most use case who only deals with 1 dimensional array.

In fact, the IGListDiff algorithm works pretty with 1 dimensional array. Then inside `IGListAdapterUpdater`, we do a lot changes to ensure UICollectionVie do not crash:
1. Convert section moves -> delete+insert;
2. Convert section reload -> delete+insert;

This results in the animation limitation for the UI updates, we lose the move animation support by UICollectionView and the updates for delete+insert does not look great.

= Solution =

Hence I am proposing to use simple **Single Item** Section Controller, and we can apply the diffing result directly to the UICollectionView, which is much simpler.

However, for the inline section update, we need to support update at the right timing: inside -didUpdateObject:, and now we want to get back the existing cell, and apply data to it.

Ideally, `IGListSingleSectionController` is the right call but `IGListSingleSectionController` is not subclassable and we would also need to change the way -didUpdateObject: works in that class.

Hence I am building this `IGListBindingSingleSectionController`, which only contains single item, and it can update/bind the cell whenever item is updated.

Reviewed By: iperry90

Differential Revision: D18942974

fbshipit-source-id: 539fbe2b72691b649e3ae3d8ed725006bc54b705
2019-12-16 17:50:50 -08:00
Zhisheng Huang
cf1db53da5 Fix some disabled unit tests
Summary: The window frame needs to be big enough so that the cells are rendered fine with the bounds.

Reviewed By: candance

Differential Revision: D18949587

fbshipit-source-id: 1374bc3bab6892aafea5bbab9e8af3399e966344
2019-12-12 11:12:33 -08:00
Zhisheng Huang
d7a6fc0847 Add a flag to control how the IGSectionObject's isEqualToDiffable: is implemented
Summary:
In the Feed view, all the -isEqualToDiffable: implementation only checks the pk, a.k.a the identifier.

Let's mimic that behavior.

Reviewed By: calimarkus

Differential Revision: D18714064

fbshipit-source-id: e1fe9624da2997ecc7ca9b684ddd471d77b7564c
2019-12-04 15:32:04 -08:00
Zhisheng Huang
64f053c258 Refactor and move the applyUpdate code into Helper file
Summary: I want to reuse this collection view update code in next diff, let's move it to a Helper file to support code sharing.

Reviewed By: calimarkus, iperry90

Differential Revision: D18714061

fbshipit-source-id: a85e8576226276fcab90ea1d2ed23aac5501aa17
2019-12-04 15:32:04 -08:00
Zhisheng Huang
da4a5bbf25 Simplify the code and use _itemCountIsZero (#1400)
Summary:
…uld show empty view

## Changes in this pull request

Basically we can use the existing _itemCountIsZero like all the other usage, and it's faster since it stopped early, compared to before we loop through all the sectionController.numberOfItems and sum up.

### Checklist

- [x] All tests pass. Demo project builds and runs.
- [ ] I added tests, an experiment, or detailed why my change isn't tested.
- [ ] 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/master/.github/CONTRIBUTING.md)
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1400

Differential Revision: D18687637

Pulled By: lorixx

fbshipit-source-id: bcdc57ba43b86cd0ed639ffaab9ae0493fd2f844
2019-11-27 09:23:18 -08:00
Zhisheng Huang
3539ab687b Update contributor's github page (#1399)
Summary:
## Changes in this pull request

Issue fixed: #

### Checklist

- [x] All tests pass. Demo project builds and runs.
- [ ] I added tests, an experiment, or detailed why my change isn't tested.
- [ ] 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/master/.github/CONTRIBUTING.md)
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1399

Differential Revision: D18687660

Pulled By: lorixx

fbshipit-source-id: 3195aec55ffdcea1457a09c74313329559caa5ad
2019-11-27 09:23:18 -08:00
Jefferson Setiawan
f50f3c7ef6 Support Project Catalyst (#1398)
Summary:
## Changes in this pull request

Add support when compile Catalyst.
Fix this error: `Cannot define category for undefined class 'IGListAdapter'`
![Screenshot 2019-11-22 at 22 35 31](https://user-images.githubusercontent.com/14871122/69440931-49979c80-0d7c-11ea-8673-f9b8a60441f0.jpg)

## Step To Reproduce
In the Main target, check the Mac under Deployment Info, more Info in [here](https://developer.apple.com/documentation/uikit/mac_catalyst?language=objc)

### Checklist

- [x] All tests pass. Demo project builds and runs.
- [x] I added tests, an experiment, or detailed why my change isn't tested.
- [ ] 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/master/.github/CONTRIBUTING.md)
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1398

Differential Revision: D18687673

Pulled By: lorixx

fbshipit-source-id: b5b9aa60406c9b66a48abbdfeea2bc5f44c9ca66
2019-11-27 09:23:17 -08:00
Ian Perry
36da20119c Add link to Changelog (#1397)
Summary:
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1397

Added link to PR

Reviewed By: lorixx

Differential Revision: D18638528

fbshipit-source-id: 847deee505e4154a6940825a07ca24d664137c76
2019-11-21 11:22:30 -08:00
kinarob
7fe113fea8 Remove useless system version code (#1396)
Summary:
## Changes in this pull request

`Examples/Examples-iOS/Pods/Pods.xcodeproj/project.pbxproj`
`Examples/Examples-tvOS/Pods/Pods.xcodeproj/project.pbxproj`

this change just Xcode 11.2 generated.

This pr aim to remove useless `IGSystemVersion` file.

### Checklist

- [x] All tests pass. Demo project builds and runs.
- [ ] 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/master/.github/CONTRIBUTING.md)
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1396

Reviewed By: lorixx

Differential Revision: D18638299

Pulled By: iperry90

fbshipit-source-id: 0b6583f1210e5d1570dd672eed8c59901d6785f6
2019-11-21 09:56:43 -08:00
Zhisheng Huang
0ccf7fef5d Fix the build_doc.sh and regenerate all the docs! (#1393)
Summary:
## Changes in this pull request

Get this fix and make it ready for 4.0 release.

### Checklist

- [ ] All tests pass. Demo project builds and runs.
- [ ] I added tests, an experiment, or detailed why my change isn't tested.
- [ ] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes.
- [ ] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/.github/CONTRIBUTING.md)
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1393

Reviewed By: iperry90

Differential Revision: D18618773

Pulled By: lorixx

fbshipit-source-id: 0360c36d85dc5db15d7e08bdf68ec9c8be992499
2019-11-20 16:23:15 -08:00
Zhisheng Huang
f3175ec31f Update the version to be 4.0
Summary:
As title, let's prepare the 4.0 release with the version bump.

1. Change the Source/Info.plist to have 4.0.0 for CFBundleShortVersionString.
2. Manually update any .md files that used the old release versions.
3. Run `./scripts/setup.sh` to re-update all the pods and the Example projects.

Reviewed By: natestedman

Differential Revision: D18616823

fbshipit-source-id: ca0f2a09cdd9ab592c2cb002fe923e195ce3ab12
2019-11-20 16:23:15 -08:00
Zhisheng Huang
52f6a5e835 Fix WorkingRange example
Summary:
Before:

https://unsplash.it/300.0/200 failed

After:

https://unsplash.it/300/200 successed

= Facebook =
https://pxl.cl/Rp9f

Reviewed By: iperry90

Differential Revision: D18620012

fbshipit-source-id: dd206b9cdef93c279d7d2d8042c9ccfc242802fc
2019-11-20 11:35:26 -08:00
Koen Punt
97c0ec8e73 use cocoapods cdn (#1386)
Summary:
## Changes in this pull request

This updates the Podfile to use the specs CDN instead of the git checkout, which is more performant (and the default with CocoaPods 1.8 and higher).

### Checklist

- [x] All tests pass. Demo project builds and runs.
- [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/master/.github/CONTRIBUTING.md)
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1386

Reviewed By: lorixx

Differential Revision: D18572204

Pulled By: iperry90

fbshipit-source-id: d3b721aaff92b18efeef31282cb9204055baec21
2019-11-20 09:24:48 -08:00
Ian Perry
266e4650e1 Update CHANGELOG for 4.0.0 release (#1390)
Summary:
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1390

Updated links in Changelog

Reviewed By: lorixx

Differential Revision: D18594370

fbshipit-source-id: def3401a3d6adf794675eb951ba83b9deace1065
2019-11-19 12:19:17 -08:00
Afonso
3c4cd1c335 Update RxIGListKit link on Best Practices & FAQ (#1375)
Summary:
## Changes in this pull request
Updated the link to RxIGListKit as the current one points to a dead end. Simple documentation update, no code changes.

Issue fixed: #

### 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/master/.github/CONTRIBUTING.md)
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1375

Reviewed By: bdotdub

Differential Revision: D18525301

Pulled By: iperry90

fbshipit-source-id: 650c6828b5a9ba256d2aa6b0c1abb27d3de43a8c
2019-11-18 07:30:20 -08:00
Nate Stedman
f367b455a6 Properly split IGListDiffKit and IGListKit podspecs (#1385)
Summary:
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1385

I attempted to work the two frameworks into a single podspec, but it didn't really work that well. Instead, let's just split them into two podspec files - this should work fine, and more closely follows the Carthage/Xcode behavior.

This should address #1382. Note that the attached project does need to be edited, because we also need to manually specify the `IGListDiffKit` pod location. This issue will go away with the release of 4.0.

Reviewed By: iperry90

Differential Revision: D18449843

fbshipit-source-id: 2750aee1ba39d21b9f1b3521ea8911929ae728b1
2019-11-13 05:30:28 -08:00
Nate Stedman
03a855885a Update Cocoapods
Summary: We need this for the `--include-podspecs` flag used in the next commit.

Reviewed By: iperry90

Differential Revision: D18450156

fbshipit-source-id: 88b12e5e8d22fbd3ec4fe0fb51aa6f4426216f25
2019-11-13 05:30:27 -08:00
Nate Stedman
c9aab95df8 Use script to fetch version for podspec
Summary: This allows us to have a single declaration of the version in the `Info.plist`, and have it automatically synced to the podspec. I'm going to split the podspecs as I did it wrong (#1382) when splitting the libraries, so this avoids having three places where the version is declared.

Reviewed By: iperry90

Differential Revision: D18449842

fbshipit-source-id: 2991180ee14003b8ebe1f4ef601036404315dfd6
2019-11-13 05:30:27 -08:00
Andrea Antonioni
ada811e1bb IGListAdapterDelegate needs Swift name of ListAdapterDelegate (#1116)
Summary:
## Changes in this pull request

Add Swift name annotation `ListAdapterDelegate` to `IGListAdapterDelegate`. The breaking change is written in the `CHANGELOG.md` for the `4.0.0` release

Issue fixed: https://github.com/Instagram/IGListKit/issues/1115

### 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/master/.github/CONTRIBUTING.md)
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1116

Reviewed By: bdotdub

Differential Revision: D18278551

Pulled By: iperry90

fbshipit-source-id: db9d1910fc4be7ffa723ee291a9c65db0fd217c0
2019-11-06 09:16:17 -08:00
Ian Perry
2fa963bfa3 Drop support for iOS 8 (#1381)
Summary:
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1381

https://github.com/Instagram/IGListKit/issues/1078

Dropping support for iOS 8
- Removed checks for iOS 8
- Updated xcodeproj file
- Updated Travis
- Updated podspec

Reviewed By: bdotdub, lorixx

Differential Revision: D18249291

fbshipit-source-id: eba9814b71e67fdc0ef50fcbc809189d86e8c5fb
2019-11-01 12:40:19 -07:00
Nate Stedman
e4c60650f2 Split IGListKit and IGListDiffKit (#1377)
Summary:
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1377

This splits the diffing-only components from `IGListKit` out into a separate library, `IGListDiffKit`, allowing them to be used independently of the rest of `IGListKit`. We've found that the diffing components of the library are useful independently of the rest of the `UICollectionView` infrastructure, and separating the libraries allows apps to take advantage of those components without paying the full binary size cost of `IGListKit`. The diffing components are available as a subspec in Cocoapods, and as an independent framework in Carthage and direct Xcode project import (i.e. Git submodules).

This is a breaking change, necessitating a major version bump, although it should have only minor impact for projects using the umbrella header `IGListKit.h`, as that header continues to import the diffing utilities. In particular, for a project using Cocoapods and importing `IGListKit.h`, there should be no code changes required.

Reviewed By: calimarkus

Differential Revision: D18114249

fbshipit-source-id: 363b5a427e32800bbc6e82f897230963b4167245
2019-10-31 08:26:12 -07:00
Jeremy Lawrence
16df6cb220 Bump nokogiri version
Summary:
We don't use nokogiri directly in our library, but it found its was into our Gemfile.lock. I'm bumping the version in the Gemfile.lock because the version it's calling for has a security vuln: https://github.com/sparklemotion/nokogiri/issues/1915. When I tried setting up this library from a github clone, so I imagine others may be running into this and wasting time on it as well.

Another solution here would just be to remove nokogiri from our Gemfile.lock entirely. I don't think we use it directly anywhere, and was just included in the lock because it happened to be in someone's environment at the time of the lock file creation.

Reviewed By: joetam

Differential Revision: D18046184

fbshipit-source-id: de6263bb24783988545a77cb67ee66c9697820de
2019-10-30 12:22:57 -07:00
Jeremy Lawrence
0ec9f8fff8 Remove references to removed files in pbxproj files (#1376)
Summary:
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1376

Our [builds](https://travis-ci.org/Instagram/IGListKit) have been failing since `IGListStackedSectionController` was removed in [D17200801](D17200801)/[1355](https://github.com/Instagram/IGListKit/pull/1355). The error message in our Travis logs points to something related to `IGListStackedSectionController` causing the error:

```
X  error: /Users/travis/build/Instagram/IGListKit/Source/Internal/IGListStackedSectionControllerInternal.h: No such file or directory

** BUILD FAILED **

The following build commands failed:
	CpHeader /Users/travis/build/Instagram/IGListKit/Source/Internal/IGListStackedSectionControllerInternal.h /Users/travis/Library/Developer/Xcode/DerivedData/IGListKitExamples-cfbxdbnpimeeplcoaiqrlyrrqjxn/Build/Products/Debug-iphonesimulator/IGListKit/IGListKit.framework/PrivateHeaders/IGListStackedSectionControllerInternal.h
(1 failure)
```

Pretty sure the issue here is that the `xcodeproj` files were not rebuilt after deleting these files, which meant they were pointing to files that no longer existed, which caused the build to fail. I was able to fix this issue by running our `setup.sh` script, which regenerated the `xcodeproj` files.

Reviewed By: bdotdub

Differential Revision: D18064465

fbshipit-source-id: d07586a99d4bbb9346bdda0752dbd613eb1b6d03
2019-10-23 11:31:09 -07:00
Maxime Ollivier
7824698610 prevent crash when inserting and deleting the same NSIndexPath multiple times
Summary:
Issue: The `NSIndexPath` level updates are really tricky because they don't go through the diffing process. It's up to the caller to make sure that the inserts/deletes/moves all add up to the final number of items. And it's not uncommon that 2 different updates will try to change the same `NSIndexPath` at the same time, which can cause headaches and crashes. For example, if we insert/delete the same `NSIndexPath` twice in the same update pass, we end up with 2 inserts and 1 delete, because we remove duplicated deletes. This causes an `NSInternalInconsistencyException` since things don't add up at the end.

Fix: Lets also remove duplicate `NSIndexPath` inserts to balance things out. In the future, it would be nice to get rid of this API entirely and have everything go through the diffing.

Reviewed By: lorixx

Differential Revision: D17423776

fbshipit-source-id: 62fdf5bd521a915e984e8de180c74858f7ae7ef4
2019-09-17 15:31:54 -07:00
Hanton Yang
b01010e5e9 Deprecate IGListStackedSectionController (#1355)
Summary:
## Changes in this pull request

Issue fixed: https://github.com/Instagram/IGListKit/issues/1099

### 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/master/.github/CONTRIBUTING.md)
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1355

Reviewed By: Ziewvater

Differential Revision: D17200801

Pulled By: lorixx

fbshipit-source-id: 22bb1abc69b38c9d856621fe848c09e61a9d41ef
2019-09-16 12:28:01 -07:00
Dan
3e07511861 Minor grammar fix (#1366)
Summary:
## Changes in this pull request

Issue fixed: #

### Checklist

- [ ] All tests pass. Demo project builds and runs.
- [ ] I added tests, an experiment, or detailed why my change isn't tested.
- [ ] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes.
- [ ] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/.github/CONTRIBUTING.md)
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1366

Differential Revision: D17401484

Pulled By: lorixx

fbshipit-source-id: 2fda3a2b36d88a712f2853774eed5987793db26c
2019-09-16 12:10:34 -07:00
Maxime Ollivier
6faddd99c9 avoid layout before IGListAdapter scrollToObject
Summary:
* Issue: `[IGListAdapter scrollToObject ...]` currently calls `[collectionView layoutIfNeeded]` before scrolling which creates the current visible cells that will no longer be visible after the scroll. This causes perf issues when we scroll immediately after creating the view controller.
* Fix: Instead of asking the layout object for the attributes, lets go throught the `UICollectionView`. So if the attributes are not ready, the `UICollectionView` will call `-prepareLayout`, return the attributes, but doesn't generate the cells just yet.

Differential Revision: D17326459

fbshipit-source-id: 745942225e0311fea7c3efb07ac1e8b8e0a82996
2019-09-13 14:57:52 -07:00
Maxime Ollivier
cddb29799c fix supplementary view crash when using IGListCollectionViewLayout
Summary:
* Issue: Calling `[UICollectionView layoutAttributesForSupplementaryElementOfKind...]` with an indexPath that doesn't have a supplimentary view.
* Cause: `IGListCollectionViewLayout` always returns a non-nil `UICollectionViewLayoutAttributes` when calling `layoutAttributesForSupplementaryViewOfKind` which tells the `UICollectionView` that it's fair game to ask the dataSource for a supplementary view at the indexPath. But when it does, the section controller could return nil, which throws an expection.

In the Apple docs about `[UICollectionViewDataSource collectionView:viewForSupplementaryElementOfKind:atIndexPath:]`

> This method must always return a valid view object. If you do not want a supplementary view in a particular case, your layout object should not create the attributes for that view.

https://developer.apple.com/documentation/uikit/uicollectionviewdatasource/1618037-collectionview?language=objc

* Fix: Just like `UICollectionViewFlowLayout`, if the supplementary view size is empty, lets return a nil attribute.

Reviewed By: Ziewvater

Differential Revision: D17326461

fbshipit-source-id: 507e98f43e951216cf2eafe2449f87df25439e11
2019-09-13 14:57:52 -07:00
Maxime Ollivier
2542d9e469 fixed IGListAdapter unit tests
Summary:
* Fix `prefetchingEnabled` which is only available in iOS 10. Not entirely sure why this hasn't been an issue before.
* Re-enable the scrollToObject tests by avoiding the safeAreaInsets

Reviewed By: lorixx

Differential Revision: D17326458

fbshipit-source-id: c99ee6f8bcf91aca427d3122fdefe67d6c99055b
2019-09-13 14:57:52 -07:00
Hanton Yang
628c547cc6 Remove the redundant __IPHONE_11_0 (#1351)
Summary:
## Changes in this pull request

Remove the redundant __IPHONE_11_0, because the minimum requirement is Xcode 9.0+ now.

### 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/master/.github/CONTRIBUTING.md)
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1351

Differential Revision: D17200815

Pulled By: lorixx

fbshipit-source-id: 25705856cf26d5c215ed956802ab1022c98cbca0
2019-09-04 23:23:25 -07:00
Hanton Yang
93da0852d1 Remove unused headers (#1358)
Summary:
###  Changes in this pull request

* Improve compilation time by reducing unnecessary compilation dependencies
* More clean code

### 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/master/.github/CONTRIBUTING.md)
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1358

Differential Revision: D17200761

Pulled By: lorixx

fbshipit-source-id: 9c6bca4d3d5e2e4b35125c7a12e483d58993c4e8
2019-09-04 23:06:57 -07:00
Hanton Yang
b194eb21e3 Update queue priority in Background Diffing (#1363)
Summary:
## Changes in this pull request

Update to use `QoS` and take higher priority for responsiveness and energy efficiency.

Following the guideline in the doc [Energy Efficiency Guide for iOS Apps](https://developer.apple.com/library/archive/documentation/Performance/Conceptual/EnergyGuide-iOS/PrioritizeWorkWithQoS.html).

It's better to use `User-initiated` QoS in `Background Diffing` because it focuses on "Work that the user has initiated and requires immediate results".

### 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/master/.github/CONTRIBUTING.md)
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1363

Differential Revision: D17200745

Pulled By: lorixx

fbshipit-source-id: 4b9b2159f06edeed92e79bac771fe7b89f6d5708
2019-09-04 23:04:18 -07:00
Hanton Yang
cfd09a2c45 Update README installation version to 3.4.0 (#1354)
Summary:
## Changes in this pull request

Update `README` installation version to the latest stable version `3.4.0`

### 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/master/.github/CONTRIBUTING.md)
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1354

Differential Revision: D17200807

Pulled By: lorixx

fbshipit-source-id: 733f8c65e4eff7b0498c0425354f5951fd5d8569
2019-09-04 22:52:32 -07:00
Paul O'Shannessy
ecdede2109 Adopt Contributor Covenant
Summary:
In order to foster healthy open source communities, we're adopting the
[Contributor Covenant](https://www.contributor-covenant.org/). It has been
built by open source community members and represents a shared understanding of
what is expected from a healthy community.

Reviewed By: josephsavona, danobi, rdzhabarov

Differential Revision: D17104640

fbshipit-source-id: d210000de686c5f0d97d602b50472d5869bc6a49
2019-08-29 23:20:54 -07:00
Markus Emrich
210057b8d9 Update and rename Generating your models.md (#1359)
Summary:
…  to Generating your models using remodel.md
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1359

Reviewed By: natestedman

Differential Revision: D16927236

Pulled By: calimarkus

fbshipit-source-id: fcf366f3a29c60f750285ad8e44df506ac850461
2019-08-21 07:04:24 -07:00
Markus Emrich
323887920d Remove stringWithFormat: calls without parameters (#1360)
Summary:
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1360

`codemod -m -d ~/fbsource/fbobjc/ --extensions m,mm '\[NSString stringWithFormat\:\@\"([^\"]*?)\"\]' '@"\1"'`

Excluded third party libraries.

Differential Revision: D15590354

fbshipit-source-id: 954db583a02e0da26ea52ad7b8762e1d8f902ab4
2019-08-20 15:11:30 -07:00
Markus Emrich
3deecff55a Update remodel iglistdiffable plugin to the latest
Summary:
Remodel changed quite a bit, this updates the plugin to work correctly with the latest state.
It also includes other recent Remodel changes like e.g. autoformatting of the codebase.

Resolves #1353

Reviewed By: natestedman

Differential Revision: D16794236

fbshipit-source-id: f543d0e3e5656f540accd5e359bbaf0acc8071fc
2019-08-14 12:23:59 -07:00
Hanton Yang
cb344f9814 Delete duplicate headers in IGListKit.h (#1347)
Summary:
## Changes in this pull request

Delete duplicate headers in `IGListKit.h`

### 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/master/.github/CONTRIBUTING.md)
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1347

Reviewed By: joetam

Differential Revision: D16542316

Pulled By: joetam

fbshipit-source-id: feaaaaca0f9eddc4be58996c8a3a2521a7817185
2019-08-01 17:52:41 -07:00
Hanton Yang
e2fd2edda7 Fix broken image links in Modeling and Binding.md (#1348)
Summary:
## Changes in this pull request

Fix broken image links in `Modeling and Binding.md`

### 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/master/.github/CONTRIBUTING.md)
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1348

Reviewed By: joetam

Differential Revision: D16542309

Pulled By: joetam

fbshipit-source-id: 4b761d568b0b4d60d8caefd89c7f130cfb96123e
2019-08-01 16:44:23 -07:00
Benny Wong
e240b748ac Suppress warnings for pod lint
Summary: The warning that is triggered (see: https://travis-ci.org/Instagram/IGListKit/builds/564842923) warns about not having a proper team ID. Since this is a library, I think it is ok to ignore this error.

Reviewed By: Ziewvater

Differential Revision: D16543506

fbshipit-source-id: 1057384514ca5d605daa786a991fb643c2d718e5
2019-07-30 12:00:41 -07:00
Bofei Zhu
b7bc76dce4 Change paths to path (#1205)
Summary:
## Changes in this pull request
Should map be a map of `IndexPath`s instead of arrays of `IndexPath`s? Also, we might need some unit tests on this part. I don't think it's covered.

### 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/master/.github/CONTRIBUTING.md)
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1205

Reviewed By: Ziewvater

Differential Revision: D15962803

Pulled By: lorixx

fbshipit-source-id: f207b69ef0ebad08cd72b14ba53101e56d1604fd
2019-06-25 11:46:46 -07:00
Dennis Müller
0ac855df99 Fix - Cell Reordering in IGListBindingSectionController (viewModels array not being updated) (#1274)
Summary:
- See #1262 (cell reordering using a binding section controller caused problems)

## Changes in this pull request
- Added method override in `IGListBindingSectionController` to update the internal `viewModels` array after a cell has been moved
- Subclasses of IGListBindingSectionController require to call super

Issue fixed: #1262

I've added a test for this change. Is this enough? Or should I add more corner cases or something?

### Checklist

Some tests fail, but they do seem unrelated. I don't know if this is normal. I haven't changed anything regarding those failing tests.

- [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/master/.github/CONTRIBUTING.md)
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1274

Reviewed By: candance

Differential Revision: D15592822

Pulled By: lorixx

fbshipit-source-id: d81c18bec0ad0a6a6613089245352bb182a92f26
2019-06-23 23:25:09 -07:00
Aaron Pang
78cca5bc43 Add experiment to have the collection view layout check the collection view instead of the collection view layout [2/2]
Summary:
The collection view layout here should not be accessing the data source directly but instead asking the collection view for the number of sections and number of items. This is because the collection view holds an internal cache and if there is a discrepancy between when the collection view cache and the data source, preparing the layout will crash the app because we will send a layout down to the collection view with a items that might not exist in the collection view's cache but exist in the data source.

This diff adds an experiment to see the impact of fixing this check so that when we prepare layouts we don't ask the data source directly but ask the collection view instead. The collection view will then update it's cache and check the data source so it does not crash when we prepare a layout.

```
NSInternalInconsistencyException at __45-[UICollectionViewData validateLayoutInRect:]_block_invoke:
UICollectionView received layout attributes for a cell with an index path that does not exist:
<NSIndexPath: 0xc198a8c3ea391fbb> {length = 2, path = 4 - 0}
```

Reviewed By: lorixx

Differential Revision: D15830610

fbshipit-source-id: f3dae3e87c55b86c3b686309c1144ccfff1375bf
2019-06-14 16:23:46 -07:00
Zhisheng Huang
8a0c69ba29 Cleanup the skiplayout in reloadData fallback
Summary: The test was actually deallocated last year, and this test is never cleaned up. Now let's clean it up.

Reviewed By: chritto

Differential Revision: D15777898

fbshipit-source-id: c3a704ee1bfdd085c4ceb89af424a10ed07a65b6
2019-06-12 18:35:54 -07:00