Summary:
We constantly have random bugs pop up when mutations are made outside of a batch update. This change restricts the mutation API to a batch context object (which is just an `IGListAdapter`) so they can only be done **inside an update block**.
- Fixed open source project
- Confirmed open source examples build
- Updated all of Instagram.app to use this API
- Changelog breaking changes entry
Fixes#392
Reviewed By: jessesquires
Differential Revision: D4754129
fbshipit-source-id: 11d32a0fac3e50c9edbb01e92a8a0c7b8a43cf2d
Summary:
- The recent addition of `IGListCollectionViewLayoutInternal.h` in a80245a696 broke the example project. This PR fixes this.
- Name sorted the internal files
- [x] All tests pass. Demo project builds and runs.
- [x] Why didnt Travis catch this? 🤔
- [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/569
Differential Revision: D4740682
Pulled By: rnystrom
fbshipit-source-id: 2c57d03f9751d14edf35741eaa97d0ae8a2f167a
Summary:
Add API for #315. Not sure if this is what you want rnystrom though 🤔. Will add tests after you confirm.
- [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/456
Reviewed By: jessesquires
Differential Revision: D4697190
Pulled By: rnystrom
fbshipit-source-id: f8513cf2fa33441eb40f486954136553d19dda0c
Summary:
Started work on the plane to get this moving since #418 is up and ready to land. We'll likely need to spend some time fleshing out the API of this, and I think I'll split it up into a couple different PRs once ready for review. Putting this up now to get early feedback.
This adds an auto-diffing section controller as outlined in #38. There are several key parts:
- Subclass a new section controller `IGListAutoSectionController` (naming wip)
- Connect a data source
- Implement the data source methods that do 3 things:
- Given a top-level object, transform it into an array of **diffable** view models
- Given a view model, return a cell
- Given a view model, return a size for a cell
- A new protocol for the cell `IGListBindable` so that we can control when the cell is updated w/ the view model.
- The most important part of this is that it unlocks moving and reloading a cell, which you can't do w/ `UICollectionView`
- [ ] Unit test `reloadObjects:`
- [x] Add
Closes https://github.com/Instagram/IGListKit/pull/494
Reviewed By: amonshiz
Differential Revision: D4696966
Pulled By: rnystrom
fbshipit-source-id: f21b8341b3ed4389f2a4a106d0d316f481ba6943
Summary:
Project settings match internal project gen settings. Was missing from tests.
Issue fixed: #544#545
- [x] All tests pass. Demo project builds and runs.
- [x] I added tests, an experiment, or detailed why my change isn't tested.
Closes https://github.com/Instagram/IGListKit/pull/549
Differential Revision: D4701754
Pulled By: rnystrom
fbshipit-source-id: f891c1db074a5e54994af3043fdc19c36cbbe371
Summary:
Batch updates are complicated b/c its unknown when the update block will actually execute. When executing the block, we want to collect inserts/deletes/reloads/moves (item and section). Allow mutations to happen synchronously outside of the update block.
Tracking state will also help with the auto-diff where we need to allow re-entrant updates.
Peeling off a chunk from #494
Issue fixed: #288
- [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/525
Reviewed By: jessesquires
Differential Revision: D4656463
Pulled By: rnystrom
fbshipit-source-id: 8f4d3dc21b03d595e02ee9ee9664277e8ead0531
Summary:
Follow from #450, this layout has been replaced. You served us well!
- [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/482
Differential Revision: D4553897
Pulled By: rnystrom
fbshipit-source-id: caccb386ba8914fbbf5e81d997524efb78c6e4ea
Summary:
Working on porting our collection view layout to IGListKit. I'm doing this because its a solid layout, and we just finished preparing it to work with inline sections. It is designed to work in tandem with IGListKit, so we're adding it.
This is still a WIP as I add more tests, but I'd love as much feedback as possible.
Aside from the glob of header documentation, this has the following features:
- Infinite sections that each have infinite items. Sections and items can fall inline. When they break the width of their container they will fall on the next row.
- Sections can have their own insets, line spacing, and interitem spacing.
- Sticky header support! When you use headers, it will always newline the section.
- Maximum width with a border decoration view
- Use this to pinch in your content on larger devices
Followup to #423
- [ ] ~~Move decoration view support to delegate~~ removed
- [x] Unit test changing [top y sticky inset](https://coveralls.io/builds/9977284/source?filen
Closes https://github.com/Instagram/IGListKit/pull/484
Differential Revision: D4547760
Pulled By: rnystrom
fbshipit-source-id: 879e2da16eb78bb6a90967e77d9ad0bbf7c69594
Summary:
Working on porting our collection view layout to IGListKit. I'm doing this because its a solid layout, and we just finished preparing it to work with inline sections. It is designed to work in tandem with IGListKit, so we're adding it.
This is still a WIP as I add more tests, but I'd love as much feedback as possible.
Aside from the glob of header documentation, this has the following features:
- Infinite sections that each have infinite items. Sections and items can fall inline. When they break the width of their container they will fall on the next row.
- Sections can have their own insets, line spacing, and interitem spacing.
- Sticky header support! When you use headers, it will always newline the section.
- Maximum width with a border decoration view
- Use this to pinch in your content on larger devices
Followup to #423
- [ ] ~~Move decoration view support to delegate~~ removed
- [x] Unit test changing [top y sticky inset](https://coveralls.io/builds/9977284/source?filen
Closes https://github.com/Instagram/IGListKit/pull/450
Reviewed By: jessesquires
Differential Revision: D4521797
Pulled By: rnystrom
fbshipit-source-id: 20b36ae573d38ca3125a6f3d5faec181c290ab94
Summary:
Worth noting that while we support 10.8 and newer, Swift support is only 10.9 and newer. There were only a few more errors for 10.9 deployment target, but I'm not familiar with how it all works.
Using an `available` to disable row actions for users on 10.10 (only available for 10.11 and newer).
Closes https://github.com/Instagram/IGListKit/pull/374
Differential Revision: D4372977
Pulled By: jessesquires
fbshipit-source-id: 19f4b50c8eb4aa92f80241d69c44a367e854f5e8
Summary:
So the main Podspec file now has two Subspecs, `Diffing` and for lack of better name `Default`. `Diffing` is purely the files within the common directories (used for Diffing, if in the future we support MacOS NSCollectionView then this may need changing). `Default` depends on `Diffing` but also adds all the non-common files.
To use it via CocoaPods, nothing changes. You `import IGListKit` and you will only have access to the files in the pod you use. (So if you use `IGListKit/Diffing` in your Podfile, then you will only get access to the diffing files). If you do a manual installation, or I assume via Carthage, then you will need to import the correct header file (either `IGListDiffKit.h` or `IGListKit.h` depending on what you want).
Turns out CocoaPods creates it's own umbrella header (unless you tell it otherwise) meaning our ones are unused by it.
Just to confirm `IGListKit` in your Podfile will give you everything, only if you add `/Diffing` will you "opt-out" o
Closes https://github.com/Instagram/IGListKit/pull/368
Differential Revision: D4367438
Pulled By: jessesquires
fbshipit-source-id: 272318ca551e7e8c4177ca3ca501fde23bd9705a
Summary:
- Added IGListCompatibility.h file, and imported it in the files where we need the target check.
- Ordered the project by type
In "IGListKit.h" we still have the conditional check for `#if TARGET_OS_EMBEDDED || TARGET_OS_SIMULATOR` - Did we want to make a macro or something for this check?
This is the most Obj-C I've ever done... just felt that was a worthy comment.
Closes#364
- [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/369
Differential Revision: D4366344
Pulled By: jessesquires
fbshipit-source-id: f0a6168b8965ded22a641814797fbdec92ca1c36
Summary:
- Add missing common files
- Fix podspec for common files
- Pod install all examples
Reviewed By: rnystrom
Differential Revision: D4350871
fbshipit-source-id: 708ebe6ce66caed75af5b2ac18920dcf45567d16
Summary:
Moving files to `Common` dir so changes are more automated with Buck and easier to manage in the long run. Ran `pod install` on test and example targets. Updated buck file to include `Common` so diffing lib still works.
Part of #270
Reviewed By: jessesquires
Differential Revision: D4346722
fbshipit-source-id: 366d89f6dd571b158b5fccd542080c51517ed341
Summary:
Added support for macOS. The macOS target includes only the core diffing functionality so `IGListDiff` can be used on macOS apps.
I have not added the tests because I don't know how you're setting them up, maybe the same tests can be used by adding some `#if os(...)`s to the test files.
I have tested integration on iOS, tvOS and macOS using both Carthage and Cocoapods.
Closes https://github.com/Instagram/IGListKit/pull/235
Differential Revision: D4325423
Pulled By: jessesquires
fbshipit-source-id: 871bf08410061306004872f5feb7a09d362b6bc1
Summary:
Add 2 new unit test files for IGListCollectionView. One is for storyboards and the other for when creating the IGListCollectionView in code.
- [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 have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/.github/CONTRIBUTING.md)
Closes https://github.com/Instagram/IGListKit/pull/303
Differential Revision: D4304615
Pulled By: rnystrom
fbshipit-source-id: c6edbcd493fe4ee087ce3d0aee80db484207859d
Summary:
Adding a few more missing unit tests.
Closes#185
Closes https://github.com/Instagram/IGListKit/pull/289
Differential Revision: D4284610
Pulled By: rnystrom
fbshipit-source-id: a592fb9c12a3995a62b608f44cdcc693a0f79bec
Summary:
Beefing up our test coverage. Made an improvement to supplementary view behavior along the way. Will update `CHANGELOG.md` once travis finishes w/ link to PR #.
- [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 have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/.github/CONTRIBUTING.md)
Closes https://github.com/Instagram/IGListKit/pull/286
Differential Revision: D4281961
Pulled By: jessesquires
fbshipit-source-id: 32b5877bd72250b9a99e600ceffc64d686fa5651
Summary:
Fixes#238
Try to finish what I started 😂
Closes https://github.com/Instagram/IGListKit/pull/247
Differential Revision: D4220011
Pulled By: rnystrom
fbshipit-source-id: 9f4e1bd4f112f69f601c83d6604dc18bc27f0c68
Summary: Removing the category entirely (recreated for unit tests and examples). Went through and updated all of Instagram so we don't rely on the category and found a few models that needed cleaning up.
Reviewed By: jessesquires
Differential Revision: D4206552
fbshipit-source-id: ee8147e8872ea19f6c8bd8072df61eed5bffb6f3
Summary:
Rebase from #140:
Create a flow layout for IGList that does not newline sections. Closes#3
- [x] Minimum inter-item spacing
- [x] Minimum line spacing
- [x] Constant item size with constant layout time
- [x] Update layout on insert/delete/move
- [x] Unit Test
Closes https://github.com/Instagram/IGListKit/pull/225
Differential Revision: D4211469
Pulled By: rnystrom
fbshipit-source-id: f4710dbf195701098ac50f94b6b2aa8c801b2a83
Summary:
Saw in [travis jobs](https://travis-ci.org/Instagram/IGListKit/jobs/177139465) that TV tests were failing. Fixed some file target memberships. Not sure why failing TV tests wouldn't fail Travis tho.
Maybe fix#227
If we don't get coverage reports I'll amend removing `cd $TAVIS_BUILD_DIR` and see what happens.
- [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 have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/CONTRIBUTING.md)
Closes https://github.com/Instagram/IGListKit/pull/228
Differential Revision: D4210696
Pulled By: rnystrom
fbshipit-source-id: 695c1211353790163e1dd11176b2dc801d83e3f7
Summary:
Unit testing moves in sets so their `hash` and `isEqual` functions provide uniqueness.
Fixes#187, #188
- [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 have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/CONTRIBUTING.md)
Closes https://github.com/Instagram/IGListKit/pull/217
Differential Revision: D4201042
Pulled By: jessesquires
fbshipit-source-id: 9c4803ca11e04bb86a7745d6ebc63d173e8ac814
Summary:
Saw this pop up in coverage reports. We don't log or assert `NSIndexPath` at all so this doesn't really seem necessary.
- [x] All tests pass. Demo project builds and runs.
- [x] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/CONTRIBUTING.md)
Closes https://github.com/Instagram/IGListKit/pull/165
Differential Revision: D4138474
Pulled By: rnystrom
fbshipit-source-id: ad8375e47d1584f594d3df29f07a1d5d1a53f3c5
Summary:
Continuing the work on #90. I don't believe I can push directly to that PR since the origin is `master` of a repo I don't have access to.
https://help.github.com/articles/checking-out-pull-requests-locally/
I went ahead and added another supplementary view test copying the old one we had.
cc jessesquires in case there's something else I can do here. I believe this will still give rawlinxx credit?
Closes https://github.com/Instagram/IGListKit/pull/162
Differential Revision: D4137364
Pulled By: rnystrom
fbshipit-source-id: d8418ac5728fd6d9570fa1d1568f4343f5c4112b
Summary:
Miss this in the previous PR #92. Will add unit test soon.
Closes https://github.com/Instagram/IGListKit/pull/123
Differential Revision: D4101594
Pulled By: rnystrom
fbshipit-source-id: 820030358532b0878f6d9e9092834266c9260a38
Summary:
Rename *ItemController unit tests to *SectionController, addressing issue #126
- [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 have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/CONTRIBUTING.md)
Closes https://github.com/Instagram/IGListKit/pull/129
Differential Revision: D4095496
Pulled By: rnystrom
fbshipit-source-id: 277be38ed2789f14199cee9d711a838552921f10
Summary:
Replacing the move+update API with a batch-updates-safe API on the diff results object. This makes using the diff results w/out the rest of IGListKit infra much easier when working with `UITableView` or `UICollectionView`.
- Added unit tests
- Removed outdated unit tests
Reviewed By: dshahidehpour
Differential Revision: D4065798
fbshipit-source-id: 30da8a7b483d56d5acc497da9320dc07a6d0b7ad
Summary:
IGTestNibCell.xib was in the wrong bundle after imported internally (moved it to `Assets` dir)
- [x] All tests pass. Demo project builds and runs.
- [x] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/CONTRIBUTING.md)
Closes https://github.com/Instagram/IGListKit/pull/78
Reviewed By: ryanolsonk
Differential Revision: D4028444
Pulled By: rnystrom
fbshipit-source-id: cb7ed0f8024ca9fd116827f3935f075c1d9193be
Summary:
I started working on adding support for dequeuing cells created from nibs (issue #1). Additionally I extended `IGListSingleSectionController` so that it can be used with nibs too. I don't know if you had this also in mind.
- [x] I'm currently thinking about the best way to test these changes.
- [x] I was not able to update the documentation (issue #55).
- [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 have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/CONTRIBUTING.md)
Closes https://github.com/Instagram/IGListKit/pull/56
Reviewed By: dshahidehpour
Differential Revision: D4023746
Pulled By: rnystrom
fbshipit-source-id: 6a8b4cfb4dba38ea6e9870a9a4506288ee155cfe
Summary: Pod files were skipped after API renames.
Reviewed By: jessesquires
Differential Revision: D4003106
fbshipit-source-id: d3b5336a8e98880549d4414d679cbeff94169a01