Commit graph

238 commits

Author SHA1 Message Date
Adam Stern
a1ee4c19f7 remove duplicate identifiers from IGListBindingSectionController objects
Summary:
I was building a new `IGListBindingSectionController` subclass and accidentally used two view models with the same ID. Was seeing strange results and realized we're not removing dups or asserting here.

Adding a call to `objectsWithDuplicateIdentifiersRemoved` when the view models are first requested.

Reviewed By: rnystrom

Differential Revision: D8303601

fbshipit-source-id: 42c62adc401feaec2c7dce2a83cfc6533599752b
2018-06-06 15:13:48 -07:00
Brandon Darin
290d592983 Clean listAdapterUpdater state if collectionView becomes nil during update
Summary:
If an `IGListAdapterUpdater` was unable to retrieve a collection view in `[IGListAdapterUpdater performBatchUpdatesWithCollectionViewBlock:]`, it would return early without cleaning state. This would sometimes cause future updates to crash, as this `IGListAdapterUpdater`'s state would now be out-of-sync.

This change also ensures that the `IGListAdapterUpdater`'s completion blocks run when `[IGListAdapterUpdater performBatchUpdatesWithCollectionViewBlock:]` and `[IGListAdapterUpdater performReloadDataWithCollectionViewBlock:]` return early due to having a nil `UICollectionView`.

Reviewed By: rnystrom

Differential Revision: D8056539

fbshipit-source-id: 1af7b675ec6805c2d8031f32d8a4c8e8929564e6
2018-05-23 15:06:17 -07:00
Adam Stern
b4c8ea180f give section controllers access to collection view scrolling traits
Summary:
I'd like to be able to access the current collection view scrolling traits inside section controllers. These are expressed as three properties from `UIScrollView`:

`isTracking`, `isDragging`, and `isDecelerating`.

My approach is to add a new struct `IGListCollectionScrollingTraits` with these three values, and expose this to section controllers through `IGListCollectionContext`.

Reviewed By: rnystrom

Differential Revision: D7986814

fbshipit-source-id: 19e9bd3b89545b10238dd060a5af8c5a0f39eb82
2018-05-14 14:56:54 -07:00
Ryan Nystrom
583efb936b Add experimental collectionView getter fix
Summary:
Adding a fix to the `IGListAdapterUpdater` that requests the `UICollectionView` to perform updates on until just-before we update. This way if the `UICollectionView` is changed between update-queue and execution (b/c updates are async), we guarantee the update is performed on the correct view.

See the accompanying unit test that fails w/out the fix enabled.

Differential Revision: D7889908

fbshipit-source-id: 7178677f34951a1e42986b0289fc4abc708d6946
2018-05-11 08:08:44 -07:00
Ryan Nystrom
5c33c88024 Update README and podspec with new license, bump version to 3.4
Summary:
See title
Closes https://github.com/Instagram/IGListKit/pull/1162

Differential Revision: D7836821

Pulled By: rnystrom

fbshipit-source-id: ebab8ec40a62ea467ae82546587bf49ae3a7d577
2018-05-01 16:10:19 -07:00
Ryan Nystrom
000bc36919 Relicense to MIT
Summary: Relicensing IGListKit under MIT

Reviewed By: calimarkus

Differential Revision: D7764125

fbshipit-source-id: 6c773195ef3184202725fe7f08de754f979cb83f
2018-05-01 14:50:56 -07:00
Ryan Nystrom
3059c5e6f5 Add experiment to defer requesting objects from data source until just before diffing
Summary:
Inspired by recent performance investigations in Instagram, adding an experimental feature to defer requesting objects from the `IGListAdapterDataSource` until //just before// diffing is executed. If //n// updates are coalesced into one, this results in just a single request for objects from the data source.

This is a **breaking change** to the public API, but since writing custom `IGListUpdatingDelegate`s is discouraged, I'm less worried about saving this for a major version launch.

Reviewed By: manicakes

Differential Revision: D7744518

fbshipit-source-id: f0001263cddda383e3dedd1d350a83d2cfb8362a
2018-04-26 08:27:49 -07:00
Ryan Nystrom
e0984202e7 Bump version to 3.3.0
Summary:
Updating the pod and project version to 3.3.0 in preparation for a new release.
Closes https://github.com/Instagram/IGListKit/pull/1150

Differential Revision: D7691115

Pulled By: rnystrom

fbshipit-source-id: 145bc0930eb4a04809f0f4a0e7fc2a326fbd366c
2018-04-19 14:06:20 -07:00
Chrisna Aing
f469c3440b Fix binding SC cell updates when the SC's section changes.
Summary:
Issue fixed: #1111

As discussed in the issue's comments, this seems to be the most expedient fix if we accept that `cellForItemAtIndex:` should be allowed within update blocks. I am not familiar enough with `IGListAdapter` to know whether this is the best solution but am willing to make any changes requested!

- [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)
Closes https://github.com/Instagram/IGListKit/pull/1144

Differential Revision: D7585125

Pulled By: rnystrom

fbshipit-source-id: 29a0e68da33bb4b94c2eb5e68844e537a7b05868
2018-04-11 08:00:40 -07:00
Ryan Nystrom
784f1beb9f Add experimental update coalescance feature and test
Summary:
Testing out new coalescence ideas after talking with @[100001606943892:tweilu]. Theory is that we can reduce stalls and improve scroll performance by batching more updates into one.

Need to test this out first.

Differential Revision: D7565003

fbshipit-source-id: b2e9fa39d52cc0b7aa59c2bfad709804ba0a0b63
2018-04-10 13:44:01 -07:00
Marcus Wu
e49c94b25d Show header when section item is empty
Summary:
Issue fixed: #1117

I adding a new constructor for making a `IGListCollectionViewLayout` instance that can always show sticky header although section data is empty.

It's working well and [this is demo project](https://github.com/marcuswu0814/IGListKit_ShowStickyHeaderWhenDataEmpty).

Bug I'm not sure is any good way to let this much more readability. Is there any good advice?

```objc
const CGRect headerBounds = (self.scrollDirection == UICollectionViewScrollDirectionVertical) ?
                CGRectMake(insets.left,
                        (itemCount == 0) ? CGRectGetMaxY(rollingSectionBounds) : CGRectGetMinY(rollingSectionBounds) - headerSize.height,
                        paddedLengthInFixedDirection,
                        headerSize.height) :
                CGRectMake((itemCount == 0) ? CGRectGetMaxX(rollingSectionBounds) : CGRectGetMinX(rollingSectionBounds) - headerSize.width,
                        insets.top,
                        headerSize.width,
                        paddedLengthInFixedDirection);
```

- [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)
Closes https://github.com/Instagram/IGListKit/pull/1129

Differential Revision: D7551628

Pulled By: rnystrom

fbshipit-source-id: a60b65a92efcea5175c86aaed1de02686ea6d20a
2018-04-09 08:37:18 -07:00
Sho Ikeda
9315299fbc Minimum fixes for Xcode 9.3 build errors
Summary:
Issue fixed: #1141

This is a set of minimum fixes for Xcode 9.3 rather than #1142. Much smaller diffs 😃

The changes here were done by Xcode's FixIt. See also https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html#//apple_ref/doc/uid/TP40004265-SW5.

> Platform Dependencies
>
> OS X uses several data types—NSInteger, NSUInteger,CGFloat, and CFIndex—to provide a consistent means of representing values in 32- and 64-bit environments. In a 32-bit environment, NSInteger and NSUInteger are defined as int and unsigned int, respectively. In 64-bit environments, NSInteger and NSUInteger are defined as long and unsigned long, respectively. To avoid the need to use different printf-style type specifiers depending on the platform, you can use the specifiers shown in Table 3. Note that in some cases you may have to cast the value.

- [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)
Closes https://github.com/Instagram/IGListKit/pull/1143

Differential Revision: D7551617

Pulled By: rnystrom

fbshipit-source-id: b27ebe2b1a1c93ebfd1218dc38b7621fefee2e6b
2018-04-09 08:37:18 -07:00
Cole Potrocky
9a45e166cb Updated IGListCollectionViewLayout to rely on layoutAttributesClass
Summary:
…instead of just allocating a vanilla UICollectionViewLayoutAttributes.    I'm happy to add tests here, but don't really have much of an opinion either way on whether this should have an explicit test case or not.

Issue fixed: #1134

- [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)
Closes https://github.com/Instagram/IGListKit/pull/1135

Differential Revision: D7551624

Pulled By: rnystrom

fbshipit-source-id: 930218c40b0082912454bb98bd02e7daa8257a3e
2018-04-09 07:45:56 -07:00
Brandon Kieft
01770eb303 Prefix all private methods with an underscore
Summary: Prefix all private methods with an underscore. A private method is defined as any method not exposed via an interface or protocol. This will improve the readability of the code and hopefully reduce bugs.

Reviewed By: rnystrom

Differential Revision: D7421346

fbshipit-source-id: 536472d57ea7fd8990fe50f3e950907ca57b8e6d
2018-04-02 15:08:21 -07:00
Jeremy Lawrence
f47753e361 Add dequeue method with reuse identifier
Summary: Added the ability to register/dequeue a cell with a customized reuse identifier. This will allow for registering the same cell class for multiple reuse identifiers, as will be needed for `IGListItemView` cells.

Reviewed By: rnystrom

Differential Revision: D7436575

fbshipit-source-id: d557836b5454c50611c5a5f9367f2f2e496c3878
2018-04-02 09:17:40 -07:00
Ryan Nystrom
df18195d18 Add deselect selector to proxy
Summary:
Issue fixed: #1105

- [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.

Unable to add tests w/out hacking `UITouch` events on a collection view. Open to suggestions.
Closes https://github.com/Instagram/IGListKit/pull/1108

Differential Revision: D7362200

Pulled By: rnystrom

fbshipit-source-id: fed640c2c017f0ade0cefff0b0d2118564dda3b0
2018-03-21 19:41:25 -07:00
Ryan Wang
afbfcbdf04 fixed Footer is sticky to the top
Summary:
if `stickyHeader` is true, the footer could be sticky to the top

Issue fixed: #1093

- [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)
Closes https://github.com/Instagram/IGListKit/pull/1094

Differential Revision: D7246636

Pulled By: rnystrom

fbshipit-source-id: 9b7da52ab46229606b530a378c01d799767e27f2
2018-03-12 15:51:50 -07:00
Kashish Goel
0f75e851a6 Fix mutating array datasource bug
Summary:
Copy objects when retrieving from datasource to account for the edge case where the returned data is a mutable array.

Issue fixed: #999

- [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)
Closes https://github.com/Instagram/IGListKit/pull/1109

Differential Revision: D7246645

Pulled By: rnystrom

fbshipit-source-id: d9b0c2ba07983bf46327d4ee1ba0eba2e194ba19
2018-03-12 15:51:50 -07:00
Ryan Nystrom
c4789356d7 Remove copy from result objects
Summary: Found a ~15% perf improvement on just insert/delete by removing copy. Saw traces from retaining the `NSMapTable` in profile.

Reviewed By: manicakes

Differential Revision: D6982523

fbshipit-source-id: 28c1539e06ecf3fe580bcccfecfc4915d4309714
2018-02-13 17:08:55 -08:00
Ryan Nystrom
afd2d29eec Add diffing optimization when result is all deletes or inserts
Summary:
In an attempt to best other diffing libraries, I noticed that pure insert/delete diffing results would be almost 5x slower than changes between existing arrays. This is pretty much a benchmarking enhancement, but improves diffing performance by ~5x when the from-array or to-array is empty.

```
// OLD only inserts
avg: 0.007469, min: 0.006998, max: 0.016550, p50: 0.007254, p75: 0.007712, p90: 0.007899, p95: 0.008345, p99: 0.016550
// NEW
avg: 0.001392, min: 0.001256, max: 0.006772, p50: 0.001289, p75: 0.001348, p90: 0.001533, p95: 0.001614, p99: 0.006772
```

```
// OLD only deletes
avg: 0.005821, min: 0.005669, max: 0.006511, p50: 0.005766, p75: 0.005852, p90: 0.006030, p95: 0.006204, p99: 0.006511
// NEW
avg: 0.001184, min: 0.001096, max: 0.001673, p50: 0.001123, p75: 0.001212, p90: 0.001378, p95: 0.001467, p99: 0.001673
```

Note the average time improvements (seconds).

Benchmarking done on a 4s w/ this project:
https://pxl.cl/bLBB

Reviewed By: manicakes

Differential Revision: D6968683

fbshipit-source-id: 0d8e058f0aaa9ce756ca69326527d04504ac6429
2018-02-13 10:13:44 -08:00
Ryan Nystrom
43fe81dd9f Tell compiler not to retain in helper functions
Summary: Tiny, measurable perf gain by removing any retains on these params.

Reviewed By: manicakes

Differential Revision: D6968685

fbshipit-source-id: f0ef1ecac6367661d125ea85dc1c9989bf2e9659
2018-02-13 10:13:44 -08:00
Ryan Nystrom
383660a100 Move index collection to static C function
Summary: Should also just be a c function instead of a block. Much simpler design.

Reviewed By: manicakes

Differential Revision: D6968682

fbshipit-source-id: f3bac6c5e0f93deec46449eb7abcb42f5e4e6071
2018-02-13 10:13:44 -08:00
Ryan Nystrom
d3e49fd789 Move map builder to static C function
Summary: This is much simpler as a static function instead of a block. Also taking an object vs plucking from the array will lend itself to better performance and reusability later.

Reviewed By: manicakes

Differential Revision: D6968684

fbshipit-source-id: 6166473feb20937ce6a1337b4b99a5a240778f56
2018-02-13 10:13:41 -08:00
Jared Verdi
f15b167e85 Interactive Reordering
Summary:
I had a desire for interactive reordering in a personal project, so here's a first attempt at adding support in IGListKit.

I figured I might as well get a WIP PR up for comments before I continue further as there are a few aspects to interactive reordering that don't interplay perfectly with IGListKit.

As discussed in #291, I went after two prime use cases:
1. Moving items amongst a section
2. Rearranging whole sections

I also "disabled" moving items between sections by having those moves revert, to mimic interactive reordering cancellation as closely as possible.

You can see both in the Mixed Data example. Grid items can be moved within a section, while users can be moved to reorder whole sections. But trying to move a grid item out of a grid or a user item into a grid will auto-revert. The revert animation isn't as tight as it should be. It may be more desirable to disable the animation - though you lose the visual cue.

There is a also a new example, `ReorderableViewController`, that demonstrates 2 in its pure form (likely the most desired use case), where all sections are reorderable single rows.

Happy to take feedback -- this is my first experience working on IGListKit, so I would expect there to be gaps. (Ex. I haven't used `IGListStackedSectionController`, and its tests failed as I hadn't implemented reordering delegates for it. Those are simply stubbed out for now.)

Issue fixed: #291

- [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)

- [x] Proper support in `IGListStackedSectionController`
Closes https://github.com/Instagram/IGListKit/pull/976

Differential Revision: D6674493

Pulled By: rnystrom

fbshipit-source-id: cd53c5fdc6fb59636edc4747c4bbd0f81a4610e5
2018-02-12 09:27:08 -08:00
Ryan Nystrom
f536e2136d Generate 3.2 docs
Summary:
Does this need to wait for #1086?
Closes https://github.com/Instagram/IGListKit/pull/1085

Differential Revision: D6917735

Pulled By: rnystrom

fbshipit-source-id: 08165c8d9f1215abac1d4bc7c65c1d23e31f758a
2018-02-06 15:47:20 -08:00
Ryan Nystrom
96445ef2a0 Update podspec, project, and examples to 3.2
Summary: Closes https://github.com/Instagram/IGListKit/pull/1087

Differential Revision: D6917772

Pulled By: rnystrom

fbshipit-source-id: a1e965c58d6da6ef5b32a3bc3c2f23f37fc64794
2018-02-06 15:47:20 -08:00
Zhisheng Huang
c617b18eb6 Move the DEBUG uniqueness check outside of for-loop inside IGListAdapter
Summary:
The original DEBUG was put inside a for loop, which caused a quadratic looping while creating bigger and bigger NSSet.

This is very inefficient and I verified that by profiling with 10000 objects in the array and it caused significant amount of CPU. The main thread is pretty much unresponsive.
Closes https://github.com/Instagram/IGListKit/pull/1084

Reviewed By: rnystrom

Differential Revision: D6903043

Pulled By: lorixx

fbshipit-source-id: 311e8a402eb8d5574fce0eabd626a674b6a5e8c5
2018-02-05 12:38:27 -08:00
Jesse Squires
95b779a584 Update .travis.yml and lint.sh, try to fix #1060 and lint errors #trivial
Summary:
project:
- fix file target membership issues in framework targets and test targets
- fix private/internal header imports, which shouldn't be `<IGListKit/` apparently
- fix static analyzer errors

travis:
- always install latest swiftlint
- ~~don't cache bundler, attempts to fix #1060~~
- remove markdown link check

swiftlint:
- make script non-failing if *any* version of swiftlint is installed
- warning if incorrect version is installed
- fail if not installed
- remove `scripts/generate_ci_yaml.rb`, we can just set the config file path directly
Closes https://github.com/Instagram/IGListKit/pull/1068

Differential Revision: D6885575

Pulled By: rnystrom

fbshipit-source-id: 51b7baa73feefcea71d870c1220d0382df484199
2018-02-02 13:16:46 -08:00
Michelle Deng
29a82d744d Revert D6871289: [IGListKit][PR] Removed unnecessary nil check on transitionDelegate
Summary:
This reverts commit 7ccf5a286ab4ee63bf72273142857496ce62b6f4

bypass-lint

An infra SEV is better than not reverting this diff.
If you copy this password, see you in SEV Review!
cause_a_sev_many_files

Differential Revision:
D6871289

Original commit changeset: 7ccf5a286ab4

fbshipit-source-id: e75cc7bd4a378e1092f4a01be3104fddb336759a
2018-02-02 07:35:07 -08:00
Ryan Nystrom
1d87526bab Fixup project file corruption
Summary:
Continuing issues raised in #1068. Project file was totally busted for macOS and AppleTV.
Closes https://github.com/Instagram/IGListKit/pull/1079

Differential Revision: D6883599

Pulled By: rnystrom

fbshipit-source-id: 29b118c87ffd302b3e54a47f81305292bd38a8fe
2018-02-02 07:02:04 -08:00
Igor Vasilenko
316779fb74 Removed unnecessary nil check on transitionDelegate
Summary:
Issue fixed: #1071

- [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)
Closes https://github.com/Instagram/IGListKit/pull/1076

Differential Revision: D6871289

Pulled By: rnystrom

fbshipit-source-id: 7ccf5a286ab4ee63bf72273142857496ce62b6f4
2018-02-01 07:04:42 -08:00
Ryan Nystrom
64676d5907 Add collection view as an exception param and capture data source state on crash
Summary:
Adding more metadata about the state of the data source at the time of crash.

Note that this will be a breaking change to the public repo, but it's on a much-less used API, and since this is very high-pri for us at the moment, I'm willing to make the breakage.

Reviewed By: manicakes

Differential Revision: D6863683

fbshipit-source-id: e979aea445abc1ea556182cb69758703499e161a
2018-01-31 15:16:59 -08:00
Vasilenko Igor Vladimirovich
f55b6d2895 Made IGListTransitionDelegate inherited from NSObject
Summary:
Issue fixed: #1072

Changes don't need new 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)
Closes https://github.com/Instagram/IGListKit/pull/1075

Differential Revision: D6858886

Pulled By: rnystrom

fbshipit-source-id: ec3816cc66aa2f10c21ccc7dea6078adc034e74e
2018-01-31 11:17:59 -08:00
zhongwuzw
8bccac9a79 Optimize SEL search efficiency
Summary:
Optimize `SEL` search efficiency, reduced the time complexity from O (n) to O (1).

Not need 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)
Closes https://github.com/Instagram/IGListKit/pull/1055

Differential Revision: D6839942

Pulled By: rnystrom

fbshipit-source-id: 911755d6f8a4cd79b387423a51b6ea44cc7a2a07
2018-01-29 20:32:57 -08:00
Sue Suhan Ma
26924ec3b6 Customized post insertion animation
Summary:
The current animation is the collection default animation - fade in/out: demo: https://pxl.cl/bj8R
Based on our design, we want the Shelf to be push down: demo https://pxl.cl/bj9R

1. Created **IGListCollectionViewDelegate** which inherits **UICollectionViewDelegateFlowLayout**
2. **IGListAdapter ** conforms **UICollectionViewDelegateFlowLayout**
3. add **transitionDelegate** to IGListSectionController
4. **IGFeedSectionController** sets transitionDelegate as itself and handles IGListCollectionViewDelegate methods

Reviewed By: rnystrom

Differential Revision: D6785726

fbshipit-source-id: bdf19f84fef05264ca0e082c6a326a31494a20da
2018-01-29 11:03:11 -08:00
Maxime Ollivier
17c4d02119 fix IGListKit updates logging
Summary:
* Issue: we don't log the IGListKit updates
* Cause: IGListAdapterUpdater clears the ongoing updates before we call the delegate (https://fburl.com/76w5wvpl)
* Fix: keep a hold of the updates before calling executeCompletionBlocks(...)

Reviewed By: rnystrom

Differential Revision: D6750327

fbshipit-source-id: a30572873ab753b067977288cdb465a2a222e715
2018-01-18 13:17:31 -08:00
Maxime Ollivier
a8275e08e1 clarify assert message
Summary:
* Clarify assert message by adding item width/height
 * Before: Width of item 1 in section 2 must be less than container 375 accounting for section insets {0, 0, 0, 0}
 * After: Width of item 1 in section 2 (415 pt) must be less than or equal to container (375 pt) accounting for section insets {0, 0, 0, 0}

Reviewed By: rnystrom

Differential Revision: D6711829

fbshipit-source-id: be99e83fd68cd345cb6a05acdde27c8252e59650
2018-01-16 07:59:35 -08:00
Ryan Nystrom
8ae6013d0e Test fixing double insert crash
Summary: Looking at crash logs, the new high-firing crash has 2 item inserts in it. Test deduping the insert. Testing b/c I want to make sure there aren't any weird side effects.

Differential Revision: D6605474

fbshipit-source-id: 522120074aed2ed4995104443d48d8254ddb4fec
2017-12-20 06:31:42 -08:00
Jesse Squires
ae7f36f5c2 Update gems, fix warnings, pod install
Summary:
- Update CocoaPods + Gems
- Update SwiftLint version
- Fix lint errors
- Fix `pod_setup.sh` script, move to `scripts/` (should now be run from root dir)
- Run `pod_setup.sh`
Closes https://github.com/Instagram/IGListKit/pull/1038

Differential Revision: D6602297

Pulled By: rnystrom

fbshipit-source-id: 1bf69611e041903cf982fe7d9a95197729e44d94
2017-12-19 09:31:37 -08:00
Darren Clark
6e4979f6c4 IGListSingleSectionControllerDelegate: add deselect delegate method
Summary:
Added `-didDeselectSectionController:withObject:` to `IGListSingleSectionControllerDelegate`.

Not sure if it makes sense to make it non-optional in 4.0.0 or not (#909) - I can add the [same note](0f04a07319/Source/IGListBindingSectionControllerSelectionDelegate.h (L40)) to the docs if it is

- [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)
Closes https://github.com/Instagram/IGListKit/pull/954

Differential Revision: D6164711

Pulled By: rnystrom

fbshipit-source-id: aa8cfd2bb72a16cb525d875e2cad93888f13c641
2017-12-18 12:45:09 -08:00
Yury Bogdanov
bc4132dba7 Negative size assertion
Summary:
Assertions for item's size added to prevent negative values return from IGListAdapter

Issue fixed: #977

- [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)
Closes https://github.com/Instagram/IGListKit/pull/992

Reviewed By: ryanolsonk

Differential Revision: D6272307

Pulled By: rnystrom

fbshipit-source-id: 844affd914329e0ca04597ada2952f1a077897af
2017-12-18 11:47:45 -08:00
yiplee
e63a0e78fe Add new iOS 11 api adjustedContentInset support
Summary:
adopt adjustedContentInset instead of contentInset on iOS 11

- [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)
Closes https://github.com/Instagram/IGListKit/pull/1020

Reviewed By: manicakes

Differential Revision: D6513703

Pulled By: rnystrom

fbshipit-source-id: 5d718f2cb30361959ca5ba8238746427223cb5fd
2017-12-18 08:51:14 -08:00
Maxime Ollivier
74c5fb3566 Update pods and examples
Summary:
Update pod and examples so project builds when synced

Depends on D6545334

Reviewed By: rnystrom

Differential Revision: D6573821

fbshipit-source-id: b0d4246fa9c0d627ebcd34ac7abd5c8453964037
2017-12-15 09:33:39 -08:00
Maxime Ollivier
23bcc5c7c0 created IGListCollectionView
Summary: * IGListCollectionView passes update information to IGListCollectionViewLayout.

Reviewed By: rnystrom

Differential Revision: D6510139

fbshipit-source-id: ada194d009eca7f308887ec592ecc41fb9557855
2017-12-15 09:33:39 -08:00
Maxime Ollivier
f0b947cd1f expose didModifySection on IGListCollectionViewLayout
Summary: * IGListCollectionViewLayout can now keep track of the minimumInvalidatedSection given individual section updates.

Reviewed By: rnystrom

Differential Revision: D6545333

fbshipit-source-id: 64c9b5ff32339299b52059a4d990a42d9e6a1af5
2017-12-15 09:33:39 -08:00
Maxime Ollivier
7a23ed521d update IGListCollectionViewLayout to allow for partial layout invalidation
Summary:
* Currently, we invalidate the entire layout whenever we make any updates, like inserting new rows at the bottom.
* This is one of the most common causes of frame drop on feed, so let's allow partial invalidation based on the minimum modified section.
  * For example, if we delete section 10, move section 4, and insert section 12, we would re-calculate the layout starting at section 4.
* This gets us the majority of the performance gains and it's relatively simple. In the future, we can make further optimizations, like 1) index path level invalidation and 2) finding the smallest modified index path whose properties (ex: size) have actually changed.

Reviewed By: rnystrom

Differential Revision: D6510140

fbshipit-source-id: 6ff1766b400c5aa82abc29ae76ab96660c3bb106
2017-12-15 09:33:39 -08:00
Ryan Nystrom
296baf5f85 Assert duplicate objects and check object types on map lookup
Summary:
Followup to make sure that object type mismatches can't happen, even if identifiers collide (which is discouraged). Add assert when duplicates are detected.

Patched some unit tests while I'm in here.

Reviewed By: calimarkus

Differential Revision: D6439094

fbshipit-source-id: d669c01734e5ce9483e851051f548d9960b3087c
2017-11-30 12:48:07 -08:00
Markus Emrich
85b1a42ec6 Add additional logging of fromClass for convertReloadToDeleteInsert assertion
Summary:
It's hard to figure out what the problem is, if you don't know which viewModel causes the trouble at all.
Let's add the class name to the assertion message.

Differential Revision: D6419460

fbshipit-source-id: 58edebca7839871b6d48e463caad957d7920e129
2017-11-27 16:01:31 -08:00
Ryan Nystrom
2d5eed2477 Add docs warning about reloadData being expensive
Summary: Followup from performance findings.

Reviewed By: maxoll

Differential Revision: D6388330

fbshipit-source-id: 057d5f49b5b8fd7216b795fef3977beba9368b3a
2017-11-21 13:18:17 -08:00
yemodin
c7d4dc29a8 Make sure collection have unique ListDiffable objects on initial data…
Summary:
… source setup too

Issue fixed: #815

- [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)
Closes https://github.com/Instagram/IGListKit/pull/993

Reviewed By: manicakes

Differential Revision: D6388270

Pulled By: rnystrom

fbshipit-source-id: e5e7e047bad5f21b81b562ebd586f7f5036325ff
2017-11-21 13:18:12 -08:00