Commit Graph
154 Commits
Author SHA1 Message Date
Valentin Shergin 28d26c2e56 Fabric: Small optimization in RCTMountingManager
Summary: `pullTransaction` can return an empty transaction. That's fine to interate over the empty collection and do nothing, but it's inneficient because we also call delegate methods around the loop (that can be expensive).

Reviewed By: sammy-SC

Differential Revision: D17053430

fbshipit-source-id: c78959d47ea22cd9bb99419f6a80de3ac8e89fd3
2019-08-28 21:10:25 -07:00
Valentin Shergin 59c3d05058 Fabric: Support for <ScrollView scrollEventThrottle={...}> on iOS
Summary: This diff adds support from `ScrollView::scrollEventThrottle` property on iOS.

Reviewed By: JoshuaGross

Differential Revision: D17000397

fbshipit-source-id: 93f23919a6a2588000c0eeca869171d1036348b6
2019-08-26 21:01:46 -07:00
Samuel Susla 5cde7d29a3 Fix handling of failed image downloads
Summary:
If you have following scenario

1. Have <Image> component with valid URL
2. Due to user action set <Image> to incorrect URL (something that 404s)

Currently 1st image stay visible to the user.
This is the case for both Fabric and Paper.

Paper is being fixed -> https://github.com/facebook/react-native/pull/25919

Reviewed By: fkgozali

Differential Revision: D16708532

fbshipit-source-id: ffdea5421faead4730e7b117a3b9f6e21869da70
2019-08-12 09:32:25 -07:00
Kevin Gozali d2e18a1c5c iOS: Revert RCT->RN prefix renaming to avoid confusion
Summary: The previous rename from RCT->RN prefix ended up causing some confusions on which prefix to use for which files and under what circumstances. To avoid further confusion before we're done with the re-architecture project, let's keep them as RCT.

Reviewed By: mdvacca

Differential Revision: D16705566

fbshipit-source-id: 395bff771c84e5ded6b2261a84c7549df1e6c5e5
2019-08-08 07:21:25 -07:00
Kevin Gozali 9420de6860 iOS: codemod react-native-github: RCT->RN prefix for Fabric
Summary: Fabric ObjC(++) files will be prefixed by RN* for the time being, this codemod is a simple rename. This includes `interface` and `protocol` definition

Reviewed By: PeteTheHeat, yungsters

Differential Revision: D16611524

fbshipit-source-id: 868d2571ea2414dde4cbb3b75b1334b779b5d832
2019-08-01 20:06:04 -07:00
Samuel Susla 14edd5d634 Break retain cycle in RCTScrollViewComponentView
Summary: Breaks cycle by making self weak and storing delegates weakly.

Reviewed By: fkgozali

Differential Revision: D16579754

fbshipit-source-id: 17174b0e91898a14a86b8b44677090be3044382d
2019-07-31 10:05:28 -07:00
Valentin Shergin 2c136192a3 Fabric: Removing workaround from RCTScrollViewComponentView.mm
Summary: We don't need it anymore.

Reviewed By: mdvacca

Differential Revision: D16454620

fbshipit-source-id: 3a92c62e93cf6968b8344003a19fe10b92a5d274
2019-07-25 10:00:29 -07:00
Min ho Kim 84f5ebe4f9 Fix typos (#25770)
Summary:
Fix typos mostly in comments and some string literals.

## Changelog

[General] [Fixed] - Fix typos
Pull Request resolved: https://github.com/facebook/react-native/pull/25770

Differential Revision: D16437857

Pulled By: cpojer

fbshipit-source-id: ffeb4d6b175e341381352091134f7c97d78c679f
2019-07-23 03:23:11 -07:00
Eli White 6f09dc03bf Support View Manager Commands
Summary: Supporting View Manager Commands on the new UIManager in Fabric. This is needed for things like scrollTo on ScrollView.

Reviewed By: JoshuaGross

Differential Revision: D16175575

fbshipit-source-id: a74effdf7e47b56a150a4e3fb6c4d787659e0250
2019-07-19 11:54:44 -07:00
Samuel Susla ec2bf94266 Fix incorrect information in comment
Summary: `RCTActivityIndicatorViewComponentView` is a component for `ActivityIndicator` not for `ShimmeringView`.

Reviewed By: cpojer

Differential Revision: D16360505

fbshipit-source-id: d6f7685eea24060c9e1b43d5782a65396d6c375e
2019-07-18 11:15:58 -07:00
Valentin Shergin f003b931b4 Fabric: Workaround in ScrollView that communicates the fact that the view was unmounted
Summary:
See the comment in the code.
As part of proper fix of it, we also should remove a line in RCTScrollView that nulls the delegate.

Reviewed By: mdvacca

Differential Revision: D16296050

fbshipit-source-id: 54a4c6c60de4bd97c5cfb44652b5dc26852c540c
2019-07-17 11:20:52 -07:00
Valentin Shergin 509667e25a Fabric: Implementation of ScrollView.contentInset
Summary: Trivial.

Reviewed By: mdvacca

Differential Revision: D16296051

fbshipit-source-id: 2ab16cf94cbd14d6389a4cd8d9c68567fc5ee82c
2019-07-17 11:20:52 -07:00
Valentin Shergin bf38cf1be9 Fabric: Additional checks for _eventEmitter being null in ScrollView
Summary:
I finally convinced that we need to add this everywhere.
iOS internals can call those methods at any moment (which is happening in coming diffs), so we cannot predict `_eventEmitter` being not null.

Reviewed By: mdvacca

Differential Revision: D16296052

fbshipit-source-id: 34447c2b5af4117d75930d68593d60bace119bbd
2019-07-17 11:20:51 -07:00
Valentin Shergin fda3ca1311 Fabric: contentInsetAdjustmentBehavior=never for ScrollView
Summary: We have exactly same code in classic RCTScrollView component. We need that to not interfere with iOS automagical behaviours.

Reviewed By: sammy-SC

Differential Revision: D16160846

fbshipit-source-id: 5b5affcc64abe5e3204f619216412f9da5b03b78
2019-07-10 08:42:44 -07:00
Samuel Susla faf9130560 fabric: Migrate ModalHostView
Summary: Implements `ModalHostView` in Fabric.

Reviewed By: shergin

Differential Revision: D16090949

fbshipit-source-id: fe2c87063863e7f3c6c8dcc934a2cdb0b1aedaac
2019-07-08 03:56:31 -07:00
Valentin Shergin 06ce568155 Fabric: Use state in Paragraph component
Summary:
All props to Eric Lewis! cc ericlewis

This revert of revert of land of changes originally published in #24873 (with some slight fixes). The change removes usage of LocalData from the `<Text>` component.

After this change we only have ---one (maybe two)--- three components left using LocalData.

Reviewed By: mdvacca

Differential Revision: D15962376

fbshipit-source-id: 19f41109ce9d71ce30d618a45eb2b547a11f29a2
2019-07-07 22:46:21 -07:00
Valentin Shergin 348b1c9a62 Fabric: Proper way to set size and position for all views
Summary:
Apparently, settings `frame` and `transform` at the same view is UB and that's documented.

https://developer.apple.com/documentation/uikit/uiview/1622621-frame?language=objc

> Warning
> If the transform property is not the identity transform, the value of this property is undefined and therefore should be ignored.

Reviewed By: JoshuaGross

Differential Revision: D16038431

fbshipit-source-id: 9f282dfad97af293e5e70d3cdd849ae3e9c775c9
2019-06-27 15:45:16 -07:00
Valentin Shergin 828b40b5a5 Fabric: Fixed crash in RCTImageComponentView caused by dangling pointer
Summary: See the comment in the code.

Reviewed By: JoshuaGross

Differential Revision: D16031147

fbshipit-source-id: e165f423f5ee35d1ae5e667dba9ef8da7b9a388c
2019-06-27 15:45:15 -07:00
Valentin Shergin 4b8d07ebf3 Fabric: Fixed another crash in RCTImageComponentView (nulled event emitter)
Summary: This fixes a crash happened in Image component caused by a race between recycling a component and image loading event are being delivered asynchronously.

Reviewed By: mdvacca

Differential Revision: D15977418

fbshipit-source-id: ac6f4b3d2b995af2afd56e551380a32d0f14ab15
2019-06-24 18:34:30 -07:00
Valentin Shergin 970bd2c69c Fabric: Fixed a crash in RCTImageComponentView
Summary: The app crashed on assert which was not actually legit. See the comment in the code.

Reviewed By: JoshuaGross

Differential Revision: D15976177

fbshipit-source-id: 612bbbd510187ffdc86369aa943d4b652b748694
2019-06-24 17:21:42 -07:00
Valentin Shergin 173a5cc222 Fabric: Removing unnecessary assert in RCTParagraphComponentView
Summary: This is strange why it's happening but it's not a reason to crash here. We will migrate the text component to State anyway, so we will fix the problem then.

Reviewed By: JoshuaGross

Differential Revision: D15951391

fbshipit-source-id: c1d1217fab1180f1eef84dfc2b2fd1ed0864b035
2019-06-21 16:04:50 -07:00
Valentin Shergin fbbfeb6426 Fabric: Fixed ScrollView layout issue
Summary: We should not use `self.contentView` accessor to insert container views (views that might be used as a container for nested views) into component view otherwise it causes double applying of padding values.

Reviewed By: mdvacca

Differential Revision: D15862075

fbshipit-source-id: aad834aeca06f66b19c2f7bbaa0b58f937e66994
2019-06-17 19:18:57 -07:00
Valentin Shergin 03751997e3 Fabric: Proper background color setting for RCTViewComponentView
Summary: Setting value directly to ivar makes impossible to subclasses to react of this; this is a bug.

Reviewed By: mdvacca

Differential Revision: D15776691

fbshipit-source-id: 10f9be975ee673b2db46c24ba41b18f6d6ddf0a3
2019-06-12 21:18:56 -07:00
Valentin Shergin b5cd9e4db1 Fabric: Moving [super updateProps:props oldProps:oldProps]; to the end of the methods
Summary:
In some cases, the view class is the only that retains stored `props_` variable. At the same time the `[super updateProps:props oldProps:oldProps];` actually resets the pointer with a pointer to new props value which sometimes causes the deallocation of the old value. All that is okay unless the implementation of `updateProps:oldProps:` in superclasses stores a raw reference to an old value in the very beginning of the method (for convenience and perf reasons).

So, to prevent preliminary deallocation of the old value pointed by `_props` we moved all `[super updateProps:props oldProps:oldProps];` calls to the end of overloaded methods.

Reviewed By: mdvacca

Differential Revision: D15770068

fbshipit-source-id: af36b3e70560ab00846cd26b0963bbc059e977bc
2019-06-12 21:18:56 -07:00
Valentin Shergin b8bc40e2f0 Fabric: Removing checks for oldProps object in [ComponentView updateProps:oldProps:]
Summary: It's a antient left over which was copy pasted a dozen of times. All `RCTViewComponentView` subclasses have own copy of the old props `_props`, so it's useless to check for `oldProps`.

Reviewed By: mdvacca

Differential Revision: D15770067

fbshipit-source-id: 39f4d71ccdcf0c9a5b911b17a3b922dbe6dd9a8e
2019-06-12 21:18:56 -07:00
Valentin Shergin ba627f4970 Fabric: Implementaion of RCTScrollableProtocol for RCTScrollViewComponentView
Summary: We need this only until Fabric has own command-execution pipeline.

Reviewed By: mdvacca

Differential Revision: D15501202

fbshipit-source-id: aad77660ada43e429722b13d1da2f998a1726c73
2019-05-24 19:16:32 -07:00
Valentin Shergin 94dfc153a4 Fabric: Temporary workaround to enable commands in Fabric
Summary: This is a temporary workaround that we need only temporary and will get rid of soon.

Reviewed By: mdvacca

Differential Revision: D15501203

fbshipit-source-id: cec4891b6a185ea9e39f50bfedf9e1dae8993b66
2019-05-24 19:16:31 -07:00
Valentin Shergin f4a0102642 Fabric: Using const & in all other appropriate parts of RCTComponentViewProtocol
Summary:
Same as previous one but for the rest (minority) of methods.
I didn't change `updateLocalData:` because it's going away soon anyway.

Reviewed By: mdvacca

Differential Revision: D15473217

fbshipit-source-id: 6a6bd66c5343211a973fc34ad11e86efe031d07d
2019-05-24 12:25:51 -07:00
Valentin Shergin 0e9c764e28 Fabric: Passing props as const & in RCTComponentViewProtocol
Summary:
Passing shared pointers as references can save us a couple of milliseconds at scale.
Originally, I didn't expect that Objective-C supports passing values by references, but apparently it does.

Reviewed By: mdvacca

Differential Revision: D15473218

fbshipit-source-id: 15eb3770cc0889654647a8e91607d8aa78010121
2019-05-24 12:25:51 -07:00
Valentin Shergin 1c2c431f68 Fabric: Making UIView+ComponentViewProtocol to conform to the protocol
Summary:
UIView+ComponentViewProtocol is useless without it. Conformance to the protocol is only purpose of this category.
We didn't run into this issue because we have never used that yet.

Reviewed By: mdvacca

Differential Revision: D15419953

fbshipit-source-id: 84a430397e886c941d35075d9754eae5748c3a3f
2019-05-21 18:49:28 -07:00
Valentin Shergin 3c464782e0 Revert D15410979: [react-native][PR] [Fabric] use state in paragraph component
Differential Revision:
D15410979

Original commit changeset: 3c9517d2495a

fbshipit-source-id: 2e2fc860dd657b2b2159bd245896a4e8a25d5734
2019-05-20 14:35:12 -07:00
Eric Lewis 6ec19aba4e use state in paragraph component (#24873)
Summary:
Updates the paragraph component to use State instead of Local Data, part of the path to a Fabric TextInput 💯

## Changelog

[General] [Changed] - Fabric: Use State instead of Local Data for Paragraph
Pull Request resolved: https://github.com/facebook/react-native/pull/24873

Differential Revision: D15410979

Pulled By: shergin

fbshipit-source-id: 3c9517d2495a64c4dbd213b6efb5ff55287900e3
2019-05-20 09:49:39 -07:00
Valentin Shergin f02feb8d38 Fabric: Codegen for PullToRefresh component
Summary:
Straightforward.
Rick, I rename some stuff, I hope you are cool with that.

Reviewed By: mdvacca

Differential Revision: D15403306

fbshipit-source-id: 1dbd34060052a9bd39ed4211010f14b76fffcde6
2019-05-19 17:44:40 -07:00
Valentin Shergin e8b2145263 Fabric: Standard PullToRefresh component
Summary: This is implementation of standard PullToRefresh component that uses standard iOS component and modern integration approach.

Reviewed By: mdvacca

Differential Revision: D15403308

fbshipit-source-id: 5c877f7c18af9f5ac40e15a4ba44118614ba80bc
2019-05-19 17:44:40 -07:00
Valentin Shergin de47b47b7c Fabric: findScrollViewComponentViewForView was moved to RCTScrollViewComponentView
Summary: This way we can reuse this code in other RCTScrollViewComponentView-satellite components, especially in standard pull-to-refresh component.

Reviewed By: mdvacca

Differential Revision: D15403307

fbshipit-source-id: 5999f851f22db0f358887e1a86d610e163adcb1d
2019-05-19 17:44:40 -07:00
Valentin Shergin 64db98febf Fabric: Improvements in RCTScrollViewComponentView
Summary:
This diff contains two changes:
* The actual UIScrollView is now mounted inside the component as `contentView` which mostly means that border-props will properly affect the layout of the scroll view (the scroll view will be laid out inside borders, not on top of those). And that also simplifies the code.
* Now the component view exposes the actual scroll view, its delegate splitter, and the container view defining a single interface for all possible integration that can be done with the Scroll View Component.

Reviewed By: mdvacca

Differential Revision: D15397283

fbshipit-source-id: 35e860b8bf55fbd4d0a5f4116f79e4507df79098
2019-05-17 20:04:15 -07:00
Valentin Shergin a982decb84 Fabric: Stopping messing with clipToBounds in RCTViewComponentView
Summary:
There was a reason why it exists: on iOS if you want to implement a view with rounded corners with a non-transparent background you need to set `clipToBounds = YES` to enabling clipping because besides drawing borders we need to clip the background otherwise it will "stick out".
There were a bunch of problems with this implementation and approach:
* It's overshooting. It applies `clipToBounds` no matter which border-radius is and no matter is there a background or not. So, it's kinda heuristic implementation and it's totally unexpected behavior sometimes.
* The previous problems can lead to performance problems as well (clipping requires additional work to do for CoreGraphics/GPU).
* The border-radius that we assigned to contentView is incorrect because it does not take border-width into account.
* This functionality only applies to non-null `contentView` which is a rear and custom case in which that can always be done manually for components that require that for some reason.

Reviewed By: mdvacca

Differential Revision: D15397282

fbshipit-source-id: 1599882ca8e591a9c4edb4d2b845bbf3d147bfce
2019-05-17 20:04:14 -07:00
Valentin Shergin bcc1d999a8 Fabric: Introducing RNGenericDelegateSplitter
Summary: Future improvements in RCTScrollViewComponentView require ability to have multiple listeners of UIScrollViewDelegate (e.g. PullToRefresh component needs it), therefore we need a splitter to support it.

Reviewed By: JoshuaGross

Differential Revision: D15345301

fbshipit-source-id: 62bb50c4fdd4fa64ece5d7cc6ddc76367c84c4b3
2019-05-15 10:30:29 -07:00
Valentin Shergin 197c644f7a Fabric: Make measuring ScrollView::contentOffset-aware
Summary:
This is the final piece of change that makes measuring (`LayoutableShadowNode::getRelativeLayoutMetrics()`) take ScrollView content offset into account (on iOS).

It works pretty simply: at the end of scrolling (or zooming) action ScrollView updates the state which later can be used for computing `transform` which measuring uses to adjust values in LaoutMetrics.

Reviewed By: mdvacca

Differential Revision: D15323688

fbshipit-source-id: fdf86c6cd9bdfd56caddd4b39bdd1185760b9f94
2019-05-15 10:30:29 -07:00
Valentin Shergin cd231da27a Fabric: Migrate ScrollView from LocalData to State
Summary: Seems we need this now to enable future improvements in ScrollView such as correct measure, pull-to-refresh and so on.

Reviewed By: mdvacca

Differential Revision: D15323687

fbshipit-source-id: fae37431ccbbf2faec9c84752396153689b873ef
2019-05-15 10:30:29 -07:00
Valentin Shergin b241bc2d0b Fabric: Removing MainQueueExecutor
Summary: We don't need it anymore because we don't use folly::Future.

Reviewed By: JoshuaGross

Differential Revision: D15344961

fbshipit-source-id: a368e600d69e6879f6a98b4a997de85c71186e92
2019-05-14 19:52:17 -07:00
Valentin Shergin 184073813e Fabric: Making YogaStylableProps.yogaStyle protected
Summary: `YogaStylableProps.yogaStyle` is designed to be consumed by Yoga only. Making it `protected` allows us to avoid confusion and misuse of this props.

Reviewed By: JoshuaGross

Differential Revision: D15296474

fbshipit-source-id: cf9e416afee99fb426d72765557b34d303a63dbe
2019-05-10 15:34:25 -07:00
Valentin Shergin 16499c1086 Fabric: Removing of all unnececery nil checks in RCTMountingManager
Summary: We needed that in the very beginning when diffing algorithm produces mount instructions for <Text> nodes which don't have ComponentView representation, so we simply silence those error here. That's not the case anymore, so we don't need those ugly checks.

Reviewed By: JoshuaGross

Differential Revision: D15296473

fbshipit-source-id: ea3717062056907e5395776fe95e3d581d3e9b09
2019-05-10 15:34:24 -07:00
Valentin Shergin 1d985b5e6e Fabric: Removing leftovers from previous implementation of view preallocation infra
Summary: Now it's implementled differently (see -[RCTComponentViewRegistry preallocateViewComponents]), so this code is not being used.

Reviewed By: mdvacca

Differential Revision: D15242045

fbshipit-source-id: c02eceb978cf1eae778f84a73456e7156ccf503b
2019-05-09 15:49:18 -07:00
Valentin Shergin b5d0b6fc2a Fabric: Fixed parsing of backfaceVisibility prop
Summary: I have noticed that `backfaceVisibility` example crashes (because actual value is a string/enum, not a boolean), so I fixed it.

Reviewed By: JoshuaGross, mdvacca

Differential Revision: D15219261

fbshipit-source-id: 27f76cd10903794d597adacb9da7300a42813f8e
2019-05-06 17:06:41 -07:00
Valentin Shergin 0f2a09d1f6 Fabric: MountingCoordinator - the new way to ensure ordering of mount transaction
Summary:
TBD.
This thing fixes flickering during appearing of Fabric screens on iOS.

Reviewed By: mdvacca

Differential Revision: D15116079

fbshipit-source-id: 95ed0ba94667cad67fe4317025128d01b34f69c5
2019-05-03 15:11:35 -07:00
Estevão Lucas ca9a55e28b Remove accessibilityTraits prop (accessibility) (#24643)
Summary:
`accessibilityTraits` and `accessibilityComponentType` were removed on #24344. This PR removes `accessibilityTraits` prop from Fabric as well.

[General] [Removed] - Remove `accessibilityTraits` prop from Fabric.
Pull Request resolved: https://github.com/facebook/react-native/pull/24643

Differential Revision: D15120193

Pulled By: cpojer

fbshipit-source-id: 98440ac447569c26205fc38b93ce2591ccf1a3cf
2019-04-29 03:17:58 -07:00
David Aurelio 54af7fc645 YGStyle: wrap all fields into accessors
Summary:
@public

In order to encapsulate property access on `YGStyle`, as a first measure we wrap all fields with accessors.

This will e.g. enable dynamic property storage and instrumentation in the future.

All accessors have a `const` version that allows direct access via `const&`. For mutation, bit fields are wrapped with a custom reference object.

This style allows for the least amount of changes in client code. Property access simply needs appended parens, eg `style.direction` becomes `style.direction`.

Reviewed By: shergin

Differential Revision: D14999096

fbshipit-source-id: fbf29f7ddab520513d4618f5e70094c4f6330b30
2019-04-23 08:12:35 -07:00
Valentin Shergin b4044e5b1b Fabric: Fixed overlapping border radii
Summary:
UAs must adjust border radius values to fit a content box:
>>> Corner curves must not overlap: When the sum of any two adjacent border radii exceeds the size of the border box, UAs must proportionally reduce the used values of all border radii until none of them overlap.

This diff implements that.

Reviewed By: mdvacca

Differential Revision: D15028325

fbshipit-source-id: 368232ffa2fa0409d13759bbbe7fe10f8474c400
2019-04-22 09:04:54 -07:00
Valentin Shergin 94969edf7c Fabric: Say hello to MountingTransactionSynchronizer
Summary:
ShadowTree commits happen concurrently with limited synchronization that only ensures the correctness of the commit from ShadowTree perspective.
At the same time artifacts of the commit () needs to be delivered (also concurrently) to the proper thread and executed in order (not-concurrently). To achieve this we need some synchronization mechanism on the receiving  (mounting) side. This class implements this process.

Practically, this diff fixes a problem with glitching UI during the very first render of Fabric screen.

Reviewed By: JoshuaGross

Differential Revision: D15021794

fbshipit-source-id: 62982425300c515e92b91e1e660b45455a5446e9
2019-04-20 10:53:16 -07:00