Commit graph

423 commits

Author SHA1 Message Date
Tim Oliver
51a3cb140e Refactored inline header function to proper implementation file
Summary:
`objectsWithDuplicateIdentifiersRemoved` was originally defined as a static function entirely within the `IGListArrayUtilsInternal.h` header. However it appears that Xcode can't perform code coverage analysis on implementation code in header files, so the coverage for this function was getting skipped.

This refactors the function so the code is properly arranged in an implementation file.

Differential Revision: D49901041

fbshipit-source-id: cb409343247451028634ca4d3d7b63e5670b5e1a
2023-10-06 03:08:34 -07:00
Tim Oliver
20190830ec Fix IGWarnAssert macro to remove unneeded condition parameter
Summary:
I'm looking at updating IGKitKit's test suite for Xcode 15, but when I went to do a build, it failed at the `IGWarnAssert` macro. Turns out that because we set the condition in the macro to always return `(NO)`, there's no need to expose `frmt` to test for the condition.

This diff removes `frmt` from the define, allowing the tests to build again.

Reviewed By: fabiomassimo

Differential Revision:
D49628618

Privacy Context Container: L1203725

fbshipit-source-id: b0456a149bf5be96c8401a21866880ccd72ebbcb
2023-09-26 08:22:26 -07:00
Fabio Milano
25d1887a41 Demote IGAssert for collection view delegate to warning
Summary: This are not critical enough to trigger an assertion instead of a warning.

Reviewed By: DimaVartanian

Differential Revision: D49326036

fbshipit-source-id: 50bbb6f57208ddea8cc1ead2db3b347f9e0c2f87
2023-09-15 14:14:11 -07:00
Krys Jurgowski
050cd8e670 Downgrade IGListKit assertion
Summary: This assertion has been firing for at least the [last 3 months](https://fburl.com/scuba/errorreporting_instagram_ios_assertions/vfxo4h2g) and we have shipped the app anyways so it is definitely not launch blocking.

Reviewed By: fabiomassimo

Differential Revision: D49281317

fbshipit-source-id: d525f88fe676e813b8413a2e0f21b6b12728b359
2023-09-15 12:20:12 -07:00
Tim Oliver
ffd51e6235 Enable using the invalidateLayout method in IGListCollectionViewLayout
Summary:
I noticed some strange behaviour in a collection view I was testing that was using `IGListCollectionView` and `IGListCollectionViewLayout`. Even if I called `invalidateLayout` on it, the cells wouldn't resize and would sometimes end up overflowing outside the collection view's bound.

I eventually managed to trace this back to `IGListCollectionViewLayout` that uses a `_minimumInvalidatedSection` flag to track when list content has changed before it starts calling the sizing logic of each section controller. While `invalidateLayoutWithContext:(IGListCollectionViewLayoutInvalidationContext *)context` was correctly setting this flag, `invalidateLayout` wasn't subclassed, and so this call was basically always falling through.

This diff configures `invalidateLayout` to set this flag, so when this method is called, it will correctly perform a new cell sizing pass.

Reviewed By: DimaVartanian

Differential Revision: D47787723

fbshipit-source-id: 724d76ba3e7b5c32b60e7c76347a129c30f0b502
2023-07-26 20:35:00 -07:00
Maxime Ollivier
cd3f84f227 fix crash when calling reloadObjects during an update
Summary:
Follow up to D47263265

## What's happening
We're calling `listAdapter.reloadObjects(...)` in the middle of the IGListKit's internal data update, so it's using the new section index path, instead of the old one. So we're going from a list of 2, insert at 0, and try to reload index 1, then we crash (it'll try to update index 2, which doesn't exist in the old array)

## Fix
Just like for `[IGListAdapter performBatchAnimated:updates:completion:]`, lets use the old index. To get this working, lets ask the updater if we're in an update, rather than `IGListAdapter` try to keep track of it.

Sorry the diff is a bit long, but in case this feels reasonable to pick, I might

Differential Revision: D47281472

fbshipit-source-id: 193153cfc15c87084b67f58c50e921db459d6800
2023-07-07 11:36:50 -07:00
Fabio Milano
dbda739b62 Log critical assert
Summary: Use `IGFailure` to log critical issues

Differential Revision:
D46029468

Privacy Context Container: L1132866

fbshipit-source-id: f642a50310e7a7d7a80e01ba61d382bb9a794496
2023-05-19 13:40:51 -07:00
Fabio Milano
dffcd4d0c8 Added new assertion level in IGListKit
Summary: Added new level of assertions for failures.

Differential Revision: D46029469

fbshipit-source-id: d8bd7ff41a19c15967e198c22aa5dc7b43972800
2023-05-19 13:40:51 -07:00
Fabio Milano
eb9b18ada4 Added try catch for NSInternalInconsistencyException in the update transaction
Summary: Added try catch for managing NSInternalInconsistencyException that are now tunneled through our assert flow

Differential Revision: D45995182

fbshipit-source-id: 829d2ea3122c1ed40e25c8da36d1926d27b42418
2023-05-18 13:26:26 -07:00
ke.xu
164f39c4d4 Fix unsigned integer overflow (#1299)
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/1299

Reviewed By: m3rlin45

Differential Revision: D18703628

Pulled By: TimOliver

fbshipit-source-id: d347ed9c59c62ccdb73bd3abd14e289b7c06f3f6
2023-05-02 02:23:55 -07:00
Kent Sutherland
3cd3a111dd Update deployment targets to silence Xcode 14 warnings (#1573)
Summary:
## Changes in this pull request

Xcode 14 changed the minimum deployment target to iOS/tvOS 11.0 and macOS 10.13. This PR moves up the deployment targets so that a warning isn't shown on every build.

I also silenced the development region and base localization warnings.

### Checklist

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

Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1573

Differential Revision: D45223095

Pulled By: TimOliver

fbshipit-source-id: 57fbd284809c09f86a9731d0676332de35fbe0df
2023-05-01 22:48:23 -07:00
Tim Oliver
f2b16b345e Add framework import check for IGListBindingSingleSectionController
Summary: One final tweak to IGListBindingSingleSectionController to ensure proper running with the sample apps on GitHub.

Reviewed By: m3rlin45

Differential Revision: D45170133

fbshipit-source-id: 8b48761962dee79a408cad2e9ffcc55a0fbd550e
2023-04-20 22:15:12 -07:00
Tim Oliver
d7206117a7 Add IGListBindingSingleSectionController to public headers
Summary:
While the `IGListBindingSingleSectionController` class and a nearly complete test suite were present in the IGListKit repo, they weren't imported into Xcode, and so they weren't part of the public release or the test CI.

Since the class looks like it's being used within Instagram, it's clear that it's not deprecated. I'm assuming it was added for a specific use-case in Instagram, and integrating it with the public Xcode project was still pending.

This diff integrates the class back into the public framework.

Reviewed By: candance

Differential Revision: D45147758

fbshipit-source-id: b0a84a2909635a4448480246f315243f4fcac134
2023-04-20 14:26:11 -07:00
Tim Oliver
b68ab60b92 Remove unused IGListExperimentalAdapterUpdater+DebugDescription.h header file
Summary: I found a file named `IGListExperimentalAdapterUpdater+DebugDescription.h` that wasn't part of the Xcode project, and had no accompanying implementation file. Since it looks like it's not being used, we can probably just delete it.

Reviewed By: candance

Differential Revision: D45147745

fbshipit-source-id: a1fbc0475c1c6098f03c7ea6a2f6316917c2e677
2023-04-20 14:26:11 -07:00
Tim Oliver
08a1d83652 Refactor code syntax in internal classes to be easier to provide code coverage
Summary: Similar to the previous diff, this diff updates some of the code styling and syntax in IGListKit's internal classes to make it much easier to provide test coverage to each method in there.

Reviewed By: candance

Differential Revision: D45003471

fbshipit-source-id: 1267901fc7a917bf1c30783654a8fd0da941bff1
2023-04-17 20:41:49 -07:00
Tim Oliver
dfb52ea701 Refactor code syntax in public classes to be easier to provide code coverage
Summary:
While testing the existing code coverage, I discovered several code patterns in some of IGListKit's public classes that were literally impossible to cover. These included things like bailing out of blocks when `weakSelf` is `nil`, or exiting early inside `switch` statements.

This diff reimplements some of the existing logic in several of the public facing IGListKit classes, so that all of these classes can be 100% covered by unit tests.

Reviewed By: candance

Differential Revision: D45002889

fbshipit-source-id: 6b87ea6338b9f33bed7955d6cc797d116b533085
2023-04-17 20:41:49 -07:00
Tim Oliver
610c6d2ba8 Remove unused IGListBatchUpdates class from IGListKit
Summary:
While auditing all of the classes in IGListKit, I discovered that `IGListBatchUpdates` is completely unused. It looks like in the documentation that a new class was introduced to replace it, and it looks like this transition has already completed.

Since it doesn't make sense to cover an unused class, let's delete it. :)

Differential Revision: D45002736

fbshipit-source-id: 45e39f37bf00dc6c4867e9df49cfdfce1252604f
2023-04-17 20:41:49 -07:00
Fabio Milano
6f39c3140e Demoting assertion for performing batch updates on empty collection view
Summary: We keep receiving must fixes for this assert that effectively are not followed up since they are hard to debug and seems do not affect the app. Demoting.

Reviewed By: candance

Differential Revision: D44934015

fbshipit-source-id: a65b8a5980a1e2a8ab48201987e90fdff646c498
2023-04-12 15:52:54 -07:00
Tim Oliver
f92b9339ee Standarize the copyright notice in all source files
Summary:
The standardized Meta copyright notice is "Copyright (c) Meta Platforms, Inc. and affiliates." and not "Copyright (c) Meta Platforms, Inc. and its affiliates." (Dropping the "its")

This diff updates the copyright notice in each source file to the correct this.

Reviewed By: willbailey

Differential Revision: D44737667

fbshipit-source-id: 643bf36df76723e70d9d826c53cf8f29b8a0c8cc
2023-04-06 02:44:16 -07:00
Lvv.me
c9e045c942 Improve SwiftPM support (#1546)
Summary:
This diff imports and refines the PR made by cntrump on GitHub.

The PR introduces the following:

* Sample apps now use SPM instead of CocoaPods to import IGListKit.
* Adds Mac Catalyst as an example target.
* Adds C++ flags to the CocoaPods specs.
* Fixes a script issue that was discovered when regenerating the symlinks.

The PR originally aimed to remove the need for symlinked references to the IGListKit and IGListDiffKit source files, but in testing, I couldn't get it working. It's possible SPM being too strict [on where the headers can be placed to be discovered](https://forums.swift.org/t/how-do-i-specify-the-headers-directory-for-a-objc-target-in-swift-package-managers-package-swift/58531/3).

Additionally, another issue was that the original PR changed all of the `#import` statements to the the modular `import` statements, which is fine for the sample apps, but ended up breaking compatibility for any apps that had modules disabled.

## Changes in this pull request

Improve SwiftPM support:

Build module `IGListDiffKit` and `IGListKit` as Objective-C++.

module `IGListDiffKit`:
    - Source/IGListDiffKit
    - module defined in `Source/IGListDiffKit/modulemap/module.modulemap`
    - requires `-fmodules` and `-fcxx-modules`

module `IGListKit`:
    - depend on `IGListDiffKit`, use `import IGListDiffKit;`
    - Source/IGListKit
    - module defined in `Source/IGListKit/modulemap/module.modulemap`
    - requires `-fmodules` and `-fcxx-modules`

module `IGListSwiftKit`:
    - depend on `IGListKit`, use `import IGListKit`
    - Source/IGListSwiftKit

Deleted `spm/` and `scripts/generate_spm_sources_layout.sh`, it is unnecessary.

Updated `.podspec`, add `'OTHER_CFLAGS' => '-fmodules'` and `'OTHER_CPLUSPLUSFLAGS' => '-fcxx-modules'`.

Add missing swift files for `IGListSwiftKit` in `IGListKit.xcodeproj`

### How to use

Replace `#import <IGListDiffKit/IGListDiffKit.h>` with `import IGListDiffKit;`, because `IGListDiffKit.h` isn't exist in `modulemap/`, Or create a symbol link by `ln -sf ../IGListDiffKit.h` for support it ?

### Examples

Use SwiftPM for building examples.

### 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/1546

Test Plan: Test PR showing running tests: https://github.com/TimOliver/IGListKit/actions/runs/4339956050/jobs/7578047058

Reviewed By: lorixx

Differential Revision: D33592395

Pulled By: TimOliver

fbshipit-source-id: 8f7b1873f2b1c6a80908bb55b123e31bea13bb0c
2023-03-06 23:29:41 -08:00
Ryan Mathews
c708a10757 Adds viewForSupplementaryElementOfKind method to IGListCollectionContext
Summary:
Returns the supplementary view in the collection at the specified index for the section controller.

 param `elementKind` The element kind of the supplementary view.
 param `index` The index of the desired cell.
 param `sectionController` The section controller requesting this information.

 return The collection reusable view, or `nil` if not found.

 warning This method may return `nil` if the cell is offscreen.

Reviewed By: maxolls

Differential Revision: D42726375

fbshipit-source-id: d9873440bd94140b88e7d2d56c0737ecf94925a8
2023-02-01 14:15:50 -08:00
Tim Oliver
a1b9c2ddb3 Updated corporate branding in IGListKit source files
Summary:
A quick push to fix something I noticed while studying how IGListKit works. This simply replaces "Facebook, Inc" with "Meta Platforms, Inc" in all of the source files where the company copyright notice is posted. This should help bring our external facing projects more in line with our new corporate branding.

There's still a lot more references to "Facebook" as a company in the library (especially around linking to other Meta sponsored open source libraries), but this might need additional scrutiny and review on a case-by-case basis, so let's handle those ones separately.

Reviewed By: lorixx

Differential Revision: D41207363

fbshipit-source-id: 57cdbf5eb1023b41a5f32c0c05e01628686a19fe
2022-11-15 21:47:29 -08:00
Tim Oliver
fdf6145c77 Remove un-used IGListCollectionContext from IGListAdapter
Summary:
Coming from the discussion in D40925763. It seems the reference to importing `IGListCollectionContext.` in `IGListAdapter` is unused. I was wondering if there was a deliberate design decision here to expose the `IGListCollectionContext` in here publicly at some point that never made it through. After consulting with some other iOS engineers, we agreed it's best not to expand the public facing surface area without some kind of tangible benefit, so lets remove this import to remove any more confusion.

I'll do a proper audit later when I have more time to see how many other unused header references there are in this library.

Differential Revision: D41179480

fbshipit-source-id: 2a96c199bd4357310e2517be8f0f154e7af91948
2022-11-10 19:33:37 -08:00
Jonathan Kim
82f59a8760 Fix IGListSectionController shouldSelectItemAtIndex:
Summary:
While attempting to use `-[IGListSectionController shouldSelectItemAtIndex:`, I found that any implementations of those methods never actually get called.

It turned out that although the methods were added to the section controller (e.g. https://fb.workplace.com/groups/iglistkit/posts/1641463486199290/) and collection view delegate (https://www.internalfb.com/code/fbsource/[766baa5c9ffca558c9a7c5d1fdecc61ce8601e1d]/fbobjc/VendorLib/IGListKit/src/Source/IGListKit/Internal/IGListAdapter%2BUICollectionView.m?lines=125), the selectors weren't actually getting intercepted by the proxy.

Docs: https://instagram.github.io/IGListKit/Classes/IGListSectionController.html#/c:objc(cs)IGListSectionController(im)shouldSelectItemAtIndex:

Reviewed By: candance

Differential Revision: D39910477

fbshipit-source-id: a2b0c56d0e6954baad26e87c2502c7e1dd79e96e
2022-09-29 11:56:11 -07:00
Yaxuan Wang
cf7f78e28a Avoid warning at [IGListAdapter visibleObjects]
Summary: Almost all of the [warnings](https://fburl.com/scuba/errorreporting_instagram_ios_assertions/s2odhkpd) at `[IGListAdapter visibleObjects]` shown the section index is `9223372036854775807`, which is `NSNotFound`. When the section is `NSNotFound`, there is no need to get object though `[self objectAtSection:section];`, instead we should skip all the operations.

Differential Revision: D39294533

fbshipit-source-id: 3e481c76c0a2dd53b219800e590395b067ae2db8
2022-09-07 10:53:49 -07:00
Krys Jurgowski
2414d3cca5 Downgrade IGListAdapter assert
Summary:
Chatted with maxolls about this assertion - it fires when a user of IGListKit accidentally implements a UICV layout (which IGListKit will ignore). Definitely not ideal, but not a launch blocking issue so demoting this assert to a warning.

It's currently the second highest firing mustfix in alpha 239.
https://fburl.com/scuba/errorreporting_instagram_ios_assertions/yap7opjy

Reviewed By: maxolls

Differential Revision: D36983661

fbshipit-source-id: 00497637cffea7553495c837bec267acca7cd3d8
2022-06-09 09:06:29 -07:00
Alessandro Sisto
d2f12cd92c Remove PikaOptimizationsMacros
Summary: Reverting changes affecting IGListKit introduced by D34822433 (b9f81267ad)

Differential Revision: D35617758

fbshipit-source-id: c9e0928e9b314bcd8a2645f15aa6f1e8ee383bac
2022-04-14 00:25:16 -07:00
CodemodService Bot
b9f81267ad fbobjc/Apps/Instagram/AppLibraries/Guides
Differential Revision: D34822433

fbshipit-source-id: 01a11318020fc596eb5559e535497a89701be067
2022-03-17 13:01:10 -07:00
Alan Wang
b22a10e47f Add shouldDeselectItemAtIndex to IGListSectionController
Summary: Add `shouldDeselectItemAtIndex:` to `IGListSectionController`. `shouldSelectItemAtIndex:` already exists, but its inverse does not.

Reviewed By: lorixx

Differential Revision: D34727371

fbshipit-source-id: ba4e0917380e1b3ff189dad7977ac5c1caa9b714
2022-03-09 10:13:06 -08:00
Dustin Williams
987055532a Get index path or scroll position of first visible item in list (#1544)
Summary:
Pull Request resolved: https://github.com/Instagram/IGListKit/pull/1544

Refactored and added functions to IGListAdapter for getting index path or scroll position of first visible item in list.

This makes it possible to see which item is the current first visible item scrolled to in the list, and determine how far it is scrolled into (analogous to additionalOffset in scrollToObject:).

Reviewed By: lorixx

Differential Revision: D32196398

fbshipit-source-id: d809d5f96bb4e1d95055dbebe4e55c1a428a40ed
2021-11-09 00:04:10 -08:00
Brandon Kieft
b367f7ceb2 Handle cases where the delegate is already an IGListAdapter
Summary:
I was assuming the delegate would always be an IGListAdapterProxy, but this only happens if the client sets either the `collectionViewDelegate` or `scrollViewDelegate` properties on IGListAdapter. Otherwise the delegate will just be the IGListAdapter. Change the debug code to handle this case.

We were starting to see some debug logs roll in with the delegate class listed as IGListAdapter. Hopefully this will return the correct class now.

Differential Revision: D31690438

fbshipit-source-id: bf6dde57756fee4fe617944d45e152cae734b4f1
2021-10-19 08:48:48 -07:00
Brandon Kieft
44c009b6fc Add TEMP code to print the delegate class in the assert message
Summary:
Trying to track down the causes of this assert. Unfortunately the assert does not tell us which class is returning the bad info. Add some HACKY TEMP code to print out the class name in some cases. Hopefully this will catch all the issues.

I put the code in a static function called within the assert, so it should be compiled out of prod builds.

Differential Revision: D31482081

fbshipit-source-id: bef0274c0e35b90d5f77b0cfd337e3f9a772e8b8
2021-10-13 19:05:24 -07:00
3a4oT
a1036e06e3 SPM number10 (#1487)
Summary:
## Changes in this pull request

 A better version of https://github.com/Instagram/IGListKit/issues/1465 =)

- SPM support with script-based generations.

- added macOS Catalyst support

 ### Generate SPM layout

1. From **project's root** run:

   `bash scripts/generate_spm_sources_layout.sh`

  2. Commit Changes

 Repeat those steps each time you delete/add the project's files. **Make sure** to have this CI step which will check that `generate_spm_sources_layout.sh` is not broken.

Issue fixed: https://github.com/Instagram/IGListKit/issues/1368 #1406

### 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/1487

Reviewed By: DimaVartanian, candance

Differential Revision: D30428297

Pulled By: lorixx

fbshipit-source-id: 655291ff03445dec9b0b8cd97916f0c88207e9a7
2021-08-31 19:28:37 -07:00
Daniel Rodríguez
60bdc2edab Header compatibility with Mac Catalyst.
Summary:
In T97824645 a test that was failing for other reason was fixed and started
failing because it could not compile IGListKit.

The problem is that IGListKit was not prepared to be compiled for Mac Catalyst
since it was only testing for iOS platforms to include UIKit. These changes
modify the header to work in Mac Catalyst.

Differential Revision: D30410680

fbshipit-source-id: f886826b9c485acfb039a9e681afd85f9186c344
2021-08-19 16:56:47 -07:00
3a4oT
cd0fe69983 Run tests from Xcode12. Github workflow (#1478)
Summary:
## Changes in this pull request

- set header `IGListAdapterUpdaterCompatible.h` to - public which fixed Xcode 12 unit test iOS build.
- include `IGListTransitionData.m` to tvOS trget which fixed Xcode 12 tvOS framework build.
- Added GitHub workflow `CI`.

### 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/1478

Reviewed By: candance

Differential Revision: D25504500

Pulled By: lorixx

fbshipit-source-id: 91f477838f176f662dd74928b75df670a4106968
2021-08-16 13:36:42 -07:00
Zhisheng Huang
f4de8caff1 Remove UIKit dependencies in IGListDiffKit code
Summary:
This was accidentally introduced in D25334717 (9cb16b0f31), at the time I didn't pay close attention to the impact there. The diff actually broke the CI for IGListKit in open source community since IGListDiffKit was meant to be compatible in both MacOS and iOS.

The right approach is to rely on the IGListCompatibility.h to resolve the linked code here.

Reviewed By: rzito

Differential Revision: D30344334

fbshipit-source-id: 842ca560a1bfe6d54e7d90466575e4ed35cd9b87
2021-08-16 11:49:28 -07:00
Anna Tang
f2166c358b Scroll to focused media below header
Summary:
## Context
We want the post-tap headers to be sticky so that context is maintained as the user scrolls down the media chain.

## In this diff
When clicking on a media tile in a media module (rather than the See All CTA), the sticky header was covering part of the media post's header. We want to shift the scroll-to view down so that the sticky header is sitting on top of the media post's header.

- Create new version of IGListAdapter API's `scrollToObject` function that contains an additional parameter `additionalYOffset`
- Call new `scrollToObject` function with offset of 48.0f (height of header)

## In this stack
Add sticky headers for post-taps, excluding SERP

Reviewed By: maxolls

Differential Revision: D29961626

fbshipit-source-id: c8644cc868e8d7ec92cad5f6c7742d93d001f67d
2021-08-10 19:59:39 -07:00
Benjamin Fishbein
936f558567 Impliments open archive function for Activity Center
Summary: Impliments Bloks navigation to open archive native screen

Differential Revision: D30125112

fbshipit-source-id: b441b16d430cd0e01b2942a9b5acda4150aeee6d
2021-08-09 09:20:55 -07:00
Sarah Zhou
7c2b48151e Add containerContentOffset to IGListCollectionContext
Summary:
**In this diff**

Add `containerContentOffset` to `IGListCollectionContext`
- In this stack, I check this value from the product tile and content tile section controllers to determine how far the user has scrolled down the containing scroll view

**In this stack**

Add `scroll_logging_info` to product card and content tile events to track scroll depth on the Shop Tab homepage
- Project plan: https://fb.quip.com/mF9qAnGPE8CI
- Logging spec: https://fb.quip.com/6wp7AO63d8Wb#LPWACADjpNK

Differential Revision: D27793071

fbshipit-source-id: 22123511b0f85fd636d82981671ccda0b0d7db7d
2021-04-15 13:15:41 -07:00
Brian Clouser
4d1c1b0b86 Clear last transaction builder before early exit
Summary: Clean up lastTransationBuilder

Reviewed By: maxolls

Differential Revision: D27657431

fbshipit-source-id: a29e4236c60fd8a3657a457d1affbe22c55fdd37
2021-04-12 10:42:31 -07:00
Erich Graham
efe66a44e3 Add Swift value type initializer override for IGListSingleSectionController
Summary: Adds an init override if the generic type is a Swift value conforming to `ListIdentifiable`.

Reviewed By: natestedman

Differential Revision: D27013270

fbshipit-source-id: 44f5c45e6396643d251c23bfedb6cd0a482e3913
2021-03-12 11:22:53 -08:00
Reyner Crosby
601de1b444 Silence string interpolation warning in IGListCollectionContext+Refinements.swift
Summary:
Silences warning:
```
Source/IGListSwiftKit/IGListCollectionContext+Refinements.swift:90:71: warning: string interpolation produces a debug description for an optional value; did you mean to make this explicit?
            fatalError("A nib named \"\(nibName)\" was not found in \(bundle)")
                                                                      ^~~~~~
Source/IGListSwiftKit/IGListCollectionContext+Refinements.swift:90:71: note: use 'String(describing:)' to silence this warning
            fatalError("A nib named \"\(nibName)\" was not found in \(bundle)")
                                                                      ^~~~~~
                                                                      String(describing:  )
Source/IGListSwiftKit/IGListCollectionContext+Refinements.swift:90:71: note: provide a default value to avoid this warning
            fatalError("A nib named \"\(nibName)\" was not found in \(bundle)")
                                                                      ^~~~~~
```

Reviewed By: natestedman

Differential Revision: D26320097

fbshipit-source-id: a5fa87fbe2cdf2ad8b55f985a904cf0d387debad
2021-02-08 13:18:47 -08:00
Vivian Phung
6d6cbe1a2f IGListCollectionContext typesafe method for dequeueReusableSupplementaryView(ofKind: ... nibName:
Summary: add typesafe method for dequeueReusableSupplementaryView(ofKind: ... nibName:

Reviewed By: natestedman

Differential Revision: D26238618

fbshipit-source-id: 50b99311594fa0987752980025a927da1513b55d
2021-02-05 09:36:53 -08:00
Vivian Phung
6224a6536c IGListCollectionContext typesafe method for dequeueReusableSupplementaryView(fromStoryboardOfKind:
Summary: add typesafe method for dequeueReusableSupplementaryView(fromStoryboardOfKind:

Reviewed By: natestedman

Differential Revision: D26238613

fbshipit-source-id: 15d18628fd54e2d7d0ff3cb0b1f88bb473bfbfed
2021-02-05 09:36:53 -08:00
Vivian Phung
dd3726343d IGListCollectionContext typesafe method for dequeueReusableSupplementaryView(:ofKind
Summary: add typesafe method for dequeueReusableSupplementaryView(:ofKind

Reviewed By: natestedman

Differential Revision: D26238603

fbshipit-source-id: 178bee6da1957a132c73610b9db0796323cbff26
2021-02-05 09:36:52 -08:00
Vivian Phung
f3abdcac0d IGListCollectionContext typesafe method for dequeueReusableCellFromStoryboard
Summary: add typesafe method for dequeueReusableCellFromStoryboard

Reviewed By: natestedman

Differential Revision: D26238579

fbshipit-source-id: 11e09b4487b2d64b1be53530358922e98b00cd33
2021-02-05 09:36:52 -08:00
Vivian Phung
7b26f4f32e IGListCollectionContext typesafe method for dequeueReusableCell(withNibName:
Summary: add typesafe method for dequeueReusableCell(withNibName:

Reviewed By: natestedman

Differential Revision: D26266979

fbshipit-source-id: 31297d1563d6c4b931c34ac57911dedc4776310f
2021-02-05 09:36:52 -08:00
Nate Stedman
64d9bc570b Add refined Swift wrapper for IGListSingleSectionController
Summary: This API is dependent on dynamic types right now, making it awkward and unsafe to use in Swift. By providing a generic wrapper, we can make it safer to use.

Reviewed By: joetam

Differential Revision: D26057302

fbshipit-source-id: ec5d5ed202900f6171761214900fde1f9615e7f5
2021-01-26 07:34:31 -08:00
Maxime Ollivier
9f0462086f clean up @synthesize from the updater
Summary: We don't need these synthesize anymore.

Reviewed By: joetam

Differential Revision: D26052888

fbshipit-source-id: eedb9acea68846af1a23fea15a44f94351eb999a
2021-01-25 13:49:24 -08:00
Maxime Ollivier
249b152776 fix NSInteger printing
Summary: While building the example project, I noticed this warning

Reviewed By: lorixx

Differential Revision: D25962436

fbshipit-source-id: c686e07ac82551f658b40a72280dac29a026cb62
2021-01-21 19:58:49 -08:00