Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Pass mutation list to RCTMountingTransactionObserving callbacks (face…
…book#33510) Summary: This PR updates `RCTMountingTransactionObserving` protocol to accept full `MountingTransaction` object as an argument to its methods as opposed to just `MountingTransactionMetdata` which contained only some subset of information. This change makes it possible for components implementing the protocol to analyze the list of mutations and hence only take action when certain mutations are about to happen. One of the use cases for `RCTMountingTransactionObserving` protocol is to allow for Modal to take view snapshot before it is closed, such that an animated close transition can be performed over the snapshotted content. Note that when modal is removed from the view hierarchy its children are gone too and therefore the snapshot mechanism makes it possible for children to still be visible while the animated closing transition is ongoing. A similar use-case to that can be seen in react-native-screens library, where we use the same snapshot mechanism for views that are removed from navigation stack. Before this change, we'd use `mountingTransactionDidMountWithMetadata` to take a snapshot. However, making a snapshot of relatively complex view hierarchy can be expensive, and we'd like to make sure that we only perform a snapshot when the given modal is about to be removed. Because the mentioned method does not provide an information about what changes are going to be performed in a given transaction, we'd make the snapshot for every single view transaction that happens while the modal is mounted. In this PR we're updating `RCTMountingTransactionObserving` protocol's methods, in particular, we rename methods to no longer contain "Metadata" in them and to accept `MountingTransaction` as the only argument instead of `MountingTransactionMetadata` object. With this change we are also deleting `MountingTransactionMetadata` altogether as it has no uses outside the protocol. Finally, we update the two uses of the protocol in `RCTScrollViewComponentView` and `RCTModalHostViewComponentView`. [iOS][Fabric] - Update RCTMountingTransactionObserving protocol to consume MountingTransaction objects Pull Request resolved: facebook#33510 Test Plan: As there are not that many uses of `RCTMountingTransactionObserving` protocol during testing I focused on checking if the updated method is called and if the provided objects contains the proper data. Unfortunately, despite code for the modal protocol being present in OSS version it does seem like some parts of modal implementation are still missing and the component only renders an unimplemented view (checked this with rn-tester). I only managed to verify the use in `RCTScrollViewComponentView` with the following steps: 1. Build for iOS 2. Put a breakpoint in mountingTransactionDidMount method in `RCTScrollViewComponentView.mm` 3. Verify that the program stops on the breakpoint when a scrollview is rendered (use any screen on rn-tester app) 4. Inspect the provided object in the debugger (ensure the list of transactions is not empty) Outside of that we verified the transactions can be processed in `mountingTransactionDidMount` after the changes from this PR are applied in FabricExample app in [react-native-screens](https://github.com/software-mansion/react-native-screens/tree/main/FabricExample) repo. Reviewed By: cipolleschi Differential Revision: D35214478 Pulled By: ShikaSD fbshipit-source-id: f40afc512f2c8cfa6262d2fb82fb1ccb05aa734c
- Loading branch information