From 499da14b8617294bf4aedc44a5a63a8c6b50a577 Mon Sep 17 00:00:00 2001 From: Chi-AnTai Date: Tue, 22 Jan 2019 02:10:01 -0800 Subject: [PATCH] RCTPicker (#22996) Summary: [iOS] [Changed] - As #22990 said, move requireNativeComponent to a separate file. I am not familiar with flow, I try to follow the https://pastebin.com/RFpdT76V example but I am not sure I have done it right. Pull Request resolved: https://github.com/facebook/react-native/pull/22996 Differential Revision: D13697082 Pulled By: cpojer fbshipit-source-id: c0c87a8e1a7f0553da994aba230f69b496140200 --- Libraries/Components/Picker/PickerIOS.ios.js | 8 +--- .../Picker/RCTPickerNativeComponent.js | 47 +++++++++++++++++++ 2 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 Libraries/Components/Picker/RCTPickerNativeComponent.js diff --git a/Libraries/Components/Picker/PickerIOS.ios.js b/Libraries/Components/Picker/PickerIOS.ios.js index 787126356a4974..1f47a53a97a11e 100644 --- a/Libraries/Components/Picker/PickerIOS.ios.js +++ b/Libraries/Components/Picker/PickerIOS.ios.js @@ -18,7 +18,7 @@ const ReactNative = require('ReactNative'); const StyleSheet = require('StyleSheet'); const View = require('View'); const processColor = require('processColor'); -const requireNativeComponent = require('requireNativeComponent'); +const RCTPickerNativeComponent = require('RCTPickerNativeComponent'); import type {SyntheticEvent} from 'CoreEventTypes'; import type {ColorValue} from 'StyleSheetTypes'; @@ -52,10 +52,6 @@ type RCTPickerIOSType = Class< >, >; -const RCTPickerIOS: RCTPickerIOSType = (requireNativeComponent( - 'RCTPicker', -): any); - type Label = Stringish | number; type Props = $ReadOnly<{| @@ -111,7 +107,7 @@ class PickerIOS extends React.Component { render() { return ( - { this._picker = picker; }} diff --git a/Libraries/Components/Picker/RCTPickerNativeComponent.js b/Libraries/Components/Picker/RCTPickerNativeComponent.js new file mode 100644 index 00000000000000..2a3e8b5e0d6af0 --- /dev/null +++ b/Libraries/Components/Picker/RCTPickerNativeComponent.js @@ -0,0 +1,47 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * 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 requireNativeComponent = require('requireNativeComponent'); + +import type {SyntheticEvent} from 'CoreEventTypes'; +import type {TextStyleProp} from 'StyleSheet'; +import type {NativeComponent} from 'ReactNative'; + +type PickerIOSChangeEvent = SyntheticEvent< + $ReadOnly<{| + newValue: number | string, + newIndex: number, + |}>, +>; + +type RCTPickerIOSItemType = $ReadOnly<{| + label: ?Label, + value: ?(number | string), + textColor: ?number, +|}>; + +type Label = Stringish | number; + +type RCTPickerIOSType = Class< + NativeComponent< + $ReadOnly<{| + items: $ReadOnlyArray, + onChange: (event: PickerIOSChangeEvent) => void, + onResponderTerminationRequest: () => boolean, + onStartShouldSetResponder: () => boolean, + selectedIndex: number, + style?: ?TextStyleProp, + testID?: ?string, + |}>, + >, +>; + +module.exports = ((requireNativeComponent('RCTPicker'): any): RCTPickerIOSType);