Compare commits

...
247 Commits
Author SHA1 Message Date
Lorenzo Sciandra 468161232e [0.57.4] Bump version numbers 2018-10-25 17:52:59 +01:00
Lorenzo Sciandra 7a766bf293 [LOCAL COMMIT] Make google repo priority higher than jcenter (inspired by PR#21910) 2018-10-24 14:31:41 +01:00
Stephen CookandLorenzo Sciandra ef835b52e7 Android textTransform style support (#20572)
Summary:
Issue https://github.com/facebook/react-native/issues/2088 (closed, but a bit pre-emptively imo, since Android support was skipped)

Related (merged) iOS PR https://github.com/facebook/react-native/pull/18387

Related documentation PR https://github.com/facebook/react-native-website/pull/500

The basic desire is to have a declarative mechanism to transform text content to uppercase or lowercase or titlecase ("capitalized").
Pull Request resolved: https://github.com/facebook/react-native/pull/20572

Differential Revision: D9311716

Pulled By: hramos

fbshipit-source-id: dfbb855117196958e7ae5e980700d31be07a448d
2018-10-23 09:32:15 +01:00
David VaccaandLorenzo Sciandra 05a036da6d Cleaning up imports in ViewGroupManager
Summary: Trivial cleanup of imports in ViewGroupManager class

Reviewed By: shergin

Differential Revision: D10343029

fbshipit-source-id: 0b049df545a4101f11dd67809c9a96723e746945
2018-10-23 09:32:06 +01:00
Eli WhiteandLorenzo Sciandra 581a6e8822 Add deprecation notice to SwipeableListView
Summary: ListView is deprecated and SwipeableListView uses ListView. Thus, it is deprecated as well.

Reviewed By: RSNara

Differential Revision: D10437408

fbshipit-source-id: a08391d5b099e74b6ec179cd940ac404b2e702f4
2018-10-23 09:31:59 +01:00
Slobodan PredolacandLorenzo Sciandra 356fcf00dc Relax the requirement that lazy module cannot be initialized on the main thread
Summary:
[RN] Relax the requirement that lazy module cannot be initialized on the main thread
I tried to understand the D5364734 that intoduced this, and I am not sure, but belive that asserting here is too strict. If you have a module that you want to lazily initialize, and module does not demand the main queue, it should be just a warning if you run on the main queue, not necessarily an error.

Reviewed By: mmmulani

Differential Revision: D10429880

fbshipit-source-id: 018c211d45b98dd8c552bf0289fe517d05e56d47
2018-10-23 09:31:53 +01:00
Ely AlvaradoandLorenzo Sciandra 8323513e36 Allow specifying iOS version for run-ios with simulator option (#19079)
Summary:
Fixes #19069

The --simulator option for the run-ios command now can take an optional
iOS version between parenthesis to further match the desired simulator.
This is useful if you have installed simulators for different iOS
versions and you want to run the app in an especific one. Example:

react-native run-ios --simulator "iPhone 6s (9.3)"

Thank you for sending the PR! We appreciate you spending the time to work on these changes.
Help us understand your motivation by explaining why you decided to make this change.

Updated tests for the findMatchingSimulator function to include test cases specifying iOS version, and tested on the command line in my app to make sure it has the expected behavior.

[CLI] [ENHANCEMENT] [{/runIOS/findMatchingSimulator.js}] - run-ios command with the --simulator option now allows specifying the iOS version to run an specific simulator if you have multiple versions of the simulator installed. Example: `react-native run-ios --simulator "iPhone 6s (9.3)"`.
Pull Request resolved: https://github.com/facebook/react-native/pull/19079

Differential Revision: D10432487

Pulled By: hramos

fbshipit-source-id: efa50d798b79d83bfe357ee17967a56c7c003bee
2018-10-23 09:31:45 +01:00
Mehdi MulaniandLorenzo Sciandra be39e8a4f3 Fix onTextLayout metrics on Android when using alignText
Summary:
With this, we send the correct x position when using center or right aligned text. In order to accomplish this though, we have to pass the text alignment into the Layout object that we create.

Also update RNTester to allow us to try different alignments.

Reviewed By: sahrens

Differential Revision: D10316494

fbshipit-source-id: 11c7d2a59e636528f12211168acb46f16b54a126
2018-10-23 09:31:39 +01:00
Mehdi MulaniandLorenzo Sciandra 30bf6553cb Use TextLegend example in Android as well
Summary:
@public
Just movin' stuff around.
This shouldn't render any actual metrics yet on Android, need native changes for that.

Reviewed By: achen1

Differential Revision: D9584669

fbshipit-source-id: 4b6169b14d1f2053258191f67e1f361a4b714a8e
2018-10-23 09:31:21 +01:00
Mehdi MulaniandLorenzo Sciandra 1e3eb9c5ec Android: Send <Text> metrics in onTextLayout events
Summary:
@public
As we're doing in D9440914 (OSS 64a52532fe), send text metrics in an onTextLayout callback. These can be used by surrounding views for doing complicated layout like:
- displaying a cursor at the end of text
- vertical centering using capheight-baseline

This right now isn't very performant but is only done when `onTextLayout` is set. I plan to optimize it with a capheight and xheight cache in a follow up diff.

Reviewed By: achen1

Differential Revision: D9585613

fbshipit-source-id: aa20535b8371d5aecf15822d66a0d973c9a7eeda
2018-10-23 09:30:59 +01:00
Mehdi MulaniandLorenzo Sciandra 346309ec1c Text: send metrics after rendering (iOS)
Summary: This adds a callback for <Text> to get metrics about the rendered text. It's divided by line but that could be changed to "fragments" (which makes more sense for multi-lingual). Right now by line is convenient as you frequently want to know where the first and last line end (though we could make this work with fragments I suppose).

Reviewed By: shergin

Differential Revision: D9440914

fbshipit-source-id: bb011bb7a52438380d3f604ffe7019b98c18d978
2018-10-23 09:30:49 +01:00
Ratchanan SrirattanametandLorenzo Sciandra fd781c3dc0 Bump xcode@1.0.0 (#21766)
Summary:
(cordova-node-)xcode 1.0.0 includes a fix for #13160 plus a few more
fixes. This should increase robustness in Xcode project handling
overall.

Fixes #13160.

-------------------------

Thank you for sending the PR! We appreciate you spending the time to work on these changes.
Help us understand your motivation by explaining why you decided to make this change.

If this PR fixes an issue, type "Fixes #issueNumber" to automatically close the issue when the PR is merged.

_Pull requests that expand test coverage are more likely to get reviewed. Add a test case whenever possible!_
Pull Request resolved: https://github.com/facebook/react-native/pull/21766

Reviewed By: codytwinton

Differential Revision: D10384245

Pulled By: hramos

fbshipit-source-id: 488156be67cfc2d99ca81d7cb82747bab35984a7
2018-10-23 09:30:40 +01:00
Emily JanzerandLorenzo Sciandra e27d88f108 Fix issue when inserting text at 0 when maxLength is set
Summary:
1. The user inserts a character ('0') at index 0. Because the range matches 0, 0, predictedText is set to that character that was inserted.
2. In textInputDidChange, it discovers a mismatch between the rendered text ('1234') and predicted text ('0')
3. This triggers textInputShouldChangeTextInRange to be called again with the 'new' text that it thinks was just added ('1234')
4. It goes to insert this text, but runs into the maxLength limit, so it gets truncated and then inserted.

(I'm not totally sure why only happens if maxLength is set - I need to look into that.)

One fix for this is to just get rid of the range check, but that'll regress #18374. I decided to just check and see if the rendered text is empty instead of checking the range where text could be inserted, since that seems like it should properly handle both cases.

Reviewed By: shergin

Differential Revision: D10392176

fbshipit-source-id: 84fb3b6cac9b0aa25b3c1a127d43f9cdc5a1c6a8
2018-10-23 09:30:29 +01:00
Jonathan LeeandLorenzo Sciandra ac3b236c71 Back out "[react-native][PR] Rounded corner rendering fixed on Android N."
Summary:
Original PR: https://github.com/facebook/react-native/pull/21340

The original PR fixed a bug with border radius on Android 7.0, but caused a new bug where no `ReactART` components would render if they were nested within a View with border radius set.

Differential Revision: D10409352

fbshipit-source-id: 0b4e36ae9d4c3bc2f4884a43909f8efdeeb41b74
2018-10-23 09:30:17 +01:00
Thomas BARRASandLorenzo Sciandra abbad558f2 ListView requestAnimationFrame leak (#21802)
Summary:
Related to https://github.com/facebook/react-native/pull/21488
Disclaimer: I made this PR.

I think there's some requestAnimationFrame events that are not cleared on unmount because of bad use of `splice` method.

- All flow tests succeed.
- RNTester: iOS (this change should only affect iOS because calculateChildFrames is iOS only)
Show perf monitor, show ListView* screen, start scrolling. UI frame Rate is used at the beginning. When scrolling there is no drop in FPS rate.
- TODO: I'll write a load test for ListView

[GENERAL] [ENHANCEMENT] [ListView.js] - rm TimerMixin
Pull Request resolved: https://github.com/facebook/react-native/pull/21802

Differential Revision: D10391812

Pulled By: RSNara

fbshipit-source-id: 49f0b0a4641ec29bcb4cc04bd3bafb42b3842b69
2018-10-23 09:30:00 +01:00
Thomas BARRASandLorenzo Sciandra c7d36a5eb9 Remove TimerMixin from ListView (#21488)
Summary:
Related to #21485

- Remove TimerMixin from ListView

- All flow tests succeed.
- RNTester: <ListView> iOS (this change should only affect iOS because calculateChildFrames is iOS only)
Show perf monitor, show ListView* screen, start scrolling. UI frame Rate is used at the beginning. When scrolling there is no drop in FPS rate.

TODO: I think a load test would be more relevant:
- Update props multiple times and scroll

[GENERAL] [ENHANCEMENT] [ListView.js] - rm TimerMixin
Pull Request resolved: https://github.com/facebook/react-native/pull/21488

Differential Revision: D10219088

Pulled By: RSNara

fbshipit-source-id: 946e4fc1319324c5bf4947a2060b18bebb6fc493
2018-10-23 09:29:50 +01:00
Andy HuangandLorenzo Sciandra ee2067aa5c Fix pull to refresh refresh component clipping on Android
Summary: Currently the pull to refresh icon on browse feed is super cut off on Android. Expose the progressViewOffset prop from FBPullToRefresh to support offsetting the PTR component to make the component more visible.

Reviewed By: yungsters

Differential Revision: D10274679

fbshipit-source-id: 1735c4d2d98523ccc3d1ec3733465028ae33df7b
2018-10-23 09:29:39 +01:00
Haitao LiandLorenzo Sciandra d9f5319cf0 Fix DynamicFromMap object pool synchronization (#17842)
Summary:
DynamicFromMap internally uses SimplePool object to recycle dynamic prop objects. But the pool is not multi-thread safe. Currently the most used dynamic props are size props such as left, paddingVertical, marginTop and so on. These props are only accessed from the layout thread so the pool works fine. If a dynamic prop is needed in UI thread, then the two threads can access the same pool object and cause random errors. This PR make the pool object thread local to avoid synchronization. After this change there are two pool objects created in the process.

Tested in official Airbnb app after updating accessibilityComponentType to be dynamic.

Once this is merged, I'll send another PR to support "disabled" state in `accessibilityComponentType`.

[ANDROID] [BUGFIX] [DynamicFromMap] - Fix a crash caused by dynamic props.
Pull Request resolved: https://github.com/facebook/react-native/pull/17842

Differential Revision: D10374238

Pulled By: hramos

fbshipit-source-id: 7ebf89c5abf06bd5fb43b205348ba4dc7e19517d
2018-10-23 09:29:30 +01:00
DulmandakhandLorenzo Sciandra b6f474cf5a bump okhttp3 to 3.11 (#21626)
Summary:
OkHTTP3 3.11 version includes many bug fixes, and few new features. Also it embed R8/ProGuard rules in the jar, which will help reduce APK size.

Changelog https://github.com/square/okhttp/blob/master/CHANGELOG.md
Pull Request resolved: https://github.com/facebook/react-native/pull/21626

Differential Revision: D10367048

Pulled By: RSNara

fbshipit-source-id: b168138178f96eeefba493002f7b6a2e921a531d
2018-10-19 15:47:58 +01:00
DulmandakhandLorenzo Sciandra 82f241dd69 Consolidate native dependencies versions (#20742)
Summary:
This PR tries to consolidate Android native dependencies versions to make it less error prone to version bumps.
Pull Request resolved: https://github.com/facebook/react-native/pull/20742

Differential Revision: D9818155

Pulled By: hramos

fbshipit-source-id: 9bf631640910edad5731014f4e23dbca45af2b59
2018-10-19 15:47:55 +01:00
Ramanpreet NaraandLorenzo Sciandra a430c2cbd3 Fix crashes on invalid regex
Summary:
**Problem:**
When you type an invalid regex into the input field of the RNTester app, it crashes. What's worse is that it remembers the input string so refreshing the view doesn't get rid of the error. Observe:
https://pxl.cl/jdm3

Reviewed By: yungsters

Differential Revision: D10349249

fbshipit-source-id: aab5977bd47271e9a4ff6202c93b47550da778d2
2018-10-19 15:45:30 +01:00
Andrey LunyovandLorenzo Sciandra c02432293d Do not use fbjs/emptyObject
Summary: Remove dependency on fbjs/emptyObject in React Native

Reviewed By: yungsters

Differential Revision: D10342631

fbshipit-source-id: 312bb545b66dd5b2132ca67bbaf91cc98a0c6c8a
2018-10-19 15:45:17 +01:00
Andrew Chen (Eng)andLorenzo Sciandra f49f633d03 Fix accessibilityRole value lookup (with conflict fixed) 2018-10-19 15:17:47 +01:00
Haseeb SaeedandLorenzo Sciandra 94a0146c02 Fix accessibility role crash
Summary: We were using a locale-specific `toUpperCase()` for accessibility roles. In the Turkish locale, `"image".toUpperCase()` does not become `"IMAGE"`; it becomes some weird turkish alphabet word, and we throw an error. This diff uses US-locale to avoid the error.

Reviewed By: YaoPersonal

Differential Revision: D9402330

fbshipit-source-id: a3fd7c54eec4b313c7e9df9236adb7ae42854ed8
2018-10-19 15:16:36 +01:00
Lorenzo Sciandra 5139b0bef7 Revert "Update bad method"
This reverts commit 1592a8d424.
2018-10-19 14:22:35 +01:00
Lorenzo Sciandra 8fd5bcc888 [0.57.3] Bump version numbers 2018-10-12 12:19:21 +01:00
Radovan ŠmitalaandLorenzo Sciandra b1aed4d376 Normalize scheme for URL on Android (#21561)
Summary:
Android requires lowercase for URL scheme. This commit https://github.com/facebook/react-native/commit/d00bdb9bb8b9b11bce900689c7e28cebd2eb0807 fixed it but on React Native side.
Because it is Android specific, it should be fixed on Android side.

Android has method to normalize url scheme: https://developer.android.com/reference/android/net/Uri.html#normalizeScheme()
Pull Request resolved: https://github.com/facebook/react-native/pull/21561

Differential Revision: D10287868

Pulled By: hramos

fbshipit-source-id: f5e474164fdb2cfd49bd8ee51da17de3f1341a9c
2018-10-12 11:38:44 +01:00
Hyunjong LeeandLorenzo Sciandra 09178f8bb9 Resolve protocol http, https when not in lowercase (#21396)
Summary:
Thank you for sending the PR! We appreciate you spending the time to work on these changes.
Help us understand your motivation by explaining why you decided to make this change.

If this PR fixes an issue, type "Fixes #issueNumber" to automatically close the issue when the PR is merged.

_Pull requests that expand test coverage are more likely to get reviewed. Add a test case whenever possible!_
Pull Request resolved: https://github.com/facebook/react-native/pull/21396

Differential Revision: D10119630

Pulled By: RSNara

fbshipit-source-id: d0fe193eee976b9b18a2eb467b5f3af48bd7d2de
2018-10-12 11:38:38 +01:00
DulmandakhandLorenzo Sciandra b7d0594dfc bump Android NDK to r17c (#21628)
Summary:
bump Android NDK to r17c, which is only available revision to download for r17. And it includes bug fixes.
Pull Request resolved: https://github.com/facebook/react-native/pull/21628

Differential Revision: D10352162

Pulled By: hramos

fbshipit-source-id: d372e55443260242a44a1f73698977a3e361f001
2018-10-12 11:38:18 +01:00
Jonathan KimandLorenzo Sciandra 5468aeef03 Move RN's DEFS.bzl to tools and rename to rn_defs.bzl
Reviewed By: mzlee

Differential Revision: D9553765

fbshipit-source-id: cb65081668ea2726f24d2c9c02661e859cc7a994
2018-10-12 11:21:40 +01:00
Mehdi MulaniandLorenzo Sciandra 31c398ec28 Fix rntester buck build
Summary: Looks like we have to explicitly require the BuildConfig package if we want to use it.

Reviewed By: mdvacca

Differential Revision: D10275883

fbshipit-source-id: 4fbce3085e1ac6486a782b2bc0e335b7e48fe8de
2018-10-12 11:11:16 +01:00
Eli WhiteandLorenzo Sciandra c45007b771 Skip flaky Animated test
Summary:
This test is disabled internally and flaky in open source causing CI to fail. Skipping it for now.

Related to: https://github.com/facebook/react-native/issues/21517

Reviewed By: RSNara

Differential Revision: D10223498

fbshipit-source-id: 37a3798c0abb7de829bc5b59e02f23d8943da882
2018-10-12 11:03:20 +01:00
Tim YungandLorenzo Sciandra 5ec4bab51d RN: Fix ReactNativeViewAttributes Type Bugs
Summary: Fixes the runtime value of `ReactNativeStyleAttributes` to correctly map to `true` instead of strings (as returned by `keyMirror`).

Reviewed By: TheSavior

Differential Revision: D10057235

fbshipit-source-id: dc855cff3a114761098ed5176b2e6e25412481dc
2018-10-12 10:57:37 +01:00
Rafael OlezaandLorenzo Sciandra a3a69cae34 Expose enableBabelRuntime config param externally
Summary:
Up until now the `enableBabelRuntime` option in the `metro-react-native-preset` package was hardcoded in the transformer: our internal transformer set it to `false` and the opensource one was `true`.

This diff now exposes this param out to the config of Metro (now that it's quite easy to expose things) so anybody can set it to false or true.

This allows our end to end tests to set it to false to not have to deal with requires to `babel/runtime`.

Reviewed By: davidaurelio

Differential Revision: D10123776

fbshipit-source-id: 97e744eeb567c8e86ab3c613ac71970d226ed2ca
2018-10-12 10:45:59 +01:00
Lorenzo Sciandra 46bb737b98 Revert "[0.57.3] Bump version numbers"
This reverts commit 56cde24863.
2018-10-12 10:28:20 +01:00
Mike Grabowski 56cde24863 [0.57.3] Bump version numbers 2018-10-11 23:39:41 +02:00
Mike Grabowski 1592a8d424 Update bad method 2018-10-11 23:35:08 +02:00
Emily JanzerandMike Grabowski 300ba7a87e Fix for InterpolatorType crash
Summary:
We're currently getting a redbox in Turkish when we try to convert the string 'easeInEaseOut' to an InterpolatorType. This is because I use toLowerCase() to compare the string without setting a locale; in Turkish, the capital letter 'I' doesn't convert to 'i' when you lowercase it, but rather to 'ı' (http://www.i18nguy.com/unicode/turkish-i18n.html).

Passing in a locale param to `toLowerCase()` fixes it. Also updating the test.

Differential Revision: D10315474

fbshipit-source-id: 54be3ff1d3f91cb2ec765ff705ac364b976b8c6f
2018-10-11 23:18:32 +02:00
Emily JanzerandMike Grabowski 69a51da3a1 Add test for InterpolatorType
Summary: Adding a test for the newly added InterpolatorType.fromString()

Reviewed By: axe-fb

Differential Revision: D10203814

fbshipit-source-id: f3c70db1a5754c79b1bdd881d266bec110934494
2018-10-11 23:18:30 +02:00
Emily JanzerandMike Grabowski 0df8e7d65b Simplify OSS enums
Summary: Simplifying our OSS enums (remove private variables and methods) so that redex can more easily optimize them for us.

Reviewed By: achen1, Feng23

Differential Revision: D9812796

fbshipit-source-id: 11a8272db41ff04399d1cdf366e28ddf1b07b7be
2018-10-11 23:17:31 +02:00
Radek CzemerysandMike Grabowski e7ea1f840c Fix deprecation warning message in Switch
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/21479

Differential Revision: D10205122

Pulled By: TheSavior

fbshipit-source-id: a7bbdae3b5dd6b47c4dc995e3c2e8e40abb64f13
2018-10-11 23:13:40 +02:00
Eli WhiteandMike Grabowski 131db26cbd Deprecate legacyImplementation
Summary: The legacy implementation doesn't provide additional functionality and has a negative impact on performance and user experience. The legacyImplementation prop is deprecated and will be removed in a future release.

Reviewed By: yungsters

Differential Revision: D10212762

fbshipit-source-id: 9b3416434ba392827b538c984c7ab4bcbe156e60
2018-10-11 23:13:28 +02:00
Alexey LangandMike Grabowski a4ef256167 Bump up the buffer size and show a warning if the trace might be truncated
Summary: The current buffer size isn't enough even to capture a short TTI trace.

Reviewed By: mhorowitz

Differential Revision: D10112538

fbshipit-source-id: 266fa6ffa916049245b21d7725a364d75589c776
2018-10-11 23:13:16 +02:00
Andrew Chen (Eng)andMike Grabowski 21204d750e Fix accessibility role/label
Summary: D10138128 had some shamefully wrong boolean logic to determine whether we should customize the accessibility delegate. Previously, we did it if BOTH the accessibility label AND role were present. We should actually do it if EITHER are present.

Reviewed By: mdvacca

Differential Revision: D10182135

fbshipit-source-id: 209a8ab43f5869762843fe878cfd59a7b9b5ab1a
2018-10-11 21:48:45 +02:00
Andrew Chen (Eng)andMike Grabowski 677f1de70b Fix default accessibility delegate
Summary:
The current accessibility implementation tries to generalize every view's accessibility node info by setting an accessibility delegate on every view -- regardless of whether or not any accessibility properties are set. This delegate however doesn't correctly set the appropriate accessibility node fields for every view. For example, ScrollViews needs AccessibilityNode.setScrollable(true) set, but the generic delegate does not account for this. For now let's avoid unnecessarily
setting an accessibility delegate on views that don't have any accessibility props set, which will likely fix the majority of these issues.

Reviewed By: mdvacca

Differential Revision: D10138128

fbshipit-source-id: b999b41e7256e3dce94cd70e9b944979d52f74fd
2018-10-11 21:48:39 +02:00
Mike Grabowski 113e891264 Revert "Fix accessibility role/label"
This reverts commit fa6035bda6.
2018-10-11 21:47:40 +02:00
Oleg LokhvitskyandMike Grabowski 1fa7150ce9 Android ScrollView fix for snapToInterval not snapping to end
Summary:
The end-of-scrollable-range offset was not clipped before the nearestOffset calculation causing the ScrollView to not snap to the end of the view when the width of the ScrollView was not an exact multiple of snapToInterval.

Addresses https://github.com/facebook/react-native/issues/21116#issuecomment-427944838

Reviewed By: yungsters

Differential Revision: D10248545

fbshipit-source-id: 2bdc94ea0a9d9f063769f2c5da4c33d4872b1db2
2018-10-11 21:43:10 +02:00
Tim YungandMike Grabowski a0b7854c94 React: Bump Canary Version
Reviewed By: gaearon

Differential Revision: D10302487

fbshipit-source-id: 28a00f7076a53dc243ac55ff6c14dc2927318de2
2018-10-11 21:42:58 +02:00
Eli WhiteandMike Grabowski 25a3cff5a7 Add Deprecation Warning to ListView
Summary: This component has long been deprecated in the docs. Adding a warning to the code.

Reviewed By: sahrens

Differential Revision: D10261155

fbshipit-source-id: 462ce30a97f35e52477cfc135fb50c976b56e9cb
2018-10-11 21:42:30 +02:00
Lorenzo SciandraandMike Grabowski 47a1b0461b Update to Detox 9 (#21570)
Summary:
Updating to Detox 9 - this should help with better Xcode 10 support, and should fix https://github.com/facebook/react-native/issues/21539.

I've updated to fixed `9.0.4` since it seems that each version is fairly different from the next, and I've followed the [migration guide](https://github.com/wix/detox/blob/master/docs/Guide.Migration.md#migrating-from-detox-8xx-to-9xx) for the android native dependencies.

Release Notes:

[INTERNAL] [ENHANCEMENT] [DETOX] - Update to version 9.0.4

Pull Request resolved: https://github.com/facebook/react-native/pull/21570

Reviewed By: TheSavior

Differential Revision: D10242373

Pulled By: RSNara

fbshipit-source-id: bd29d554e0972f16d96b9b39b86c7143941d5b7c
2018-10-11 21:42:12 +02:00
Rafael OlezaandMike Grabowski 641f7e8033 Remove sinon dependency
Summary:
This diff removes the `sinon` dependency from `metro` and `react-native-github`. It was only used in a handful of tests and having to learn and remember another mocking API just for these cases was not worth it IMO.

While doing the migration, most of the things that `sinon` provides can be done with `jest` in a very similar (and user friendly) way.

I've found, though, two small things that are more user friendly with `sinon`. I'm documenting them here because it may be worth adding them to jest:

With `sinon`:

```
stub.throws(new Error('foo'));
```

With `jest`:

```
mock.mockImplementation(() => {
  throw new Error('foo');
});
```

Taking into account that `jest` has a `mockRejectedValue` method for mocks (to return a rejected promise) I don't see any reason why it does not have a `mockThrowError` method.

With `sinon`:

```
expect(mock1.calledBefore(mock2)).toBeTruthy();
```

With `jest`:

```
expect(mock1.mock.invocationCallOrder[0]).toBeLessThan(
  mock2.mock.invocationCallOrder[0],
);
```

There's a community matcher that adds this matcher in `jest-extended`: https://github.com/jest-community/jest-extended#tohavebeencalledbefore, but we're not using `jest-extended` in `xplat/js`.

Reviewed By: jeanlauliac

Differential Revision: D10238331

fbshipit-source-id: 5441125b69596ad85bf8f56d203cfd20759bc358
2018-10-11 21:41:17 +02:00
Rafael OlezaandMike Grabowski 2784a03fc5 Bump metro@0.48.1
Summary: iffitsships

Reviewed By: pvdz

Differential Revision: D10255800

fbshipit-source-id: 6cf514dc210e2fcc706e9c6bd555a2b8c9326f21
2018-10-11 21:41:00 +02:00
Vitor CapretzandMike Grabowski 1d1a41e303 ios-simulator: change default iphone version (#21148)
Summary:
this is just a suggestion, but as the iPhone 6 is discontinued by Apple
and the new iPhone line will match the X version, it could be good to update the default simulator.

it could also be the iPhone 8, feel free to suggest other changes!

Thank you for sending the PR! We appreciate you spending the time to work on these changes.
Help us understand your motivation by explaining why you decided to make this change.

If this PR fixes an issue, type "Fixes #issueNumber" to automatically close the issue when the PR is merged.
Pull Request resolved: https://github.com/facebook/react-native/pull/21148

Differential Revision: D9928120

Pulled By: hramos

fbshipit-source-id: 005faa3a8e00b67f98a778c92ecc01b064e14199
2018-10-11 21:40:25 +02:00
Tim YungandMike Grabowski 2134102027 FBJS: Upgrade to ^1.0.0
Summary: Upgrades all dependents of `fbjs` to the latest version.

Reviewed By: mjesun

Differential Revision: D10100661

fbshipit-source-id: 2e2af616cb2b5eab560872b6c6c60ed264e986b2
2018-10-11 21:40:14 +02:00
Antony ChanandMike Grabowski 9e6212a818 check isAvailable key on simulator object (#21557)
Summary:
With the new xcode command line tools (10.1 beta2), running `xcrun simctl list --json devices` seems to gives us a slightly different format than what we were expecting. More specifically, the `availability` key is changed to `isAvailable` and returns `'YES'` if the simulator is available:

Before:
```js
devices: {
  'iOS 9.2': [
    {
      state: 'Shutdown',
      availability: '(unavailable, runtime profile not found)',
      name: 'iPhone 4s',
      udid: 'B9B5E161-416B-43C4-A78F-729CB96CC8C6',
    },
    {
      state: 'Shutdown',
      availability: '(unavailable, runtime profile not found)',
      name: 'iPhone 5',
      udid: '1CCBBF8B-5773-4EA6-BD6F-C308C87A1ADB',
    },
    ...
   ]
}
```
After:
```js
devices: {
  'iOS 12.1': [
    {
      state: 'Shutdown',
      isAvailable: 'YES',
      name: 'iPhone 6s',
      udid: 'D0F29BE7-CC3C-4976-888D-C739B4F50508',
    },
    {
      state: 'Shutdown',
      isAvailable: 'YES',
      name: 'iPhone 6',
      udid: 'BA0D93BD-07E6-4182-9B0A-F60A2474139C',
    },
    ...
   ]
}
```

Without this fix, `npm run ios` is not able to launch the simulator correctly and returns the following error:

```
Could not find iPhone 6 simulator

Error: Could not find iPhone 6 simulator
    at resolve (/Users/antonyc/Projects/AwesomeProject/node_modules/react-native/local-cli/runIOS/runIOS.js:148:13)
    at new Promise (<anonymous>)
    at runOnSimulator (/Users/antonyc/Projects/AwesomeProject/node_modules/react-native/local-cli/runIOS/runIOS.js:134:10)
    at Object.runIOS [as func] (/Users/antonyc/Projects/AwesomeProject/node_modules/react-native/local-cli/runIOS/runIOS.js:106:12)
    at Promise.resolve.then (/Users/antonyc/Projects/AwesomeProject/node_modules/react-native/local-cli/cliEntry.js:117:22)
```
Pull Request resolved: https://github.com/facebook/react-native/pull/21557

Differential Revision: D10248115

Pulled By: TheSavior

fbshipit-source-id: 37197bbf828e4a6e254270d46411a6716a91afe3
2018-10-11 21:39:58 +02:00
Alexander KhayloandMike Grabowski 265804867c Fix CameraRoll.getPhotos() crash on Android if device has a problematic video asset (#21438)
Summary:
Changed catching IOException to Exception
Fixes #20112
Pull Request resolved: https://github.com/facebook/react-native/pull/21438

Differential Revision: D10132453

Pulled By: hramos

fbshipit-source-id: c68fa8c45d43e4f2d116b8084ffd731ad6bf5aec
2018-10-11 21:39:43 +02:00
Marc HorowitzandMike Grabowski 413e7c8304 When converting arguments JS->Java, handle integers correctly
Summary:
If a folly::dynamic contains a double when a Java method is
declared to take an int, getInt() will be called, and a C++ exception
will be thrown.  This change uses similar logic to
NativeReadableMap.getInt() to convert a folly::dynamic double to a
jint.  This will still throw an exception if the JS value cannot be
represented as a jint without loss.

Reviewed By: fromcelticpark

Differential Revision: D10209492

fbshipit-source-id: fd96416200c6b283ce5c8f8fa4c227ceb8f43054
2018-10-11 21:39:29 +02:00
Tim YungandMike Grabowski c9948d1d36 React sync for revisions ade5e69...d836010
Summary:
This sync includes the following changes:
- **[d83601080](https://github.com/facebook/react/commit/d83601080)**: Wrap retrySuspendedRoot using SchedulerTracing (#13776) //<Sophie Alpert>//
- **[40a521aa7](https://github.com/facebook/react/commit/40a521aa7)**: Terminology: Functional -> Function Component (#13775) //<Dan Abramov>//
- **[605ab10a4](https://github.com/facebook/react/commit/605ab10a4)**: Add envify transform to scheduler package (#13766) //<Michael Ridgway>//
- **[acc7f404c](https://github.com/facebook/react/commit/acc7f404c)**: Restart from root if promise pings before end of render phase (#13774) //<Andrew Clark>//
- **[cbc224028](https://github.com/facebook/react/commit/cbc224028)**: fix - small misspelling (#13768) //<Spencer Davies>//
- **[4eabeef11](https://github.com/facebook/react/commit/4eabeef11)**: Rename ReactSuspenseWithTestRenderer-test -> ReactSuspense-test //<Andrew Clark>//
- **[95a3e1c2e](https://github.com/facebook/react/commit/95a3e1c2e)**: Rename ReactSuspense-test -> ReactSuspenseWithNoopRenderer-test //<Andrew Clark>//
- **[96bcae9d5](https://github.com/facebook/react/commit/96bcae9d5)**: Jest + test renderer helpers for concurrent mode (#13751) //<Andrew Clark>//
- **[5c783ee75](https://github.com/facebook/react/commit/5c783ee75)**: Remove unreachable code (#13762) //<Heaven>//
- **[36c5d69ca](https://github.com/facebook/react/commit/36c5d69ca)**: Always warn about legacy context within StrictMode tree (#13760) //<Brian Vaughn>//
- **[3e9a5de88](https://github.com/facebook/react/commit/3e9a5de88)**: UMD react-cache build (#13761) //<Maksim Markelov>//
- **[8315a30b9](https://github.com/facebook/react/commit/8315a30b9)**: --save is no longer needed (#13756) //<Joe Cortopassi>//
- **[ce96e2df4](https://github.com/facebook/react/commit/ce96e2df4)**: Rename simple-cache-provider to react-cache (#13755) //<Andrew Clark>//
- **[c5212646f](https://github.com/facebook/react/commit/c5212646f)**: Removed extra typeof checks for contextType.unstable_read (#13736) //<Brian Vaughn>//
- **[806eebdae](https://github.com/facebook/react/commit/806eebdae)**: Enable getDerivedStateFromError (#13746) //<Brian Vaughn>//
- **[a0733fe13](https://github.com/facebook/react/commit/a0733fe13)**: pure (#13748) //<Andrew Clark>//
- **[4d17c3f05](https://github.com/facebook/react/commit/4d17c3f05)**: [scheduler] Improve naive fallback version used in non-DOM environments //<Andrew Clark>//
- **[469005d87](https://github.com/facebook/react/commit/469005d87)**: Revise `AttributeType` React Native Flow Type (#13737) //<Timothy Yung>//
- **[0dc0ddc1e](https://github.com/facebook/react/commit/0dc0ddc1e)**: Rename AsyncMode -> ConcurrentMode (#13732) //<Dominic Gannaway>//
- **[7601c3765](https://github.com/facebook/react/commit/7601c3765)**: Ensure "addEventListener" exists on "window" for "scheduler" package (#13731) //<Dominic Gannaway>//
- **[d0c0ec98e](https://github.com/facebook/react/commit/d0c0ec98e)**: Added a PureComponent contextType test (#13729) //<Brian Vaughn>//
- **[4b68a6498](https://github.com/facebook/react/commit/4b68a6498)**: Support class component static contextType attribute (#13728) //<Brian Vaughn>//
- **[f305d2a48](https://github.com/facebook/react/commit/f305d2a48)**: [scheduler] Priority levels, continuations, and wrapped callbacks (#13720) //<Andrew Clark>//
- **[970a34bae](https://github.com/facebook/react/commit/970a34bae)**: Bump babel-eslint and remove flow supressions (#13727) //<Brian Ng>//
- **[13965b4d3](https://github.com/facebook/react/commit/13965b4d3)**: Interaction tracking ref-counting bug fixes (WIP) (#13590) //<Brian Vaughn>//
- **[17e703cb9](https://github.com/facebook/react/commit/17e703cb9)**: Restore global window.event after event dispatching (#13688) (#13697) //<Sergei Startsev>//
- **[a775a767a](https://github.com/facebook/react/commit/a775a767a)**: Remove redundant logic (#13502) //<Heaven>//
- **[e1a067dea](https://github.com/facebook/react/commit/e1a067dea)**: Fix circular dependency in TracingSubscriptions (#13689) //<Maksim Markelov>//
- **[518812eeb](https://github.com/facebook/react/commit/518812eeb)**: Clarify comment (#13684) //<Heaven>//
- **[eeb817785](https://github.com/facebook/react/commit/eeb817785)**: Remove some old files from stats //<Dan>//
- **[7ea3ca1d1](https://github.com/facebook/react/commit/7ea3ca1d1)**: Rename schedule to scheduler (#13683) //<Dan Abramov>//
- **[bec2ddaf1](https://github.com/facebook/react/commit/bec2ddaf1)**: Update bundle sizes for 16.5.2 release //<Brian Vaughn>//
- **[4269fafb0](https://github.com/facebook/react/commit/4269fafb0)**: Updating package versions for release 16.5.2 //<Brian Vaughn>//
- **[4380f9ba1](https://github.com/facebook/react/commit/4380f9ba1)**: Revert "Updating package versions for release 16.6.0-alpha.0" //<Brian Vaughn>//
- **[72fad84e7](https://github.com/facebook/react/commit/72fad84e7)**: Revert "Updating dependencies for react-noop-renderer" //<Brian Vaughn>//
- **[c3fad5acf](https://github.com/facebook/react/commit/c3fad5acf)**: Revert "Update bundle sizes for 16.6.0-alpha.0 release" //<Brian Vaughn>//
- **[dd9120561](https://github.com/facebook/react/commit/dd9120561)**: Kepp calling peformWork consistent (#13596) //<Heaven>//
- **[42d12317a](https://github.com/facebook/react/commit/42d12317a)**: Update bundle sizes for 16.6.0-alpha.0 release //<Brian Vaughn>//
- **[489614c4f](https://github.com/facebook/react/commit/489614c4f)**: Updating dependencies for react-noop-renderer //<Brian Vaughn>//
- **[351c9015c](https://github.com/facebook/react/commit/351c9015c)**: Updating package versions for release 16.6.0-alpha.0 //<Brian Vaughn>//
- **[a210b5b44](https://github.com/facebook/react/commit/a210b5b44)**: Revert "Do not bind topLevelType to dispatch" (#13674) //<Dan Abramov>//
- **[1d8a75fef](https://github.com/facebook/react/commit/1d8a75fef)**: remove flow typings from Schedule.js (#13662) //<Alexey Raspopov>//
- **[d92114b98](https://github.com/facebook/react/commit/d92114b98)**: Resubmit: Fix updateWrapper causing re-render textarea, even though their data (#13643) //<Nathan Hunzaker>//
- **[0c9c591bf](https://github.com/facebook/react/commit/0c9c591bf)**: Do not bind topLevelType to dispatch (#13618) //<Nathan Hunzaker>//
- **[9f819a5ea](https://github.com/facebook/react/commit/9f819a5ea)**: [schedule] Refactor Schedule, remove React-isms (#13582) //<Andrew Clark>//
- **[9c961c0a2](https://github.com/facebook/react/commit/9c961c0a2)**: Fix some iframe edge cases (#13650) //<Jérôme Steunou>//
- **[8bc0bcabe](https://github.com/facebook/react/commit/8bc0bcabe)**: Add UMD production+profiling entry points (#13642) //<Brian Vaughn>//
- **[b488a5d9c](https://github.com/facebook/react/commit/b488a5d9c)**: Fix test comment typo (#13568) //<Heaven>//
- **[4bcee5621](https://github.com/facebook/react/commit/4bcee5621)**: Rename "tracking" API to "tracing" (#13641) //<Brian Vaughn>//
- **[72217d081](https://github.com/facebook/react/commit/72217d081)**: Update bundle sizes for 16.5.1 release //<Dan Abramov>//
- **[8b93a60c5](https://github.com/facebook/react/commit/8b93a60c5)**: Updating package versions for release 16.5.1 //<Dan Abramov>//
- **[ecbf7af40](https://github.com/facebook/react/commit/ecbf7af40)**: Enhance dev warnings for forwardRef render function (#13627) (#13636) //<Andres Rojas>//
- **[228240085](https://github.com/facebook/react/commit/228240085)**: Delete TapEventPlugin (#13630) //<Dan Abramov>//
- **[a079011f9](https://github.com/facebook/react/commit/a079011f9)**: ð Stop syncing the value attribute on inputs (behind a feature flag) (#13526) //<Nathan Hunzaker>//
- **[a7bd7c3c0](https://github.com/facebook/react/commit/a7bd7c3c0)**: Allow reading default feature flags from bundle tests (#13629) //<Dan Abramov>//
- **[d3bbfe09c](https://github.com/facebook/react/commit/d3bbfe09c)**: Fix IE version in comment //<Dan Abramov>//
- **[1b2646a40](https://github.com/facebook/react/commit/1b2646a40)**: Fix warning without stack for ie9 (#13620) //<Aliaksandr Manzhula>//
- **[e49f3ca08](https://github.com/facebook/react/commit/e49f3ca08)**:  honor displayName set on ForwardRef if available (#13615) //<Evan Jacobs>//

Release Notes:
[GENERAL] [FEATURE] [React] - React sync for revisions ade5e69...d836010

Reviewed By: bvaughn

Differential Revision: D10118547

fbshipit-source-id: ecde7ada80331abdc8bd7d279e0f3dbe9acde071
2018-10-11 21:39:13 +02:00
James ReggioandMike Grabowski dba2235d95 Fix artifacting on RN-drawn borders with asymmetric radii (#21208)
Summary:
This PR fixes an obscure rendering bug on iOS for borders with asymmetric radii. It appears to be a problem with the custom drawing that React Native performs when it cannot use native UIKit/CoreAnimation border drawing.
Pull Request resolved: https://github.com/facebook/react-native/pull/21208

Differential Revision: D10130120

Pulled By: hramos

fbshipit-source-id: d9fbc5c622c060db15658d038a068216b47bb26d
2018-10-11 21:37:59 +02:00
BingBingandMike Grabowski ce8dddb506 iOS: fix the baseline issue when displaying a mixture of different-language characters (#19653)
Summary:
This fixes #19193

Characters of different languages may have different height and different baseline, even with a same font and same font-size. When they mixed together, iOS will adjust their baselines automatically, to display a suitable view of text.

The problem is the behavior of dealing with the text-style property 'lineHeight'.

It once to be a right way at version 0.52.3, to setting a base-line-offset attribute for the whole range of the string. However, in current version, it enumerated the string, and set a different  base-line-offset for different font-height characters.

And this behavior broke the baseline adjustment made by the iOS. It just make every character's baseline aligned to a same line. But it is not supposed to displaying characters of different languages like that. Chinese characters' baseline is the bottom of each, however, it is not for English characters.

So maybe it is the better way to give a same value of base-line-offset attribute for the whole string. And this PR just did that: found the biggest value of font-height in the text, and calculate the offset with that biggest value, then set to the whole string. This will keep the origin baseline adjustment for different languages' chars made by iOS.

Since I always got an error when running the snapshot test locally, I can't even pass the them with the unmodified code in master branch.

The error is "Nesting of \<View\> within \<Text\> is not currently supported."

After I comment all of the check of that error from the source code, I got a different snapshot from the reference ones. It seems that all components which will cause that error are not rendered in the reference images.

Since this PR changed the behavior of 'lineHeight' property, it's better to add a new snapshot case for the situation of different-language-characters' mixture. So maybe somebody could help me with that or maybe it should be a issue?

[IOS] [BUGFIX] [Text] - fix the baseline issue when displaying a mixture of different-language characters
Pull Request resolved: https://github.com/facebook/react-native/pull/19653

Differential Revision: D10140131

Pulled By: shergin

fbshipit-source-id: 646a9c4046d497b78a980d82a015168cf940646b
2018-10-11 21:37:46 +02:00
Mehdi MulaniandMike Grabowski 9ae5bd0c92 Dealloc first time RCTNetInfo reachability callback
Summary:
@public
We're seeing a crasher where `self` on line 54 isn't an `RCTNetInfo`. The timing looks related to D9798488, so my theory is that this class is being deallocated before it resolves, and thus causes a crash.

Reviewed By: PeteTheHeat

Differential Revision: D10127341

fbshipit-source-id: 94eaba7def6b118092adcf6b4cce841ccc7d0b59
2018-10-11 21:37:32 +02:00
Andrew Chen (Eng)andMike Grabowski 049e56e272 Fix accessibility role/label
Summary: D10138128 had some shamefully wrong boolean logic to determine whether we should customize the accessibility delegate. Previously, we did it if BOTH the accessibility label AND role were present. We should actually do it if EITHER are present.

Reviewed By: mdvacca

Differential Revision: D10182135

fbshipit-source-id: 209a8ab43f5869762843fe878cfd59a7b9b5ab1a
2018-10-11 21:37:13 +02:00
Hector Ramos 4a440f4018 [0.57.2] Bump version numbers 2018-10-04 13:29:30 -07:00
Hector Ramos 67dca8bbf9 Revert "[0.57.2] Bump version numbers"
This reverts commit b7437639df.
2018-10-04 13:29:04 -07:00
Hector Ramos 7911610813 remove job prereqs 2018-10-04 13:28:44 -07:00
Hector Ramos b7437639df [0.57.2] Bump version numbers 2018-10-04 11:40:58 -07:00
Hector Ramos e4607a4ec3 Revert "[0.57.2] Bump version numbers"
This reverts commit 8e810838a2.
2018-10-04 11:40:24 -07:00
Hector Ramos 2483f11bdd Ignore commits on all branches to ensure publishing script is only run on git tags 2018-10-04 11:40:10 -07:00
Mike Grabowski 8e810838a2 [0.57.2] Bump version numbers 2018-10-04 17:01:57 +02:00
Mike Grabowski 29fb119404 Revert "[0.57.2] Bump version numbers"
This reverts commit 4aec7c953e.
2018-10-04 17:01:51 +02:00
Rafael OlezaandLorenzo Sciandra aecf6dfaec Bump metro@0.47.1
Summary: We need a new version of Metro with D10119384 to make the new Embeds work well

Reviewed By: davidaurelio

Differential Revision: D10119385

fbshipit-source-id: db7fc71c75c450720af41add466fc88ac38f3066
2018-10-04 12:26:25 +01:00
Rafael OlezaandMike Grabowski 920cf54c0c Cleanup the transformer flow types
Summary:
Since the options that are passed to the `babelTransformer` are not exactly the same ones as the `transformer` receives, we need to have a specific object for them.

This allows us to make the transformer options object strict (since unfortunately the `babeltransformer` options object comes from many places and needs a bit of work to be able to be strict...

Reviewed By: mjesun

Differential Revision: D9309173

fbshipit-source-id: 0a92381968f17e5eb6c4740c1ca89580fa7ee4d3
2018-10-02 17:19:52 +02:00
Rafael OlezaandMike Grabowski 279c0905f0 Make config object read-only
Summary: This makes the Metro config type readonly, only a couple of things inside Metro needed to be tweaked :)

Reviewed By: mjesun

Differential Revision: D10028083

fbshipit-source-id: 15f5d957a8ee7384d6156c973639d86240fd251f
2018-10-02 17:10:32 +02:00
Mike Grabowski 4aec7c953e [0.57.2] Bump version numbers 2018-10-02 14:39:35 +02:00
Mike Grabowski 63cf888161 Revert "[0.57.2] Bump version numbers"
This reverts commit aae1e296e9.
2018-10-02 14:38:01 +02:00
Oleg LokhvitskyandMike Grabowski 0869e546fe Android ScrollView fix for pagingEnabled
Summary:
The snapToOffsets changes improved the flinging algorithm for snapToInterval/snapToOffsets but actually broke it for pagingEnabled because it's meant to only scroll one page at a time.

First, I just brough back the old algorithm, but noticed that it has a bunch of issues (e.g. #20155). So, I tried to improve the algorithm to make sure it uses the proper target offset prediction using the same physics model that Android uses for it's normal scrolling but still be limited to one page scrolls.

This resolves #21116.

Reviewed By: shergin

Differential Revision: D9945017

fbshipit-source-id: be7d4dfd1140f4c4d32bad93a03812dc80286069
2018-10-02 14:33:06 +02:00
Mike Grabowski aae1e296e9 [0.57.2] Bump version numbers 2018-10-02 14:30:15 +02:00
Edward KarunaandMike Grabowski a4fed6e203 Add workaround for Android Gradle Plugin 3.2 change to asset dir (#21409)
Summary:
Android Gradle Plugin 3.2 uses a new intermediates/merged_assets directory instead of intermediates/assets. This workaround copies the javascript bundle to both directories for compatibility purposes.

Fixes #21132
Fixes #18357
Pull Request resolved: https://github.com/facebook/react-native/pull/21409

Differential Revision: D10141860

Pulled By: hramos

fbshipit-source-id: 0fb20fcec67ec2bfd7a8d9052599bbc70464b466
2018-10-02 14:29:38 +02:00
Timothy KukulskiandMike Grabowski b7ba2255df allow zero offset when shadow radius is nonzero
Summary:
update creation logic for text shadow: allow shadows with zero offset when the radius is nonzero

(?should we also add a check to drop the node as a no-op when color.alpha == 0 ?)

Reviewed By: yungsters

Differential Revision: D10017778

fbshipit-source-id: 0168ac6db5ad22a5d7eb32dcd184aede361d6651
2018-10-02 14:29:27 +02:00
Krzysztof MagieraandMike Grabowski bc973d20e0 Expose a getter for overflow setting in ReactViewGroup (#21398)
Summary:
This change adds getter for overflow attribute in ReactViewGroup class. Overflow setting can affect how view children are drawn but also how hit testing behaves when receiving touch. Exposing this setting makes it possible for gesture-handler library to implement proper hit testing that takes into account overflow property of a view.
Pull Request resolved: https://github.com/facebook/react-native/pull/21398

Differential Revision: D10105398

Pulled By: shergin

fbshipit-source-id: 15ae2b31be3bf80e7e1d28b87ce4474af0f486f5
2018-10-02 14:29:16 +02:00
Artur ChruscielandMike Grabowski 8744e00ea9 Check if child view != null before dropping (#20465)
Summary:
Fixes our top crash when framework try drop a view from parent, but it's a null (already removed etc.).

Fixes #20288
Pull Request resolved: https://github.com/facebook/react-native/pull/20465

Differential Revision: D10113976

Pulled By: hramos

fbshipit-source-id: 34f5654f3bdbc63eb7f7d0b5c94885576fc3cdcd
2018-10-02 14:29:06 +02:00
chenwenyuandMike Grabowski b01ac3bffe Android: fix cookies lost on Android 5.0 and above (#19770)
Summary:
This fixes cookie missing bug on Android 5.0 and above.
On Android 5.0 and above, after the app successfully obtains the cookie, you kills the App within 30 seconds and restarts the App. It accesses the interface that needs to carry the cookie and finds that the cookie does not exist.

Updated tests for the addCookies function to include test cases specifying Android version, and tested on the command line in my app to make sure it has the expected behavior.

Updated tests for the addCookies function to include test cases specifying Android version, and tested on the command line in my app to make sure it has the expected behavior.

[ANDROID] [BUGFIX] [Cookie] - Fix cookies lost on Android 5.0 and above
Pull Request resolved: https://github.com/facebook/react-native/pull/19770

Differential Revision: D10114102

Pulled By: hramos

fbshipit-source-id: 5b4766f02f70541fd46ac5db36f1179fe386ac7a
2018-10-02 14:29:01 +02:00
Sergei DryganetsandMike Grabowski b460f0d201 Rounded corner rendering fixed on Android N. (#21340)
Summary:
On Android N (API 24) rounded corners rendering has issues in case scale factor is set for the view.
Pull Request resolved: https://github.com/facebook/react-native/pull/21340

Differential Revision: D10084318

Pulled By: hramos

fbshipit-source-id: 53ae5a32b96cc7ee7eba084330682239d8beb85d
2018-10-02 14:27:32 +02:00
Riley DulinandMike Grabowski ddce06ffd1 Change new Date() to Date.now() to save on date allocations
Summary:
`new Date().getTime()` is equal to `Date.now()`.
`Date.now()` avoids an allocation, which can save some GC time.

This micro-optimization isn't worth it in most places, but since MessageQueue is one of the hottest pieces of JS in RN, it's worth it.

Reviewed By: javache

Differential Revision: D9972334

fbshipit-source-id: 05d78fd65304f0f27115d76b8b52db11a52c86a0
2018-10-02 14:27:00 +02:00
Tim YungandMike Grabowski a1cf65791c React: Upgrade to react-devtools@^3.4.0
Summary:
Upgrades to `react-devtools@^3.4.0`.

Notably, this brings the improved coloring to the React Profiler.

Reviewed By: bvaughn

Differential Revision: D9985352

fbshipit-source-id: 64a76d194275e551f04dd52d775bf26bb16df6b8
2018-10-02 14:26:49 +02:00
Janic DuplessisandMike Grabowski 60b05cae9e Use babel runtime instead of relying on global babelHelpers and regenerator (#198)
Summary:
**Summary**

The RN transformer currently relies on the enviroment providing babelHelpers and regeneratorRuntime as globals by using 'babel-external-helpers'. This wasn't really a problem before since helpers were stable and we could maintain our copy easily but it seems like there are more now with babel 7 and it makes sense to include only those used by the app.

This is exactly what babel/transform-runtime does. It will alias all helpers and calls to regeneratorRuntime to files in the babel/runtime package.

This will solve issues like this https://github.com/facebook/react-native/issues/20150 caused by missing babelHelpers. This solution also avoids bloating babelHelpers to fix OSS issues like the one linked before.

**Test plan**

- Updated tests so they all pass.
- Tested that it actually works by applying the changes locally in an RN app.
- Added a test for async functions, to make sure regenerator is aliased properly and doesn't depend on the global.
- Made sure require-test.js still fails if the require implementation contains babel helpers (by adding an empty class in the file).
Pull Request resolved: https://github.com/facebook/metro/pull/198

Reviewed By: mjesun

Differential Revision: D8833903

Pulled By: rafeca

fbshipit-source-id: 7081f769f288ab358ba89ae8ee72a513bb12e225
2018-10-02 14:26:40 +02:00
Krzysztof CiomborandMike Grabowski 9ac2877478 Fix event handlers for DPad arrows on Android TV (#21143)
Summary:
<!--
Thank you for sending the PR! We appreciate you spending the time to work on these changes.
Help us understand your motivation by explaining why you decided to make this change.

If this PR fixes an issue, type "Fixes #issueNumber" to automatically close the issue when the PR is merged.
-->

Fixes #20924
DPad arrow events were missing from `KEY_EVENTS_ACTIONS` which meant that they were not broadcasted by `TVEventHandler`.
Pull Request resolved: https://github.com/facebook/react-native/pull/21143

Differential Revision: D10007851

Pulled By: mdvacca

fbshipit-source-id: 9a03cad249a4a1917975d1de10b6112e69d32a72
2018-10-02 14:26:11 +02:00
Kevin LeungandMike Grabowski c17787e91a Android subpixel text (#19043)
Summary:
<!--
  Required: Write your motivation here.
  If this PR fixes an issue, type "Fixes #issueNumber" to automatically close the issue when the PR is merged.
-->

Fixes inconsistency in custom font rendering in android. See explanation below.

<!--
  Required: Write your test plan here. If you changed any code, please provide us with
  clear instructions on how you verified your changes work. Bonus points for screenshots and videos!
-->

I tested the following on my physical device (Sony Z5C) and on Android emulator on Mac.
The test app contains various fonts in the AvenirNext family, which are added to the app as `.ttf` format.

Note that the character "thickness" is inconsistent. Some characters looks thicker than other. See the screenshots below as an example:
- Looks thicker: right half of the `g` and `&` as in "Region & Language" (list-view screen)
- Looks thicker: `w` as in `Change Password` (list-view screen)
- Looks vertically compressed: `a` and `e` as in "Message" in the bottom bar (list-view screen)
- Looks thicker: `A`, `N`, `V`, `v` (paragraph screen)
- Looks thinner: `i` (paragraph screen), it leaves extra space on its right hand side

![screenshot_20180427-151129](https://user-images.githubusercontent.com/1103788/39350754-ae9fafe2-4a31-11e8-8835-97280783bb95.png)
![screenshot_20180427-151419](https://user-images.githubusercontent.com/1103788/39350755-aecc9bba-4a31-11e8-8128-2d230f003dfa.png)

Every characters has consistent "weight" and looks nice:

![screenshot_20180427-150835](https://user-images.githubusercontent.com/1103788/39350753-ae698728-4a31-11e8-8a55-4e161c559b95.png)
![screenshot_20180427-151639](https://user-images.githubusercontent.com/1103788/39350756-aef95d44-4a31-11e8-820b-1a7dee77fabe.png)

<!--
  Does this PR require a documentation change?
  Create a PR at https://github.com/facebook/react-native-website and add a link to it here.
-->

None

<!--
  Required.
  Help reviewers and the release process by writing your own release notes. See below for an example.
-->

[ANDROID] [ENHANCEMENT] [CustomStyleSpan] - Enable subpixel text rendering

<!--
  **INTERNAL and MINOR tagged notes will not be included in the next version's final release notes.**

    CATEGORY
  [----------]      TYPE
  [ CLI      ] [-------------]    LOCATION
  [ DOCS     ] [ BREAKING    ] [-------------]
  [ GENERAL  ] [ BUGFIX      ] [ {Component} ]
  [ INTERNAL ] [ ENHANCEMENT ] [ {Filename}  ]
  [ IOS      ] [ FEATURE     ] [ {Directory} ]   |-----------|
  [ ANDROID  ] [ MINOR       ] [ {Framework} ] - | {Message} |
  [----------] [-------------] [-------------]   |-----------|

 EXAMPLES:

 [IOS] [BREAKING] [FlatList] - Change a thing that breaks other things
 [ANDROID] [BUGFIX] [TextInput] - Did a thing to TextInput
 [CLI] [FEATURE] [local-cli/info/info.js] - CLI easier to do things with
 [DOCS] [BUGFIX] [GettingStarted.md] - Accidentally a thing/word
 [GENERAL] [ENHANCEMENT] [Yoga] - Added new yoga thing/position
 [INTERNAL] [FEATURE] [./scripts] - Added thing to script that nobody will see
-->
Pull Request resolved: https://github.com/facebook/react-native/pull/19043

Differential Revision: D10008155

Pulled By: hramos

fbshipit-source-id: 7fe9bb0f9be80380947ff80eac522e3cfd6b22cf
2018-10-02 14:26:01 +02:00
Rafael OlezaandMike Grabowski e2b9b71652 Remove absolute path parameter from transformers
Summary:
Up until now, transformers in Metro received the absolute path of a file, the relative path of a file and the projectRoot.

This diff gets rid of the absolute path sent to the worker, since by having the projectRoot and the relative path, the absolute path can be easily calculated.

This has been done to avoid having absolute paths as transform options, since we need to have custom logic to filter them out from the cache key generation, which is dangerous.

Reviewed By: mjesun

Differential Revision: D9195147

fbshipit-source-id: e95c5c29272eec7f1a48af7cede4c6d6b4a8ffb7
2018-10-02 14:25:50 +02:00
Rafael OlezaandMike Grabowski 4faa0e6cda Bump metro@0.47.0
Summary: New version on the horizon :)

Reviewed By: mjesun

Differential Revision: D10051460

fbshipit-source-id: 982604bd7a38d1d3ec642f6cd6fea1a40ab0d34f
2018-10-02 14:25:38 +02:00
anthonyandMike Grabowski 9e377c3947 Fix HEAD request failing with Invalid response for blob (#19567)
Summary:
Fixes #18223

This is a fairly simple solution to what seems to be a recurring issue where certain requests that result in an empty body where JSON is expected throw an error rather than being handled gracefully. Client side error handling is not being hit as this is being thrown at a lower level.
Make a http request that results in an empty blob: ""

[INTERNAL] [BUGFIX] [XMLHttpRequest.js] - Line 262
Pull Request resolved: https://github.com/facebook/react-native/pull/19567

Differential Revision: D8314416

Pulled By: hramos

fbshipit-source-id: a17c49f3620f0abbb936f3a1c2b01aa1b64820fd
2018-10-02 14:20:36 +02:00
Matias ColottoandMike Grabowski e6677b0ec8 ReactScrollView should account for overflow: scroll
Summary:
Support for `overflow: visible` was recently added to Android ScrollView.
However, it didn't account for `overflow: scroll` and changed the behavior, causing content to render
when before it would be clipped.

Reviewed By: achen1

Differential Revision: D10036807

fbshipit-source-id: e44a79b18eecbc7d64621f7cf5d800a00a121b13
2018-10-02 14:20:16 +02:00
Oleg LokhvitskyandMike Grabowski 5906c26466 Android ScrollView support for overflow: visible
Summary:
ScrollView always clipping children on Android even when `overflow: visible` was specified.
This change just omits the clipping during draw if `overflow: visible` is passed in.
The default is not changed (from hidden to visible) in case there is a performance impact.
Android now matches iOS in behavior. This helps with issue #21116 and resolves #14416.

Reviewed By: shergin

Differential Revision: D9952096

fbshipit-source-id: 367afe33ee7ff0fdc5aa1074d239883aa289888a
2018-10-02 14:20:13 +02:00
Andrew Chen (Eng)andMike Grabowski f1fabe5752 Remove overflow hidden killswitch
Summary: There hasn't been any reports of overflow issues since the last issue was fixed in v183 (July 30th). Let's remove this flag

Reviewed By: yungsters

Differential Revision: D10020006

fbshipit-source-id: 593c7d2c2bef5f0bd60d5de1941cd58f7fd6ccc7
2018-10-02 14:18:12 +02:00
Janic DuplessisandMike Grabowski 5627616e3f Remove global babelHelpers and regenerator (#21283)
Summary:
Follow up to https://github.com/facebook/metro/commit/8932a9caa8f9ffe82160f2da25342a0bde3bbb26

Babel helpers and regenerator runtime will be imported automatically from `babel/runtime`. We still need to add the global regeneratorRuntime for jest tests since we disable babel-runtime currently.
Pull Request resolved: https://github.com/facebook/react-native/pull/21283

Reviewed By: mjesun

Differential Revision: D10010963

Pulled By: rafeca

fbshipit-source-id: da5e23dd901f8f8940d46816b4fc9290d0e28c76
2018-10-02 14:18:02 +02:00
Hector Ramos e8663ffaba Updated error message, and fail on analyze 2018-09-21 10:24:43 -07:00
Hector Ramos c90b48b4ad Require tests to pass before deploying 2018-09-21 09:57:22 -07:00
Hector Ramos ab98701de4 Only run publish script from tagged jobs 2018-09-21 09:55:18 -07:00
Hector Ramos ba89bf4252 [0.57.1] Bump version numbers 2018-09-21 09:22:17 -07:00
Hector Ramos 202bb14469 Removing development team from Xcode project. (#20054)
Summary:
Fixes #16881

Removing development team from Xcode project.
Pull Request resolved: #20054
GitHub Author: Caleb (Rojuinex) Bartholomew rojuinex@gmail.com

Differential Revision: D9440144

Pulled By: hramos

fbshipit-source-id: 5cb4cf24c5f7562632006f0d0143f762fed04295
2018-09-21 09:21:24 -07:00
Rafael OlezaandLorenzo Sciandra 7bac0565e8 bump metro 0.45.6 2018-09-21 15:43:36 +01:00
Warren KnoxandLorenzo Sciandra bf84166571 Update RCTLinkingManager.h to explicitly state the 'nullability' of parameters (#20798)
Summary:
Fixes #20797

As mentioned in #20797 when running `react-native run-ios Xcode 9.2 will complain about the nullability of pointers in `RCTLinkingManager.h`.
Pull Request resolved: https://github.com/facebook/react-native/pull/20798

Differential Revision: D9988581

Pulled By: hramos

fbshipit-source-id: e3ce7736da97d314a421c2c1ab71577864081642
2018-09-21 15:42:20 +01:00
Sergei DryganetsandLorenzo Sciandra 0a5eefbf29 Debug only code were leaking into release builds on iOS. (#21232)
Summary:
RCT_DEBUG is always defined - it is just rather 0 or 1 so
```#ifndef RCT_DEBUG is always true```
Pull Request resolved: https://github.com/facebook/react-native/pull/21232

Differential Revision: D9982316

Pulled By: hramos

fbshipit-source-id: 5408bfcf95a6ed2beae38217a6ad1ee43950857d
2018-09-21 15:42:06 +01:00
Jeff ThomasandLorenzo Sciandra 5f85b256cc Way to register RCT_MODULE in Plugin2.0 instead of +load
Summary:
[RFC] WIP: Way to register RCT_MODULE in Plugin2.0 instead of +load

This seemed like the simplest way to do this to register in the existing
didNotFindModule callback so that we don't have to touch any opensource code.

NOTE: The new version of this fixes the problems with dylibs, but not the -ObjC flag removal. This seems like the right call to avoid users having to implement c-functions to return their classes; instead we used objc_getClass.

Reviewed By: dshahidehpour

Differential Revision: D9112719

fbshipit-source-id: cf8df97d7c443cafa0e06a1e61bdf2612944ed87
2018-09-21 15:42:03 +01:00
David VaccaandLorenzo Sciandra 8dc8071795 Expose AllowFileAccess property in WebView
Summary: This diff adds a new property in ReactWebView to be able to configure allowFileAccess

Reviewed By: achen1

Differential Revision: D9789466

fbshipit-source-id: 39d042ac6ef69e44f006a4c4b0c2dd900f84dbc9
2018-09-21 15:39:44 +01:00
Joel ArvidssonandLorenzo Sciandra fb109e9120 Fix ignored --projectRoot/watchFolders arguments (#21165)
Summary:
Due to Kureev's cleanup in https://github.com/facebook/react-native/commit/c4a66a89a28152cd4b81e2b0f80ab3aac34d6872 some arguments are no longer properly passed to metro, but just the default values. This broke the `--projectRoot` and `--watchFolders` arguments used by storybook to change the bundle entrypoint.

This PR simply fixes the regression by assigning these values from argv instead of reading config defaults.

Related: the undocumented `REACT_NATIVE_APP_ROOT` env var is broken, not sure for how long, but I can fix it as a part of this PR or make a new one.
Pull Request resolved: https://github.com/facebook/react-native/pull/21165

Differential Revision: D9929642

Pulled By: hramos

fbshipit-source-id: 00485a0429bd4301de03e5cb455e928878c4ba8f
2018-09-21 15:37:58 +01:00
Rafael OlezaandLorenzo Sciandra 202715c95d Pass the maxWorkers config param correctly to Metro
Summary:
@public

The React Native CLI is not passing the default `maxWorkers` param to Metro, making it run in a single thread and making the development process really slow.

This fixes https://github.com/facebook/metro/issues/253

Reviewed By: mjesun

Differential Revision: D9915500

fbshipit-source-id: d15030af582e99fe20535c07e751cfe12e444f2f
2018-09-21 15:37:51 +01:00
Rafael OlezaandLorenzo Sciandra 87b5672819 Upgrade babel-eslint to 9.0.0
Summary: This diff updates babel-eslint to the stable 9.0.0 version, which uses babel 7.0.0 so we can get rid of babel-7.0.0-beta.52

Reviewed By: rubennorte

Differential Revision: D9894311

fbshipit-source-id: b5276ea7d1b10725fffef13eb1338fe6415dbd36
2018-09-21 15:37:45 +01:00
Valentin SherginandLorenzo Sciandra e884d7f9fc Making RCTIsIPhoneX() return true for the R and Max models
Summary: Actual sizes can be found on the offical website.

Reviewed By: fkgozali

Differential Revision: D9837072

fbshipit-source-id: 38b3f2177629e82740eecc8df4566febbe20815a
2018-09-21 15:37:39 +01:00
empyricalandLorenzo Sciandra e8345cc621 Give RNPM the ability to look for plugins in @scoped modules (#21082)
Summary:
This PR gives RNPM the ability to look for plugins in `scoped` modules.

The regexes for finding RNPM plugins will match these hypothetical examples:

 * `rnpm-plugin-foo`
 * `org/rnpm-plugin-foo`

The regexes for finding React Native plugins will match these hypothetical examples:

 * `react-native-foo`
 * `org/react-native-foo`
 * `The controller you requested could not be found./module` (will be useful in the slimmening)
 * `The controller you requested could not be found./module`

RNPM plugins will be able to benefit from this immediately, but React Native plugins will run into this Metro issue currently:

https://github.com/facebook/metro/issues/241
Pull Request resolved: https://github.com/facebook/react-native/pull/21082

Differential Revision: D9809094

Pulled By: hramos

fbshipit-source-id: 4b0694ad4119b37dd5664af52c48e48ebe4d7404
2018-09-21 15:37:33 +01:00
Karan ThakkarandLorenzo Sciandra 4ea3ac7303 fix RCTNetInfo first time connection status (#20820)
Summary:
Fixes #20804, #8615, https://github.com/facebook/react-native/issues/18368#issuecomment-400610022
Pull Request resolved: https://github.com/facebook/react-native/pull/20820

Differential Revision: D9798488

Pulled By: hramos

fbshipit-source-id: bd93a857b622edfbefdbd1baea746f27658f1366
2018-09-21 15:37:26 +01:00
Chun ChenandLorenzo Sciandra cd091e8534 Expose scrollEnabled as iOS prop for TextInput (#20719)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/20719

Expose scrollEnabled as iOS prop for TextInput

Reviewed By: mmmulani

Differential Revision: D9383477

fbshipit-source-id: 7e803767f6b2fafceac932fecd9dd59dc6ab5295
2018-09-21 15:37:18 +01:00
Mike Grabowski 3008c3ccba [0.57.0] Bump version numbers 2018-09-12 13:21:38 +02:00
Eli WhiteandHector Ramos 7b57b8c222 Remove view configs from JS
Summary: Apparently different apps have different implementations of view managers that support different props. This is a problem that we will need to address. Unfortunately, this means we can't have a static config defined in JS. We will need to find another approach to this problem.

Reviewed By: sahrens

Differential Revision: D9500178

fbshipit-source-id: b591559164fcf29f5fd43e13a0f2da15011491c6
2018-09-11 16:11:16 -07:00
Eli WhiteandHector Ramos 967d47830b Require that JS defined Component Attributes match Native ones in dev
Summary: As we move these configs to JS from native, until we have codegen that ensures everything stays up to date, this adds a dev mode check to ensure they are consistent.

Reviewed By: yungsters

Differential Revision: D9475011

fbshipit-source-id: 9d6f7b6c649229cae569d840eda3d5f7b7aa7cb2
2018-09-11 16:09:59 -07:00
Eli WhiteandHector Ramos 499e20766c Put View ViewConfig in JS
Summary: Moving this config to native for android so we skip the native lookup for the config.

Reviewed By: yungsters

Differential Revision: D9415726

fbshipit-source-id: 84cac3f0dfa4f6ea8800de77676f1e2896ee463d
2018-09-11 16:09:49 -07:00
lukedurrantandHector Ramos 7525f3804c Correct RCTAnimation import (#18050)
Summary:
Fixing error
node_modules/react-native/Libraries/NativeAnimation/RCTNativeAnimatedNodesManager.h:12:9: 'RCTAnimation/RCTValueAnimatedNode.h' file not found

I'm integrating react native into an existing app through cocoa pods and similar to other PRs
PR https://github.com/facebook/react-native/pull/16192
PR https://github.com/facebook/react-native/pull/16271
PR https://github.com/facebook/react-native/pull/17764
When integrating with cocoa pods
```
pod 'React', :path => './node_modules/react-native', :subspecs => [
    'Core',
    'DevSupport', # Include this to enable In-App Devmenu if RN >= 0.43
    'RCTText',
    'RCTNetwork',
    'RCTWebSocket', # needed for debugging
    'RCTImage',
    'RCTWebSocket',
    'BatchedBridge',
    'RCTLinkingIOS',
    'RCTActionSheet',
    'RCTAnimation'
    ]
```
With `RCTAnimation` being the important part for this PR.

Also note without this PR and the other PR's above if anyone is trying to integrate react native into an existing app i.e. through cocoa pods they won't be able too. I think the latest working version is

My app wouldn't build without changing this line

PR https://github.com/facebook/react-native/pull/16192
PR https://github.com/facebook/react-native/pull/16271
PR https://github.com/facebook/react-native/pull/17764

 [IOS] [BREAKING] [PODS] - Fixed RCTAnimation import for integrating with cocoapods
Pull Request resolved: https://github.com/facebook/react-native/pull/18050

Differential Revision: D9235162

Pulled By: hramos

fbshipit-source-id: 426daccf8d8952658e262d5a0e4623c72c38542c
2018-09-11 15:26:54 -07:00
Lindsay WinklerandHector Ramos b77d640432 Add the new RCTWKWebView* files to build target on iOS (#21031)
Summary:
These files support backing a `WebView` component with the WebKit-based
`WKWebView` on iOS.  These files need to be included in the Xcode
build target so that they are compiled, linked and ultimately available
to the UIManager at runtime, so that the correct views can be instantiated
when a `WebView` is passed the prop `useWebKit={true}`.
Pull Request resolved: https://github.com/facebook/react-native/pull/21031

Differential Revision: D9762185

Pulled By: hramos

fbshipit-source-id: 0d699e40afd56041cbbb76d77f11ba6932403d6d
2018-09-11 15:25:28 -07:00
magicienandHector Ramos 057d3efad8 Fix #18272 TextInput.setNativeProps({text: ''}) to work (#18278)
Summary:
Fix #18272. Calling textInputRef.setNativeProps({text: ''}) or textInputRef.clear() should clear the text input.

- All tests of `yarn run test` are passed
- Test with [the sample app](https://github.com/magicien/react-native-textinput-clear).
    - TextInput.clear() and TextInput.setNativeProps({ text: '***' }) worked
    - When clear() or setNativeProps() called, onChange/onChangeText wasn't called
        - Same behavior as react 0.53.0
    - When non-string values are given to `setNativeProps({text: ___})`, its behavior is the same as react 0.53.0.
        - Value Type | Result
          ---------- | ------------
          null       | same as empty string ''
          undefined  | nothing changes
          number     | throw error
          function   | throw error
          object     | throw error
    - When clear() or setNativeProps() called, attributed text keeps the attributes
    - When `value` prop is set, the text can't be changed

- `clear()` doesn't work from the second time
- `setNativeProps({text '***'})` doesn't work from the second time
- Even when `value` prop is set, you can change the text

![ScreenShot_0.54.0](https://raw.githubusercontent.com/magicien/react-native-textinput-clear/master/screenshot/0.54.0_test.gif)

- `clear()` works every time
- `setNativeProps({text '****'})` works every time

![ScreenShot_Clear_1](https://raw.githubusercontent.com/magicien/react-native-textinput-clear/master/screenshot/clear_test_1.gif)

![ScreenShot_Clear_2](https://raw.githubusercontent.com/magicien/react-native-textinput-clear/master/screenshot/clear_test_2.gif)

- The text keeps the attributes (font family, size, color, text align)

![ScreenShot_Slider](https://raw.githubusercontent.com/magicien/react-native-textinput-clear/master/screenshot/attributed_text_test.gif)

- If `value` prop is set, the text should not be changed

![ScreenShot_Value](https://raw.githubusercontent.com/magicien/react-native-textinput-clear/master/screenshot/value_test.gif)

[IOS] [BUGFIX] [TextInput] - Fix TextInput.clear() and TextInput.setNativeProps({text: ''}) to work
Pull Request resolved: https://github.com/facebook/react-native/pull/18278

Reviewed By: shergin

Differential Revision: D9692561

Pulled By: hramos

fbshipit-source-id: b7ce8f6740fdf666e71d6a85743331ca4805edcb
2018-09-11 15:25:23 -07:00
Tim YungandHector Ramos cf5f3e97eb React: Upgrade to react-devtools@3.3.4
Summary:
Upgrades `react-devtools` for React Native and Nuclide to v3.3.4.

Notably, this brings working support for the React Profiler!

Reviewed By: bvaughn

Differential Revision: D9721317

fbshipit-source-id: 898666d12a33d8b874fcb133e9353f483285edc2
2018-09-11 15:25:20 -07:00
Tim YungandHector Ramos 0b30129cde React sync for revisions bc1ea9c...ade5e69
Summary:
This sync includes the following changes:
- **[ade5e6928](https://github.com/facebook/react/commit/ade5e6928)**: Manually update schedule dep in react-native-renderer (#13609) //<Brian Vaughn>//
- **[f260b14a8](https://github.com/facebook/react/commit/f260b14a8)**: Fix host bailout for the persistent mode (#13611) //<Dan Abramov>//
- **[4a40d7624](https://github.com/facebook/react/commit/4a40d7624)**: Fix a regression related to isReactComponent prototype check (#13608) //<Dan Abramov>//
- **[03ab1efeb](https://github.com/facebook/react/commit/03ab1efeb)**: Improve DX when combining react-dom/profiling and schedule/tracking (#13605) //<Brian Vaughn>//
- **[144328fe8](https://github.com/facebook/react/commit/144328fe8)**: Enable no-use-before-define rule (#13606) //<Dan Abramov>//
- **[8a8d973d3](https://github.com/facebook/react/commit/8a8d973d3)**: Use clearer wording //<Dan>//
- **[7d1169b2d](https://github.com/facebook/react/commit/7d1169b2d)**: Remove injectComponentTree from unstable-native-dependencies, add EventPluginHub (#13598) //<Brandon Dail>//
- **[8d1038fc6](https://github.com/facebook/react/commit/8d1038fc6)**: Break up ReactDOMServerIntegrationForm-test (#13600) //<Nathan Hunzaker>//
- **[b87aabdfe](https://github.com/facebook/react/commit/b87aabdfe)**: Drop the year from Facebook copyright headers and the LICENSE file. (#13593) //<Héctor Ramos>//
- **[e417e0bf7](https://github.com/facebook/react/commit/e417e0bf7)**: Update ReactNativeViewConfigRegistry Flow Types (#13579) //<Timothy Yung>//
- **[71c0e05ba](https://github.com/facebook/react/commit/71c0e05ba)**: Update bundle sizes for 16.5.0 release //<Brian Vaughn>//
- **[6255cc394](https://github.com/facebook/react/commit/6255cc394)**: Updating package versions for release 16.5.0 //<Brian Vaughn>//
- **[28cb37978](https://github.com/facebook/react/commit/28cb37978)**: Added a test for Profiler onRender that throws (#13575) //<Brian Vaughn>//
- **[8963118b3](https://github.com/facebook/react/commit/8963118b3)**: Update react-dom README //<Dan Abramov>//
- **[b47a28cb9](https://github.com/facebook/react/commit/b47a28cb9)**: Tweak react-dom README //<Dan Abramov>//
- **[f765f0225](https://github.com/facebook/react/commit/f765f0225)**: When a root expires, flush all expired work in a single batch (#13503) //<Andrew Clark>//
- **[550dd1d2e](https://github.com/facebook/react/commit/550dd1d2e)**: Call Profiler onRender after mutations (#13572) //<Brian Vaughn>//
- **[34348a45b](https://github.com/facebook/react/commit/34348a45b)**: Add enableSuspenseServerRenderer feature flag (#13573) //<Alex Taylor>//
- **[4e744be6e](https://github.com/facebook/react/commit/4e744be6e)**: Added react-dom/profiling entry point to NPM package (#13570) //<Brian Vaughn>//
- **[bb627228e](https://github.com/facebook/react/commit/bb627228e)**: test: add test for fragement props (#13565) //<laoxiong>//
- **[9a110ebd8](https://github.com/facebook/react/commit/9a110ebd8)**: Cleaned up 'schedule' API wrt interactions and subscriber ref: (#13561) //<Brian Vaughn>//
- **[fb88fd9d8](https://github.com/facebook/react/commit/fb88fd9d8)**: Fixed schedule/tracking require for www sync script (#13556) //<Brian Vaughn>//
- **[955393cab](https://github.com/facebook/react/commit/955393cab)**: refactor: remove emove type judgment when defining warning props (#13553) //<laoxiong>//
- **[ff9399602](https://github.com/facebook/react/commit/ff9399602)**: Fix import of ReactDOM in server env //<Dan Abramov>//
- **[281bd64c0](https://github.com/facebook/react/commit/281bd64c0)**: Fix test file name //<Dan Abramov>//
- **[d6b59e3d2](https://github.com/facebook/react/commit/d6b59e3d2)**: Check document.documentMode once //<Dan Abramov>//
- **[52633c84e](https://github.com/facebook/react/commit/52633c84e)**: Try/finally //<Dan Abramov>//
- **[2d4705e75](https://github.com/facebook/react/commit/2d4705e75)**: Make IE 11 not complain about non-crucial style attribute hydration mismatch (#13534) //<Michał Gołębiowski-Owczarek>//
- **[25d48a728](https://github.com/facebook/react/commit/25d48a728)**: Add gridArea to unitless CSS properties (#13550) //<Michał Gołębiowski-Owczarek>//
- **[877f8bc6b](https://github.com/facebook/react/commit/877f8bc6b)**: Renamed schedule UMD forwarding methods to stay in-sync with SECRET_INTERNALS change (#13549) //<Brian Vaughn>//
- **[0a96f9057](https://github.com/facebook/react/commit/0a96f9057)**: Revert "Extract common logic" (#13547) //<Dan Abramov>//
- **[17a57adde](https://github.com/facebook/react/commit/17a57adde)**: Fix test //<Dan Abramov>//
- **[605da8b42](https://github.com/facebook/react/commit/605da8b42)**: Extract common logic (#13535) //<Heaven>//
- **[69f9f4127](https://github.com/facebook/react/commit/69f9f4127)**: Document event bubble order (#13546) //<Philipp>//
- **[c1ba7b8cf](https://github.com/facebook/react/commit/c1ba7b8cf)**: Remove www scheduler fork (#13545) //<Dan Abramov>//
- **[b473d5f86](https://github.com/facebook/react/commit/b473d5f86)**: Secret exports: Scheduler => Schedule (#13544) //<Dan Abramov>//
- **[6312efc34](https://github.com/facebook/react/commit/6312efc34)**: Tweak README and description //<Dan Abramov>//
- **[b92f947af](https://github.com/facebook/react/commit/b92f947af)**: Rename "react-scheduler" package to "schedule" (#13543) //<Brian Vaughn>//
- **[3c1dcd349](https://github.com/facebook/react/commit/3c1dcd349)**: Expose less internals for TestUtils (#13539) //<Dan Abramov>//
- **[0b74e95d7](https://github.com/facebook/react/commit/0b74e95d7)**: Ignore noscript content on the client (#13537) //<Fredrik Höglund>//
- **[8a1e3962a](https://github.com/facebook/react/commit/8a1e3962a)**: Remove negative lookbehind from Rollup plugin that broke Node <= v8.9 (#13538) //<Brian Vaughn>//
- **[9604d26ae](https://github.com/facebook/react/commit/9604d26ae)**: Rename ReactDOMFiber* to ReactDOM* (#13540) //<Dan Abramov>//
- **[28b928902](https://github.com/facebook/react/commit/28b928902)**: Tidied up scheduling UMD API forwarding test (#13533) //<Brian Vaughn>//
- **[bf8aa6092](https://github.com/facebook/react/commit/bf8aa6092)**: Added Jest test to verify UMD API-forwarding for scheduling package (#13532) //<Brian Vaughn>//
- **[0040efc8d](https://github.com/facebook/react/commit/0040efc8d)**: Fix a typo (#13531) //<Heaven>//
- **[46950a3df](https://github.com/facebook/react/commit/46950a3df)**: Interaction tracking follow up (#13509) //<Brian Vaughn>//
- **[0452c9bba](https://github.com/facebook/react/commit/0452c9bba)**: Add a regression test for #4618 //<Dan Abramov>//
- **[c21bab694](https://github.com/facebook/react/commit/c21bab694)**: Add SSR regression test for #6119 //<Dan Abramov>//
- **[0d3fc9de1](https://github.com/facebook/react/commit/0d3fc9de1)**: Add regression test for #6119 //<Dan Abramov>//
- **[0f050ad7c](https://github.com/facebook/react/commit/0f050ad7c)**: Make regression test better //<Dan Abramov>//
- **[f94342323](https://github.com/facebook/react/commit/f94342323)**: Add a more precise regression test for #6219 //<Dan Abramov>//
- **[a3e4d0008](https://github.com/facebook/react/commit/a3e4d0008)**: Fixed typo (#13519) //<Ivan>//
- **[b3d8c5376](https://github.com/facebook/react/commit/b3d8c5376)**: [RN] Remove isMounted() false positive warning (#13511) //<Dan Abramov>//
- **[d2123d656](https://github.com/facebook/react/commit/d2123d656)**: Sync React Native Flow Changes (#13513) //<Timothy Yung>//
- **[1c0ba70b4](https://github.com/facebook/react/commit/1c0ba70b4)**: Fix test to use AsyncMode //<Dan>//
- **[6e4f7c788](https://github.com/facebook/react/commit/6e4f7c788)**: Profiler integration with interaction-tracking package (#13253) //<Brian Vaughn>//
- **[2967ebdbe](https://github.com/facebook/react/commit/2967ebdbe)**: Remove buggy unstable_deferredUpdates() (#13488) //<Dan Abramov>//
- **[1664b08f0](https://github.com/facebook/react/commit/1664b08f0)**: added flow types to setInnerHTML (#13495) //<Bryan M>//
- **[672e859d3](https://github.com/facebook/react/commit/672e859d3)**: Add warning to prevent setting this.state to this.props referentially (#11658) //<Veekas Shrivastava>//
- **[29287f088](https://github.com/facebook/react/commit/29287f088)**: Rename lowestPendingInteractiveExpirationTime (#13484) //<Heaven>//
- **[d400d6d5e](https://github.com/facebook/react/commit/d400d6d5e)**: Replace magic number 1 with ELEMENT_NODE (#13479) //<Heaven>//
- **[340bfd939](https://github.com/facebook/react/commit/340bfd939)**: Rename ReactTypeOfWork to ReactWorkTags, ReactTypeOfSideEffect to ReactSideEffectTags (#13476) //<Sophie Alpert>//
- **[5cefd9b1e](https://github.com/facebook/react/commit/5cefd9b1e)**: Stringify <option> children (#13465) //<Dan Abramov>//
- **[3661616c2](https://github.com/facebook/react/commit/3661616c2)**: Improve test harness of submit events (#13463) //<Philipp Spieß>//
- **[a1be17140](https://github.com/facebook/react/commit/a1be17140)**: Revert "Rely on bubbling for submit and reset events (#13358)" (#13462) //<Dan Abramov>//
- **[90c92c700](https://github.com/facebook/react/commit/90c92c700)**: Fix warning message //<Dan Abramov>//
- **[5cb0f2bf5](https://github.com/facebook/react/commit/5cb0f2bf5)**: Change www error shim API (#13454) //<Dan Abramov>//
- **[e106b8c44](https://github.com/facebook/react/commit/e106b8c44)**: Warn about unsafe toWarnDev() nesting in tests (#12457) //<Brian Vaughn>//
- **[026aa9c97](https://github.com/facebook/react/commit/026aa9c97)**: Bumped version to 16.4.3-alpha.0 (#13448) //<Brian Vaughn>//
- **[d670bdc6b](https://github.com/facebook/react/commit/d670bdc6b)**: Warn about ReactDOM.createPortal usage within ReactTestRenderer (#12895) //<Brian Vaughn>//
- **[bf1abf478](https://github.com/facebook/react/commit/bf1abf478)**: Fix React.lazy(forwardRef) (#13446) //<Dan Abramov>//
- **[e8571c798](https://github.com/facebook/react/commit/e8571c798)**: Tweak ReactTypeOfWork order (#13444) //<Dan Abramov>//
- **[973496b40](https://github.com/facebook/react/commit/973496b40)**: Fix component name for React.lazy (#13443) //<Dan Abramov>//
- **[0beb2ee76](https://github.com/facebook/react/commit/0beb2ee76)**: Fix incorrect legacy context for factory components (#13441) //<Dan Abramov>//
- **[004cb21bb](https://github.com/facebook/react/commit/004cb21bb)**: Short circuit the logic for exporting a module (#13392) //<Joseph>//
- **[f7a538c91](https://github.com/facebook/react/commit/f7a538c91)**: Remove getTextContentAccessor (#13434) //<Brandon Dail>//
- **[d1c42d2f1](https://github.com/facebook/react/commit/d1c42d2f1)**: Remove addEventListener check in isEventSupported (#13435) //<Brandon Dail>//
- **[a869f992a](https://github.com/facebook/react/commit/a869f992a)**: Remove helper object from FallbackCompositionState (#13430) //<Brandon Dail>//
- **[0cd8d470d](https://github.com/facebook/react/commit/0cd8d470d)**: Do not toLowerCase lists of lowercase words (#13428) //<Nathan Hunzaker>//
- **[b3a4cfea5](https://github.com/facebook/react/commit/b3a4cfea5)**: Trap click events for portal root (#11927) //<Brandon Dail>//
- **[0da5102cf](https://github.com/facebook/react/commit/0da5102cf)**: Add interaction-tracking/subscriptions (#13426) //<Brian Vaughn>//
- **[4b32f525e](https://github.com/facebook/react/commit/4b32f525e)**: Refactor away some namespace imports (#13427) //<Dan Abramov>//
- **[d2f5c3fbc](https://github.com/facebook/react/commit/d2f5c3fbc)**: Don't diff memoized host components in completion phase (#13423) //<Dan Abramov>//
- **[5e0f073d5](https://github.com/facebook/react/commit/5e0f073d5)**: interaction-tracking package (#13234) //<Brian Vaughn>//
- **[d14e443d6](https://github.com/facebook/react/commit/d14e443d6)**: Resume onSelect tracking after dragend (#13422) //<Dan Abramov>//
- **[d5edc1f51](https://github.com/facebook/react/commit/d5edc1f51)**: Remove unused ReactCall & ReactReturn types (#13419) //<Esteban>//
- **[4fa20b53b](https://github.com/facebook/react/commit/4fa20b53b)**: Don't pass instanceHandle to clones (#13125) //<Sebastian Markbåge>//
- **[fe959eea7](https://github.com/facebook/react/commit/fe959eea7)**: React.lazy (#13398) //<Andrew Clark>//
- **[2b3082800](https://github.com/facebook/react/commit/2b3082800)**: Fix wrong Flow return type //<Andrew Clark>//
- **[5031ebf6b](https://github.com/facebook/react/commit/5031ebf6b)**: Accept promise as element type (#13397) //<Andrew Clark>//
- **[77b7a660b](https://github.com/facebook/react/commit/77b7a660b)**: fix: do not reconcile children that are iterable functions (#13416) //<Rauno Freiberg>//
- **[cb7745c6c](https://github.com/facebook/react/commit/cb7745c6c)**: remove unused state initialValue from ReactDOMFiberSelect (#13412) //<Kartik Lad>//
- **[9832a1b6d](https://github.com/facebook/react/commit/9832a1b6d)**: Avoid setting empty value on reset & submit inputs (#12780) //<Ellis Clayton>//
- **[8862172fa](https://github.com/facebook/react/commit/8862172fa)**: Provide a better error message (#12421) //<Aaron Brager>//
- **[581682917](https://github.com/facebook/react/commit/581682917)**: De-duplicate commitUpdateQueue effect commit (#13403) //<Ruud Burger>//
- **[1bc975d07](https://github.com/facebook/react/commit/1bc975d07)**: Don't stop context traversal at matching consumers (#13391) //<Andrew Clark>//
- **[83e446e1d](https://github.com/facebook/react/commit/83e446e1d)**: Refactor ReactErrorUtils (#13406) //<Dan Abramov>//
- **[13fa96a54](https://github.com/facebook/react/commit/13fa96a54)**: Improve bad ref invariant (#13408) //<Dan Abramov>//
- **[b2adcfba3](https://github.com/facebook/react/commit/b2adcfba3)**: Don't suppress jsdom error reporting in our tests (#13401) //<Dan Abramov>//
- **[69e2a0d73](https://github.com/facebook/react/commit/69e2a0d73)**: Ability to access window.event in development (#11687) (#11696) //<Conrad Irwin>//
- **[ade4dd3f6](https://github.com/facebook/react/commit/ade4dd3f6)**: Fix typo in a comment (#13373) //<davidblnc>//
- **[2c59076d2](https://github.com/facebook/react/commit/2c59076d2)**: Warn when "false" or "true" is the value of a boolean DOM prop (#13372) //<Moti Zilberman>//
- **[de5102c4c](https://github.com/facebook/react/commit/de5102c4c)**: Ignore symbols and functions in select tag (#13389) //<Rauno Freiberg>//
- **[d04d03e47](https://github.com/facebook/react/commit/d04d03e47)**: Fix passing symbols and functions to textarea (#13362) //<Rauno Freiberg>//
- **[5550ed4a8](https://github.com/facebook/react/commit/5550ed4a8)**: Ensure arguments are coerced to strings in warnings (#13385) //<Nathan Hunzaker>//
- **[3938ccc88](https://github.com/facebook/react/commit/3938ccc88)**: Allow the user to opt out of seeing "The above error..." addendum (#13384) //<Dan Abramov>//
- **[47e217a77](https://github.com/facebook/react/commit/47e217a77)**: Provide component reference in ReactDOMFiberTextarea warnings (#13361) //<Rauno Freiberg>//
- **[a0190f828](https://github.com/facebook/react/commit/a0190f828)**: Rename SafeValue to ToStringValue (#13376) //<Philipp Spieß>//
- **[33602d435](https://github.com/facebook/react/commit/33602d435)**: Improve soundness of ReactDOMFiberInput typings (#13367) //<Philipp Spieß>//
- **[ae855cec2](https://github.com/facebook/react/commit/ae855cec2)**: Support tangentialPressure and twist fields of pointer events (#13374) //<Moti Zilberman>//
- **[725e499cf](https://github.com/facebook/react/commit/725e499cf)**: Rely on bubbling for submit and reset events (#13358) //<Philipp Spieß>//
- **[e07a3cd28](https://github.com/facebook/react/commit/e07a3cd28)**: fix typo on inline comment (#13364) //<Alex Rohleder>//
- **[e0204084a](https://github.com/facebook/react/commit/e0204084a)**: Fix typos detected by github.com/client9/misspell (#13349) //<Kazuhiro Sera>//
- **[be4533af7](https://github.com/facebook/react/commit/be4533af7)**: Fix hydration of non-string dangerousSetInnerHTML.__html (#13353) //<Dan Abramov>//
- **[0072b5998](https://github.com/facebook/react/commit/0072b5998)**: Improve scry() error message for bad first argument (#13351) //<Dan Abramov>//
- **[d59b993a7](https://github.com/facebook/react/commit/d59b993a7)**: Make nicer stacks DEV-only //<Dan>//
- **[54d86eb82](https://github.com/facebook/react/commit/54d86eb82)**: Improve display of filenames in component stack (#12059) //<Billy Janitsch>//
- **[067cc24f5](https://github.com/facebook/react/commit/067cc24f5)**: Profiler actualDuration bugfix (#13313) //<Brian Vaughn>//
- **[3cfab14b9](https://github.com/facebook/react/commit/3cfab14b9)**: Treat focusable as enumerated boolean SVG attribute (#13339) //<Dan Abramov>//
- **[3b3b7fcbb](https://github.com/facebook/react/commit/3b3b7fcbb)**: Don't search beyond Sync roots for highest priority work (#13335) //<Dan Abramov>//
- **[08e32263f](https://github.com/facebook/react/commit/08e32263f)**: Fix Prettier "No parser" warning while building (#13323) //<Bartosz Kaszubowski>//
- **[ac7238856](https://github.com/facebook/react/commit/ac7238856)**: Add support for auxclick event (#11571) //<Jason Quense>//
- **[75491a8f4](https://github.com/facebook/react/commit/75491a8f4)**: Add a regression test for #12200 (#12242) //<Gareth Small>//
- **[2d0356a52](https://github.com/facebook/react/commit/2d0356a52)**: Make sure that `select` has `multiple` attribute set to appropriate state before appending options (#13270) //<Dmytro Zasyadko>//
- **[b179bae0a](https://github.com/facebook/react/commit/b179bae0a)**: Enhance get derived state from props state warning - #12670 (#13317) //<Felix Wu>//
- **[15a8f0318](https://github.com/facebook/react/commit/15a8f0318)**: Fix ambiguity in doc comment for isValidElement (#12826) //<Alexey>//
- **[5cff21207](https://github.com/facebook/react/commit/5cff21207)**: add flowtype to function signature (#13285) //<ryota-murakami>//
- **[b565f4953](https://github.com/facebook/react/commit/b565f4953)**: Minimally support iframes (nested browsing contexts) in selection event handling (#12037) //<Andrew Patton>//
- **[1609cf343](https://github.com/facebook/react/commit/1609cf343)**: Warn about rendering Generators (#13312) //<Dan Abramov>//
- **[46d5afc54](https://github.com/facebook/react/commit/46d5afc54)**: Replace console.error() with a throw in setTimeout() as last resort exception logging (#13310) //<Dan Abramov>//
- **[b3b80a483](https://github.com/facebook/react/commit/b3b80a483)**: Inject react-art renderer into react-devtools (#13173) //<Yunchan Cho>//
- **[5e8beec84](https://github.com/facebook/react/commit/5e8beec84)**: Add a regression test for #11602 //<Dan Abramov>//
- **[470377bbd](https://github.com/facebook/react/commit/470377bbd)**: Remove extraneous condition //<Dan Abramov>//
- **[6db080154](https://github.com/facebook/react/commit/6db080154)**: Remove irrelevant suggestion of a legacy method from a warning (#13169) //<Ideveloper>//
- **[f60a7f722](https://github.com/facebook/react/commit/f60a7f722)**: Fix SSR crash on a hasOwnProperty attribute (#13303) //<Dan Abramov>//
- **[ff41519ec](https://github.com/facebook/react/commit/ff41519ec)**: Sanitize unknown attribute names for SSR (#13302) //<Dan Abramov>//
- **[c44c2a216](https://github.com/facebook/react/commit/c44c2a216)**: More helpful message when passing an element to createElement() (#13131) //<Dylan Cutler>//
- **[28cd494bd](https://github.com/facebook/react/commit/28cd494bd)**: Refactor validateDOMNesting a bit (#13300) //<Dan Abramov>//
- **[b381f4141](https://github.com/facebook/react/commit/b381f4141)**: Allow Electrons <webview> tag (#13301) //<Philipp Spieß>//
- **[0182a7463](https://github.com/facebook/react/commit/0182a7463)**: Fix a crash when using dynamic children in <option> tag (#13261) //<Konstantin Yakushin>//
- **[2a2ef7e0f](https://github.com/facebook/react/commit/2a2ef7e0f)**: Remove unnecessary branching from updateContextProvider (#13282) //<Andrew Clark>//
- **[840cb1a26](https://github.com/facebook/react/commit/840cb1a26)**: Add an invariant to createRoot() to validate containers (#13279) //<Dan Abramov>//

Release Notes:
[GENERAL] [FEATURE] [React] - React sync for revisions bc1ea9c...ade5e69

Reviewed By: bvaughn

Differential Revision: D9561644

fbshipit-source-id: 3be120d7450f310af458897d54993a6c086cff2f
2018-09-11 15:25:16 -07:00
Eli WhiteandHector Ramos 7b1186c05a Require all Android View Attributes are defined in flow prop types
Summary: This caught a few flow types that weren't defined for attributes that Android exposes. Ensuring that these stay in sync will be necessary for codegen in the future.

Reviewed By: sahrens

Differential Revision: D9444165

fbshipit-source-id: 8ee00af7b732c35d7f6befcdf79f77b73eac6a1b
2018-09-11 15:25:11 -07:00
Eli WhiteandHector Ramos 3ccc141115 Put View ViewConfig in JS
Summary: Moving this config to native for android so we skip the native lookup for the config.

Reviewed By: yungsters

Differential Revision: D9415726

fbshipit-source-id: 84cac3f0dfa4f6ea8800de77676f1e2896ee463d
2018-09-11 15:25:07 -07:00
Eli WhiteandHector Ramos cbad15863d Adding a more complete type for ReactNativeBaseComponentViewConfig
Summary:
As we add js view configs to our view managers, we want this type to be a little bit more strict.

This will be especially useful as we start removing certain keys (like NativeProps) which aren't actually necessary, this will make sure we remove them everywhere.

Reviewed By: yungsters

Differential Revision: D9416905

fbshipit-source-id: 6b12e38b9d56969a81ec5d4f2920298e4919f7be
2018-09-11 15:25:03 -07:00
Mike Grabowski 3c1ffd81c7 Fix Metro version 2018-09-10 12:53:41 +02:00
Tim YungandHector Ramos a88243a763 React: Upgrade to react-devtools@3.3.2
Summary: Upgrades `react-devtools` for React Native and Nuclide to v3.3.2.

Reviewed By: bvaughn

Differential Revision: D9565574

fbshipit-source-id: 320b21edee3bcf9b4541ca4936461cdb6f1373e1
2018-09-06 16:44:28 -07:00
Hector Ramos 8402c97f83 [0.57.0-rc.4] Bump version numbers 2018-09-06 16:13:03 -07:00
Hector Ramos fd2db95481 Remove test dep on publish 2018-09-06 16:12:51 -07:00
Hector Ramos cb471c7b3e Revert "[0.57.0-rc.4] Bump version numbers"
This reverts commit 9dcc39586c.
2018-09-06 16:12:06 -07:00
Hector Ramos 9dcc39586c [0.57.0-rc.4] Bump version numbers 2018-09-06 15:28:55 -07:00
Hector Ramos 5ffa4b319b Revert "[0.57.0-rc.4] Bump version numbers"
This reverts commit 9974d4f1e7.
2018-09-06 15:28:49 -07:00
Hector Ramos 0943c6437a Sync Circle CI config from master 2018-09-06 15:27:10 -07:00
Mike Grabowski 9974d4f1e7 [0.57.0-rc.4] Bump version numbers 2018-09-03 11:07:32 +02:00
Mike Grabowski 4382413e5b Fix flow 2018-09-03 11:06:53 +02:00
Mike Grabowski f28a6bbc44 Revert "[0.57.0-rc.4] Bump version numbers"
This reverts commit 6d4970f886.
2018-09-03 11:06:17 +02:00
Mike Grabowski 6d4970f886 [0.57.0-rc.4] Bump version numbers 2018-09-02 19:13:46 +02:00
Héctor RamosandMike Grabowski af554aabe7 Update CircleCI confih 2018-09-02 16:11:35 +02:00
Oleg LokhvitskyandMike Grabowski ef7e99c1bb ScrollView snapToOffsets
Summary:
* Added snapToOffsets prop to ScrollView. Allows snapping at arbitrary points.

* Fixed pagingEnabled not being overridden by snapToInterval on iOS.

* Fixed Android *requiring* pagingEnabled to be defined alongside snapToInterval.
* Added support for decelerationRate on Android.

* Fixed snapping implementation. It was not calculating end position correctly at all (velocity is not a linear offset).
  * Resolves https://github.com/facebook/react-native/issues/20155
* Added support for new content being added during scroll (mirrors existing functionality in vertical ScrollView).

* Added support for snapToInterval.
  * Resolves https://github.com/facebook/react-native/issues/19552

Reviewed By: yungsters

Differential Revision: D9405703

fbshipit-source-id: b3c367b8079e6810794b0165dfdbcff4abff2eda
2018-08-31 15:28:00 +02:00
Kevin GozaliandLorenzo Sciandra a3b2f5d05f iOS downgrade error to warning when invoking native module with invalid bridge
Summary: A bunch of flows including JS reload and e2e tests seem to hit the race condition, causing redbox. For now, make it a warning to unblock.

Differential Revision: D9327418

fbshipit-source-id: a72b378d88f7566268fd9415fbd34225c8b931e7
2018-08-31 10:14:56 +01:00
empyricalandLorenzo Sciandra 6bcd51a3e9 Add support for out-of-tree platform plugins (#20825)
Summary:
This pull request adds the ability for a platform developer to provide a `"haste"` key under the `"rnpm"` key in their `package.json` which allows the packager to pick up that platform's javascript files. The intent is to remove the need to have custom platforms hardcoded in. This is inspired by the `"jest": { "haste": {} }` key used by jest.

For example, React Native Dom would have an entry like:

```json
{
  "rnpm": {
    "haste": {
      "providesModuleNodeModules": [
        "react-native-dom"
      ],
      "platforms": [
        "dom"
      ]
    }
  }
}
```

Support for more keys (path blacklists perhaps?) could be added in the future.

This succeeds #20662, as per a discussion I had with matthargett.

I've got an open discussion over here as well: https://github.com/react-native-community/discussions-and-proposals/issues/21
Pull Request resolved: https://github.com/facebook/react-native/pull/20825

Differential Revision: D9596429

Pulled By: hramos

fbshipit-source-id: a02f0da0bea8870bdc45d55e23da8ccbc36249f2
2018-08-31 10:13:20 +01:00
Rafael OlezaandLorenzo Sciandra 1bfa422edb Bump metro@0.45.0
Summary: shipitwithfiremissile

Reviewed By: mjesun

Differential Revision: D9558666

fbshipit-source-id: 1e4102de3986832ae86f56e5d245e0a0b6c4fa17
2018-08-31 10:13:00 +01:00
Rafael OlezaandLorenzo Sciandra 7156c86628 End metro server gracefully when there are some edge errors
Summary: This diff fixes a couple of edge cases that caused Metro to keep the process running when there were some specific errors (specially around the `dependencies` command and the transformer path).

Reviewed By: jrwats

Differential Revision: D9551834

fbshipit-source-id: 959cefcec9e2687dff89c94a871ae74c50d2dd77
2018-08-31 10:12:55 +01:00
Rafael OlezaandLorenzo Sciandra 9f83fccc3c Upgrade to babel@7.0.0
Summary: Now that babel7 is stable, we can upgrade Metro and fbsource to use it, yay!!!!!

Reviewed By: mjesun

Differential Revision: D9518571

fbshipit-source-id: c85569cb3058235f4f9310949897f7955ecf7324
2018-08-31 10:12:44 +01:00
Rafael OlezaandLorenzo Sciandra a7d6a3b531 Make the --transformer CLI argument override the babelTransformerPath
Summary: D9070810 introduced a breaking change, making the `--transformer` CLI argument able to override the generic transformer instead of `babelTransformer`. Since we still have some scripts that assume `--transformer` is being used for overriding the babelTransformer path, we cannot do this breaking change yet, so this diff reverts the CLI handling to the old behaviour.

Reviewed By: jrwats

Differential Revision: D9550157

fbshipit-source-id: 8b4e26fcb5bca6e4b2f63b1e1a014bce23a31452
2018-08-31 10:12:36 +01:00
Rafael OlezaandLorenzo Sciandra 96939ad9f5 Bump metro@0.44.0
Summary: shipit-splash

Reviewed By: mjesun

Differential Revision: D9504325

fbshipit-source-id: 191f27ee33c1363f180b0c6c710f65096e139df1
2018-08-31 10:12:27 +01:00
Rafael OlezaandLorenzo Sciandra 2fb77a9c10 Expose the actual transformer in the config
Summary:
This diff exposes the new more generic way to configure transformers in `Metro` via the config parameter `transformerPath`.

The new generic transformers can be used to transform any kind of file, since they don't call any JS-specific method and their API is generic. They only need to implement a single `transform` method:

```
async function transform(
  absolutePath: string,
  relativePath: string,
  fileContents: Buffer,
  options: TransformOptions, // very soon these will be configurable
): Promise<{
  output: Array<mixed>,
  dependencies: Array<{
    name: string,
    data: mixed, // very soon
  }>,
}> {
  // ...
}
```

Metro already had a `transformModulePath` config param, which was used to configure how babel was called in order to generate the AST. In order to avoid confusion, but keep the current open source transformer worker, I've renamed this param to `babelTransformerPath`. We can add a layer of compatibility and detect old config params in order to show a deprecation warning.

Reviewed By: pvdz

Differential Revision: D9070810

fbshipit-source-id: aebde879736026c09537f5d236eae24c06640abf
2018-08-31 10:12:01 +01:00
Hector Ramos a8aa8b673c [0.57.0-rc.3] Bump version numbers 2018-08-24 14:51:24 -07:00
Hector Ramos 50e95897d8 refactor publish workflow 2018-08-24 14:46:15 -07:00
Hector Ramos a45a383683 Revert "Expose the actual transformer in the config"
This reverts commit bdc0f3031a.
2018-08-24 13:38:51 -07:00
Rafael OlezaandHector Ramos bdc0f3031a Expose the actual transformer in the config
Summary:
This diff exposes the new more generic way to configure transformers in `Metro` via the config parameter `transformerPath`.

The new generic transformers can be used to transform any kind of file, since they don't call any JS-specific method and their API is generic. They only need to implement a single `transform` method:

```
async function transform(
  absolutePath: string,
  relativePath: string,
  fileContents: Buffer,
  options: TransformOptions, // very soon these will be configurable
): Promise<{
  output: Array<mixed>,
  dependencies: Array<{
    name: string,
    data: mixed, // very soon
  }>,
}> {
  // ...
}
```

Metro already had a `transformModulePath` config param, which was used to configure how babel was called in order to generate the AST. In order to avoid confusion, but keep the current open source transformer worker, I've renamed this param to `babelTransformerPath`. We can add a layer of compatibility and detect old config params in order to show a deprecation warning.

Reviewed By: pvdz

Differential Revision: D9070810

fbshipit-source-id: aebde879736026c09537f5d236eae24c06640abf
2018-08-24 12:33:14 -07:00
Rafael OlezaandHector Ramos e38b928650 Standarize options passed to the transformer
Summary:
This is the first step to make transformers fully customizable (and not be tied to JS, or RN). In order to do that, I'm changing the signature of the transformers, which currently is:

```
function transformCode(
  filename: string,
  localPath: LocalPath,
  transformerPath: string,
  options: WorkerOptions,
  assetExts: $ReadOnlyArray<string>,
  assetRegistryPath: string,
  minifierPath: string,
  asyncRequireModulePath: string,
  dynamicDepsInPackages: DynamicRequiresBehavior,
)
```

to be:

```
async function transformCode(
  filename: string,
  localPath: LocalPath,
  options: WorkerOptions,
)
```

(so basically, all the RN-custom properties are moved to `WorkerOptions`, which in the future will be a generic to allow anybody pass any random option to their transformers).

In order to make all this work, I've had to get rid of the logic that calculates the base cache key hash based on a subset of worker options (the ones that Metro knows that are not going to change between runs).

This could potentially cause a perf regression (since we're now making the hash calculation a bit more costly), and in fact I could measure a ~400ms regression on the worse case scenario (which happens when restarting Metro and re-transforming a Wilde from a warm local cache).

I've benchmarked this regression and could find that it's caused by the array of `assetExtensions` (which is potentially large). I have a followup diff to improve this, which is able to remove the regression completely.

Reviewed By: pvdz

Differential Revision: D8695766

fbshipit-source-id: eccd18a4cbc91854f34d5c9ba7f95088f19483a1
2018-08-24 12:33:09 -07:00
Vladimir ZdravkovicandHector Ramos 7ae186cd85 Updated the glog library version from 0.3.4 to 0.3.5 (#20811)
Summary:
While the original reason for this change was because of an issue #20780, with further investigation I concluded that the issue is till present for this combo of versions:
glog - 0.3.5
google-cast-sdk - 4.3.1

Downgrading google-cast-sdk to 4.3.0 fixed the build issue.

Release Notes:
--------------
Updated glog version from 0.3.4 to 0.3.5 for iOS

[IOS] [ENHANCEMENT] [GLOG]
Pull Request resolved: https://github.com/facebook/react-native/pull/20811

Differential Revision: D9485221

Pulled By: hramos

fbshipit-source-id: 65caf0839588384a5229a6165506dc6ef62e5fc5
2018-08-24 12:32:55 -07:00
gengjiawenandHector Ramos 60b11b05a3 refine android config (#20731)
Summary:
By this change we can unify version early, like we can make kotlin version share in buildscript and app dependency the same time ([butterknife](https://github.com/JakeWharton/butterknife/blob/master/build.gradle) use the same).
pass all current ci and one of my project https://github.com/gengjiawen/ReactNative64bitDemo.
none
 [GENERAL] [ANDROID] [TEMPLATE] - refine android config
Pull Request resolved: https://github.com/facebook/react-native/pull/20731

Differential Revision: D9482954

Pulled By: hramos

fbshipit-source-id: d864adbdbc624bc311ccc5f44a15d0334d2d8a59
2018-08-24 12:31:51 -07:00
Héctor Ramos 2f6e172fec Gate failing steps behind a username check (#20818)
Summary:
There are some steps known to be failing on master. This pollutes checks for unrelated PRs.

This PR will make it so that PRs submitted by anyone other than myself will no-op on these steps.

Future work: Have an array of whitelisted contributors, and make it much easier to turn individual tests on and off.
Pull Request resolved: https://github.com/facebook/react-native/pull/20818

Differential Revision: D9484946

Pulled By: hramos

fbshipit-source-id: d6c187b341f13552b33d0f1d569b65f6c66ae48f
2018-08-24 07:24:02 -07:00
Héctor Ramos be60766572 Bump iOS min in Readme (#20805)
Summary:
iOS 8 was dropped as of 0.56.
Pull Request resolved: https://github.com/facebook/react-native/pull/20805

Differential Revision: D9481968

Pulled By: hramos

fbshipit-source-id: 23e74ac3145ba92e2c119be365f2435e290c3f61
2018-08-24 07:20:14 -07:00
Héctor Ramos a7d44dd350 Use one time password when publishing to npm (#20701)
Summary:
This pull request addresses the failing publish-npm.js script from earlier this week. For background, last month we reset all npm access tokens for any package related to Facebook, and we now require all accounts with publish permissions to have two factor enabled.

The publish-npm.js script relied on one such token that is configured in Circle CI as a envvar. The token has been updated in Circle CI, but we now need a way of passing the one time password to npm.

With this PR, we can now grab the otp from Circle CI's envvars. Considering otps are ephemeral, this requires the NPM_CONFIG_OTP envvar to be set by someone with publishing permissions anytime a new release will be pushed to npm. The token is short lived, but it would still be good to clear the envvar after the package is published. Circle CI envvars are not passed on to PR/forked builds.

This PR is effectively a breaking change for the release process, as the publish step will not succeed if the OTP is not valid.

OTPs are short-lived, and the publish_npm_package job will definitely outlive the token. Unfortunately this will require some timing to get right, but the alternative is to ssh into the Circle CI machine and re-run the `npm publish --otp` command, which again would still require someone with publish access to provide the otp.
Pull Request resolved: https://github.com/facebook/react-native/pull/20701

Differential Revision: D9478488

Pulled By: hramos

fbshipit-source-id: 6af631a9cb425271b98c03d158aec390ebc95304
2018-08-24 07:19:54 -07:00
gengjiawenandLorenzo Sciandra 6eac2d4e2f bump android gradle to 3.1.4 (#20767)
Summary:
Bump android gradle plugin to 3.1.4. We have been stay to 2.x too long. With 3.x we can have instant run and great performance and new features brought by google.

Also thanks to CFKevinRef great pr to make this possible.
pass all current ci. I have also tested RNTester release version works without crash.
https://github.com/facebook/react-native/pull/17967.
 [GENERAL] [ANDROID] [FEATURE] - bump android gradle to 3.1.4
Pull Request resolved: https://github.com/facebook/react-native/pull/20767

Differential Revision: D9437576

Pulled By: hramos

fbshipit-source-id: 6084056a1390582a75a879918f2538b0480f6299
2018-08-23 14:55:18 +01:00
DulmandakhandLorenzo Sciandra 5992f8d587 Bump compileSdkVersion to 27 and buildToolsVersion to 27.0.3 (#20777)
Summary:
I found that android support library 27.x (https://github.com/facebook/react-native/commit/874cca1ac258ec224bade999722d7a34c307def0) requires compileSdkVersion to be 27. Also found that many FB projects use SDK 27.
Pull Request resolved: https://github.com/facebook/react-native/pull/20777

Differential Revision: D9478431

Pulled By: hramos

fbshipit-source-id: ca100f6b5b39e7d112926124423f9510a0efc291
2018-08-23 14:55:12 +01:00
DulmandakhandLorenzo Sciandra 4b68b64e47 Remove TextLayoutBuilder from ReactAndroid dependency (#20600)
Summary:
This PR removes TextLayoutBuilder, which is not used anywhere.
Pull Request resolved: https://github.com/facebook/react-native/pull/20600

Reviewed By: achen1

Differential Revision: D9367345

Pulled By: hramos

fbshipit-source-id: 407a6a80f5c69650fcc7167b28214f7315beed2f
2018-08-23 14:55:03 +01:00
DulmandakhandLorenzo Sciandra 02e7ce0219 use latest infer-annotations from maven (#20599)
Summary:
This PR removes infer-annotation from the repo and uses latest version of it from maven.
Pull Request resolved: https://github.com/facebook/react-native/pull/20599

Differential Revision: D9437594

Pulled By: hramos

fbshipit-source-id: 93c33041dd8a61b220c352fb187a23bb2dd1b4db
2018-08-23 14:54:54 +01:00
DulmandakhandLorenzo Sciandra d9868f7ed8 Bump Android Support Library to 27.1.1 (#20586)
Summary:
This PR bumps Android Support Library version to 27.1.1.

FYI, originally was a part of https://github.com/facebook/react-native/pull/20026.
Pull Request resolved: https://github.com/facebook/react-native/pull/20586

Differential Revision: D9414901

Pulled By: hramos

fbshipit-source-id: 580338e62a924c214accc5d944f17c81ad9e3f9f
2018-08-23 14:54:47 +01:00
Sergei DryganetsandLorenzo Sciandra 7a246e4872 Android. OkHttp crash fixed on upload re-try. (#20802)
Summary:
This change fixes this issue:
https://github.com/facebook/react-native/issues/10423
Pull Request resolved: https://github.com/facebook/react-native/pull/20802

Differential Revision: D9478422

Pulled By: hramos

fbshipit-source-id: ce3a098a71c8f50a62b011a2a277004ab7a7b655
2018-08-23 10:05:19 +01:00
Elias ToivanenandHector Ramos 9a4c21f92b Bugfix: Check NodeJS version successfully even for old runtimes (Fixes #20769) (#20779)
Summary:
Fixes #20769

Release notes
--------------
[CLI] [BUGFIX] [local-cli/server/checkNodeVersion.js] - Disable auto-formatting in `local-cli/server/checkNodeVersion.js` since it introduces ES6 and ES7 syntax (trailing comma in argument list) which in turn makes ES5 engines crash with a `SyntaxError`.
Pull Request resolved: https://github.com/facebook/react-native/pull/20779

Differential Revision: D9468346

Pulled By: hramos

fbshipit-source-id: 24761a377a5fd104e11ed6b6e86da15e96a0e38b
2018-08-22 22:55:59 -07:00
Rafael OlezaandHector Ramos 893c0274d6 Fix default projectRoot + watchFolders computation
Summary:
@public

This diff fixes the `projectRoot` calculation on React Native when the app does not have a config file. This should fix the issues reported in https://github.com/facebook/react-native/issues/20712

Reviewed By: hramos

Differential Revision: D9444982

fbshipit-source-id: 4cb41fa5224d2addf92976cc119e49dea6a6346b
2018-08-22 22:55:06 -07:00
Hector Ramos f7fc381eda [0.57.0-rc.2] Bump version numbers 2018-08-22 14:55:35 -07:00
Hector Ramos a92bb3b06e [0.57.0-rc.1] Bump version numbers 2018-08-22 13:20:20 -07:00
Hector Ramos 2739bf45cc Revert "[0.57.0-rc.1] Bump version numbers"
This reverts commit 8cd5be67ff.
2018-08-22 13:19:59 -07:00
Héctor Ramos aa6af734a3 Run failing tests in CI, without turning CI red (#20775)
Summary:
We have several disabled tests in Circle, and they are not running at all.
This prevents us from seeing when a disabled test might actually be fixed, as enabling the test requires uncommenting the correct line in Circle CI's config.

In this PR, we use the existing swallow_error script to run known-failing steps, without failing the job. This will let us see the step's output in CI, without polluting PRs that have not introduced new failures to CI.
Pull Request resolved: https://github.com/facebook/react-native/pull/20775

Differential Revision: D9442412

Pulled By: hramos

fbshipit-source-id: 83c930811a559fdcf6d7b926b4073343e862d2b3
2018-08-22 13:18:55 -07:00
Héctor RamosandHector Ramos d286ff923a WIP: Add Node 10 job to workflow
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/19299

Differential Revision: D9413583

Pulled By: hramos

fbshipit-source-id: 61ac48e46feaba5f1ec80362b5e1c7f2787ee167
2018-08-22 13:18:50 -07:00
Héctor Ramos 56e5884f86 Disable Podspec tests
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/20755

Differential Revision: D9408317

Pulled By: hramos

fbshipit-source-id: 7799cf8ee4c99662299ef9cf1a26913cdf0d8b39
2018-08-22 13:18:45 -07:00
Hector Ramos 8cd5be67ff [0.57.0-rc.1] Bump version numbers 2018-08-22 12:54:21 -07:00
jamschandHector Ramos d0c6ccb739 Add missing "--terminal" argument to run-android (#20584)
Summary:
Commit 79e498b7fb claims that "--terminal" has been added as an argument to the "run-android" script which it hasn't. Instead it adds a new environment variable "process.env.REACT_TERMINAL" which seems to be undocumented and nowhere else in the repository.

This commit now allows Linux and OSX users to specify their custom terminal :

    react-native run-android --terminal=x-terminal-emulator

Additionally the metro bundler child process "detached" option has been set to false if no terminal has been specified on Linux which fixes an issue where the packager would be running in the background and would have to manually be closed by finding the process.

Fixes #18122
Pull Request resolved: https://github.com/facebook/react-native/pull/20584

Differential Revision: D9234990

Pulled By: hramos

fbshipit-source-id: 60e4cc57b2790c419d5a4f9027add04313ddf6f8
2018-08-22 12:37:42 -07:00
Nick GraefandHector Ramos e4f4c31236 ignore babelrc in git-upgrade (#20790)
Summary:
Per [this comment on the issue](https://github.com/facebook/react-native/issues/20710#issuecomment-414631827):

> Babel by default tries to find .babelrc files to configure itself, and once it finds the one from the RN app (which links to the RN preset that only works on Babel 7) it fails.
> The easiest patch to fix this issue is to add babelrc: false to the babel-register method, so Babel does not read any additional .babelrc file.

Fixes #20710
Pull Request resolved: https://github.com/facebook/react-native/pull/20790

Differential Revision: D9458502

Pulled By: hramos

fbshipit-source-id: 3a0ed7261322fdd9e0c0840f8a3944974f38b233
2018-08-22 12:36:22 -07:00
Héctor RamosandLorenzo Sciandra b44449395c Fix old license that snuck into repo (#20702)
Summary:
Quick trivial PR to add back a necessary header. Fixes CI as well.
Pull Request resolved: https://github.com/facebook/react-native/pull/20702

Differential Revision: D9374430

Pulled By: hramos

fbshipit-source-id: dba0f1d4fc80e39242d8c3e6d1e0007492d2860d
2018-08-22 17:17:12 +01:00
Héctor RamosandLorenzo Sciandra 126e4c6559 Fix Flow errors (#20696)
Summary:
Revert change to flow strict-local in OSS.
Pull Request resolved: https://github.com/facebook/react-native/pull/20696

Differential Revision: D9367630

Pulled By: hramos

fbshipit-source-id: 17e4d1ab6d00b2e14033b223d878d5fcd1c098f4
2018-08-22 17:17:12 +01:00
Ramanpreet NaraandLorenzo Sciandra e0df3a1a8b Gate usage of WebKit 10.0 APIs
Reviewed By: mmmulani

Differential Revision: D9362001

fbshipit-source-id: 62cde6bcc1f190c168973b173ce55c029328bfbf
2018-08-22 17:17:12 +01:00
Ramanpreet NaraandLorenzo Sciandra 959aacff73 Dynamically load WebKit
Summary:
@public

We can't dynamically link `WebKit` because doing so will impact cold start of all our Apps.

This diff includes a few changes:
 1. Weakly link the `WebKit` framework in the `ReactInternal` library, so that the compiler doesn't die when it encounters a WebKit symbol.
 2. Undo dynamic linking of WebKit in Catalyst.
 3. Undo dynamic linking of WebKit in AdsManager
 4. Before the first `WKWebView` is instantiated, dynamically load the `WebKit` framework.

The end result of these changes is that WebKit will be loaded only when it's going to be used.

Reviewed By: mmmulani

Differential Revision: D6564328

fbshipit-source-id: a45a44e774d0c61c1fb578a6fa3d16bb08f68ac9
2018-08-22 17:17:12 +01:00
Ramanpreet NaraandLorenzo Sciandra 262d286f4b Warn when 'scalesPageToFit' prop is used
Summary:
@public

The `WKWebView` class doesn't expose a `scalesPageToFit` property, unlike `UIWebView`. Therefore, the `scalesPageToFit` RN prop is be a bit tricky to implement with `WKWebView`.

For the time being, this diff adds warnings to `<WebView/>` whenever `useWebKit={true}` and `scalesPageToFit` is set. I've also updated the documentation to reflect that we don't support `scalesPageToFit` prop with the new implementation of `<WebView/>`.

Reviewed By: shergin

Differential Revision: D6429271

fbshipit-source-id: adf858cb67ba221c70d6d6f1bd6cff505e90c365
2018-08-22 17:17:12 +01:00
Ramanpreet NaraandLorenzo Sciandra f46dbc2a23 Move WKWebView into WebView.ios.js
Summary:
@public

This diff adds the `useWebKit` property to the `<WebView/>` React Native component. On iOS, when this property is true, we use `RCTWKWebView`. Otherwise, we use `RCTWebView`. On Android, this property does nothing.

Reviewed By: shergin

Differential Revision: D6423374

fbshipit-source-id: 006bfaaf12984fac0174c0b5bb897c009c026cd0
2018-08-22 17:17:12 +01:00
Ramanpreet NaraandLorenzo Sciandra 078799f627 Implement 'automaticallyAdjustContentInsets' and 'contentInset' props
Summary:
@public

This diff introduces two new props:
1. **automaticallyAdjustContentInsets**: Controls whether to adjust the content inset for web views that are placed behind a navigation bar, tab bar, or toolbar. The default value is true.
1. **contentInset**: The amount by which the web view content is inset from the edges of the scroll view. Defaults to {top: 0, left: 0, bottom: 0, right: 0}.

**Note:** There're some inconsistencies between how `UIWebView` and `WKWebView` render web pages with respect to the `contentInset` property. These two videos illustrate the problem:

**UIWebView**
[[ P58674349 | Playground.js ]]
https://pxl.cl/9R9V

**WKWebView**
[[ P58674348 | Playground.js ]]
https://pxl.cl/9R9W

Here's a stack overflow answer describing the problem: https://stackoverflow.com/a/35472603.

Reviewed By: shergin

Differential Revision: D6432181

fbshipit-source-id: aee6dac65d28435381ebec90519474b4707c7bab
2018-08-22 17:17:12 +01:00
Ramanpreet NaraandLorenzo Sciandra 0009d095d9 Implement 'backgroundColor' style
Summary:
@public

This diff implements background colors for the `RCTWKWebView` component by proxying the background color prop to the underlying `WKWebView` and its underlying `UIScrollView`.

There's few differences between `backgroundColor` in `RCTWebView` and `RCTWKWebView` implementations:
1. With `UIWebView,` the background color gets applied after the page loads. With `WKWebView`, this isn't necessarily true. This results in a white flicker on solid backgrounds because sometimes, the background color is set before the page loads. This video illustrates the problem: https://our.intern.facebook.com/intern/px/p/9QBH
1. As far as I can tell, `WKWebView` doesn't handle transparent backgrounds correctly. Either that, or I could be setting the background color incorrectly. I set the background color to `rgba(1, 1, 1, 0.5)` and recorded how both `RCTWebView` and `RCTWKWebView` render. These two videos indicate the differences:
**RCTWebView: Lighter background**
https://pxl.cl/9R13
**RCTWKWebView: Darker background**
https://pxl.cl/9R1b

I tried to replicate this on the web. According to [[ https://our.intern.facebook.com/intern/fiddle/zCHu/ | this fiddle ]], `RCTWebView` is correct. Clearly, RCTWKWebView is rendering transparent backgrounds a bit darker than necessary. This doesn't seem simple to debug, so I've created a task to document this work: T23815343. I'll get to it eventually.

Reviewed By: shergin

Differential Revision: D6398209

fbshipit-source-id: 1812cb68133bc18a3278f6b328d7b085362528b0
2018-08-22 17:17:12 +01:00
Ramanpreet NaraandLorenzo Sciandra d29c2534b8 Implement 'dataDetectorTypes' prop
Summary:
When text is rendered in `WKWebView` WebKit component, the component itself can detect things like phone numbers, flight numbers, links, etc. and render them with additional functionality.

For example, when the text `apple.com` is detected, if the `link` data detector type is enabled, the web view will actually render a link that takes the user to the Apple home page.

In this diff, I implement the `dataDetectorTypes` prop. The data detector types supported are:
1. phoneNumber
1. link
1. address
1. calendarEvent
1. trackingNumber
1. flightNumber
1. lookupSuggestion

These enums are documented in the [[ https://developer.apple.com/documentation/webkit/wkdatadetectortypes | WKDataDetectorTypes docs ]].

Reviewed By: shergin

Differential Revision: D6392546

fbshipit-source-id: 4dd373f0ac52f898163cd959eeef6672e55b42a6
2018-08-22 17:17:12 +01:00
Ramanpreet NaraandLorenzo Sciandra ee971a76fa Implement 'mediaPlaybackRequiresUserAction' prop
Summary:
HTML video elements can have the `autoplay` attribute, which forces them to play automatically whenever they load on the page.

In this diff, I introduce a new prop `mediaPlaybackRequiresUserAction`, which allows us to control whether video or audio element autoplays even when `autoplay` is set.

Reviewed By: shergin

Differential Revision: D6382256

fbshipit-source-id: 617508653910d600bc43f7f68c6dfd17ab1b6dd8
2018-08-22 17:17:12 +01:00
Ramanpreet NaraandLorenzo Sciandra 527792ac8e Implement 'allowsInlineMediaPlayback` prop
Summary:
For iPhones with small screen sizes (e.g: iPhone 5s), inside the `<WKWebView/>` component, videos will play in fullscreen mode. In this diff, I introduce a prop called `allowsInlineMediaPlayback` that when set to true, will allow videos to play inline.

**Note:** For videos to play inline, the HTML video element must also have a `playsinline` attribute on it.

Reviewed By: shergin

Differential Revision: D6379770

fbshipit-source-id: a0130720ffede6c24a90cad0c97a75b657d77017
2018-08-22 17:17:12 +01:00
Ramanpreet NaraandLorenzo Sciandra 0fa5bd8b9b Implement 'onShouldStartLoadWithRequest' prop
Summary:
@public

This diff introduces the native backend for a new WKWebView prop: `onShouldStartLoadWithRequest`.

In the final component, the behaviour will be as follows: Whenever the user navigates around in the web view, we call `onShouldStartLoadWithRequest` with the navigation event. If `onShouldStartLoadWithRequest` returns `true`, we continue the navigation. Otherwise, we abort it.

Reviewed By: shergin

Differential Revision: D6370317

fbshipit-source-id: e3cdd7e2a755125aebdb6df67e7b39116228bdfb
2018-08-22 17:17:12 +01:00
Ramanpreet NaraandLorenzo Sciandra d0b5a38c69 Implement 'reload' and 'stopLoading' methods
Summary:
@public

This diff implements the `reload` and `stopLoading` methods for `WKWebView`. Their functionality is self-explanatory.

Reviewed By: shergin

Differential Revision: D6369292

fbshipit-source-id: ba176f4406e0a67606406f36dd66f7615f4796c3
2018-08-22 17:17:12 +01:00
Ramanpreet NaraandLorenzo Sciandra 1b73e76ff3 Implement 'goForward' and 'goBack' methods
Summary:
@public

This diff implements the `goForward` and `goBack` methods on `WKWebView`.
1. `goForward` moves the web view one screen forward in the browser history.
1. `goBack` moves the web view one screen back in the browser history.

Reviewed By: shergin

Differential Revision: D6367495

fbshipit-source-id: e100ca00e92a6eaa30d2af1af642ba79a9c9feae
2018-08-22 17:17:12 +01:00
Ramanpreet NaraandLorenzo Sciandra 1984f4bc27 Implement 'injectJavaScript' method
Summary:
@public

This diff introduces a method called `injectJavaScript(script)` on the React Native `<WKWebView/>` component. When called with a string, it evaluates that string as JavaScript within the web view.

Reviewed By: shergin

Differential Revision: D6367445

fbshipit-source-id: f68afeff42535dc991747f96a63f3c956faf13d3
2018-08-22 17:17:12 +01:00
Ramanpreet NaraandLorenzo Sciandra 566259880a Implement 'decelerationRate' prop
Summary:
@public

The content that renders within the `WKWebView` instance actually renders inside a `UIScrollView`. On that scroll view, we can adjust the `decelerationRate`, which controls how fast the view stops scrolling after the user lets go while scrolling.

In this diff, I implemented the `decelerationRate` prop for `WKWebView`, which gets forwarded to the `UIScrollView` instance underlying the web view.

**Note:** Even though we accept a floating point value for the deceleration rate, the native `UIScrollView` component only allows two inputs:
1. `UIScrollViewDecelerationRateNormal`: 0.998
2. `UIScrollViewDecelerationRateFast`: 0.99

As far as I know, it seems to just round up to the nearest valid `CGFloat` (or down if number > 0.998), for any invalid numbers.

Reviewed By: mmmulani

Differential Revision: D6307262

fbshipit-source-id: 98c4395702415aa36519f9e9bd84f043be3a5881
2018-08-22 17:17:12 +01:00
Ramanpreet NaraandLorenzo Sciandra 1c3af598b1 Implement 'scrollEnabled' prop
Summary:
@public

The content of `WKWebView` renders within a scrollview. In this diff, I'm introducing the prop `scrollEnabled` to allow developers to control whether scrolling is enabled within the scroll view, or not.

Reviewed By: mmmulani

Differential Revision: D6307001

fbshipit-source-id: 5a199c6c3b8535e45a5a3cb6041e822bb7af2362
2018-08-22 17:17:12 +01:00
Ramanpreet NaraandLorenzo Sciandra 06cce04c2e Implement 'bounces' prop
Summary:
@public

The content that loads inside `WKWebView` renders within a `ScrollView`. Suppose the user pulls the page down when its top edge hits the top edge of the web view. Then, one of two things can happen as the user continues to pull the page down:
1. We let the page be pulled past the top edge of the web view.
1. We fix the page's vertical offset to 0 so that it doesn't move past the top edge of the web view.

The property that controls this behaviour is `<WKWebView bounces={true|false}/>`. In this diff, I implement it.

Reviewed By: mmmulani

Differential Revision: D6306866

fbshipit-source-id: 7763df78676215c3dd0bd7a029497a6eca1873ab
2018-08-22 17:17:12 +01:00
Ramanpreet NaraandLorenzo Sciandra 94560cac25 Implement message passing!
Summary:
@public

This diff implements message passing between the `WKWebView` and React Native. As with `<WebView/>`, we can only send/receive strings.

**Usage:**
1. Set `messagingEnabled` to `true`.
1. To send data from the web view to React Native, call `postMessage(data)` within the web view. This forces React Native to execute the `onMessage` prop on the `WKWebView` component. `onMessage` will be called with an event `e`, where `e.nativeEvent.data` will be the data you passed into `postMessage`.
1. To send data from React Native to the web view, call `UIManager.dispatchViewManagerCommand` to dispatch the `UIManager.RCTWKWebView.Commands.postMessage` command. Look at [[ https://fburl.com/u1wusf2f | this part of the existing `<WebView/>` ]] component for more details. After you make the call, React Native will dispatch a `'message'` event to the `document` object within the webview. You can listen to the event by doing `document.addEventListener('message', callback)`. Let the event dispatched be `e`. Then, `e.data` is the data you sent over from React Native.

[[ P58627181 | This Playground.js ]] illustrates the usage.

Reviewed By: shergin

Differential Revision: D6304850

fbshipit-source-id: 29075ef753296e9fb5a9cddeb1ad0f4ff7e28650
2018-08-22 17:17:12 +01:00
Ramanpreet NaraandLorenzo Sciandra f7f9d01390 Implement onLoading(Start|Finish|Error) and injectedJavaScript props
Summary:
@public

This diff includes four very straightforward changes:
1. Whenever the WebView starts loading, the `onLoadingStart` hook should be executed. The event passed into this hook should be decorated with the `navigationType`.
1. Whenever the WebView errors out while loading, the `onLoadingError` hook should be executed.
1. Whenever the WebView finishes loading (without any errors), the `onLoadingFinish` hook should be executed.
1. The serialized JavaScript passed into the `injectedJavaScript` prop should be executed when the WebView finishes loading. After execution finishes, the `onLoadingFinish` prop should be called with the serialized completion value of this JavaScript.

Reviewed By: shergin

Differential Revision: D6293532

fbshipit-source-id: 21407c766f73413046823ae605afc21e85cf9db6
2018-08-22 17:17:12 +01:00
Ramanpreet NaraandLorenzo Sciandra 9b3a6ec84b Implement WKWebView to replace WebView
Summary:
@public

`UIWebView` has been deprecated and replaced by `WKWebView`. This diff introduces a new component `WKWebView` that simply renders a `WKWebView` on iOS.

This is the first in the stack of many diffs that'll be required to fully replace `UIWebView` with `WKWebView` in the `<WebView/>` React Native component. Eventually, I hope to introduce a prop called `useWebKitImplementation`, which, when true, will force RN to use `WKWebView` instead of `UIWebView` for the `<WebView/>` component.

The only thing that's been implemented so far is the `source` property.

Reviewed By: mmmulani

Differential Revision: D6266100

fbshipit-source-id: 65862e34bd98db7fff0349cf26888afee43a56e4
2018-08-22 17:17:12 +01:00
Eric RozellandLorenzo Sciandra e90d9ca70b Apply --reset-cache argument to bundle command (#20706)
Summary:
The `--reset-cache` argument was not working correctly with the `bundle` command. This ensures the `--reset-cache` arg is passed to metro.

Fixes #20703

Thank you for sending the PR! We appreciate you spending the time to work on these changes.
Help us understand your motivation by explaining why you decided to make this change.

If this PR fixes an issue, type "Fixes #issueNumber" to automatically close the issue when the PR is merged.
Pull Request resolved: https://github.com/facebook/react-native/pull/20706

Differential Revision: D9400548

Pulled By: hramos

fbshipit-source-id: 2c7ed0226cfcdffa8cc77506500c314552baef3f
2018-08-22 16:48:52 +01:00
gengjiawenandLorenzo Sciandra b948dd9516 Fixes #20712 on unix-like OS (#20751)
Summary:
add `packager.sh` for run-android task for unix like system. This only fix on linux and macOS.
pass all current ci.
none
 [GENERAL] [BUGFIX] [CLI] - add `packager.sh` back for run-android task
Pull Request resolved: https://github.com/facebook/react-native/pull/20751

Differential Revision: D9398197

Pulled By: hramos

fbshipit-source-id: 213b066c0c034136c5ad5bbf8d45c6f331b1d185
2018-08-22 16:48:45 +01:00
Eric RozellandLorenzo Sciandra 3afe711595 Do not override metro.config.js settings (#20705)
Summary:
React Native overrides the `metro.config.js` settings for, e.g., `hasteImplModulePath`, which prevents us from adding a `metro.config.js` file to the repo for `react-native-windows` to allow us to resolve Haste modules at the top-level of the repo. This change ensures that if a user has a `metro.config.js` file, those settings are not overwritten by React Native.
Pull Request resolved: https://github.com/facebook/react-native/pull/20705

Differential Revision: D9390146

Pulled By: hramos

fbshipit-source-id: 5ccc137490410ace72d7b0e68f2bafcbb233c59f
2018-08-22 16:48:36 +01:00
Ives van HoorneandLorenzo Sciandra 5288656c47 Bump metro to 0.43.6
Summary: New version of metro to add module.id

Reviewed By: rafeca

Differential Revision: D9360070

fbshipit-source-id: fc0e2d98483404ddbc1ca920c4f42f52573734c6
2018-08-22 16:47:53 +01:00
Mike Grabowski 074845106d [0.57.0-rc.0] Bump version numbers 2018-08-14 13:07:16 +02:00
Héctor RamosandLorenzo Sciandra 4152e70b47 Add missing trailing comma
Summary: Adds missing comma, following up on https://github.com/facebook/react-native/pull/20178. Thanks to LinusU for pointing out the error.

Reviewed By: TheSavior

Differential Revision: D9242887

fbshipit-source-id: 4b547396722d0e37dc5c8eb3439b9a441c3c0ac2
2018-08-13 21:38:58 +01:00
Tim YungandLorenzo Sciandra c66315e367 RN: Fix Touchable Debug View
Summary: Fixes the `Touchable` debug view. The `child.type` is no longer a subclass of `React.Component` and no longer has `displayName`. It should be fine to have a hard dependency on `Text` and `View`, because... what app does not use them?

Reviewed By: TheSavior

Differential Revision: D9232036

fbshipit-source-id: 06f4091bf8e21cada3af50def2fdd41a6ad84f79
2018-08-13 21:38:58 +01:00
Tim YungandLorenzo Sciandra 49150aa3d0 RN: Polyfill String#padEnd and String#padStart
Summary: Adds polyfills for `String.prototype.padEnd` and `String.prototype.padStart`.

Reviewed By: mjesun

Differential Revision: D9233437

fbshipit-source-id: 3430450f28b4cec8f1c74af5f169e9bdef044ae8
2018-08-13 21:38:58 +01:00
Mehdi MulaniandLorenzo Sciandra 7b0774811e Correctly find rootView when RCTTouchHandler is in a RCTSurface
Summary:
@public
I'm surprised this hasn't caused an issue earlier.
RCTTouchHandler is hooked up to RCTSurfaceView which itself contains a rootView. Thus when this calculation happens, a root view is never found.
We can't assign to the root view since it created and destroyed frequently, so it makes the most sense to look for the RCTSurfaceView here and treat it as a root view.

Reviewed By: fkgozali

Differential Revision: D9296840

fbshipit-source-id: ba5320583201f9d5c0176847cc6e6087b6a6459b
2018-08-13 21:38:58 +01:00
Jordan BrownandLorenzo Sciandra 555c6c68f8 Add test to sync RN github flow configs
Summary:
Adds three more tests:

* compare RN github ios and android flowconfigs
* compare xplat/js ios flowconfig with RN github ios flowconfig
* compare xplat/js android flowconfig with RN github android flowconfig

Reviewed By: TheSavior

Differential Revision: D9191176

fbshipit-source-id: 34f3644ffc5a26d3bdfd94b6c05a138407aaedeb
2018-08-13 21:38:58 +01:00
Jordan BrownandLorenzo Sciandra e05ceb824c Add flow suppressions to xplat android
Summary:
.android.js files may be checked (when the next version of flow is released) by using `flow start --flowconfig-name .flowconfig.android` and `flow status --flowconfig-name .flowconfig.android`

This diff adds suppressions to the errors that are in .android.js files, which flow does not check right now.

When site is `react_native_fb` or `react_native_android_fb`, error will be suppressed when checking with .flowconfig.android
When site is `react_native_fb` or `react_native_ios_fb`, error will be suppressed when checking with .flowconfig.

You can use `react_native_fb` when it should be suppressed for both.

The controller you requested could not be found.

Reviewed By: TheSavior

Differential Revision: D9122178

fbshipit-source-id: 0ec9d3cae3d887f58645e6585b2a3f6c3889b13e
2018-08-13 21:38:58 +01:00
Linus UnnebäckandLorenzo Sciandra 9b18b5b1cf Switch babel preset to metro-react-native-babel-preset (#20653)
Summary:
Fixes #20567
Pull Request resolved: https://github.com/facebook/react-native/pull/20653

Differential Revision: D9296819

Pulled By: hramos

fbshipit-source-id: 88953afb9778e3c8cde5576b068888fd882c2220
2018-08-13 21:38:58 +01:00
Krzysztof MagieraandLorenzo Sciandra 75505993f0 Fix native animated style and transform node to call __makeNative once all the children are converted to native nodes (#20658)
Summary:
This PR fixes an issue I have found while playing with native animated driver nodes.

I discovered the bug when using animated views that have both animated props and styles. See this snack to see an example: https://snack.expo.io/B17SFXy8Q

In that example we set `opacity` and `style` props which both contain animated props. This is not an usual way to do that, as normally you would place `opacity` inside the `styles` in which case the bug won't surface. But this is only done for demo purposes and in practice the problem will occur if you have a custom native view that exposes props that are not styles and can be animated.

In the above example you get this error:

> Invariant Violation: Attempt to get native tag from node not marked as "native"

When `opacity` is moved into `styles` container the problem no longer occurs.

The problem turned out to be related to the initialization code responsible for creating native animated nodes. In all subclasses of `AnimatedWithChildren` (like `AimatedAddition`) we only call `super.__makeNative` after we call `__makeNative` method on the child nodes. This order was reversed in `AnimatedStyle` and `AnimatedTransform`. As a result when `super.__makeNative` is called in `AnimatedStyle`, we try to call `__getNativeTag` on children nodes not yet marked as native which results in the error described above ("Attempt to get native tag...").

We should instead follow the order of calling `super.__makeNative` that is used in the remaining subclasses of `AnimatedWithChildren`. Such that all the children nodes are first converted to native prior to calling superclass method. This is what this PR is changing.
Pull Request resolved: https://github.com/facebook/react-native/pull/20658

Differential Revision: D9297191

Pulled By: hramos

fbshipit-source-id: f5e394fb259ff514c7c1433edcb5fc89203f55e2
2018-08-13 21:38:58 +01:00
Ramanpreet NaraandLorenzo Sciandra 692493bff8 Ensure WebViews render about:blank correctly
Summary:
@public

This diff fixes two bugs:
1. When you load a `<WebView/>` with an HTML source string, HTML source doesn't render in the `<WebView/>`. Instead, we get this warning: https://pxl.cl/grz3. Here's what the above page should look like when correctly rendered: https://pxl.cl/grzt

2. Furthermore, you render a blank `<WebView/>` (i.e: with no source prop), it should display a blank page. Instead, we get this warning: https://pxl.cl/grz3

**Bugfix:**
One solution I found was to ensure that `about:blank` is always whitelisted. That way, we don't ever abort navigations to blank pages, which occur when we do:

```ObjectiveC
/** Line 134 in RCTWebView.m */
[_webView loadHTMLString:@"" baseURL:nil];
```

and

```ObjectiveC
/** Line 115 in RCTWebView.m */
if (html) {
  NSURL *baseURL = [RCTConvert NSURL:source[@"baseUrl"]];
  if (!baseURL) {
    baseURL = [NSURL URLWithString:@"about:blank"];
  }
  [_webView loadHTMLString:html baseURL:baseURL];
  return;
}
```

Reviewed By: yungsters, mmmulani

Differential Revision: D9259852

fbshipit-source-id: e1b9673fcd8c3d0df77308df8c4a632a2b596bfb
2018-08-13 21:38:57 +01:00
Rafael OlezaandLorenzo Sciandra 03e4af6dc1 Fix passing the --reset-cache CLI argument to Metro
Summary:
@public

While debugging a RN 0.57 blocking issue, we found that the `--reset-cache` cli arg is not being passed to Metro (more info: https://github.com/facebook/react-native/issues/20567#issuecomment-412513942).

This diff fixes this issue

Reviewed By: mjesun

Differential Revision: D9295634

fbshipit-source-id: a53ec7abff2b7e684a1fd88c3b53ff0b54a1c3c4
2018-08-13 21:38:57 +01:00
Janic DuplessisandLorenzo Sciandra 39fc0864d9 Enable metro hmr server in local-cli (#20605)
Summary:
The `hmrEnabled` flag was not passed to the metro runServer config which caused HMR to be broken.
Pull Request resolved: https://github.com/facebook/react-native/pull/20605

Differential Revision: D9272070

Pulled By: hramos

fbshipit-source-id: 3765031d9e7806be11781fba92663ce7c4ff2ffb
2018-08-13 21:38:57 +01:00
Héctor RamosandLorenzo Sciandra 1be38926c0 Disable failing tests (#20622)
Summary:
`test_detox_end_to_end` and `test_objc_end_to_end` are both failing on master. This is polluting internal diffs that do not introduce failures.

As we just now started tracking Circle CI on our internal builds, I want to make sure we only nag internal diffs when the failure can actually be attributed to the diff. The failures in the e2e tests precede the Circle CI integration and are adding unnecessary noise.

Going forward, we will immediately go back to a diff and push the author to fix the broken CI, so this PR is a temporary fix.
Pull Request resolved: https://github.com/facebook/react-native/pull/20622

Differential Revision: D9272360

Pulled By: hramos

fbshipit-source-id: 2f8d22e35d301aa7eb67ed08f6deed21bf971acd
2018-08-13 21:38:57 +01:00
Freddy HarrisandLorenzo Sciandra f885710aa6 Fix bug rows doesn't close on scroll in a SwipeableFlatList (#18001)
Summary:
<!--
Thank you for sending the PR! We appreciate you spending the time to work on these changes.

Help us understand your motivation by explaining why you decided to make this change.

You can learn more about contributing to React Native here: http://facebook.github.io/react-native/docs/contributing.html

Happy contributing!

-->

Fix bug `SwipeableRow`s doesn't close on Scroll in a `SwipeableFlatList`

Use a SwipeableFlatList with multiple rows, open one of them, then scroll.
Open row should close on scroll.

[GENERAL] [BUGFIX] [SwipeableFlatList] - Fix rows doesn't close on scroll

<!--
Help reviewers and the release process by writing your own release notes

**INTERNAL and MINOR tagged notes will not be included in the next version's final release notes.**

  CATEGORY
[----------]        TYPE
[ CLI      ]   [-------------]      LOCATION
[ DOCS     ]   [ BREAKING    ]   [-------------]
[ GENERAL  ]   [ BUGFIX      ]   [-{Component}-]
[ INTERNAL ]   [ ENHANCEMENT ]   [ {File}      ]
[ IOS      ]   [ FEATURE     ]   [ {Directory} ]   |-----------|
[ ANDROID  ]   [ MINOR       ]   [ {Framework} ] - | {Message} |
[----------]   [-------------]   [-------------]   |-----------|

[CATEGORY] [TYPE] [LOCATION] - MESSAGE

 EXAMPLES:

 [IOS] [BREAKING] [FlatList] - Change a thing that breaks other things
 [ANDROID] [BUGFIX] [TextInput] - Did a thing to TextInput
 [CLI] [FEATURE] [local-cli/info/info.js] - CLI easier to do things with
 [DOCS] [BUGFIX] [GettingStarted.md] - Accidentally a thing/word
 [GENERAL] [ENHANCEMENT] [Yoga] - Added new yoga thing/position
 [INTERNAL] [FEATURE] [./scripts] - Added thing to script that nobody will see
-->
Pull Request resolved: https://github.com/facebook/react-native/pull/18001

Reviewed By: TheSavior

Differential Revision: D9192387

Pulled By: tomasreimers

fbshipit-source-id: f43e9614f9def5f3112327163c2b15fb45d84fb2
2018-08-13 21:38:57 +01:00
Ives van HoorneandLorenzo Sciandra 8caaf5fab9 Bump metro to 0.43.5
Summary: Makes it possible to use Metro in node environments

Reviewed By: mjesun

Differential Revision: D9267780

fbshipit-source-id: 2a534a32681f3a19659989cd24e77d4465ed2caa
2018-08-13 21:38:57 +01:00
Alex DvornikovandLorenzo Sciandra 8017386169 Add REGISTER_JS_SEGMENT perf markers
Reviewed By: cwdick

Differential Revision: D9244289

fbshipit-source-id: 9004a0405f9622cbd0bbb837b99df32454f35bb8
2018-08-13 21:38:57 +01:00
Linus UnnebäckandLorenzo Sciandra e88c7a91b2 Upgrade Babel to 7.0.0-beta.56 (#216)
Summary:
**Summary**

This pull request bumps Babel to 7.0.0-beta.56 to incorporate the latest bugfixes from Babel.

**Test plan**

One way to test is to add a simple TypeScript file with a type as the default export:

```typescript
export const test = 1
export default interface A {}
```

and then import that file from any other file:

```js
import { test } from './typescript-test'
```

Before this would throw an error, but with the latest Babel this is now fixed.
Pull Request resolved: https://github.com/facebook/metro/pull/216

Reviewed By: mjesun

Differential Revision: D9216331

Pulled By: rafeca

fbshipit-source-id: a48e87c3c6b2902be410395b1b4afab63cb88fec
2018-08-13 21:38:57 +01:00
Héctor RamosandLorenzo Sciandra 245a84c141 Check Flow and run basic packager tests using open source RN config
Summary:
Most of the changes associated with this commit will not be visible on GitHub, as they concern files in the internal Facebook monorepo. The bulk of this change is the addition of a new test that runs on the internal test infrastructure. The actual script used by the test has various references to the internal test infra, but a copy is produced below with some changes that should allow it to run on open source should anyone be interested in testing this outside of Facebook.

The test has the main goal of catching common sources of FB-to-GitHub breakages, such as the OSS Flow config falling out of date (we use a different flow config than what is synced out in .flowconfig, and hence internally we rename this file to .github.flowconfig). It also checks that the packager can run on a brand new project, among other things.

```

set -e

THIS_DIR=$(pwd)

REACT_NATIVE_TEMP_DIR=$(mktemp -d /tmp/react-native-XXXXXXXX)
REACT_NATIVE_APP_TEMP_DIR=$(mktemp -d /tmp/react-native-XXXXXXXX)

OFFLINE_MIRROR=$(yarn config get yarn-offline-mirror)

function describe {
  printf "\\n\\n>>>>> %s\\n\\n\\n" "$1"
}

function cleanup {
  set +e
  rm -rf "$REACT_NATIVE_TEMP_DIR"
  rm -rf "$REACT_NATIVE_APP_TEMP_DIR"
  rm "$OFFLINE_MIRROR/react-native-v1000.0.0.tgz"
  set -e
}

trap cleanup EXIT

describe "Creating temporary react-native-github clone"
cp -R "react-native" "$REACT_NATIVE_TEMP_DIR"
pushd "$REACT_NATIVE_TEMP_DIR/react-native" >/dev/null

echo yarn-offline-mirror="$OFFLINE_MIRROR" > .npmrc

describe "Installing react-native node_modules from offline cache"
yarn install --mutex network --offline --frozen-lockfile --ignore-engines --ignore-scripts 2>&1

describe "Running a Flow check"
mv .github.flowconfig .flowconfig
./node_modules/.bin/flow check

describe "Running a basic packager test"
touch .watchmanconfig
node local-cli/cli.js bundle --platform android --dev true --entry-file ReactAndroid/src/androidTest/js/TestBundle.js --bundle-output ReactAndroid/src/androidTest/assets/AndroidTestBundle.js

describe "Creating package for e2e test"
yarn pack
REACT_NATIVE_PACKAGE="$(pwd)/react-native-v1000.0.0.tgz"
REACT_VERSION=$(node -p -e "require('./package.json').peerDependencies['react']")
REACT_NATIVE_HASH=$(shasum "$REACT_NATIVE_PACKAGE" | awk '{print $1;}')
REACT_NATIVE_DEPS=$(node -p -e "const deps=require('./package.json').dependencies; '    ' + Object.keys(deps).map(dep => dep + ' \"' + deps[dep] +'\"').join('\n    ')")

popd >/dev/null

describe "Installing temporary RN app"

mkdir "$REACT_NATIVE_APP_TEMP_DIR/PackagerTest"
pushd "$REACT_NATIVE_APP_TEMP_DIR/PackagerTest" >/dev/null

cp "$REACT_NATIVE_PACKAGE" ./
cp "$REACT_NATIVE_PACKAGE" "$OFFLINE_MIRROR"
cp "$REACT_NATIVE_TEMP_DIR/react-native/.npmrc" ./
cp "$REACT_NATIVE_TEMP_DIR/react-native/yarn.lock" ./

cat <<LOCKFILE >> yarn.lock
react-native@1000.0.0:
  version "1000.0.0"
  resolved react-native-v1000.0.0.tgz#$REACT_NATIVE_HASH
  dependencies:
$REACT_NATIVE_DEPS
LOCKFILE

cat > package.json <<- EndOfFile
{
  "name": "packager-test",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node node_modules/react-native/local-cli/cli.js start"
  },
  "dependencies": {
    "react": "$REACT_VERSION",
    "react-native": "1000.0.0"
  }
}
EndOfFile

yarn install --mutex network --offline --frozen-lockfile --ignore-engines --ignore-scripts 2>&1
sed -e s/"HelloWorld"/PackagerTest/g "react-native/local-cli/templates/HelloWorld/app.json" > app.json
cp "react-native/local-cli/templates/HelloWorld/_buckconfig" .buckconfig
cp "react-native/local-cli/templates/HelloWorld/_flowconfig" .flowconfig
cp "react-native/local-cli/templates/HelloWorld/_watchmanconfig" .watchmanconfig
cp "react-native/local-cli/templates/HelloWorld/App.js" App.js
cp "react-native/local-cli/templates/HelloWorld/index.js" index.js

describe "Running a Flow check on a new RN app"
flow check

describe "Verifying packager can produce JS bundle for a new RN app on both platforms"
node ./node_modules/react-native/local-cli/cli.js bundle --platform ios --dev true --entry-file index.js --bundle-output ios-bundle.js
test -e ios-bundle.js
rm ios-bundle.js
node ./node_modules/react-native/local-cli/cli.js bundle --platform android --dev true --entry-file index.js --bundle-output android-bundle.js
test -e android-bundle.js
rm android-bundle.js

popd >/dev/null
```

Reviewed By: arcanis

Differential Revision: D9129463

fbshipit-source-id: a91eeaa150ae6623ee67bd758bc8a98bb31e57b8
2018-08-13 21:38:57 +01:00
DexterandLorenzo Sciandra d99bb768fd Fix memory usage display in Perf Monitor (#19664)
Summary:
According to: https://github.com/apple/darwin-xnu/blob/master/osfmk/kern/bsd_kern.c#L420
The result is the same as Xcode app memory uesd.

Before Fix:

<img width="250" alt="before" src="https://user-images.githubusercontent.com/22233256/41394508-ce810362-6fdc-11e8-8d40-73703ec93bc3.png">
<img width="266" alt="before1" src="https://user-images.githubusercontent.com/22233256/41394511-d00a9a0e-6fdc-11e8-9f18-2198e8de2410.png">

After Fix:
<img width="270" alt="after" src="https://user-images.githubusercontent.com/22233256/41394517-d5a56ff2-6fdc-11e8-8d19-41e046c4b511.png">
<img width="267" alt="after1" src="https://user-images.githubusercontent.com/22233256/41394520-d7a3c600-6fdc-11e8-98c4-e3024a4532ec.png">

<!--
  Does this PR require a documentation change?
  Create a PR at https://github.com/facebook/react-native-website and add a link to it here.
-->

[IOS] [BUGFIX] [Monitor] - fix memory perf monitor. Make sure the memory footprint is the same as Jetsam.

<!--
  **INTERNAL and MINOR tagged notes will not be included in the next version's final release notes.**

    CATEGORY
  [----------]      TYPE
  [ CLI      ] [-------------]    LOCATION
  [ DOCS     ] [ BREAKING    ] [-------------]
  [ GENERAL  ] [ BUGFIX      ] [ {Component} ]
  [ INTERNAL ] [ ENHANCEMENT ] [ {Filename}  ]
  [ IOS      ] [ FEATURE     ] [ {Directory} ]   |-----------|
  [ ANDROID  ] [ MINOR       ] [ {Framework} ] - | {Message} |
  [----------] [-------------] [-------------]   |-----------|

 EXAMPLES:

 [IOS] [BREAKING] [FlatList] - Change a thing that breaks other things
 [ANDROID] [BUGFIX] [TextInput] - Did a thing to TextInput
 [CLI] [FEATURE] [local-cli/info/info.js] - CLI easier to do things with
 [DOCS] [BUGFIX] [GettingStarted.md] - Accidentally a thing/word
 [GENERAL] [ENHANCEMENT] [Yoga] - Added new yoga thing/position
 [INTERNAL] [FEATURE] [./scripts] - Added thing to script that nobody will see
-->
Pull Request resolved: https://github.com/facebook/react-native/pull/19664

Differential Revision: D9246307

Pulled By: hramos

fbshipit-source-id: f85efc54cdcb0c19677594d465752c666d5af18b
2018-08-13 21:38:57 +01:00
Kevin GozaliandLorenzo Sciandra f5b126f1c9 iOS: prevent nativemodule access from JS if bridge is no longer valid
Summary: This helps prevent race condition where JS calls to NativeModules got queued and executed while the bridge is invalidating itself, causing assertion failures in test setup (for example). It won't prevent it 100% of the time, due to threading (and adding lock is expensive for each nativemodule call).

Reviewed By: yungsters

Differential Revision: D9231636

fbshipit-source-id: 298eaf52ffa4b84108184124e75b206b9ca7a41d
2018-08-13 21:38:57 +01:00
Linus UnnebäckandLorenzo Sciandra e4f66944a7 Properly escape JavaScript code on Android (#20366)
Summary:
These changes will fix executing javascript with any special characters, by making use of the `evaluateJavascript` function on Android 4.4+, and by properly escaping the URI on Android <4.4.

Fixes #19611Fixes #20365Fixes #9749Closes #19655Closes #12321

This PR supersedes #19655 by patching the same problem in all the places, and fixing it for Android <4.4 as well.
Pull Request resolved: https://github.com/facebook/react-native/pull/20366

Differential Revision: D9242968

Pulled By: hramos

fbshipit-source-id: f2e1abc786ba333dbd8aaa8922e716fd99ec26e0
2018-08-13 21:38:57 +01:00
Joshua AlvaradoandLorenzo Sciandra bcae5b7d8f Add flow strict typing to isEmpty
Summary: Add flow strict typing to the isEmpty lib

Reviewed By: wcheng86

Differential Revision: D9200520

fbshipit-source-id: ac5717216199166e7485abcdfcba03ab2bbe90d2
2018-08-13 21:38:57 +01:00
Wayne ChengandLorenzo Sciandra 43ded753b1 Adding flow strict local to remaining possible files in xplat/JS
Summary:
ag -L --ignore __snapshots__ 'flow strict|noflow|generated|The controller you requested could not be found.' | ag '\.js$' | xargs ag -l 'flow' | sort > ~/temp
  cat ~/temp | xargs ag -L 'flow strict' | xargs sed -i '' 's/flow$/flow strict-local/'
  until flow check; do flow check --json | jq -r '.errors[].message[0].path' | sort | uniq | xargs hg revert; done

allow_many_files
The controller you requested could not be found.
The controller you requested could not be found.

Reviewed By: TheSavior

Differential Revision: D9004573

fbshipit-source-id: 936bd5741706b781be06bf08b6ad805a69407dfd
2018-08-13 21:38:57 +01:00
Justin ChapmanandLorenzo Sciandra cc6978f396 Allow for undefined userConfig (#18660)
Summary:
Fixes #18249

This PR fixes an error that occurs when running `react-native link` in projects laid out as described on the React Native website section on integrating with existing apps (https://facebook.github.io/react-native/docs/integration-with-existing-apps.html) where an `ios/` subdirectory exists but an `android/` subdirectory does not exist

<img width="1050" alt="screenshot 2018-04-02 14 57 27" src="https://user-images.githubusercontent.com/2475286/38210733-3f4bd9ea-3686-11e8-9bd3-d299812a015c.png">

None

[CLI] [BUGFIX] [local-cli/core/android/index.js] - Allow for undefined userConfig
Pull Request resolved: https://github.com/facebook/react-native/pull/18660

Differential Revision: D9235171

Pulled By: hramos

fbshipit-source-id: 230dd54f8911046f7e01633f99c4f02070fa0172
2018-08-13 21:38:57 +01:00
Eli WhiteandLorenzo Sciandra a535cc9c06 Move View native require call to new file
Summary: Moving out the requireNativeComponent call into a new file. We want this long term for all of our view managers to support codegen of the native side and so we can move the viewConfigs into JS.

Reviewed By: yungsters

Differential Revision: D9231619

fbshipit-source-id: 7c89587cc6a76e92b309c4941577291e56af8c7c
2018-08-13 21:38:57 +01:00
Johannes BaldurssonandLorenzo Sciandra 7334025627 Exposed scrollEnabled on TextInput (#19330)
Summary:
On iOS, it is not possible to select a range of text using a `Text` component (see #13938). Because of how the `Text` component is implemented on iOS, this will not work without a complete re-write. On Android however, this is not an issue.

As the `TextInput` component has evolved, it can more or less be used as a drop-in replacement on iOS by setting `multiline={true}` and `editable={false}`. Except for one detail: the text input field has scrolling activated and it's not possible to turn off. (See #1391 and #15962).

This pull request addresses that issue, simply by exposing the `scrollEnabled` property:

```
<TextInput
    multiline
    editable={false}
    scrollEnabled={false}
  />
```

1. Create a multiline `TextInput` component, with the attributes presented above.
2. Run on iOS
3. The `TextInput` field should not be able to scroll

facebook/react-native-website#367

[IOS] [FEATURE] [TextInput] - Made it possible to turn off scrolling on a multiline TextInput component
Pull Request resolved: https://github.com/facebook/react-native/pull/19330

Differential Revision: D9235061

Pulled By: hramos

fbshipit-source-id: 99d278004fc236b47dde7e61d74c71e8a3b9d170
2018-08-13 21:38:57 +01:00
Steven CableandLorenzo Sciandra 7ad4d23409 Check return code from malloc (#20173)
Summary:
Calls abort() in cases where malloc returns NULL.

Checking the return value from malloc is good practice and is
required to pass a [Veracode security scan](https://www.veracode.com/). This will let
developers who are required to submit their software to Veracode
use React Native.
Pull Request resolved: https://github.com/facebook/react-native/pull/20173

Differential Revision: D9235096

Pulled By: hramos

fbshipit-source-id: 9fdc97f9e84f8d4d91ae59242093907f7a81d286
2018-08-13 21:38:57 +01:00
rainywanandLorenzo Sciandra 36440ff4b5 remove code relating to Nesting of <View> within <Text>, which result… (#20558)
Summary:
…s a crash in Text Example of RNTester.

Thank you for sending the PR! We appreciate you spending the time to work on these changes.
Help us understand your motivation by explaining why you decided to make this change.

If this PR fixes an issue, type "Fixes #issueNumber" to automatically close the issue when the PR is merged.
Pull Request resolved: https://github.com/facebook/react-native/pull/20558

Differential Revision: D9235009

Pulled By: hramos

fbshipit-source-id: 23ed28f7c8b84f509d35ac0fe7aa72c183a9ab11
2018-08-13 21:38:57 +01:00
Eli WhiteandLorenzo Sciandra 657b1d2a7a Move Switch native require call to new file
Summary: Moving out the requireNativeComponent call into a new file. We want this long term for all of our view managers to support codegen of the native side and so we can move the viewConfigs into JS.

Reviewed By: yungsters

Differential Revision: D9191214

fbshipit-source-id: d0bddbb50bb1cf6b5a727d72faf834b007ad9440
2018-08-13 21:38:57 +01:00
gengjiawenandLorenzo Sciandra e405249ee3 fix gradle wrapper issue (#19976)
Summary:
Just change gradle.properties version number to change gradle version is not the right way. Because sometimes the gradlew and gradlew.bat or even the jar need to be updated too.
I also add the wrapper task to `build.gradle`, so next time, we just need to change the version number and execute `gradlew wrapper`.
pass all current ci.
none
 [GENERAL] [BUGFIX] [Android] - fix gradle wrapper issue
Pull Request resolved: https://github.com/facebook/react-native/pull/19976

Differential Revision: D9229655

Pulled By: hramos

fbshipit-source-id: 63d1ddea6174f87778612a4e6711baac5787b0f8
2018-08-13 21:38:57 +01:00
Yury ZholobovandLorenzo Sciandra e2ab0b762d add Image border*Radius tests
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/20264

Differential Revision: D9228814

Pulled By: TheSavior

fbshipit-source-id: cad4c15e8070c7ab2023c20045b82f7ab3f994cf
2018-08-13 21:38:57 +01:00
Ram NandLorenzo Sciandra 9db3c51d11 Explicitly make UIManagerModule use OnBatchComplete on Android
Summary:
Currently, we scan all native modules to see if they implement the OnBatchCompleteListerner. If they do, we add those modules to a list, and when C++ calls OnBactchComplete is called, we execute the callback on each of the modules.
The only native module implementing this callback today is the UIManagerModule. With Fabric, UIManager will also not be a native module anymore. This diff removes all the work done for creating the list and assumes that UIManagerModule is the only place that is interested in OnBatchComplete call - and calls it directly.

Reviewed By: achen1

Differential Revision: D9186651

fbshipit-source-id: 473586b37c2465ccd041985dcdd56132026f34f1
2018-08-13 21:38:57 +01:00
DulmandakhandLorenzo Sciandra 095b8f054a Bump imagepipeline-okhttp3 to 1.10.0 (#20580)
Summary:
This is a small missing piece from https://github.com/facebook/react-native/commit/b6f2aad9c0119d11e52978ff3fa9c6f269f04a14 and will complete fresco version bump.
Pull Request resolved: https://github.com/facebook/react-native/pull/20580

Differential Revision: D9228658

Pulled By: hramos

fbshipit-source-id: 9cf1509a590cedfe4c3358006cfb62533058e946
2018-08-13 21:38:57 +01:00
Jordan BrownandLorenzo Sciandra 7fbfaa6f1f add RN github .flowconfig.android and platform specific fixme sites
Summary:
Adds a .github.flowconfig.android.

Also, adds the optional _ios and _android to the sites.

Reviewed By: TheSavior

Differential Revision: D9189935

fbshipit-source-id: 5274701b9425525337d5c4684ce4ffee841fef52
2018-08-13 21:38:57 +01:00
Jordan BrownandLorenzo Sciandra 2c0d7b461e Replace '@flow strict(-local)' with '@flow' in .android.js files
Summary:
Flow doesn't check .android.js files yet anyway.

I'm going to be adding suppressions in a followup diff. It would be nice to not have >1k suppressions saying that we can't do certain things in `flow strict` when we don't even typecheck with regular `flow` just yet

I ran these commands to produce this diff:
`find . -name '*.android.js' -exec sed -i 's/flow strict-local/flow/g' {} +`
`find . -name '*.android.js' -exec sed -i 's/flow strict/flow/g' {} +`

Followed https://unix.stackexchange.com/questions/112023/how-can-i-replace-a-string-in-a-files to do it.

The controller you requested could not be found.

Reviewed By: TheSavior

Differential Revision: D9143783

fbshipit-source-id: e9af4fe695ebdba4db4083de1697cc248d48eb0d
2018-08-13 21:38:57 +01:00
Miguel Jimenez EsunandLorenzo Sciandra 2ecb2edcef Fix "http" monkeypatch
Summary:
Some time ago I had to add a monkeypatch to the `http` library to enforce IPv6, due to the lack of support in Node for that. In version 2.2.0 of `node-fecth`, this has been fixed, and `family: 6` can be enforced via `agent`, which is what this diff does.

I also simplified `Promise` handling at the `test-console-call` level by removing an un-needed `.then()` nesting.

Reviewed By: rafeca

Differential Revision: D9200515

fbshipit-source-id: fe06acddd8e3539f590f88eef3468b02c4242afc
2018-08-13 21:38:57 +01:00
Ziqi ChenandLorenzo Sciandra 860d2d2012 Added 5 examples of new Accessibility API to RN Tester on Android
Summary:
I added three examples to the RN Tester in order to test the new accessibility props I've added to the accessibility API.

These examples test the following properties on views and touchables:
* AccessibilityRole
* AccessibilityStates
* AccessibilityHint

Reviewed By: PeteTheHeat

Differential Revision: D9167874

fbshipit-source-id: 4971b9ae43ad4f35c6be7e8548cc31393c3f0a33
2018-08-13 21:38:57 +01:00
Ziqi ChenandLorenzo Sciandra 39644d0abb changed documentation for accessibilityHint
Summary:
Changed documentation for accessibility Hint so that its no longer only available on iOS

Also added full description of documentation for accessibility Role as it was missing earlier

Reviewed By: PeteTheHeat

Differential Revision: D9072572

fbshipit-source-id: c8d20f30df588717d9ec37721c2aa3c86a0664c6
2018-08-13 21:38:57 +01:00
Ziqi ChenandLorenzo Sciandra 86e6a048ef added accessibilityHints implementation on Android
Summary:
Implemented a version of accessibility Hints on android by adding hint text to the end of contentDescription. There is already an existing prop on js and iOS implementation.

Changes involve:
* adding a prop on native android code for accessibilityHints
* setting the accessibilityDelegate after the props are all loaded.
* Instead of directly updating the accessibility delegate, the prop setters now update state by setting the values of the variables. Once all props are set, the accessibility delegate is set based on the props
   * BaseViewManager keeps track of whether or not accessibility props have been set
   * AccessibilityDelegateUtil keeps track of what the props have been set to. (Renamed AccessibilityRoleUtil to AccessibilityDelegateUtil)

Currently, this is the easiest way of emulating the way accessibility hints work on iOS, and I think having an android counter part is better than having nothing.

It's different from iOS in that it will announce the hint before the role, and also cannot be turned off.

Ex:

if I set the accessibility like this:
```
      <View
        style={styles.container}
        accessible={true}
        accessibilityLabel="accessibility label"
        accessibilityRole="button"
        accessibilityStates={['selected']}
        accessibilityHint="accessibility Hint">
        <Text> Tester </Text>
      </View>
```

Talk back will read:
`accessibility label, accessibility Hint, button, selected`

In the future for next steps, I plan on investigating the process of making a second announcement after the first

Reviewed By: achen1

Differential Revision: D9037226

fbshipit-source-id: 8d484e1114eb69aa5f5314b3755b351b8ea80b09
2018-08-13 21:38:56 +01:00
gengjiawenandLorenzo Sciandra 9b7d6d6b87 switch to yarn in appveyor (#20566)
Summary:
switch to yarn to keep consistent. Windows android  build pass: https://ci.appveyor.com/project/gengjiawen/react-native/build/job/xyof6052yg2uhnmw.
pass all current ci.
none
 [GENERAL] [INTERNAL] [CI] - switch to yarn.
Pull Request resolved: https://github.com/facebook/react-native/pull/20566

Differential Revision: D9213415

Pulled By: hramos

fbshipit-source-id: 35183c143f831e29aa0d0c0b90baacb6a7cd7837
2018-08-13 21:38:56 +01:00
Kevin GozaliandLorenzo Sciandra cb02754ba9 added small UI indicator for fabric-based surfaces
Summary: To make debugging/testing easier, optionally display fabric label on the top-right of the surface if it's rendered on fabric mode.

Reviewed By: mdvacca

Differential Revision: D9206473

fbshipit-source-id: ef6f0396ff749f2a0415688b1cf4fe1a4b83124d
2018-08-13 21:38:56 +01:00
Joshua WangandLorenzo Sciandra c7d17766b4 Update template to Xcode 9.4 and fix project settings warnings (#19626)
Summary:
Motivation: Fix Xcode Project Settings Warnings
![screenshot 2018-06-08 10 58 23](https://user-images.githubusercontent.com/5353594/41173274-1a4fbb3e-6b0b-11e8-973b-8290794a4f8b.png)

Should still build and pass all tests since project settings changes should be safe changes.

No documentation change is required

[IOS][MINOR][XcodeProjs] Upgraded Project settings to be compatible with Xcode 9.4
Pull Request resolved: https://github.com/facebook/react-native/pull/19626

Differential Revision: D9211230

Pulled By: hramos

fbshipit-source-id: ef8692871bffbdb5dd0214f65220fd171c203c6c
2018-08-13 21:38:56 +01:00
Mayank PatkeandLorenzo Sciandra 770d08b989 v0.78 in fbsource
Summary: The controller you requested could not be found.

Reviewed By: pakoito

Differential Revision: D9174188

fbshipit-source-id: 4ec9ef5b6f802964a83b6bc0bd29db7f47b37c21
2018-08-13 21:38:56 +01:00
Janic DuplessisandLorenzo Sciandra 8965e0ca18 Un-deprecate TextInput.State.focusTextInput and TextInput.State.blurTextInput (#20326)
Summary:
In https://github.com/facebook/react-native/pull/18936 we decided to deprecate `focusTextInput` and `blurTextInput` but since then I found a valid use case for it that is pretty much impossible to implement otherwise.

React Navigation uses it to blur / re-focus the input during the swipe back gesture. Blur can be done with Keyboard.dismiss but without this api we cannot re-focus the text field that was focused if the swipe back gesture is cancelled. See https://github.com/react-navigation/react-navigation/blob/master/src/navigators/createKeyboardAwareNavigator.js#L21-L34

I think it is best to just bring back this api.
Pull Request resolved: https://github.com/facebook/react-native/pull/20326

Differential Revision: D9182810

Pulled By: hramos

fbshipit-source-id: 3740421ffafb8f814522d15788f3466324177c16
2018-08-13 21:38:56 +01:00
Héctor RamosandLorenzo Sciandra 8954897948 Consolidate e2e steps and run Detox tests before e2e (#20550)
Summary:
Run Detox before the flaky e2e iOS tests in order to get better signal.
Pull Request resolved: https://github.com/facebook/react-native/pull/20550

Differential Revision: D9183655

Pulled By: hramos

fbshipit-source-id: e499daad86249961cd6d0b8fc22c846392622056
2018-08-13 21:38:56 +01:00
TvrqvoiseandLorenzo Sciandra e9b5753eb4 Add support for linking scoped packages (#18766) (#19828)
Summary:
Currently, when the cli tries to determine the package name, it accidentally trims out the entire package name.  This makes it appear to the rest of the program as if `react-native link The controller you requested could not be found./my-package` was just `react-native link`.  This adds a little regex to prevent that from happening, so that scopes can be passed as parts of packages.

Fixes #18766
Pull Request resolved: https://github.com/facebook/react-native/pull/19828

Differential Revision: D8704742

Pulled By: hramos

fbshipit-source-id: d8183f9b55e8656b8a0acae842e1361a1f428102
2018-08-13 21:38:56 +01:00
Tom AttertonandLorenzo Sciandra e5ec57d807 Ignore DevDependencies when generating template. (#20542)
Summary:
Regarding [Add devDependenices support for templates](https://github.com/facebook/react-native/commit/c4ab03a18e75e6ed55444b5d86f3ceee435b9a78).

Once a project is created using the custom template command with devDependencies inside, the devDependenices.json file is also copied to the new projects directory.

By adding this to the ignore paths we stop the devDependenices being copied into the new projects directory.
Pull Request resolved: https://github.com/facebook/react-native/pull/20542

Differential Revision: D9182795

Pulled By: hramos

fbshipit-source-id: 543c8ca67612a981c22fc83c8d54a25ddc0ca5fc
2018-08-13 21:38:56 +01:00
Lorenzo Sciandra be136a000f Revert "Remove babel preset (its already dependency anyway) and babelrc to use Metro defaults"
This reverts commit 7e61f433ef.
2018-08-13 21:38:21 +01:00
Mike Grabowski 7e61f433ef Remove babel preset (its already dependency anyway) and babelrc to use Metro defaults 2018-08-08 20:29:47 +02:00
484 changed files with 23692 additions and 11009 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
[android]
target = android-26
target = android-27
[download]
max_number_of_retries = 3
+112 -131
View File
@@ -28,11 +28,11 @@ aliases:
- &restore-cache-android-packages
keys:
- v1-android-sdkmanager-packages-api-26-alpha-{{ checksum "scripts/.tests.env" }}
- v1-android-sdkmanager-packages-api-27-alpha-{{ checksum "scripts/.tests.env" }}
- &save-cache-android-packages
paths:
- /opt/android/sdk
key: v1-android-sdkmanager-packages-api-26-alpha-{{ checksum "scripts/.tests.env" }}
key: v1-android-sdkmanager-packages-api-27-alpha-{{ checksum "scripts/.tests.env" }}
- &restore-cache-gradle
keys:
@@ -49,11 +49,11 @@ aliases:
- &restore-cache-ndk
keys:
- v3-android-ndk-r17b-{{ checksum "scripts/android-setup.sh" }}
- v3-android-ndk-r17c-{{ checksum "scripts/android-setup.sh" }}
- &save-cache-ndk
paths:
- /opt/ndk
key: v3-android-ndk-r17b-{{ checksum "scripts/android-setup.sh" }}
key: v3-android-ndk-r17c-{{ checksum "scripts/android-setup.sh" }}
- &restore-cache-downloads-buck
keys:
@@ -128,10 +128,6 @@ aliases:
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update && sudo apt-get install yarn
- &install-node-dependencies
|
npm install --no-package-lock --no-spin --no-progress
- &install-buck
name: Install BUCK
command: |
@@ -147,13 +143,6 @@ aliases:
mkdir -p ~/react-native/tooling/junit
cp -R ~/okbuck/tooling/junit/* ~/react-native/tooling/junit/.
- &install-node
name: Install Node
command: |
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
- &create-ndk-directory
name: Create Android NDK Directory
command: |
@@ -194,17 +183,11 @@ aliases:
# eslint sometimes runs into trouble generating the reports
- &run-lint-checks
name: Lint code
command: |
if [ $((0 % CIRCLE_NODE_TOTAL)) -eq "$CIRCLE_NODE_INDEX" ]; then
scripts/circleci/exec_swallow_error.sh yarn lint --format junit -o ~/react-native/reports/junit/eslint/results.xml
fi
command: scripts/circleci/exec_swallow_error.sh yarn lint --format junit -o ~/react-native/reports/junit/eslint/results.xml
- &run-flow-checks
name: Check for errors in code using Flow
command: |
if [ $((0 % CIRCLE_NODE_TOTAL)) -eq "$CIRCLE_NODE_INDEX" ]; then
yarn flow check
fi
command: yarn flow check
- &run-sanity-checks
name: Sanity checks
@@ -282,58 +265,54 @@ aliases:
mkdir -p ~/react-native/reports/junit/
mkdir -p ~/react-native/reports/outputs/
- &brew-install-watchman
name: Install Watchman
command: |
brew install watchman
touch .watchmanconfig
- &boot-simulator-iphone
name: Boot iPhone Simulator
command: |
if [ $((0 % CIRCLE_NODE_TOTAL)) -eq "$CIRCLE_NODE_INDEX" ]; then
xcrun simctl boot "iPhone 5s" || true
fi
command: xcrun simctl boot "iPhone 5s" || true
- &boot-simulator-appletv
name: Boot Apple TV Simulator
command: |
if [ $((1 % CIRCLE_NODE_TOTAL)) -eq "$CIRCLE_NODE_INDEX" ]; then
xcrun simctl boot "Apple TV" || true
fi
command: xcrun simctl boot "Apple TV" || true
- &run-objc-ios-tests
name: iOS Test Suite
command: |
if [ $((0 % CIRCLE_NODE_TOTAL)) -eq "$CIRCLE_NODE_INDEX" ]; then
./scripts/objc-test-ios.sh test
fi
command: ./scripts/objc-test-ios.sh test
- &run-objc-tvos-tests
name: tvOS Test Suite
command: ./scripts/objc-test-tvos.sh test
- &display-broken-tests-warning
name: Running broken tests (Ignore any failures past this point)
command: |
if [ $((1 % CIRCLE_NODE_TOTAL)) -eq "$CIRCLE_NODE_INDEX" ]; then
./scripts/objc-test-tvos.sh test
fi
echo 'The following steps are known to be failing on master.'
echo 'They will no-op for most users.'
echo 'PRs that bring these back to green are appreciated.'
- &run-podspec-tests
name: Test CocoaPods
command: |
if [ $((2 % CIRCLE_NODE_TOTAL)) -eq "$CIRCLE_NODE_INDEX" ]; then
./scripts/process-podspecs.sh
fi
name: Test CocoaPods (Disabled)
command: ./scripts/circleci/exec_author_check.sh ./scripts/process-podspecs.sh
- &run-e2e-tests
name: End-to-End Test Suite
command: node ./scripts/run-ci-e2e-tests.js --android --ios --tvos --js --retries 3;
name: End-to-End Test Suite (Disabled)
command: ./scripts/circleci/exec_author_check.sh node ./scripts/run-ci-e2e-tests.js --android --ios --tvos --js --retries 3;
- &run-objc-ios-e2e-tests
name: iOS End-to-End Test Suite
command: |
node ./scripts/run-ci-e2e-tests.js --ios --retries 3;
name: iOS End-to-End Test Suite (Disabled)
command: ./scripts/circleci/exec_author_check.sh node ./scripts/run-ci-e2e-tests.js --ios --retries 3;
- &run-objc-tvos-e2e-tests
name: tvOS End-to-End Test Suite
command: |
node ./scripts/run-ci-e2e-tests.js --tvos --js --retries 3;
name: tvOS End-to-End Test Suite (Disabled)
command: ./scripts/circleci/exec_author_check.sh node ./scripts/run-ci-e2e-tests.js --tvos --js --retries 3;
- &run-android-e2e-tests
name: Android End-to-End Test Suite
command: node ./scripts/run-ci-e2e-tests.js --android --retries 3;
name: Android End-to-End Test Suite (Disabled)
command: ./scripts/circleci/exec_author_check.sh node ./scripts/run-ci-e2e-tests.js --android --retries 3;
- &run-js-e2e-tests
name: JavaScript End-to-End Test Suite
@@ -354,14 +333,14 @@ js_defaults: &js_defaults
android_defaults: &android_defaults
<<: *defaults
docker:
- image: circleci/android:api-26-node8-alpha
- image: circleci/android:api-27-node8-alpha
resource_class: "large"
environment:
- TERM: "dumb"
- ADB_INSTALL_TIMEOUT: 10
- _JAVA_OPTIONS: "-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap"
- GRADLE_OPTS: '-Dorg.gradle.daemon=false -Dorg.gradle.jvmargs="-XX:+HeapDumpOnOutOfMemoryError"'
- ANDROID_NDK: '/opt/ndk/android-ndk-r17b'
- ANDROID_NDK: '/opt/ndk/android-ndk-r17c'
- BUILD_THREADS: 2
macos_defaults: &macos_defaults
@@ -417,68 +396,73 @@ jobs:
- store_test_results:
path: ~/react-native/reports/junit
# Run JavaScript tests on Node 10
test_node10:
<<: *defaults
docker:
- image: circleci/node:10
environment:
- PATH: "/opt/yarn/yarn-v1.5.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
steps:
- checkout
- run: *setup-artifacts
- run: *yarn
- run: *run-js-tests
- store_test_results:
path: ~/react-native/reports/junit
# Runs unit tests on iOS and Apple TV devices
test_objc:
<<: *macos_defaults
parallelism: 3
steps:
- attach_workspace:
at: ~/react-native
- run: *boot-simulator-iphone
- run: *boot-simulator-appletv
- run: brew install watchman
- run: *brew-install-watchman
- run: *run-objc-ios-tests
- run: *run-objc-tvos-tests
# TODO: Fix these failing tests.
- run: *display-broken-tests-warning
- run: *run-podspec-tests
- run: *run-objc-ios-e2e-tests
- run: *run-objc-tvos-e2e-tests
- store_test_results:
path: ~/react-native/reports/junit
# Runs end to end tests
test_end_to_end:
# Runs end to end tests (Detox)
test_detox_end_to_end:
<<: *macos_defaults
steps:
- attach_workspace:
at: ~/react-native
- run:
name: Boot iOS Simulator
command: xcrun simctl boot "iPhone 5s" || true
- run: xcrun simctl boot "iPhone 5s" || true
- run:
name: Configure Environment Variables
command: |
echo 'export PATH=/usr/local/opt/node@8/bin:$PATH' >> $BASH_ENV
source $BASH_ENV
- run:
name: Install Node 8
command: |
brew install node@8
brew link node@8
node -v
- run: *run-objc-ios-e2e-tests
- run:
name: Install Apple Simulator Utilities
command: |
brew tap wix/brew
brew install applesimutils
node -v
- run: *yarn
- run:
name: Build iOS App for Simulator
name: Build iOS app for simulator
command: yarn run build-ios-e2e
- run:
name: Run Detox Tests
command: yarn run test-ios-e2e
- store_test_results:
path: ~/react-native/reports/junit
# Set up an Android environment for downstream jobs
test_android:
<<: *android_defaults
@@ -542,8 +526,9 @@ jobs:
- run: *build-android-rntester-app
# Run Android end-to-end tests
# Disabled
# - run: *run-android-e2e-tests
# TODO: Fix these failing tests.
- run: *display-broken-tests-warning
- run: *run-android-e2e-tests
# Collect Results
- run: *collect-android-test-results
@@ -554,53 +539,54 @@ jobs:
# Issues will be posted to the PR itself via GitHub bots.
# This workflow should only fail if the bots fail to run.
analyze_pr:
<<: *js_defaults
<<: *defaults
docker:
- image: circleci/node:10
environment:
- PATH: "/opt/yarn/yarn-v1.5.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
steps:
- attach_workspace:
at: ~/react-native
- checkout
- run: *setup-artifacts
- restore-cache: *restore-cache-analysis
- restore-cache: *restore-yarn-cache
- run: *yarn
- run:
name: Install Additional Dependencies
command: |
if [ -n "$CIRCLE_PR_NUMBER" ]; then
yarn add github@0.2.4
cd bots
yarn install --non-interactive --cache-folder ~/.cache/yarn
else
echo "Skipping dependency installation."
fi
- save-cache: *save-cache-analysis
- run:
name: Analyze Pull Request
command: |
# DANGER_GITHUB_API_TOKEN=React-Linter public_repo access token
if [ -n "$CIRCLE_PR_NUMBER" ]; then
cd bots && DANGER_GITHUB_API_TOKEN="80aa64c50f38a267e9ba""575d41d528f9c234edb8" yarn danger
else
echo "Skipping pull request analysis."
fi
when: always
- run:
name: Analyze Code
command: |
# GITHUB_TOKEN=eslint-bot public_repo access token
if [ -n "$CIRCLE_PR_NUMBER" ]; then
GITHUB_TOKEN="af6ef0d15709bc91d""06a6217a5a826a226fb57b7" CI_USER=$CIRCLE_PROJECT_USERNAME CI_REPO=$CIRCLE_PROJECT_REPONAME PULL_REQUEST_NUMBER=$CIRCLE_PR_NUMBER scripts/circleci/analyze_code.sh
echo -e "\\x1B[36mInstalling additional dependencies\\x1B[0m"; yarn add @octokit/rest@15.10.0
echo -e "\\x1B[36mAnalyzing code\\x1B[0m"; GITHUB_TOKEN="af6ef0d15709bc91d""06a6217a5a826a226fb57b7" ./scripts/circleci/analyze_code.sh
else
echo "Skipping code analysis."
fi
when: always
- restore-cache: *restore-cache-analysis
- run:
name: Analyze Pull Request
command: |
# DANGER_GITHUB_API_TOKEN=React-Linter public_repo access token
if [ -n "$CIRCLE_PR_NUMBER" ]; then
cd bots
yarn install --non-interactive --cache-folder ~/.cache/yarn
DANGER_GITHUB_API_TOKEN="80aa64c50f38a267e9ba""575d41d528f9c234edb8" yarn danger
else
echo "Skipping pull request analysis."
fi
when: always
- save-cache: *save-cache-analysis
# Publishes new version onto npm
# Only works on stable branches when a properly tagged commit is pushed
publish_npm_package:
<<: *android_defaults
steps:
- attach_workspace:
at: ~/react-native
- checkout
- restore-cache: *restore-yarn-cache
- run: *yarn
# Configure Android SDK and related dependencies
- run: *configure-android-path
@@ -627,13 +613,19 @@ jobs:
- run: *yarn
- run:
name: Publish React Native Package
name: Authenticate with npm
command: echo "//registry.npmjs.org/:_authToken=${CIRCLE_NPM_TOKEN}" > ~/.npmrc
- run:
name: Authenticate git user
command: |
echo "//registry.npmjs.org/:_authToken=${CIRCLE_NPM_TOKEN}" > ~/.npmrc
git config --global user.email "reactjs-bot@users.noreply.github.com"
git config --global user.email "react-native-bot@users.noreply.github.com"
git config --global user.name "npm Deployment Script"
echo "machine github.com login reactjs-bot password $GITHUB_TOKEN" > ~/.netrc
node ./scripts/publish-npm.js
echo "machine github.com login react-native-bot password $GITHUB_TOKEN" > ~/.netrc
- run:
name: Publish React Native Package
command: node ./scripts/publish-npm.js
# Workflows enables us to run multiple jobs in parallel
workflows:
@@ -657,6 +649,10 @@ workflows:
requires:
- checkout_code
# Test JavaScript and Node 10 compatibility
- test_node10:
filters: *filter-ignore-gh-pages
# Test Android
- test_android:
filters: *filter-ignore-gh-pages
@@ -669,8 +665,7 @@ workflows:
requires:
- checkout_code
# End-to-end tests
- test_end_to_end:
- test_detox_end_to_end:
filters: *filter-ignore-gh-pages
requires:
- checkout_code
@@ -678,27 +673,13 @@ workflows:
# Only runs on vX.X.X tags if all tests are green
- publish_npm_package:
filters:
# ignore any commit on any branch by default
branches:
only:
- /.*-stable/
ignore: /.*/
# only act on version tags
tags:
only: /v[0-9]+(\.[0-9]+)*(\-rc(\.[0-9]+)?)?/
requires:
- test_javascript
- test_objc
- test_android
- test_end_to_end
- analyze
# Only runs on PRs
analyze:
jobs:
# Checkout repo and run Yarn
- checkout_code:
filters: *filter-ignore-master-stable
# Run code checks
- analyze_pr:
filters: *filter-ignore-master-stable
requires:
- checkout_code
+5 -5
View File
@@ -23,7 +23,7 @@
.*/Libraries/polyfills/.*
; Ignore metro
.*/node_modules/metro/.*
; .*/node_modules/metro/.*
; These should not be required directly
; require from fbjs/lib instead: require('fbjs/lib/invariant')
@@ -56,7 +56,6 @@ module.system.haste.name_reducers='^\(.*\)\.android$' -> '\1'
module.system.haste.name_reducers='^\(.*\)\.native$' -> '\1'
module.system.haste.paths.blacklist=.*/__tests__/.*
module.system.haste.paths.blacklist=.*/__mocks__/.*
module.system.haste.paths.blacklist=<PROJECT_ROOT>/Libraries/Animated/src/polyfills/.*
module.system.haste.paths.whitelist=<PROJECT_ROOT>/Libraries/.*
module.system.haste.paths.whitelist=<PROJECT_ROOT>/RNTester/.*
module.system.haste.paths.whitelist=<PROJECT_ROOT>/IntegrationTests/.*
@@ -71,13 +70,14 @@ suppress_type=$FlowFixMe
suppress_type=$FlowFixMeProps
suppress_type=$FlowFixMeState
suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(<VERSION>\\)? *\\(site=[a-z,_]*[react_native_oss|react_native_fb][a-z,_]*\\)?)\\)
suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(<VERSION>\\)? *\\(site=[a-z,_]*[react_native_oss|react_native_fb][a-z,_]*\\)?)\\)?:? #[0-9]+
suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(<VERSION>\\)? *\\(site=[a-z,_]*[react_native\\(_ios\\)?_oss|react_native\\(_ios\\)?_fb][a-z,_]*\\)?)\\)
suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(<VERSION>\\)? *\\(site=[a-z,_]*[react_native\\(_ios\\)?_oss|react_native\\(_ios\\)?_fb][a-z,_]*\\)?)\\)?:? #[0-9]+
suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy
suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError
[lints]
all=warn
unnecessary-optional-chain=off
# There is an ESLint rule for this
unclear-type=off
@@ -100,4 +100,4 @@ untyped-import
untyped-type-import
[version]
^0.77.0
^0.78.0
+103
View File
@@ -0,0 +1,103 @@
[ignore]
; We fork some components by platform
.*/*[.]ios.js
; Ignore templates for 'react-native init'
.*/local-cli/templates/.*
; Ignore the Dangerfile
<PROJECT_ROOT>/bots/dangerfile.js
; Ignore "BUCK" generated dirs
<PROJECT_ROOT>/\.buckd/
; Ignore unexpected extra "@providesModule"
.*/node_modules/.*/node_modules/fbjs/.*
; Ignore duplicate module providers
; For RN Apps installed via npm, "Libraries" folder is inside
; "node_modules/react-native" but in the source repo it is in the root
.*/Libraries/react-native/React.js
; Ignore polyfills
.*/Libraries/polyfills/.*
; Ignore metro
.*/node_modules/metro/.*
; These should not be required directly
; require from fbjs/lib instead: require('fbjs/lib/invariant')
.*/node_modules/invariant/.*
.*/node_modules/warning/.*
[include]
[libs]
Libraries/react-native/react-native-interface.js
flow/
flow-github/
[options]
emoji=true
esproposal.optional_chaining=enable
esproposal.nullish_coalescing=enable
module.system=haste
module.system.haste.use_name_reducers=true
# keep the following in sync with server/haste/hasteImpl.js
# get basename
module.system.haste.name_reducers='^.*/\([a-zA-Z0-9$_.-]+\.js\(\.flow\)?\)$' -> '\1'
# strip .js or .js.flow suffix
module.system.haste.name_reducers='^\(.*\)\.js\(\.flow\)?$' -> '\1'
# strip .android suffix
module.system.haste.name_reducers='^\(.*\)\.android$' -> '\1'
module.system.haste.name_reducers='^\(.*\)\.ios$' -> '\1'
module.system.haste.name_reducers='^\(.*\)\.native$' -> '\1'
module.system.haste.paths.blacklist=.*/__tests__/.*
module.system.haste.paths.blacklist=.*/__mocks__/.*
module.system.haste.paths.whitelist=<PROJECT_ROOT>/Libraries/.*
module.system.haste.paths.whitelist=<PROJECT_ROOT>/RNTester/.*
module.system.haste.paths.whitelist=<PROJECT_ROOT>/IntegrationTests/.*
module.system.haste.paths.blacklist=<PROJECT_ROOT>/Libraries/Animated/src/polyfills/.*
munge_underscores=true
module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub'
suppress_type=$FlowIssue
suppress_type=$FlowFixMe
suppress_type=$FlowFixMeProps
suppress_type=$FlowFixMeState
suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(<VERSION>\\)? *\\(site=[a-z,_]*[react_native\\(_android\\)?_oss|react_native\\(_android\\)?_fb][a-z,_]*\\)?)\\)
suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(<VERSION>\\)? *\\(site=[a-z,_]*[react_native\\(_android\\)?_oss|react_native\\(_android\\)?_fb][a-z,_]*\\)?)\\)?:? #[0-9]+
suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy
suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError
[lints]
all=warn
unnecessary-optional-chain=off
# There is an ESLint rule for this
unclear-type=off
sketchy-null=off
sketchy-null-number=warn
sketchy-null-mixed=warn
# This is noisy for now. We *do* still want to warn on importing types
# from untyped files, which is covered by untyped-type-import
untyped-import=off
[strict]
deprecated-type
nonstrict-import
sketchy-null
unclear-type
unsafe-getters-setters
untyped-import
untyped-type-import
[version]
^0.78.0
-4
View File
@@ -51,10 +51,6 @@ node_modules
*.log
.nvm
/bots/node_modules/
# TODO: Check in yarn.lock in open source. Right now we need to keep it out
# from the GitHub repo as importing it might conflict with internal workspaces
yarn.lock
package-lock.json
# OS X
+3 -3
View File
@@ -18,10 +18,10 @@ LABEL maintainer="Héctor Ramos <hector@fb.com>"
# set default build arguments
ARG SDK_VERSION=sdk-tools-linux-3859397.zip
ARG ANDROID_BUILD_VERSION=26
ARG ANDROID_TOOLS_VERSION=26.0.3
ARG ANDROID_BUILD_VERSION=27
ARG ANDROID_TOOLS_VERSION=27.0.3
ARG BUCK_VERSION=v2018.07.23.01
ARG NDK_VERSION=17b
ARG NDK_VERSION=17c
ARG NODE_VERSION=8.10.0
ARG WATCHMAN_VERSION=4.9.0
+1 -1
View File
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
* @flow strict-local
*/
'use strict';
+1 -1
View File
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
* @flow strict-local
*/
'use strict';
+1 -1
View File
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
* @flow strict-local
*/
'use strict';
@@ -9,8 +9,6 @@
'use strict';
require('regenerator-runtime/runtime');
const React = require('react');
const ReactNative = require('react-native');
+1 -1
View File
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
* @flow strict-local
*/
'use strict';
+1 -1
View File
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
* @flow strict-local
*/
'use strict';
+1 -1
View File
@@ -10,7 +10,7 @@
"license": "MIT",
"main": "Animated.js",
"dependencies": {
"fbjs": "0.8.17"
"fbjs": "^1.0.0"
},
"scripts": {
"build": "gulp"
+1 -1
View File
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
* @flow strict-local
* @format
*/
+1 -1
View File
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
* @flow strict-local
*/
'use strict';
@@ -134,7 +134,9 @@ describe('Animated tests', () => {
expect(callback).toBeCalled();
});
it('send toValue when an underdamped spring stops', () => {
// This test is flaky and we are asking open source to fix it
// https://github.com/facebook/react-native/issues/21517
it.skip('send toValue when an underdamped spring stops', () => {
const anim = new Animated.Value(0);
const listener = jest.fn();
anim.addListener(listener);
@@ -95,13 +95,13 @@ class AnimatedStyle extends AnimatedWithChildren {
}
__makeNative() {
super.__makeNative();
for (const key in this._style) {
const value = this._style[key];
if (value instanceof AnimatedNode) {
value.__makeNative();
}
}
super.__makeNative();
}
__getNativeConfig(): Object {
@@ -22,7 +22,6 @@ class AnimatedTransform extends AnimatedWithChildren {
}
__makeNative() {
super.__makeNative();
this._transforms.forEach(transform => {
for (const key in transform) {
const value = transform[key];
@@ -31,6 +30,7 @@ class AnimatedTransform extends AnimatedWithChildren {
}
}
});
super.__makeNative();
}
__getValue(): $ReadOnlyArray<Object> {
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
* @flow strict-local
* @format
*/
'use strict';
+1 -1
View File
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
* @flow strict-local
*/
'use strict';
+5 -5
View File
@@ -60,7 +60,7 @@ class MessageQueue {
this._failureCallbacks = {};
this._callID = 0;
this._lastFlush = 0;
this._eventLoopStartTime = new Date().getTime();
this._eventLoopStartTime = Date.now();
this._immediatesCallback = null;
if (__DEV__) {
@@ -141,7 +141,7 @@ class MessageQueue {
}
getEventLoopRunningTime() {
return new Date().getTime() - this._eventLoopStartTime;
return Date.now() - this._eventLoopStartTime;
}
registerCallableModule(name: string, module: Object) {
@@ -243,7 +243,7 @@ class MessageQueue {
}
this._queue[PARAMS].push(params);
const now = new Date().getTime();
const now = Date.now();
if (
global.nativeFlushQueueImmediate &&
now - this._lastFlush >= MIN_TIME_BETWEEN_FLUSHES_MS
@@ -323,7 +323,7 @@ class MessageQueue {
}
__callFunction(module: string, method: string, args: any[]): any {
this._lastFlush = new Date().getTime();
this._lastFlush = Date.now();
this._eventLoopStartTime = this._lastFlush;
if (__DEV__ || this.__spy) {
Systrace.beginEvent(`${module}.${method}(${stringifySafe(args)})`);
@@ -352,7 +352,7 @@ class MessageQueue {
}
__invokeCallback(cbID: number, args: any[]) {
this._lastFlush = new Date().getTime();
this._lastFlush = Date.now();
this._eventLoopStartTime = this._lastFlush;
// The rightmost bit of cbID indicates fail (0) or success (1), the other bits are the callID shifted left.
+1 -1
View File
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
* @flow strict-local
* @format
*/
+1 -1
View File
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
* @flow strict-local
*/
'use strict';
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow strict
* @flow
*/
'use strict';
@@ -35,6 +35,8 @@ const _subscriptions = new Map();
*/
const AccessibilityInfo = {
/* $FlowFixMe(>=0.78.0 site=react_native_android_fb) This issue was found
* when making Flow check .android.js files. */
fetch: function(): Promise {
return new Promise((resolve, reject) => {
RCTAccessibilityInfo.isTouchExplorationEnabled(function(resp) {
@@ -103,6 +103,8 @@ const ActivityIndicator = (
styles.container,
style,
)}>
{/* $FlowFixMe(>=0.78.0 site=react_native_android_fb) This issue was
* found when making Flow check .android.js files. */}
<RCTActivityIndicator {...nativeProps} />
</View>
);
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow strict
* @flow
* @format
*/
'use strict';
@@ -131,7 +131,11 @@ let CheckBox = createReactClass({
let props = {...this.props};
props.onStartShouldSetResponder = () => true;
props.onResponderTerminationRequest = () => false;
/* $FlowFixMe(>=0.78.0 site=react_native_android_fb) This issue was found
* when making Flow check .android.js files. */
props.enabled = !this.props.disabled;
/* $FlowFixMe(>=0.78.0 site=react_native_android_fb) This issue was found
* when making Flow check .android.js files. */
props.on = this.props.value;
props.style = [styles.rctCheckBox, this.props.style];
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
* @flow strict-local
* @format
*/
'use strict';
+1 -1
View File
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
* @flow strict-local
*/
'use strict';
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow strict
* @flow
*/
'use strict';
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow strict
* @flow
*/
'use strict';
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow strict
* @flow
*/
'use strict';
@@ -49,6 +49,8 @@ class PickerAndroid extends React.Component<
},
*,
> {
/* $FlowFixMe(>=0.78.0 site=react_native_android_fb) This issue was found
* when making Flow check .android.js files. */
static propTypes = {
...ViewPropTypes,
style: pickerStyleType,
@@ -60,6 +62,8 @@ class PickerAndroid extends React.Component<
testID: ReactPropTypes.string,
};
/* $FlowFixMe(>=0.78.0 site=react_native_android_fb) This issue was found
* when making Flow check .android.js files. */
constructor(props, context) {
super(props, context);
const state = this._stateFromProps(props);
@@ -70,6 +74,8 @@ class PickerAndroid extends React.Component<
};
}
/* $FlowFixMe(>=0.78.0 site=react_native_android_fb) This issue was found
* when making Flow check .android.js files. */
UNSAFE_componentWillReceiveProps(nextProps) {
this.setState(this._stateFromProps(nextProps));
}
@@ -86,6 +92,8 @@ class PickerAndroid extends React.Component<
label: child.props.label,
};
if (child.props.color) {
/* $FlowFixMe(>=0.78.0 site=react_native_android_fb) This issue was
* found when making Flow check .android.js files. */
childProps.color = processColor(child.props.color);
}
return childProps;
@@ -106,6 +114,8 @@ class PickerAndroid extends React.Component<
selected: this.state.initialSelectedIndex,
testID: this.props.testID,
style: [styles.pickerAndroid, this.props.style],
/* $FlowFixMe(>=0.78.0 site=react_native_android_fb) This issue was found
* when making Flow check .android.js files. */
accessibilityLabel: this.props.accessibilityLabel,
};
@@ -116,18 +126,26 @@ class PickerAndroid extends React.Component<
if (this.props.onValueChange) {
const position = event.nativeEvent.position;
if (position >= 0) {
/* $FlowFixMe(>=0.78.0 site=react_native_android_fb) This issue was
* found when making Flow check .android.js files. */
const children = React.Children.toArray(this.props.children);
const value = children[position].props.value;
/* $FlowFixMe(>=0.78.0 site=react_native_android_fb) This issue was
* found when making Flow check .android.js files. */
this.props.onValueChange(value, position);
} else {
this.props.onValueChange(null, position);
}
}
/* $FlowFixMe(>=0.78.0 site=react_native_android_fb) This issue was found
* when making Flow check .android.js files. */
this._lastNativePosition = event.nativeEvent.position;
this.forceUpdate();
};
componentDidMount() {
/* $FlowFixMe(>=0.78.0 site=react_native_android_fb) This issue was found
* when making Flow check .android.js files. */
this._lastNativePosition = this.state.initialSelectedIndex;
}
@@ -140,11 +158,15 @@ class PickerAndroid extends React.Component<
// truth, not the native component.
if (
this.refs[REF_PICKER] &&
/* $FlowFixMe(>=0.78.0 site=react_native_android_fb) This issue was found
* when making Flow check .android.js files. */
this.state.selectedIndex !== this._lastNativePosition
) {
this.refs[REF_PICKER].setNativeProps({
selected: this.state.selectedIndex,
});
/* $FlowFixMe(>=0.78.0 site=react_native_android_fb) This issue was found
* when making Flow check .android.js files. */
this._lastNativePosition = this.state.selectedIndex;
}
}
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow strict
* @flow
* @format
*/
@@ -29,7 +29,7 @@ if (Platform.OS === 'android') {
} else {
var RefreshLayoutConsts = {SIZE: {}};
}
type NativeRefreshControlType = Class<NativeComponent<Props>>;
type NativeRefreshControlType = Class<NativeComponent<RefreshControlProps>>;
const NativeRefreshControl: NativeRefreshControlType =
Platform.OS === 'ios'
@@ -77,7 +77,7 @@ type AndroidProps = $ReadOnly<{|
progressViewOffset?: ?number,
|}>;
type Props = $ReadOnly<{|
export type RefreshControlProps = $ReadOnly<{|
...ViewProps,
...IOSProps,
...AndroidProps,
@@ -138,7 +138,7 @@ type Props = $ReadOnly<{|
* __Note:__ `refreshing` is a controlled prop, this is why it needs to be set to true
* in the `onRefresh` function otherwise the refresh indicator will stop immediately.
*/
class RefreshControl extends React.Component<Props> {
class RefreshControl extends React.Component<RefreshControlProps> {
static SIZE = RefreshLayoutConsts.SIZE;
_nativeRef: ?React.ElementRef<NativeRefreshControlType> = null;
@@ -148,7 +148,7 @@ class RefreshControl extends React.Component<Props> {
this._lastNativeRefreshing = this.props.refreshing;
}
componentDidUpdate(prevProps: Props) {
componentDidUpdate(prevProps: RefreshControlProps) {
// RefreshControl is a controlled component so if the native refreshing
// value doesn't match the current js refreshing prop update it to
// the js value.
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
* @flow strict-local
*/
'use strict';
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow strict
* @flow
*/
'use strict';
+35 -20
View File
@@ -125,19 +125,6 @@ type IOSProps = $ReadOnly<{|
* @platform ios
*/
centerContent?: ?boolean,
/**
* A floating-point number that determines how quickly the scroll view
* decelerates after the user lifts their finger. You may also use string
* shortcuts `"normal"` and `"fast"` which match the underlying iOS settings
* for `UIScrollViewDecelerationRateNormal` and
* `UIScrollViewDecelerationRateFast` respectively.
*
* - `'normal'`: 0.998 (the default)
* - `'fast'`: 0.99
*
* @platform ios
*/
decelerationRate?: ?('fast' | 'normal' | number),
/**
* The style of the scroll indicators.
*
@@ -353,6 +340,17 @@ export type Props = $ReadOnly<{|
* ```
*/
contentContainerStyle?: ?ViewStyleProp,
/**
* A floating-point number that determines how quickly the scroll view
* decelerates after the user lifts their finger. You may also use string
* shortcuts `"normal"` and `"fast"` which match the underlying iOS settings
* for `UIScrollViewDecelerationRateNormal` and
* `UIScrollViewDecelerationRateFast` respectively.
*
* - `'normal'`: 0.998 on iOS, 0.985 on Android (the default)
* - `'fast'`: 0.99 on iOS, 0.9 on Android
*/
decelerationRate?: ?('fast' | 'normal' | number),
/**
* When true, the scroll view's children are arranged horizontally in a row
* instead of vertically in a column. The default value is false.
@@ -462,12 +460,20 @@ export type Props = $ReadOnly<{|
* When set, causes the scroll view to stop at multiples of the value of
* `snapToInterval`. This can be used for paginating through children
* that have lengths smaller than the scroll view. Typically used in
* combination with `snapToAlignment` and `decelerationRate="fast"` on ios.
* Overrides less configurable `pagingEnabled` prop.
* combination with `snapToAlignment` and `decelerationRate="fast"`.
*
* Supported for horizontal scrollview on android.
* Overrides less configurable `pagingEnabled` prop.
*/
snapToInterval?: ?number,
/**
* When set, causes the scroll view to stop at the defined offsets.
* This can be used for paginating through variously sized children
* that have lengths smaller than the scroll view. Typically used in
* combination with `decelerationRate="fast"`.
*
* Overrides less configurable `pagingEnabled` and `snapToInterval` props.
*/
snapToOffsets?: ?$ReadOnlyArray<number>,
/**
* Experimental: When true, offscreen child views (whose `overflow` value is
* `hidden`) are removed from their native backing superview when offscreen.
@@ -773,10 +779,6 @@ const ScrollView = createReactClass({
} else {
ScrollViewClass = RCTScrollView;
ScrollContentContainerViewClass = RCTScrollContentView;
warning(
this.props.snapToInterval == null || !this.props.pagingEnabled,
'snapToInterval is currently ignored when pagingEnabled is true.',
);
}
invariant(
@@ -920,6 +922,19 @@ const ScrollView = createReactClass({
? true
: false,
DEPRECATED_sendUpdatedChildFrames,
// pagingEnabled is overridden by snapToInterval / snapToOffsets
pagingEnabled: Platform.select({
// on iOS, pagingEnabled must be set to false to have snapToInterval / snapToOffsets work
ios:
this.props.pagingEnabled &&
this.props.snapToInterval == null &&
this.props.snapToOffsets == null,
// on Android, pagingEnabled must be set to true to have snapToInterval / snapToOffsets work
android:
this.props.pagingEnabled ||
this.props.snapToInterval != null ||
this.props.snapToOffsets != null,
}),
};
const {decelerationRate} = this.props;
@@ -5,15 +5,26 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
*/
'use strict';
function processDecelerationRate(decelerationRate) {
const Platform = require('Platform');
function processDecelerationRate(
decelerationRate: number | 'normal' | 'fast',
): number {
if (decelerationRate === 'normal') {
decelerationRate = 0.998;
return Platform.select({
ios: 0.998,
android: 0.985,
});
} else if (decelerationRate === 'fast') {
decelerationRate = 0.99;
return Platform.select({
ios: 0.99,
android: 0.9,
});
}
return decelerationRate;
}
@@ -5,11 +5,13 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow strict
* @flow
*/
'use strict';
const NativeEventEmitter = require('NativeEventEmitter');
/* $FlowFixMe(>=0.78.0 site=react_native_android_fb) This issue was found when
* making Flow check .android.js files. */
module.exports = new NativeEventEmitter('StatusBarManager');
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
* @flow strict-local
*/
'use strict';
+9 -43
View File
@@ -10,16 +10,15 @@
'use strict';
const SwitchNativeComponent = require('SwitchNativeComponent');
const Platform = require('Platform');
const React = require('React');
const ReactNative = require('ReactNative');
const StyleSheet = require('StyleSheet');
const requireNativeComponent = require('requireNativeComponent');
import type {SwitchChangeEvent} from 'CoreEventTypes';
import type {ColorValue} from 'StyleSheetTypes';
import type {ViewProps} from 'ViewPropTypes';
import type {NativeAndroidProps, NativeIOSProps} from 'SwitchNativeComponent';
export type Props = $ReadOnly<{|
...ViewProps,
@@ -75,41 +74,6 @@ export type Props = $ReadOnly<{|
onValueChange?: ?(value: boolean) => Promise<void> | void,
|}>;
// @see ReactSwitchManager.java
type NativeAndroidProps = $ReadOnly<{|
...ViewProps,
enabled?: ?boolean,
on?: ?boolean,
onChange?: ?(event: SwitchChangeEvent) => mixed,
thumbTintColor?: ?string,
trackTintColor?: ?string,
|}>;
// @see RCTSwitchManager.m
type NativeIOSProps = $ReadOnly<{|
...ViewProps,
disabled?: ?boolean,
onChange?: ?(event: SwitchChangeEvent) => mixed,
onTintColor?: ?string,
thumbTintColor?: ?string,
tintColor?: ?string,
value?: ?boolean,
|}>;
type NativeSwitchType = Class<
ReactNative.NativeComponent<
$ReadOnly<{|
...NativeAndroidProps,
...NativeIOSProps,
|}>,
>,
>;
const NativeSwitch: NativeSwitchType =
Platform.OS === 'android'
? (requireNativeComponent('AndroidSwitch'): any)
: (requireNativeComponent('RCTSwitch'): any);
/**
* A visual toggle between two mutually exclusive states.
*
@@ -119,7 +83,7 @@ const NativeSwitch: NativeSwitchType =
* supplied `value` prop instead of the expected result of any user actions.
*/
class Switch extends React.Component<Props> {
_nativeSwitchRef: ?React.ElementRef<NativeSwitchType>;
_nativeSwitchRef: ?React.ElementRef<typeof SwitchNativeComponent>;
render() {
const {
@@ -145,7 +109,7 @@ class Switch extends React.Component<Props> {
_thumbColor = thumbTintColor;
if (__DEV__) {
console.warn(
'Switch: `thumbTintColor` is deprecated, use `_thumbColor` instead.',
'Switch: `thumbTintColor` is deprecated, use `thumbColor` instead.',
);
}
}
@@ -197,13 +161,13 @@ class Switch extends React.Component<Props> {
}: NativeIOSProps);
return (
<NativeSwitch
<SwitchNativeComponent
{...props}
{...platformProps}
onChange={this._handleChange}
onResponderTerminationRequest={returnsFalse}
onStartShouldSetResponder={returnsTrue}
ref={this._handleNativeSwitchRef}
ref={this._handleSwitchNativeComponentRef}
/>
);
}
@@ -230,7 +194,9 @@ class Switch extends React.Component<Props> {
}
};
_handleNativeSwitchRef = (ref: ?React.ElementRef<NativeSwitchType>) => {
_handleSwitchNativeComponentRef = (
ref: ?React.ElementRef<typeof SwitchNativeComponent>,
) => {
this._nativeSwitchRef = ref;
};
}
@@ -0,0 +1,56 @@
/**
* Copyright (c) 2013-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
* @format
*/
'use strict';
const Platform = require('Platform');
const ReactNative = require('ReactNative');
const requireNativeComponent = require('requireNativeComponent');
import type {SwitchChangeEvent} from 'CoreEventTypes';
import type {ViewProps} from 'ViewPropTypes';
// @see ReactSwitchManager.java
export type NativeAndroidProps = $ReadOnly<{|
...ViewProps,
enabled?: ?boolean,
on?: ?boolean,
onChange?: ?(event: SwitchChangeEvent) => mixed,
thumbTintColor?: ?string,
trackTintColor?: ?string,
|}>;
// @see RCTSwitchManager.m
export type NativeIOSProps = $ReadOnly<{|
...ViewProps,
disabled?: ?boolean,
onChange?: ?(event: SwitchChangeEvent) => mixed,
onTintColor?: ?string,
thumbTintColor?: ?string,
tintColor?: ?string,
value?: ?boolean,
|}>;
type SwitchNativeComponentType = Class<
ReactNative.NativeComponent<
$ReadOnly<{|
...NativeAndroidProps,
...NativeIOSProps,
|}>,
>,
>;
const SwitchNativeComponent: SwitchNativeComponentType =
Platform.OS === 'android'
? (requireNativeComponent('AndroidSwitch'): any)
: (requireNativeComponent('RCTSwitch'): any);
module.exports = SwitchNativeComponent;
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow strict
* @flow
*/
'use strict';
+9 -12
View File
@@ -156,6 +156,7 @@ type IOSProps = $ReadOnly<{|
| 'username'
| 'password'
),
scrollEnabled?: ?boolean,
|}>;
type AndroidProps = $ReadOnly<{|
@@ -326,18 +327,8 @@ const TextInput = createReactClass({
statics: {
State: {
currentlyFocusedField: TextInputState.currentlyFocusedField,
focusTextInput: (textFieldID: ?number) => {
console.warn(
'`focusTextInput` is deprecated, use the `focus` method of the `TextInput` ref instead.',
);
TextInputState.focusTextInput(textFieldID);
},
blurTextInput: (textFieldID: ?number) => {
console.warn(
'`blurTextInput` is deprecated, use `Keyboard.dismiss` or the `blur` method of the `TextInput` ref.',
);
TextInputState.blurTextInput(textFieldID);
},
focusTextInput: TextInputState.focusTextInput,
blurTextInput: TextInputState.blurTextInput,
},
},
propTypes: {
@@ -591,6 +582,12 @@ const TextInput = createReactClass({
* The text color of the placeholder string.
*/
placeholderTextColor: ColorPropType,
/**
* If `false`, scrolling of the text view will be disabled.
* The default value is `true`. Does only work with 'multiline={true}'.
* @platform ios
*/
scrollEnabled: PropTypes.bool,
/**
* If `true`, the text input obscures the text entered so that sensitive text
* like passwords stay secure. The default value is `false`. Does not work with 'multiline={true}'.
@@ -10,7 +10,7 @@
* should be funneled through here
*
* @format
* @flow
* @flow strict-local
*/
'use strict';
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow strict
* @flow
*/
'use strict';
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow strict
* @flow
*/
'use strict';
@@ -16,6 +16,7 @@ const ReactNative = require('ReactNative');
const Touchable = require('Touchable');
const TouchableWithoutFeedback = require('TouchableWithoutFeedback');
const UIManager = require('UIManager');
const View = require('View');
const createReactClass = require('create-react-class');
const ensurePositiveDelayProps = require('ensurePositiveDelayProps');
@@ -238,7 +239,7 @@ const TouchableNativeFeedback = createReactClass({
render: function() {
const child = React.Children.only(this.props.children);
let children = child.props.children;
if (Touchable.TOUCH_TARGET_DEBUG && child.type.displayName === 'View') {
if (Touchable.TOUCH_TARGET_DEBUG && child.type === View) {
if (!Array.isArray(children)) {
children = [children];
}
@@ -15,6 +15,7 @@ const React = require('React');
const PropTypes = require('prop-types');
const TimerMixin = require('react-timer-mixin');
const Touchable = require('Touchable');
const View = require('View');
const createReactClass = require('create-react-class');
const ensurePositiveDelayProps = require('ensurePositiveDelayProps');
@@ -225,28 +226,12 @@ const TouchableWithoutFeedback = ((createReactClass({
// $FlowFixMe(>=0.41.0)
const child = React.Children.only(this.props.children);
let children = child.props.children;
warning(
!child.type || child.type.displayName !== 'Text',
'TouchableWithoutFeedback does not work well with Text children. Wrap children in a View instead. See ' +
((child._owner && child._owner.getName && child._owner.getName()) ||
'<unknown>'),
);
if (
Touchable.TOUCH_TARGET_DEBUG &&
child.type &&
child.type.displayName === 'View'
) {
if (Touchable.TOUCH_TARGET_DEBUG && child.type === View) {
children = React.Children.toArray(children);
children.push(
Touchable.renderDebugView({color: 'red', hitSlop: this.props.hitSlop}),
);
}
const style =
Touchable.TOUCH_TARGET_DEBUG &&
child.type &&
child.type.displayName === 'Text'
? [child.props.style, {color: 'red'}]
: child.props.style;
return (React: any).cloneElement(child, {
accessible: this.props.accessible !== false,
accessibilityLabel: this.props.accessibilityLabel,
@@ -266,7 +251,6 @@ const TouchableWithoutFeedback = ((createReactClass({
onResponderMove: this.touchableHandleResponderMove,
onResponderRelease: this.touchableHandleResponderRelease,
onResponderTerminate: this.touchableHandleResponderTerminate,
style,
children,
});
},
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
* @flow strict-local
* @format
*/
'use strict';
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
* @flow strict-local
*/
const Platform = require('Platform');
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
* @format strict-local
* @flow
*/
@@ -14,19 +14,19 @@ const ImageStylePropTypes = require('ImageStylePropTypes');
const TextStylePropTypes = require('TextStylePropTypes');
const ViewStylePropTypes = require('ViewStylePropTypes');
/* $FlowFixMe(>=0.54.0 site=react_native_oss) This comment suppresses an error
* found when Flow v0.54 was deployed. To see the error delete this comment and
* run Flow. */
const keyMirror = require('fbjs/lib/keyMirror');
const processColor = require('processColor');
const processTransform = require('processTransform');
const sizesDiffer = require('sizesDiffer');
const ReactNativeStyleAttributes = {
...keyMirror(ViewStylePropTypes),
...keyMirror(TextStylePropTypes),
...keyMirror(ImageStylePropTypes),
};
const ReactNativeStyleAttributes = {};
for (const attributeName of Object.keys({
...ViewStylePropTypes,
...TextStylePropTypes,
...ImageStylePropTypes,
})) {
ReactNativeStyleAttributes[attributeName] = true;
}
ReactNativeStyleAttributes.transform = {process: processTransform};
ReactNativeStyleAttributes.shadowOffset = {diff: sizesDiffer};
@@ -4,8 +4,8 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow strict-local
* @format
* @flow strict
*/
'use strict';
+9 -10
View File
@@ -5,18 +5,17 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
* @flow strict-local
*/
'use strict';
const React = require('React');
const TextAncestor = require('TextAncestor');
const ViewNativeComponent = require('ViewNativeComponent');
const invariant = require('fbjs/lib/invariant');
const requireNativeComponent = require('requireNativeComponent');
import type {NativeComponent} from 'ReactNative';
import type {ViewProps} from 'ViewPropTypes';
export type Props = ViewProps;
@@ -28,11 +27,13 @@ export type Props = ViewProps;
*
* @see http://facebook.github.io/react-native/docs/view.html
*/
const RCTView = requireNativeComponent('RCTView');
let ViewToExport = RCTView;
let ViewToExport = ViewNativeComponent;
if (__DEV__) {
const View = (props: Props, forwardedRef: ?React.Ref<'RCTView'>) => {
const View = (
props: Props,
forwardedRef: React.Ref<typeof ViewNativeComponent>,
) => {
return (
<TextAncestor.Consumer>
{hasTextAncestor => {
@@ -40,7 +41,7 @@ if (__DEV__) {
!hasTextAncestor,
'Nesting of <View> within <Text> is not currently supported.',
);
return <RCTView {...props} ref={forwardedRef} />;
return <ViewNativeComponent {...props} ref={forwardedRef} />;
}}
</TextAncestor.Consumer>
);
@@ -49,6 +50,4 @@ if (__DEV__) {
ViewToExport = React.forwardRef(View);
}
module.exports = ((ViewToExport: $FlowFixMe): Class<
NativeComponent<ViewProps>,
>);
module.exports = ((ViewToExport: $FlowFixMe): typeof ViewNativeComponent);
@@ -0,0 +1,23 @@
/**
* Copyright (c) 2015-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
*/
'use strict';
const ReactNative = require('ReactNative');
const requireNativeComponent = require('requireNativeComponent');
import type {ViewProps} from 'ViewPropTypes';
type ViewNativeComponentType = Class<ReactNative.NativeComponent<ViewProps>>;
const NativeViewComponent = requireNativeComponent('RCTView');
module.exports = ((NativeViewComponent: any): ViewNativeComponentType);
+18 -2
View File
@@ -71,10 +71,27 @@ type GestureResponderEventProps = $ReadOnly<{|
onStartShouldSetResponderCapture?: ?Function,
|}>;
type AndroidViewProps = $ReadOnly<{|
nativeBackgroundAndroid?: ?Object,
nativeForegroundAndroid?: ?Object,
/* Deprecated transform prop. Use the transform style prop instead */
rotation?: empty,
/* Deprecated transform prop. Use the transform style prop instead */
scaleX?: empty,
/* Deprecated transform prop. Use the transform style prop instead */
scaleY?: empty,
/* Deprecated transform prop. Use the transform style prop instead */
translateX?: empty,
/* Deprecated transform prop. Use the transform style prop instead */
translateY?: empty,
|}>;
export type ViewProps = $ReadOnly<{|
...DirectEventProps,
...GestureResponderEventProps,
...TouchEventProps,
...AndroidViewProps,
// There's no easy way to create a different type if (Platform.isTV):
// so we must include TVViewProps
@@ -134,7 +151,6 @@ module.exports = {
* an action on the accessibility element when that result is not obvious from the
* accessibility label.
*
* @platform ios
*
* See http://facebook.github.io/react-native/docs/view.html#accessibilityHint
*/
@@ -165,7 +181,7 @@ module.exports = {
accessibilityComponentType: PropTypes.oneOf(AccessibilityComponentTypes),
/**
* Indicates to accessibility services to treat UI component like a
* Indicates to accessibility services to treat UI component like a specific role.
*/
accessibilityRole: PropTypes.oneOf(AccessibilityRoles),
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow strict
* @flow
*/
'use strict';
@@ -82,6 +82,8 @@ class ViewPagerAndroid extends React.Component<{
keyboardDismissMode?: 'none' | 'on-drag',
scrollEnabled?: boolean,
}> {
/* $FlowFixMe(>=0.78.0 site=react_native_android_fb) This issue was found
* when making Flow check .android.js files. */
static propTypes = {
...ViewPropTypes,
/**
@@ -154,14 +156,20 @@ class ViewPagerAndroid extends React.Component<{
}
}
/* $FlowFixMe(>=0.78.0 site=react_native_android_fb) This issue was found
* when making Flow check .android.js files. */
getInnerViewNode = (): ReactComponent => {
return this.refs[VIEWPAGER_REF].getInnerViewNode();
};
/* $FlowFixMe(>=0.78.0 site=react_native_android_fb) This issue was found
* when making Flow check .android.js files. */
_childrenWithOverridenStyle = (): Array => {
// Override styles so that each page will fill the parent. Native component
// will handle positioning of elements, so it's not important to offset
// them correctly.
/* $FlowFixMe(>=0.78.0 site=react_native_android_fb) This issue was found
* when making Flow check .android.js files. */
return React.Children.map(this.props.children, function(child) {
if (!child) {
return null;
@@ -247,6 +255,8 @@ class ViewPagerAndroid extends React.Component<{
<NativeAndroidViewPager
{...this.props}
ref={VIEWPAGER_REF}
/* $FlowFixMe(>=0.78.0 site=react_native_android_fb) This issue was
* found when making Flow check .android.js files. */
style={this.props.style}
onPageScroll={this._onPageScroll}
onPageScrollStateChanged={this._onPageScrollStateChanged}
@@ -0,0 +1,42 @@
/**
* Copyright (c) 2015-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
* @providesModule WKWebView
*/
const React = require('react');
const requireNativeComponent = require('requireNativeComponent');
const RCTWKWebView = requireNativeComponent('RCTWKWebView');
type RCTWKWebViewProps = {
allowsInlineMediaPlayback?: boolean,
mediaPlaybackRequiresUserAction?: boolean,
dataDetectorTypes?: boolean,
};
class WKWebView extends React.Component<RCTWKWebViewProps> {
componentWillReceiveProps(nextProps: RCTWKWebViewProps) {
this.showRedboxOnPropChanges(nextProps, 'allowsInlineMediaPlayback');
this.showRedboxOnPropChanges(nextProps, 'mediaPlaybackRequiresUserAction');
this.showRedboxOnPropChanges(nextProps, 'dataDetectorTypes');
}
showRedboxOnPropChanges(nextProps: RCTWKWebViewProps, propName: string) {
if (this.props[propName] !== nextProps[propName]) {
console.error(`Changes to property ${propName} do nothing after the initial render.`);
}
}
render() {
return <RCTWKWebView {...this.props}/>;
}
}
module.exports = WKWebView;
@@ -109,6 +109,12 @@ class WebView extends React.Component {
PropTypes.number,
]),
/**
* If true, use WKWebView instead of UIWebView.
* @platform ios
*/
useWebKit: PropTypes.bool,
/**
* Used on Android only, JS is enabled by default for WebView on iOS
* @platform android
@@ -144,6 +150,12 @@ class WebView extends React.Component {
*/
scalesPageToFit: PropTypes.bool,
/**
* Sets whether the webview allow access to file system.
* @platform android
*/
allowFileAccess: PropTypes.bool,
/**
* Sets the user-agent for this WebView. The user-agent can also be set in native using
* WebViewConfig. This prop will overwrite that config.
@@ -311,6 +323,7 @@ class WebView extends React.Component {
style={webViewStyles}
source={resolveAssetSource(source)}
scalesPageToFit={this.props.scalesPageToFit}
allowFileAccess={this.props.allowFileAccess}
injectedJavaScript={this.props.injectedJavaScript}
userAgent={this.props.userAgent}
javaScriptEnabled={this.props.javaScriptEnabled}
+101 -14
View File
@@ -32,6 +32,7 @@ const requireNativeComponent = require('requireNativeComponent');
const resolveAssetSource = require('resolveAssetSource');
const RCTWebViewManager = require('NativeModules').WebViewManager;
const RCTWKWebViewManager = require('NativeModules').WKWebViewManager;
const BGWASH = 'rgba(255,255,255,0.8)';
const RCT_WEBVIEW_REF = 'webview';
@@ -66,6 +67,9 @@ const DataDetectorTypes = [
'link',
'address',
'calendarEvent',
'trackingNumber',
'flightNumber',
'lookupSuggestion',
'none',
'all',
];
@@ -162,6 +166,12 @@ class WebView extends React.Component {
PropTypes.number,
]),
/**
* If true, use WKWebView instead of UIWebView.
* @platform ios
*/
useWebKit: PropTypes.bool,
/**
* Function that returns a view to show if there's an error.
*/
@@ -264,6 +274,11 @@ class WebView extends React.Component {
* - `'none'`
* - `'all'`
*
* With the new WebKit implementation, we have three new values:
* - `'trackingNumber'`,
* - `'flightNumber'`,
* - `'lookupSuggestion'`,
*
* @platform ios
*/
dataDetectorTypes: PropTypes.oneOfType([
@@ -309,6 +324,8 @@ class WebView extends React.Component {
* Boolean that controls whether the web content is scaled to fit
* the view and enables the user to change the scale. The default value
* is `true`.
*
* On iOS, when `useWebKit=true`, this prop will not work.
*/
scalesPageToFit: PropTypes.bool,
@@ -388,7 +405,6 @@ class WebView extends React.Component {
static defaultProps = {
originWhitelist: WebViewShared.defaultOriginWhitelist,
scalesPageToFit: true,
};
state = {
@@ -401,11 +417,28 @@ class WebView extends React.Component {
if (this.props.startInLoadingState) {
this.setState({viewState: WebViewState.LOADING});
}
if (
this.props.useWebKit === true &&
this.props.scalesPageToFit !== undefined
) {
console.warn(
'The scalesPageToFit property is not supported when useWebKit = true',
);
}
}
render() {
let otherView = null;
let scalesPageToFit;
if (this.props.useWebKit) {
({scalesPageToFit} = this.props);
} else {
({scalesPageToFit = true} = this.props);
}
if (this.state.viewState === WebViewState.LOADING) {
otherView = (this.props.renderLoading || defaultRenderLoading)();
} else if (this.state.viewState === WebViewState.ERROR) {
@@ -433,11 +466,18 @@ class WebView extends React.Component {
const nativeConfig = this.props.nativeConfig || {};
const viewManager = nativeConfig.viewManager || RCTWebViewManager;
let viewManager = nativeConfig.viewManager;
const compiledWhitelist = (this.props.originWhitelist || []).map(
WebViewShared.originWhitelistToRegex,
);
if (this.props.useWebKit) {
viewManager = viewManager || RCTWKWebViewManager;
} else {
viewManager = viewManager || RCTWebViewManager;
}
const compiledWhitelist = [
'about:blank',
...(this.props.originWhitelist || []),
].map(WebViewShared.originWhitelistToRegex);
const onShouldStartLoadWithRequest = (event: Event) => {
let shouldStart = true;
const {url} = event.nativeEvent;
@@ -473,7 +513,13 @@ class WebView extends React.Component {
const messagingEnabled = typeof this.props.onMessage === 'function';
const NativeWebView = nativeConfig.component || RCTWebView;
let NativeWebView = nativeConfig.component;
if (this.props.useWebKit) {
NativeWebView = NativeWebView || RCTWKWebView;
} else {
NativeWebView = NativeWebView || RCTWebView;
}
const webView = (
<NativeWebView
@@ -495,7 +541,7 @@ class WebView extends React.Component {
messagingEnabled={messagingEnabled}
onMessage={this._onMessage}
onShouldStartLoadWithRequest={onShouldStartLoadWithRequest}
scalesPageToFit={this.props.scalesPageToFit}
scalesPageToFit={scalesPageToFit}
allowsInlineMediaPlayback={this.props.allowsInlineMediaPlayback}
mediaPlaybackRequiresUserAction={
this.props.mediaPlaybackRequiresUserAction
@@ -513,13 +559,21 @@ class WebView extends React.Component {
);
}
_getCommands() {
if (!this.props.useWebKit) {
return UIManager.RCTWebView.Commands;
}
return UIManager.RCTWKWebView.Commands;
}
/**
* Go forward one page in the web view's history.
*/
goForward = () => {
UIManager.dispatchViewManagerCommand(
this.getWebViewHandle(),
UIManager.RCTWebView.Commands.goForward,
this._getCommands().goForward,
null,
);
};
@@ -530,7 +584,7 @@ class WebView extends React.Component {
goBack = () => {
UIManager.dispatchViewManagerCommand(
this.getWebViewHandle(),
UIManager.RCTWebView.Commands.goBack,
this._getCommands().goBack,
null,
);
};
@@ -542,7 +596,7 @@ class WebView extends React.Component {
this.setState({viewState: WebViewState.LOADING});
UIManager.dispatchViewManagerCommand(
this.getWebViewHandle(),
UIManager.RCTWebView.Commands.reload,
this._getCommands().reload,
null,
);
};
@@ -553,7 +607,7 @@ class WebView extends React.Component {
stopLoading = () => {
UIManager.dispatchViewManagerCommand(
this.getWebViewHandle(),
UIManager.RCTWebView.Commands.stopLoading,
this._getCommands().stopLoading,
null,
);
};
@@ -571,7 +625,7 @@ class WebView extends React.Component {
postMessage = data => {
UIManager.dispatchViewManagerCommand(
this.getWebViewHandle(),
UIManager.RCTWebView.Commands.postMessage,
this._getCommands().postMessage,
[String(data)],
);
};
@@ -585,7 +639,7 @@ class WebView extends React.Component {
injectJavaScript = data => {
UIManager.dispatchViewManagerCommand(
this.getWebViewHandle(),
UIManager.RCTWebView.Commands.injectJavaScript,
this._getCommands().injectJavaScript,
[data],
);
};
@@ -640,9 +694,42 @@ class WebView extends React.Component {
const {onMessage} = this.props;
onMessage && onMessage(event);
};
componentDidUpdate(prevProps) {
if (!(prevProps.useWebKit && this.props.useWebKit)) {
return;
}
this._showRedboxOnPropChanges(prevProps, 'allowsInlineMediaPlayback');
this._showRedboxOnPropChanges(prevProps, 'mediaPlaybackRequiresUserAction');
this._showRedboxOnPropChanges(prevProps, 'dataDetectorTypes');
if (this.props.scalesPageToFit !== undefined) {
console.warn(
'The scalesPageToFit property is not supported when useWebKit = true',
);
}
}
_showRedboxOnPropChanges(prevProps, propName: string) {
if (this.props[propName] !== prevProps[propName]) {
console.error(
`Changes to property ${propName} do nothing after the initial render.`,
);
}
}
}
const RCTWebView = requireNativeComponent('RCTWebView');
const RCTWebView = requireNativeComponent(
'RCTWebView',
WebView,
WebView.extraNativeComponentConfig,
);
const RCTWKWebView = requireNativeComponent(
'RCTWKWebView',
WebView,
WebView.extraNativeComponentConfig,
);
const styles = StyleSheet.create({
container: {
+1 -1
View File
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
* @flow strict-local
*/
'use strict';
+4 -4
View File
@@ -1,17 +1,17 @@
/**
* @generated by scripts/bump-oss-version.js
*
* Copyright (c) 2015-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
* @generated by scripts/bump-oss-version.js
* @flow
*/
exports.version = {
major: 0,
minor: 0,
patch: 0,
minor: 57,
patch: 4,
prerelease: null,
};
+1 -1
View File
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
* @flow strict-local
* @format
*/
'use strict';
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
* @flow strict-local
*/
'use strict';
@@ -100,6 +100,7 @@ class SwipeableFlatList<ItemT> extends React.Component<Props<ItemT>, State> {
}}
onScroll={this._onScroll}
renderItem={this._renderItem}
extraData={this.state}
/>
);
}
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
* @flow strict-local
*/
'use strict';
+7 -1
View File
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow strict
* @flow
* @format
*/
@@ -219,8 +219,12 @@ let Image = (
let style;
let sources;
if (source?.uri != null) {
/* $FlowFixMe(>=0.78.0 site=react_native_android_fb) This issue was found
* when making Flow check .android.js files. */
const {width, height} = source;
style = flattenStyle([{width, height}, styles.base, props.style]);
/* $FlowFixMe(>=0.78.0 site=react_native_android_fb) This issue was found
* when making Flow check .android.js files. */
sources = [{uri: source.uri}];
} else {
style = flattenStyle([styles.base, props.style]);
@@ -232,6 +236,8 @@ let Image = (
style,
shouldNotifyLoadEvents: !!(onLoadStart || onLoad || onLoadEnd || onError),
src: sources,
/* $FlowFixMe(>=0.78.0 site=react_native_android_fb) This issue was found
* when making Flow check .android.js files. */
headers: source?.headers,
defaultSrc: defaultSource ? defaultSource.uri : null,
loadingIndicatorSrc: loadingIndicatorSource
+12
View File
@@ -35,6 +35,12 @@ UIImage *RCTBlurredImageWithRadius(UIImage *inputImage, CGFloat radius)
size_t bytes = buffer1.rowBytes * buffer1.height;
buffer1.data = malloc(bytes);
buffer2.data = malloc(bytes);
if (!buffer1.data || !buffer2.data) {
// CWE - 391 : Unchecked error condition
// https://www.cvedetails.com/cwe-details/391/Unchecked-Error-Condition.html
// https://eli.thegreenplace.net/2009/10/30/handling-out-of-memory-conditions-in-c
abort();
}
// A description of how to compute the box kernel width from the Gaussian
// radius (aka standard deviation) appears in the SVG spec:
@@ -45,6 +51,12 @@ UIImage *RCTBlurredImageWithRadius(UIImage *inputImage, CGFloat radius)
//create temp buffer
void *tempBuffer = malloc((size_t)vImageBoxConvolve_ARGB8888(&buffer1, &buffer2, NULL, 0, 0, boxSize, boxSize,
NULL, kvImageEdgeExtend + kvImageGetTempBufferSize));
if (!tempBuffer) {
// CWE - 391 : Unchecked error condition
// https://www.cvedetails.com/cwe-details/391/Unchecked-Error-Condition.html
// https://eli.thegreenplace.net/2009/10/30/handling-out-of-memory-conditions-in-c
abort();
}
//copy image data
CFDataRef dataSource = CGDataProviderCopyData(CGImageGetDataProvider(imageRef));
+1 -1
View File
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
* @flow strict-local
*/
'use strict';
+1 -1
View File
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
* @flow strict-local
*/
'use strict';
+1 -1
View File
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
* @flow strict-local
*/
'use strict';
+1 -5
View File
@@ -21,10 +21,6 @@ const Touchable = require('Touchable');
const UIManager = require('UIManager');
const View = require('View');
/* $FlowFixMe(>=0.54.0 site=react_native_oss) This comment suppresses an error
* found when Flow v0.54 was deployed. To see the error delete this comment and
* run Flow. */
const emptyObject = require('fbjs/lib/emptyObject');
const invariant = require('fbjs/lib/invariant');
export type ReactRenderer = {
@@ -131,7 +127,7 @@ class Inspector extends React.Component<
hierarchy: [],
inspected: {
frame: {left, top, width, height},
style: props ? props.style : emptyObject,
style: props ? props.style : {},
},
});
});
+1 -1
View File
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
* @flow strict-local
*/
'use strict';
+1 -1
View File
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
* @flow strict-local
*/
'use strict';
+1 -1
View File
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
* @flow strict-local
*/
'use strict';
+1 -1
View File
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
* @flow strict-local
*/
'use strict';
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
* @flow strict-local
*/
'use strict';
+1 -1
View File
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
* @flow strict-local
*/
'use strict';
+10 -10
View File
@@ -11,17 +11,17 @@
@interface RCTLinkingManager : RCTEventEmitter
+ (BOOL)application:(UIApplication *)app
openURL:(NSURL *)URL
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options;
+ (BOOL)application:(nonnull UIApplication *)app
openURL:(nonnull NSURL *)URL
options:(nonnull NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options;
+ (BOOL)application:(UIApplication *)application
openURL:(NSURL *)URL
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation;
+ (BOOL)application:(nonnull UIApplication *)application
openURL:(nonnull NSURL *)URL
sourceApplication:(nullable NSString *)sourceApplication
annotation:(nonnull id)annotation;
+ (BOOL)application:(UIApplication *)application
continueUserActivity:(NSUserActivity *)userActivity
restorationHandler:(void (^)(NSArray * __nullable))restorationHandler;
+ (BOOL)application:(nonnull UIApplication *)application
continueUserActivity:(nonnull NSUserActivity *)userActivity
restorationHandler:(nonnull void (^)(NSArray *__nullable))restorationHandler;
@end
+3 -2
View File
@@ -524,8 +524,9 @@ class FlatList<ItemT> extends React.PureComponent<Props<ItemT>, void> {
// comparison.
if (!this._hasWarnedLegacy) {
console.warn(
'FlatList: Using legacyImplementation - some features not supported and performance ' +
'may suffer',
'FlatList: legacyImplementation is deprecated and will be removed in a ' +
'future release - some features not supported and performance may suffer. ' +
'Please migrate to the default implementation.',
);
this._hasWarnedLegacy = true;
}
+19 -4
View File
@@ -18,7 +18,6 @@ const RCTScrollViewManager = require('NativeModules').ScrollViewManager;
const ScrollView = require('ScrollView');
const ScrollResponder = require('ScrollResponder');
const StaticRenderer = require('StaticRenderer');
const TimerMixin = require('react-timer-mixin');
const View = require('View');
const cloneReferencedElement = require('react-clone-referenced-element');
const createReactClass = require('create-react-class');
@@ -216,6 +215,7 @@ type Props = $ReadOnly<{|
const ListView = createReactClass({
displayName: 'ListView',
_rafIds: ([]: Array<AnimationFrameID>),
_childFrames: ([]: Array<Object>),
_sentEndForContentLength: (null: ?number),
_scrollComponent: (null: ?React.ElementRef<typeof ScrollView>),
@@ -223,7 +223,7 @@ const ListView = createReactClass({
_visibleRows: ({}: Object),
scrollProperties: ({}: Object),
mixins: [ScrollResponder.Mixin, TimerMixin],
mixins: [ScrollResponder.Mixin],
statics: {
DataSource: ListViewDataSource,
@@ -347,16 +347,23 @@ const ListView = createReactClass({
contentLength: null,
offset: 0,
};
this._rafIds = [];
this._childFrames = [];
this._visibleRows = {};
this._prevRenderedRowsCount = 0;
this._sentEndForContentLength = null;
},
componentWillUnmount: function() {
this._rafIds.forEach(cancelAnimationFrame);
this._rafIds = [];
},
componentDidMount: function() {
// do this in animation frame until componentDidMount actually runs after
// the component is laid out
this.requestAnimationFrame(() => {
this._requestAnimationFrame(() => {
this._measureAndUpdateScrollProps();
});
},
@@ -384,7 +391,7 @@ const ListView = createReactClass({
},
componentDidUpdate: function() {
this.requestAnimationFrame(() => {
this._requestAnimationFrame(() => {
this._measureAndUpdateScrollProps();
});
},
@@ -535,6 +542,14 @@ const ListView = createReactClass({
* Private methods
*/
_requestAnimationFrame: function(fn: () => void): void {
const rafId = requestAnimationFrame(() => {
this._rafIds = this._rafIds.filter(id => id !== rafId);
fn();
});
this._rafIds.push(rafId);
},
_measureAndUpdateScrollProps: function() {
const scrollComponent = this.getScrollResponder();
if (!scrollComponent || !scrollComponent.getInnerViewNode) {
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
* @flow strict-local
* @format
*/
'use strict';
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
* @flow strict-local
* @format
*/
@@ -6,11 +6,11 @@
*/
#import <Foundation/Foundation.h>
#import <RCTAnimation/RCTValueAnimatedNode.h>
#import <React/RCTBridgeModule.h>
#import <React/RCTUIManager.h>
@protocol RCTValueAnimatedNodeObserver;
@interface RCTNativeAnimatedNodesManager : NSObject
- (nonnull instancetype)initWithUIManager:(nonnull RCTUIManager *)uiManager;
+24 -7
View File
@@ -36,12 +36,14 @@ static NSString *const RCTReachabilityStateCell = @"cell";
@implementation RCTNetInfo
{
SCNetworkReachabilityRef _firstTimeReachability;
SCNetworkReachabilityRef _reachability;
NSString *_connectionType;
NSString *_effectiveConnectionType;
NSString *_statusDeprecated;
NSString *_host;
BOOL _isObserving;
RCTPromiseResolveBlock _resolve;
}
RCT_EXPORT_MODULE()
@@ -49,7 +51,18 @@ RCT_EXPORT_MODULE()
static void RCTReachabilityCallback(__unused SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void *info)
{
RCTNetInfo *self = (__bridge id)info;
if ([self setReachabilityStatus:flags] && self->_isObserving) {
BOOL didSetReachabilityFlags = [self setReachabilityStatus:flags];
if (self->_firstTimeReachability && self->_resolve) {
SCNetworkReachabilityUnscheduleFromRunLoop(self->_firstTimeReachability, CFRunLoopGetMain(), kCFRunLoopCommonModes);
CFRelease(self->_firstTimeReachability);
self->_resolve(@{@"connectionType": self->_connectionType ?: RCTConnectionTypeUnknown,
@"effectiveConnectionType": self->_effectiveConnectionType ?: RCTEffectiveConnectionTypeUnknown,
@"network_info": self->_statusDeprecated ?: RCTReachabilityStateUnknown});
self->_firstTimeReachability = nil;
self->_resolve = nil;
}
if (didSetReachabilityFlags && self->_isObserving) {
[self sendEventWithName:@"networkStatusDidChange" body:@{@"connectionType": self->_connectionType,
@"effectiveConnectionType": self->_effectiveConnectionType,
@"network_info": self->_statusDeprecated}];
@@ -92,6 +105,14 @@ static void RCTReachabilityCallback(__unused SCNetworkReachabilityRef target, SC
}
}
- (void)dealloc
{
if (_firstTimeReachability) {
SCNetworkReachabilityUnscheduleFromRunLoop(self->_firstTimeReachability, CFRunLoopGetMain(), kCFRunLoopCommonModes);
CFRelease(self->_firstTimeReachability);
}
}
- (SCNetworkReachabilityRef)getReachabilityRef
{
SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, _host.UTF8String ?: "apple.com");
@@ -163,12 +184,8 @@ static void RCTReachabilityCallback(__unused SCNetworkReachabilityRef target, SC
RCT_EXPORT_METHOD(getCurrentConnectivity:(RCTPromiseResolveBlock)resolve
reject:(__unused RCTPromiseRejectBlock)reject)
{
SCNetworkReachabilityRef reachability = [self getReachabilityRef];
SCNetworkReachabilityUnscheduleFromRunLoop(reachability, CFRunLoopGetMain(), kCFRunLoopCommonModes);
CFRelease(reachability);
resolve(@{@"connectionType": _connectionType ?: RCTConnectionTypeUnknown,
@"effectiveConnectionType": _effectiveConnectionType ?: RCTEffectiveConnectionTypeUnknown,
@"network_info": _statusDeprecated ?: RCTReachabilityStateUnknown});
_firstTimeReachability = [self getReachabilityRef];
_resolve = resolve;
}
@end
+1 -1
View File
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow strict
* @flow
*/
'use strict';
+6
View File
@@ -50,6 +50,12 @@ static NSString *RCTGenerateFormBoundary()
const char *boundaryChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.";
char *bytes = (char*)malloc(boundaryLength);
if (!bytes) {
// CWE - 391 : Unchecked error condition
// https://www.cvedetails.com/cwe-details/391/Unchecked-Error-Condition.html
// https://eli.thegreenplace.net/2009/10/30/handling-out-of-memory-conditions-in-c
abort();
}
size_t charCount = strlen(boundaryChars);
for (int i = 0; i < boundaryLength; i++) {
bytes[i] = boundaryChars[arc4random_uniform((u_int32_t)charCount)];
+5 -1
View File
@@ -246,7 +246,9 @@ class XMLHttpRequest extends EventTarget(...XHR_EVENTS) {
case 'blob':
if (typeof this._response === 'object' && this._response) {
this._cachedResponse = BlobManager.createFromOptions(this._response);
} else {
} else if (this._response === '') {
this._cachedResponse = null;
} else {
throw new Error(`Invalid response for blob: ${this._response}`);
}
break;
@@ -522,6 +524,8 @@ class XMLHttpRequest extends EventTarget(...XHR_EVENTS) {
this._url,
this._headers,
data,
/* $FlowFixMe(>=0.78.0 site=react_native_android_fb) This issue was found
* when making Flow check .android.js files. */
nativeResponseType,
incrementalEvents,
this.timeout,
+1 -1
View File
@@ -5,7 +5,7 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
* @flow strict-local
*/
'use strict';
+26 -15
View File
@@ -115,20 +115,20 @@ expectErrorBlock:(BOOL(^)(NSString *error))expectErrorBlock
{
__weak RCTBridge *batchedBridge;
NSNumber *rootTag;
RCTLogFunction defaultLogFunction = RCTGetLogFunction();
// Catch all error logs, that are equivalent to redboxes in dev mode.
__block NSMutableArray<NSString *> *errors = nil;
RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {
defaultLogFunction(level, source, fileName, lineNumber, message);
if (level >= RCTLogLevelError) {
if (errors == nil) {
errors = [NSMutableArray new];
}
[errors addObject:message];
}
});
@autoreleasepool {
__block NSMutableArray<NSString *> *errors = nil;
RCTLogFunction defaultLogFunction = RCTGetLogFunction();
RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {
defaultLogFunction(level, source, fileName, lineNumber, message);
if (level >= RCTLogLevelError) {
if (errors == nil) {
errors = [NSMutableArray new];
}
[errors addObject:message];
}
});
RCTBridge *bridge = [[RCTBridge alloc] initWithBundleURL:_scriptURL
moduleProvider:_moduleProvider
launchOptions:nil];
@@ -172,7 +172,16 @@ expectErrorBlock:(BOOL(^)(NSString *error))expectErrorBlock
testModule.view = nil;
}
RCTSetLogFunction(defaultLogFunction);
// From this point on catch only fatal errors.
RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {
defaultLogFunction(level, source, fileName, lineNumber, message);
if (level >= RCTLogLevelFatal) {
if (errors == nil) {
errors = [NSMutableArray new];
}
[errors addObject:message];
}
});
#if RCT_DEV
NSArray<UIView *> *nonLayoutSubviews = [vc.view.subviews filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id subview, NSDictionary *bindings) {
@@ -208,8 +217,10 @@ expectErrorBlock:(BOOL(^)(NSString *error))expectErrorBlock
[[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
[[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
}
// Note: this deallocation isn't consistently working in test setup, so disable the assertion.
// RCTAssert(batchedBridge == nil, @"Bridge should be deallocated after the test");
RCTAssert(errors == nil, @"RedBox errors during bridge invalidation: %@", errors);
RCTAssert(batchedBridge == nil, @"Bridge should be deallocated after the test");
RCTSetLogFunction(defaultLogFunction);
}
@end
+1 -1
View File
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
* @flow strict-local
* @format
*/
'use strict';
@@ -0,0 +1,42 @@
/**
* Copyright (c) 2015-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
*/
'use strict';
const React = require('React');
const StyleSheet = require('StyleSheet');
const Text = require('Text');
const View = require('View');
function ReactFabricIndicator(): React.Node {
return (
<View style={styles.container}>
<Text style={styles.text}>FABRIC</Text>
</View>
);
}
const styles = StyleSheet.create({
container: {
alignItems: 'center',
justifyContent: 'center',
backgroundColor: 'rgba(0,0,0, 0.25)',
position: 'absolute',
top: 0,
right: 0,
padding: 2,
},
text: {
fontSize: 6,
color: '#ffffff',
},
});
module.exports = ReactFabricIndicator;
+1 -1
View File
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
* @flow strict-local
* @format
*/
'use strict';
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
* @flow strict-local
* @format
*/
'use strict';
@@ -0,0 +1,188 @@
/**
* Copyright (c) 2015-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
* @format
*/
'use strict';
const ReactNativeStyleAttributes = require('ReactNativeStyleAttributes');
const UIManager = require('UIManager');
const insetsDiffer = require('insetsDiffer');
const matricesDiffer = require('matricesDiffer');
const pointsDiffer = require('pointsDiffer');
const processColor = require('processColor');
const resolveAssetSource = require('resolveAssetSource');
const sizesDiffer = require('sizesDiffer');
const invariant = require('fbjs/lib/invariant');
const warning = require('fbjs/lib/warning');
function getNativeComponentAttributes(uiViewClassName: string) {
const viewConfig = UIManager[uiViewClassName];
invariant(
viewConfig != null && viewConfig.NativeProps != null,
'requireNativeComponent: "%s" was not found in the UIManager.',
uiViewClassName,
);
// TODO: This seems like a whole lot of runtime initialization for every
// native component that can be either avoided or simplified.
let {baseModuleName, bubblingEventTypes, directEventTypes} = viewConfig;
let nativeProps = viewConfig.NativeProps;
while (baseModuleName) {
const baseModule = UIManager[baseModuleName];
if (!baseModule) {
warning(false, 'Base module "%s" does not exist', baseModuleName);
baseModuleName = null;
} else {
bubblingEventTypes = {
...baseModule.bubblingEventTypes,
...bubblingEventTypes,
};
directEventTypes = {
...baseModule.directEventTypes,
...directEventTypes,
};
nativeProps = {
...baseModule.NativeProps,
...nativeProps,
};
baseModuleName = baseModule.baseModuleName;
}
}
const validAttributes = {};
for (const key in nativeProps) {
const typeName = nativeProps[key];
const diff = getDifferForType(typeName);
const process = getProcessorForType(typeName);
validAttributes[key] =
diff == null && process == null ? true : {diff, process};
}
// Unfortunately, the current setup declares style properties as top-level
// props. This makes it so we allow style properties in the `style` prop.
// TODO: Move style properties into a `style` prop and disallow them as
// top-level props on the native side.
validAttributes.style = ReactNativeStyleAttributes;
Object.assign(viewConfig, {
uiViewClassName,
validAttributes,
bubblingEventTypes,
directEventTypes,
});
if (!hasAttachedDefaultEventTypes) {
attachDefaultEventTypes(viewConfig);
hasAttachedDefaultEventTypes = true;
}
return viewConfig;
}
// TODO: Figure out how this makes sense. We're using a global boolean to only
// initialize this on the first eagerly initialized native component.
let hasAttachedDefaultEventTypes = false;
function attachDefaultEventTypes(viewConfig: any) {
// This is supported on UIManager platforms (ex: Android),
// as lazy view managers are not implemented for all platforms.
// See [UIManager] for details on constants and implementations.
if (UIManager.ViewManagerNames) {
// Lazy view managers enabled.
viewConfig = merge(viewConfig, UIManager.getDefaultEventTypes());
} else {
viewConfig.bubblingEventTypes = merge(
viewConfig.bubblingEventTypes,
UIManager.genericBubblingEventTypes,
);
viewConfig.directEventTypes = merge(
viewConfig.directEventTypes,
UIManager.genericDirectEventTypes,
);
}
}
// TODO: Figure out how to avoid all this runtime initialization cost.
function merge(destination: ?Object, source: ?Object): ?Object {
if (!source) {
return destination;
}
if (!destination) {
return source;
}
for (const key in source) {
if (!source.hasOwnProperty(key)) {
continue;
}
let sourceValue = source[key];
if (destination.hasOwnProperty(key)) {
const destinationValue = destination[key];
if (
typeof sourceValue === 'object' &&
typeof destinationValue === 'object'
) {
sourceValue = merge(destinationValue, sourceValue);
}
}
destination[key] = sourceValue;
}
return destination;
}
function getDifferForType(
typeName: string,
): ?(prevProp: any, nextProp: any) => boolean {
switch (typeName) {
// iOS Types
case 'CATransform3D':
return matricesDiffer;
case 'CGPoint':
return pointsDiffer;
case 'CGSize':
return sizesDiffer;
case 'UIEdgeInsets':
return insetsDiffer;
// Android Types
// (not yet implemented)
}
return null;
}
function getProcessorForType(typeName: string): ?(nextProp: any) => any {
switch (typeName) {
// iOS Types
case 'CGColor':
case 'UIColor':
return processColor;
case 'CGColorArray':
case 'UIColorArray':
return processColorArray;
case 'CGImage':
case 'UIImage':
case 'RCTImageSource':
return resolveAssetSource;
// Android Types
case 'Color':
return processColor;
case 'ColorArray':
return processColorArray;
}
return null;
}
function processColorArray(colors: ?Array<any>): ?Array<?number> {
return colors == null ? null : colors.map(processColor);
}
module.exports = getNativeComponentAttributes;
@@ -12,6 +12,7 @@
const AppContainer = require('AppContainer');
const React = require('React');
const ReactFabricIndicator = require('ReactFabricIndicator');
const invariant = require('fbjs/lib/invariant');
@@ -24,12 +25,16 @@ function renderApplication<Props: Object>(
rootTag: any,
WrapperComponent?: ?React.ComponentType<*>,
fabric?: boolean,
showFabricIndicator?: boolean,
) {
invariant(rootTag, 'Expect to have a valid rootTag, instead got ', rootTag);
let renderable = (
<AppContainer rootTag={rootTag} WrapperComponent={WrapperComponent}>
<RootComponent {...initialProps} rootTag={rootTag} />
{fabric === true && showFabricIndicator === true ? (
<ReactFabricIndicator />
) : null}
</AppContainer>
);
+5 -174
View File
@@ -4,24 +4,14 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
* @flow strict-local
* @format
*/
'use strict';
const ReactNativeStyleAttributes = require('ReactNativeStyleAttributes');
const UIManager = require('UIManager');
const createReactNativeComponentClass = require('createReactNativeComponentClass');
const insetsDiffer = require('insetsDiffer');
const matricesDiffer = require('matricesDiffer');
const pointsDiffer = require('pointsDiffer');
const processColor = require('processColor');
const resolveAssetSource = require('resolveAssetSource');
const sizesDiffer = require('sizesDiffer');
const invariant = require('fbjs/lib/invariant');
const warning = require('fbjs/lib/warning');
const getNativeComponentAttributes = require('getNativeComponentAttributes');
/**
* Creates values that can be used like React components which represent native
@@ -32,167 +22,8 @@ const warning = require('fbjs/lib/warning');
*
*/
const requireNativeComponent = (uiViewClassName: string): string =>
createReactNativeComponentClass(uiViewClassName, () => {
const viewConfig = UIManager[uiViewClassName];
invariant(
viewConfig != null && viewConfig.NativeProps != null,
'requireNativeComponent: "%s" was not found in the UIManager.',
uiViewClassName,
);
// TODO: This seems like a whole lot of runtime initialization for every
// native component that can be either avoided or simplified.
let {baseModuleName, bubblingEventTypes, directEventTypes} = viewConfig;
let nativeProps = viewConfig.NativeProps;
while (baseModuleName) {
const baseModule = UIManager[baseModuleName];
if (!baseModule) {
warning(false, 'Base module "%s" does not exist', baseModuleName);
baseModuleName = null;
} else {
bubblingEventTypes = {
...baseModule.bubblingEventTypes,
...bubblingEventTypes,
};
directEventTypes = {
...baseModule.directEventTypes,
...directEventTypes,
};
nativeProps = {
...baseModule.NativeProps,
...nativeProps,
};
baseModuleName = baseModule.baseModuleName;
}
}
const validAttributes = {};
for (const key in nativeProps) {
const typeName = nativeProps[key];
const diff = getDifferForType(typeName);
const process = getProcessorForType(typeName);
validAttributes[key] =
diff == null && process == null ? true : {diff, process};
}
// Unfortunately, the current setup declares style properties as top-level
// props. This makes it so we allow style properties in the `style` prop.
// TODO: Move style properties into a `style` prop and disallow them as
// top-level props on the native side.
validAttributes.style = ReactNativeStyleAttributes;
Object.assign(viewConfig, {
uiViewClassName,
validAttributes,
bubblingEventTypes,
directEventTypes,
});
if (!hasAttachedDefaultEventTypes) {
attachDefaultEventTypes(viewConfig);
hasAttachedDefaultEventTypes = true;
}
return viewConfig;
});
// TODO: Figure out how this makes sense. We're using a global boolean to only
// initialize this on the first eagerly initialized native component.
let hasAttachedDefaultEventTypes = false;
function attachDefaultEventTypes(viewConfig: any) {
// This is supported on UIManager platforms (ex: Android),
// as lazy view managers are not implemented for all platforms.
// See [UIManager] for details on constants and implementations.
if (UIManager.ViewManagerNames) {
// Lazy view managers enabled.
viewConfig = merge(viewConfig, UIManager.getDefaultEventTypes());
} else {
viewConfig.bubblingEventTypes = merge(
viewConfig.bubblingEventTypes,
UIManager.genericBubblingEventTypes,
);
viewConfig.directEventTypes = merge(
viewConfig.directEventTypes,
UIManager.genericDirectEventTypes,
);
}
}
// TODO: Figure out how to avoid all this runtime initialization cost.
function merge(destination: ?Object, source: ?Object): ?Object {
if (!source) {
return destination;
}
if (!destination) {
return source;
}
for (const key in source) {
if (!source.hasOwnProperty(key)) {
continue;
}
let sourceValue = source[key];
if (destination.hasOwnProperty(key)) {
const destinationValue = destination[key];
if (
typeof sourceValue === 'object' &&
typeof destinationValue === 'object'
) {
sourceValue = merge(destinationValue, sourceValue);
}
}
destination[key] = sourceValue;
}
return destination;
}
function getDifferForType(
typeName: string,
): ?(prevProp: any, nextProp: any) => boolean {
switch (typeName) {
// iOS Types
case 'CATransform3D':
return matricesDiffer;
case 'CGPoint':
return pointsDiffer;
case 'CGSize':
return sizesDiffer;
case 'UIEdgeInsets':
return insetsDiffer;
// Android Types
// (not yet implemented)
}
return null;
}
function getProcessorForType(typeName: string): ?(nextProp: any) => any {
switch (typeName) {
// iOS Types
case 'CGColor':
case 'UIColor':
return processColor;
case 'CGColorArray':
case 'UIColorArray':
return processColorArray;
case 'CGImage':
case 'UIImage':
case 'RCTImageSource':
return resolveAssetSource;
// Android Types
case 'Color':
return processColor;
case 'ColorArray':
return processColorArray;
}
return null;
}
function processColorArray(colors: ?Array<any>): ?Array<?number> {
return colors == null ? null : colors.map(processColor);
}
createReactNativeComponentClass(uiViewClassName, () =>
getNativeComponentAttributes(uiViewClassName),
);
module.exports = requireNativeComponent;
+1 -1
View File
@@ -1 +1 @@
bc1ea9cd96c81467c574b134349eafc303835d0e
d83601080a7c913cedcfbad86044702d008039c7
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More