Commit graph

421 commits

Author SHA1 Message Date
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
Igor Vasilenko
a0cf76c757 Added support UICollectionElementKindSectionFooter for IGListCollectionViewLayout
Summary:
**Changes occurred only for the IGListCollectionViewLayout.**

**Specifically:**
1. Harnessed the hardcore to the fact that it is possible to use only headers.
2. Assertions removed
3. Caching for layout of attributes of footers
4. Implemented the location of the footers in any orientation scroll

Issue fixed: #898

I need this enhancement ASAP 🙏

**Example:**
Footers with user comments count
![simulator screen shot - iphone 6 - 2017-11-14 at 13 35 22](https://user-images.githubusercontent.com/7735730/32775551-c69868cc-c940-11e7-8307-ae2e353519ff.png)

- [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] I updated example project with implemented feature
Closes https://github.com/Instagram/IGListKit/pull/1017

Reviewed By: jeremycohen

Differential Revision: D6385893

Pulled By: rnystrom

fbshipit-source-id: 5f1bad5655d2df321f8c71496aa797ac8e3d226a
2017-11-21 12:45:38 -08:00
Ryan Nystrom
2f17cb5fdf Revert D6264886: [IGListKit][PR] Make sure collection have unique ListDiffable objects on initial data…
Summary:
This reverts commit 5159b7989f1d17fd0a7522d986ed6abf012da77f

bypass-lint

Differential Revision: D6264886

fbshipit-source-id: 54b230fab0e7b1fdf15e065e60f4c3bfd743629b
2017-11-17 12:33:54 -08:00
Maxime Ollivier
82a2a2ee18 added experiment to make [IGListAdapter visibleSectionControllers] a bit faster
Summary:
* Issue: [IGListAdapter visibleSectionControllers] calls [UICollectionViewLayout layoutAttributesForElementsInRect:] which can be expensive. And since visibleSectionControllers is called in scrollViewDidScroll, it can add up and take a toll on scroll performance. On an iPhone 7, it's in 2-10% of the main-thread samples (using Time Profiler).
* Fix: IGListDisplayHandler conveniently keeps track of visible IGListSectionControllers, so let's just use that. Now, [IGListAdapter visibleSectionControllers] drops to ~0.3% of samples.

Reviewed By: rnystrom

Differential Revision: D6351474

fbshipit-source-id: 66914db95e08498927bfbceda4d2e9d58cbc7530
2017-11-16 16:07:29 -08:00
yemodin
319928f697 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: jeremycohen

Differential Revision: D6264886

Pulled By: rnystrom

fbshipit-source-id: 5159b7989f1d17fd0a7522d986ed6abf012da77f
2017-11-15 11:27:25 -08:00
Saad Ismail
ee7813a730 Fixing Build Issues when Running IGListKit-tvOSTests
Summary:
tvOS Tests were failing because `IGListAdapterUpdateTester` was being used by `IGListAdapterE2ETests` but `IGListAdapterUpdateTester` was not included in the tvOS Target.

Error Msg:
```
Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_IGListAdapterUpdateTester", referenced from:
      objc-class-ref in IGListAdapterE2ETests.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
```

Reviewed By: rnystrom

Differential Revision: D6251880

fbshipit-source-id: 463452c2206bac79e9c5738306b61c693ea580ca
2017-11-07 13:06:58 -08:00
Saad Ismail
d6e26d54e8 IGListDiffKit
Reviewed By: rnystrom

Differential Revision: D6201376

fbshipit-source-id: c7d2e643de5329f00f6d7a2bec4f0fc86e81f27b
2017-11-06 17:02:06 -08:00
Rizwan Mohamed Ibrahim
b3ffafc018 Adds header docs to listener API in IGListAdapter #trivial
Summary:
Issue fixed: #997

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

Differential Revision: D6233518

Pulled By: rnystrom

fbshipit-source-id: ba944c29d094ac83554a97326bc5212ef1fd8671
2017-11-03 13:41:03 -07:00
Ryan Nystrom
8cffc50d7d Copy and nil block queue before executing #trivial
Summary:
Discovered in rnystrom/GitHawk#781 and introduced in d9a89c9b00. Can't repro in unit test, but have obvious stack traces (see GitHawk issue) that collection is being mutated while enumerated.

No changelog since this is a new fix for 3.2.
Closes https://github.com/Instagram/IGListKit/pull/995

Reviewed By: manicakes

Differential Revision: D6206957

Pulled By: rnystrom

fbshipit-source-id: c42e3688d0f2b31693199f8015b5de48b7b3b9e6
2017-11-03 11:29:41 -07:00
Ryan Nystrom
a6f264fc12 Update project settings and fix errors
Summary:
Updated the main project lib settings for iOS 11, fixed all errors (which are from warnings-as-errors).

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

Differential Revision: D6161473

Pulled By: rnystrom

fbshipit-source-id: 1fd51d8805f9c6483942b44d750b2756efde9376
2017-10-26 11:20:55 -07:00
Rizwan Mohamed Ibrahim
22af00307c Error when editing docs directory
Summary:
Issue fixed: #963

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

Differential Revision: D6161614

Pulled By: rnystrom

fbshipit-source-id: 7fcb71a57453ac0be55909030d6934a1701a49ba
2017-10-26 11:01:47 -07:00
Ryan Nystrom
65b41d4038 Rearrange duped headers in changelog #trivial
Summary:
Caught this late. 2 "enhancements" headings �
Closes https://github.com/Instagram/IGListKit/pull/947

Differential Revision: D6161492

Pulled By: rnystrom

fbshipit-source-id: 623a5ba8783778c4d799bae6ac02cf0f4fcf8934
2017-10-26 10:46:22 -07:00
jeop10
b166528853 Update Getting Started.md
Summary:
Update Getting Started file to display that 'IGListDiffable' has been renamed to 'ListDiffable' (as seen on Xcode)

Issue fixed: N/A

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

Differential Revision: D6161503

Pulled By: rnystrom

fbshipit-source-id: a3602393bb29a31d05fd9590aaa44f03bd5827d7
2017-10-26 10:42:37 -07:00
Ryan Nystrom
5cf01cc0a7 Add update finished announcer API
Summary:
Adding a new API to support adding 1:many listeners to observe when an `IGListAdapter` finishes performing an update event. It supports:

- `performUpdates:`
- `reloadData...`
- Even handling update triggered from //inside// a section controller

Differential Revision: D6108096

fbshipit-source-id: d0b43d83f1963fdbf6ef388685cbd8f6890177fa
2017-10-20 08:57:11 -07:00
Ryan Nystrom
48aff22218 Update examples pods so they build #trivial
Summary:
Fixes examples failing to build after #916. I should have looked at Travis closer, my bad!

- [x] All tests pass. Demo project builds and runs.
Closes https://github.com/Instagram/IGListKit/pull/946

Differential Revision: D6008573

Pulled By: rnystrom

fbshipit-source-id: 727da8f8e8d1079c7840aa9db1152477bf1058ee
2017-10-09 06:45:45 -07:00
Jakub Grzmiel
0f04a07319 Fix format warnings for clang 5.0
Summary: Fix format warning which occur when using clang 5.0 compiler.

Reviewed By: mzlee

Differential Revision: D5900751

fbshipit-source-id: 4e9aea068aab3d2d882b8fb103a8828e861da97c
2017-09-25 10:34:51 -07:00
Ryan Nystrom
2f8bcda837 Inhibit all warnings from OCMock #trivial
Summary:
Removing project warnings from third party libs. Mostly from iOS 11 changes.
Closes https://github.com/Instagram/IGListKit/pull/943

Differential Revision: D5890504

Pulled By: rnystrom

fbshipit-source-id: ddda53b57571c46cc5f50e0b2337ec24b98e8261
2017-09-22 12:02:31 -07:00
Ryan Nystrom
f7220b5cfe Update example project files, convert to Swift 4, and fix errors
Summary:
Used migration tool with Swift 4, fixed build errors, and killed all warnings. Only non-trivial change was in the macOS example. Will flag that one.

No changelog needed for this, right?

- [x] All tests pass. Demo project builds and runs.
Closes https://github.com/Instagram/IGListKit/pull/941

Differential Revision: D5890505

Pulled By: rnystrom

fbshipit-source-id: 7e0d3510ff0e5856a0ffd59f1a97548a72266c20
2017-09-22 06:55:23 -07:00
Ryan Nystrom
b2860c3604 Fix scrollToObject: bug when scrolling to bottom with content inset
Summary:
This has been around forever, surprised we've never run into it. Instagram doesn't really use the `bottom` position except for one place that is already at the bottom of a view. Looks like this bug has just been hanging around quietly for ages.

`UIScrollView` takes into account the content inset when changing the content offset. Doing math w/ the inset is both useless and incorrect.

Issue fixed: #932

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

Differential Revision: D5881117

Pulled By: rnystrom

fbshipit-source-id: 5c9af4b6f8b59be977491ba734e9b0fa3c538cb9
2017-09-21 11:16:32 -07:00
Kim de Vo
595c09e5ec Removed empty methods
Summary:
Issue fixed: #

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

Differential Revision: D5881110

Pulled By: rnystrom

fbshipit-source-id: 7f20fcaac04f64576a52ca68af87d3db64f199b9
2017-09-21 07:17:01 -07:00
Weyert de Boer
4f970d2317 Dedupe view models in IGListBindingSectionController
Summary:
Issue fixed: #700

- [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/916

Reviewed By: manicakes

Differential Revision: D5872117

Pulled By: rnystrom

fbshipit-source-id: 420190566c0a822834d8a3b64202f6d807e6a487
2017-09-20 18:04:11 -07:00
Ryan Nystrom
d9a89c9b00 Defer invalidatation until all batch updates are finished
Summary:
Added a mechanism to `IGListAdapter` to defer (_queue or execute_) blocks around asking the updater to do batch updates. I discovered a crash where the `_updateCompletionHandler` (private ivar) of `UICollectionView` was not being niled when two batch updates collide. There is an assert in `-[UICollectionView dealloc]` that fires if this block != nil. Took some reverse eng to track down what is happening.

Sadly I cannot reproduce the issue in a unit test _or_ sample app. However I can 100% repro this in my GitHawk app. Applying this patch fixes the problem. I added a unit test that got me _close_ to the state of the crash. Consider this new test future-proofing (also covers the enter/exit/defer stuff).

Also dumping the `UICollectionView` internals confirms that the bad state (`_updateCompletionHandler != nil`) is no longer true.

Issue fixed: #929

Depends on #930

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

Differential Revision: D5863761

Pulled By: rnystrom

fbshipit-source-id: 496aa939e3a5e83472b26bfb5a4cdc872f58cc0e
2017-09-20 09:49:48 -07:00
Kevin Delannoy
9ddc64f4ce Add cell (un)highlight APIs
Summary:
This implements the `collectionView:didHighlightItemAtIndexPath:` and `collectionView:didUnhighlightItemAtIndexPath:` `UICollectionViewDelegate` APIs and forward the calls to the appropriate `IGListSectionController`.
For the most part, it's doing the same thing as the `collectionView:didDeselectItemAtIndexPath:` calls and tests are also based on that feature.

- Implements `collectionView:didHighlightItemAtIndexPath:` and `collectionView:didUnhighlightItemAtIndexPath:` in IGListAdapter
- Catch those selectors in `IGListAdapterProxy`
- Adds `didHighlightItemAtIndex:` and `didUnhighlightItemAtIndex:` methods to IGListSectionController and friends (supports `IGListBindingSectionController` via its delegate and `IGListStackedSectionController`)
- Tests for changes

Issue fixed: I didn't open one, so none I guess.

- [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/933

Differential Revision: D5872090

Pulled By: rnystrom

fbshipit-source-id: adc93b68aced3e995f32c291bf607a263cd58edf
2017-09-20 08:46:17 -07:00
Ryan Nystrom
d322c2e5ae Weak reference collection view when queueing update
Summary:
Found a "bug" when adding some new unit tests. The queue method holds a strong ref to the collection view, and doesn't release it until that block is executed. The adapter may have already been released, holding onto the collection view is wasteful.

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

Differential Revision: D5861975

Pulled By: rnystrom

fbshipit-source-id: 986ead725839d39b30daadf92675b397f8794520
2017-09-19 09:03:42 -07:00
Rishabh Tayal
3f7c7f316a Fixed Search controller section in example project
Summary:
The search bar used to set the text as empty when the user scrolls.
Closes https://github.com/Instagram/IGListKit/pull/922

Differential Revision: D5768667

Pulled By: rnystrom

fbshipit-source-id: 8a77708c2bd4101fbdef1401a1ad0d8d6e2fae7d
2017-09-05 12:12:00 -07:00
Weyert de Boer
bb983cf918 Refactors/macos example
Summary:
Issue fixed: #381

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

Differential Revision: D5758006

Pulled By: rnystrom

fbshipit-source-id: cbc3f19b6bb9604d8a6c8c15a16414e558e3b70c
2017-09-01 14:00:52 -07:00
Ryan Nystrom
65a5e6de05 Fix binding SC deselection crash and publish 3.1.1
Summary:
- Fixed #918 by checking `respondsToSelector:` (boo optionals)
- Cut 3.1.1 for immediate publish

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

Differential Revision: D5748009

Pulled By: rnystrom

fbshipit-source-id: b387b3988abc785f312bc47ac003851283972d7a
2017-08-31 12:51:10 -07:00
Ryan Nystrom
0ad49e16f0 Pod install 3.1.0
Summary:
Updating example pods via script
Closes https://github.com/Instagram/IGListKit/pull/911

Differential Revision: D5695840

Pulled By: rnystrom

fbshipit-source-id: 7aaaf9f07e0aa0cccbebbcbd12d9e5a617755cf1
2017-08-23 19:32:17 -07:00
Ryan Nystrom
380b988f3c Fixup changelog for 3.1.0 #trivial
Summary:
Fill in tbds and formatting
Closes https://github.com/Instagram/IGListKit/pull/910

Differential Revision: D5692503

Pulled By: rnystrom

fbshipit-source-id: 9405e7d0348de39710e114df96bb75394919a1d4
2017-08-23 18:17:14 -07:00
Ryan Nystrom
d516867003 Regen documentation for 3.1.0
Summary:
Preparing for 3.1.0 release, regen all documentation

⚠️ wait for #899, #908 to land, rebase, and regen ⚠️
Closes https://github.com/Instagram/IGListKit/pull/907

Differential Revision: D5691928

Pulled By: rnystrom

fbshipit-source-id: 4e8a13c7b25bef2622c4212552a754d0f7d7da62
2017-08-23 14:18:11 -07:00
Phil Larson
1717b2c904 IGListAdapter support for scrollViewDidEndDecelerating
Summary:
References #842

We use -[UIScrollViewDelegate scrollViewDidEndDecelerating:] delegate callback in the app we are building to hide/show elements when motion has ended.
Closes https://github.com/Instagram/IGListKit/pull/899

Differential Revision: D5689239

Pulled By: rnystrom

fbshipit-source-id: ea17fe94ccacc5e4f0a9e085e61f8f77cfcea3b4
2017-08-23 13:30:44 -07:00
Ryan Nystrom
d936d79b93 Bump versions to 3.1.0
Summary:
Bumping project, pod, and doc versions to 3.1.0
Closes https://github.com/Instagram/IGListKit/pull/908

Differential Revision: D5689815

Pulled By: rnystrom

fbshipit-source-id: 30345f12538f57efb467bf8159ec9645fe8aea96
2017-08-23 11:33:50 -07:00
Gulam Moledina
f79516ee66 Proper support vertical and bottom positions in IGListAdapter scrollToObject: API
Summary:
I simply wrote failing tests for `scrollToObject` API for the `ScrollPosition` parameter and then fixed the code.

If we agree that these tests are correct, I don't mind suggesting a fix for it. I think it's the `indexPath`'s row that is hardcoded to `0` that needs to be changed depending on the `scrollPosition` desired. (Done!)

- [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/861

Differential Revision: D5678607

Pulled By: rnystrom

fbshipit-source-id: ab902b58fe70667ef6133cb05569a2223a668243
2017-08-22 13:31:27 -07:00
Ryan Nystrom
1fccfce0f1 Create binding and modeling guide/tutorial
Summary:
Adds a tutorial-style guide on how to approach modeling given a design, how to effectively use `IGListBindingSectionController`, and how to do local mutations/updates.

You can read the [formatted guide here](https://github.com/Instagram/IGListKit/blob/binding-guide/Guides/Modeling%20and%20Binding.md).

Issue fixed: #755, #799, #697
Closes https://github.com/Instagram/IGListKit/pull/903

Differential Revision: D5673178

Pulled By: rnystrom

fbshipit-source-id: 8b0ff6008faff9781c6b290d1ad2395e0225c1c9
2017-08-21 14:46:53 -07:00
Ryan Nystrom
5ca167806b Disable prefetching when setting the collection view
Summary:
Followup from #852 since `UIAppearance` doesn't have any effect. Automatically disable prefetching.

Issue fixed: #846

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

Reviewed By: jeremycohen

Differential Revision: D5651413

Pulled By: rnystrom

fbshipit-source-id: ed602aa4609038bd629c9366c383a23f32fc88df
2017-08-21 07:30:10 -07:00
Ryan Nystrom
ae3604c3fe Restore scrollToObject: API with layout fix
Summary:
Reverting the revert in D5651413. The origin PR:

https://github.com/Instagram/IGListKit/pull/808/files

Had a small bug in it that wasn't captured via unit tests b/c we use a custom layout. However this should also repro in `IGListCollectionViewLayout`, but none of our tests combine the two atm.

Differential Revision: D5651585

fbshipit-source-id: da6c67cba57ab1aad51535467bff86a21f16f2fa
2017-08-21 07:06:32 -07:00
Hesham Salman
7b56f64794 Disabled force_unwrapping, trailing comma, line_length rules
Summary:
References #894

Disabled force unwrapping, but force try and force cast rules are still in effect:
```swift
let k = object.things! // no longer causes a warning
let r = object.fidget as! Spinnable // causes warning
let s = try! object.doDangerousTask() // causes warning
```
Closes https://github.com/Instagram/IGListKit/pull/897

Differential Revision: D5651127

Pulled By: rnystrom

fbshipit-source-id: 7174cc52d24de3c2cdc15a29c7b053b12d68b1e3
2017-08-17 12:00:22 -07:00
Ryan Nystrom
79b8290a1e Back out D5353285 which crashes custom layout
Summary: Public PR crashes our custom layout b/c requesting # of items doesn't trigger `prepareLayout` on the layout. End up w/ OOB exceptions.

Differential Revision: D5622021

fbshipit-source-id: ecc8cc7bfb38e3ebe7f7433c96b816469f16774c
2017-08-14 10:05:07 -07:00
Gulam Moledina
e8ddaf8740 Fix CollectionView scroll behaviour when section is empty
Summary:
Issue fixed: When a section is empty (0 cells) but has a header/footer supplementary views, calling `scrollToObject:supplementaryKinds:scrollDirection:scrollPosition:animated` wouldn't do anything as the method implementation has an early return if the section doesn't have any cells:
![screen shot 2017-06-15 at 14 07 18](https://user-images.githubusercontent.com/978865/27195239-fd86401e-51d3-11e7-8630-a018fbba6858.png)

As the section does have supplementary views and is displayed on screen, there's no reason not to scroll to it. This minor change fixes this detail.

Change in internal implementation of one method - all current tests pass. No tests added.

- [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/808

Differential Revision: D5353285

Pulled By: rnystrom

fbshipit-source-id: 2b6700f98f7d38716d655dfecceb0353d65ef681
2017-08-11 15:45:00 -07:00
Jesse Squires
0a292a82d4 warn if no milestone on PR
Summary:
😄
Closes https://github.com/Instagram/IGListKit/pull/890

Differential Revision: D5613905

Pulled By: rnystrom

fbshipit-source-id: 1c2b2b46c118741a7b5b84b568a69bf4edb3a199
2017-08-11 12:46:29 -07:00
Candance Smith
1faf59b302 Added debug dump support to IGListBindingSectionController
Summary:
Issue fixed: #698

- [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/856

Differential Revision: D5611625

Pulled By: rnystrom

fbshipit-source-id: d9d54e2a10cf0cfae6cff121c20cc8d24d802716
2017-08-11 09:19:00 -07:00
Brandon Everett
61c5170a60 add Xcode9 fileheader
Summary:
This adds the new default header option added in Xcode 9 B3. This works except for `//` being appended at the beginning which is referenced as a radar in the link (rdar://33451838). I used this as the default header. Let me know if you would like something else.

```/**
 * 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.
 */
```

Issue fixed: #875

- [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/882

Differential Revision: D5611619

Pulled By: rnystrom

fbshipit-source-id: afcb11589351567eee9fea72d448cb1689153e29
2017-08-11 09:07:52 -07:00
Maxime Ollivier
6f946b2981 fixed IGListAdapterUpdater completion block animation transaction
Summary:
* Issue: UIView animation blocks created within IGListAdapterUpdater's completion block work sporadically. Example: Direct message animation:

https://pxl.cl/8sTk

* Cause: completion block called within CATransaction begin/commit
* Fix: commit CATransaction before calling completion block

Reviewed By: rnystrom

Differential Revision: D5592948

fbshipit-source-id: e7b20877b688a6a221a87b152ead830ccb34f12a
2017-08-10 06:17:44 -07:00
Peter Edmonston
9e312275c3 Add horizontal scrolling support to IGListCollectionViewLayout
Summary:
Issue fixed: #752

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

This PR generalizes the layout logic in `IGListCollectionViewLayout.mm` to handle horizontally scrolling layouts, mainly by generalizing references to `width`, `height`, `x` and `y` to take scrolling direction into account. This changes the signature of `IGListCollectionViewLayout.init` as well as the names of a few properties, so it would be a breaking change.

I added a couple of unit tests specifically for horizontal layouts -- but held off from adding a horizontal version of *every* unit test for this class, as it would basically double the number of tests. But if you want that, just let me know and I'm happy to do it.

Also let me know if you want me to add a demo VC to the Examples project that uses this new horizontal flow layout -- I have some demo code handy (I used it for testing), but didn't want to clutter up the PR if you didn't want/need it.
Closes https://github.com/Instagram/IGListKit/pull/857

Reviewed By: ryanolsonk

Differential Revision: D5547266

Pulled By: rnystrom

fbshipit-source-id: 6094c45069fc265273d0f95c296fa78e47470384
2017-08-07 09:33:30 -07:00
Marvin Nazari
5bede7b78e Select an item through IGListCollectionContext
Summary:
We already had a API to deselect an item through `IGListCollectionContext` this is the support for selecting an item.

- [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/874

Reviewed By: ryanolsonk

Differential Revision: D5562902

Pulled By: rnystrom

fbshipit-source-id: 756a154607d7d758faddc70ac784e544739f5a93
2017-08-04 15:19:56 -07:00
Ben Asher
7fb228728a Add Gemfile and setup travis to cache the dependencies
Summary:
Issue fixed: #757

Added gems to a `Gemfile`, CocoaPods is part of the default [gem set](https://docs.travis-ci.com/user/reference/osx/#Gems-in-the-global-gem-set).

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

Reviewed By: ryanolsonk

Differential Revision: D5562906

Pulled By: rnystrom

fbshipit-source-id: fe14916644576d1eba9da540ef5a3c0e6294fa13
2017-08-04 15:08:15 -07:00