From afee17ebcaada6b843897dc5c053b7786ebd2eff Mon Sep 17 00:00:00 2001 From: jesse Date: Wed, 16 Jan 2019 13:00:36 -0800 Subject: [PATCH] AndroidDropdownPicker and AndroidDialogPicker (#22999) Summary: Changelog: ---------- [Android] [Changed] - As mentioned in #22990, I have moved native components required by PickerAndroid.android.js into separate files and added Flow Typing. Pull Request resolved: https://github.com/facebook/react-native/pull/22999 Differential Revision: D13697130 Pulled By: TheSavior fbshipit-source-id: 42da73d82cca45fefa066871eed5a637811643c8 --- .../AndroidDialogPickerNativeComponent.js | 47 +++++++++++++++++++ .../AndroidDropdownPickerNativeComponent.js | 47 +++++++++++++++++++ .../Picker/PickerAndroid.android.js | 10 ++-- 3 files changed, 99 insertions(+), 5 deletions(-) create mode 100644 Libraries/Components/Picker/AndroidDialogPickerNativeComponent.js create mode 100644 Libraries/Components/Picker/AndroidDropdownPickerNativeComponent.js diff --git a/Libraries/Components/Picker/AndroidDialogPickerNativeComponent.js b/Libraries/Components/Picker/AndroidDialogPickerNativeComponent.js new file mode 100644 index 00000000000000..89900c4fac7cfc --- /dev/null +++ b/Libraries/Components/Picker/AndroidDialogPickerNativeComponent.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. + * + * @format + * @flow + */ + +'use strict'; + +const requireNativeComponent = require('requireNativeComponent'); + +import type {SyntheticEvent} from 'CoreEventTypes'; +import type {TextStyleProp} from 'StyleSheet'; +import type {NativeComponent} from 'ReactNative'; + +type PickerAndroidChangeEvent = SyntheticEvent< + $ReadOnly<{| + position: number, + |}>, +>; + +type Item = $ReadOnly<{| + label: string, + value: ?(number | string), + color?: ?number, +|}>; + +type NativeProps = $ReadOnly<{| + enabled?: ?boolean, + items: $ReadOnlyArray, + mode?: ?('dialog' | 'dropdown'), + onSelect?: (event: PickerAndroidChangeEvent) => void, + selected: number, + prompt?: ?string, + testID?: string, + style?: ?TextStyleProp, + accessibilityLabel?: ?string, +|}>; + +type DialogPickerNativeType = Class>; + +module.exports = ((requireNativeComponent( + 'AndroidDialogPicker', +): any): DialogPickerNativeType); diff --git a/Libraries/Components/Picker/AndroidDropdownPickerNativeComponent.js b/Libraries/Components/Picker/AndroidDropdownPickerNativeComponent.js new file mode 100644 index 00000000000000..a39f6a223e16dd --- /dev/null +++ b/Libraries/Components/Picker/AndroidDropdownPickerNativeComponent.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. + * + * @format + * @flow + */ + +'use strict'; + +const requireNativeComponent = require('requireNativeComponent'); + +import type {SyntheticEvent} from 'CoreEventTypes'; +import type {TextStyleProp} from 'StyleSheet'; +import type {NativeComponent} from 'ReactNative'; + +type PickerAndroidChangeEvent = SyntheticEvent< + $ReadOnly<{| + position: number, + |}>, +>; + +type Item = $ReadOnly<{| + label: string, + value: ?(number | string), + color?: ?number, +|}>; + +type NativeProps = $ReadOnly<{| + enabled?: ?boolean, + items: $ReadOnlyArray, + mode?: ?('dialog' | 'dropdown'), + onSelect?: (event: PickerAndroidChangeEvent) => void, + selected: number, + prompt?: ?string, + testID?: string, + style?: ?TextStyleProp, + accessibilityLabel?: ?string, +|}>; + +type DropdownPickerNativeType = Class>; + +module.exports = ((requireNativeComponent( + 'AndroidDropdownPicker', +): any): DropdownPickerNativeType); diff --git a/Libraries/Components/Picker/PickerAndroid.android.js b/Libraries/Components/Picker/PickerAndroid.android.js index 2c1ae760e27775..46b19cd1812555 100644 --- a/Libraries/Components/Picker/PickerAndroid.android.js +++ b/Libraries/Components/Picker/PickerAndroid.android.js @@ -10,14 +10,12 @@ 'use strict'; +const AndroidDropdownPickerNativeComponent = require('AndroidDropdownPickerNativeComponent'); +const AndroidDialogPickerNativeComponent = require('AndroidDialogPickerNativeComponent'); const React = require('React'); const StyleSheet = require('StyleSheet'); const processColor = require('processColor'); -const requireNativeComponent = require('requireNativeComponent'); - -const DropdownPicker = requireNativeComponent('AndroidDropdownPicker'); -const DialogPicker = requireNativeComponent('AndroidDialogPicker'); const REF_PICKER = 'picker'; const MODE_DROPDOWN = 'dropdown'; @@ -103,7 +101,9 @@ class PickerAndroid extends React.Component< render() { const Picker = - this.props.mode === MODE_DROPDOWN ? DropdownPicker : DialogPicker; + this.props.mode === MODE_DROPDOWN + ? AndroidDropdownPickerNativeComponent + : AndroidDialogPickerNativeComponent; const nativeProps = { enabled: this.props.enabled,