From 457a74cbc26c1d87ff3b8d8ab10a3499d5e6fd31 Mon Sep 17 00:00:00 2001 From: Eli White Date: Wed, 8 Aug 2018 14:50:58 -0700 Subject: [PATCH] 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 --- Libraries/Components/Switch/Switch.js | 50 +++-------------- .../Switch/SwitchNativeComponent.js | 56 +++++++++++++++++++ 2 files changed, 64 insertions(+), 42 deletions(-) create mode 100644 Libraries/Components/Switch/SwitchNativeComponent.js diff --git a/Libraries/Components/Switch/Switch.js b/Libraries/Components/Switch/Switch.js index b400588a6..0e11aff4e 100644 --- a/Libraries/Components/Switch/Switch.js +++ b/Libraries/Components/Switch/Switch.js @@ -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, |}>; -// @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 { - _nativeSwitchRef: ?React.ElementRef; + _nativeSwitchRef: ?React.ElementRef; render() { const { @@ -197,13 +161,13 @@ class Switch extends React.Component { }: NativeIOSProps); return ( - ); } @@ -230,7 +194,9 @@ class Switch extends React.Component { } }; - _handleNativeSwitchRef = (ref: ?React.ElementRef) => { + _handleSwitchNativeComponentRef = ( + ref: ?React.ElementRef, + ) => { this._nativeSwitchRef = ref; }; } diff --git a/Libraries/Components/Switch/SwitchNativeComponent.js b/Libraries/Components/Switch/SwitchNativeComponent.js new file mode 100644 index 000000000..3810e0ce3 --- /dev/null +++ b/Libraries/Components/Switch/SwitchNativeComponent.js @@ -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;