Updates from Wed 18 Mar

- [ReactNative] Add AsyncStorageTest | Spencer Ahrens
- [ReactNative] Add timers integration test | Spencer Ahrens
- [ReactNative] Remove ExpandingText | Tadeu Zagallo
- [TouchableHighlight] Preserve underlay style when restoring inactive props | Christopher Chedeau
- clean flow errors in react-native-github | Basil Hosmer
- [ReactNative] Sort React Native exports into two groups, Components and APIs | Christopher Chedeau
- [ReactNative] Rename Slider to SliderIOS | Tadeu Zagallo
- [react_native] JS files from D1919491: Improve JS logging | Martin Kosiba
- [ReactNative] Add TimerExample | Spencer Ahrens
- [RFC][ReactNative] increase timer resolution | Spencer Ahrens
- [ReactNative] Strip prefixes from NativeModules keys | Spencer Ahrens
- [ReactNative] Small docs cleanup in ActivityIndicatorIOS and DatePickerIOS | Christopher Chedeau
- [ReactNative] Improvements on perf measurement output | Jing Chen
- [ReactNative] Clean up Touchable PropTypes | Christopher Chedeau
- [ReactKit] Fail tests when redbox shows up | Alex Kotliarskyi
This commit is contained in:
Christopher Chedeau
2015-03-18 15:57:49 -07:00
parent 55598f913c
commit 06a87bec25
75 changed files with 795 additions and 373 deletions

View File

@@ -5,7 +5,7 @@
*/
'use strict';
var { RCTActionSheetManager } = require('NativeModules');
var RCTActionSheetManager = require('NativeModules').ActionSheetManager;
var invariant = require('invariant');

View File

@@ -5,7 +5,7 @@
*/
'use strict';
var AdSupport = require('NativeModules').RCTAdSupport;
var AdSupport = require('NativeModules').AdSupport;
module.exports = {
getAdvertisingId: function(onSuccess, onFailure) {

View File

@@ -6,7 +6,7 @@
*/
'use strict';
var { RCTAnimationManager } = require('NativeModules');
var RCTAnimationManager = require('NativeModules').AnimationManager;
var AnimationUtils = require('AnimationUtils');
type EasingFunction = (t: number) => number;

View File

@@ -7,7 +7,7 @@
'use strict';
var AnimationUtils = require('AnimationUtils');
var { RCTAnimationManager } = require('NativeModules');
var RCTAnimationManager = require('NativeModules').AnimationManager;
var invariant = require('invariant');

View File

@@ -6,7 +6,7 @@
'use strict';
var PropTypes = require('ReactPropTypes');
var RCTUIManager = require('NativeModules').RCTUIManager;
var RCTUIManager = require('NativeModules').UIManager;
var createStrictShapeTypeChecker = require('createStrictShapeTypeChecker');
var keyMirror = require('keyMirror');

View File

@@ -7,10 +7,11 @@
'use strict';
var POPAnimation = require('POPAnimation');
if (!POPAnimation) {
// POP animation isn't available in the OSS fork - this is a temporary
// workaround to enable its availability to be determined at runtime.
module.exports = null;
module.exports = (null : ?{});
} else {
var invariant = require('invariant');
@@ -224,12 +225,10 @@ var POPAnimationMixin = {
w: frame.width,
h: frame.height
};
frame = undefined;
var velocity = velocity || [0, 0];
var posAnim = POPAnimation.createAnimation(type, {
property: POPAnimation.Properties.position,
toValue: [animFrame.x, animFrame.y],
velocity: velocity,
velocity: velocity || [0, 0],
});
var sizeAnim = POPAnimation.createAnimation(type, {
property: POPAnimation.Properties.size,

View File

@@ -6,7 +6,7 @@
'use strict';
var NativeModules = require('NativeModules');
var RCTAppState = NativeModules.RCTAppState;
var RCTAppState = NativeModules.AppState;
var AppState = {

View File

@@ -7,7 +7,7 @@
var NativeModules = require('NativeModules');
var RCTDeviceEventEmitter = require('RCTDeviceEventEmitter');
var RCTAppState = NativeModules.RCTAppState;
var RCTAppState = NativeModules.AppState;
var logError = require('logError');

View File

@@ -7,8 +7,8 @@
var NativeModules = require('BatchedBridge').RemoteModules;
var nativeModulePrefixDuplicator = require('nativeModulePrefixDuplicator');
var nativeModulePrefixNormalizer = require('nativeModulePrefixNormalizer');
nativeModulePrefixDuplicator(NativeModules);
nativeModulePrefixNormalizer(NativeModules);
module.exports = NativeModules;

View File

@@ -5,7 +5,7 @@
*/
'use strict';
var RCTPOPAnimationManager = require('NativeModules').RCTPOPAnimationManager;
var RCTPOPAnimationManager = require('NativeModules').POPAnimationManager;
if (!RCTPOPAnimationManager) {
// POP animation isn't available in the OSS fork - this is a temporary
// workaround to enable its availability to be determined at runtime.

View File

@@ -5,6 +5,6 @@
*/
'use strict';
var { RCTAlertManager } = require('NativeModules');
var RCTAlertManager = require('NativeModules').AlertManager;
module.exports = RCTAlertManager;

View File

@@ -6,7 +6,7 @@
'use strict';
var ReactPropTypes = require('ReactPropTypes');
var RCTCameraRollManager = require('NativeModules').RCTCameraRollManager;
var RCTCameraRollManager = require('NativeModules').CameraRollManager;
var createStrictShapeTypeChecker = require('createStrictShapeTypeChecker');
var deepFreezeAndThrowOnMutationInDev =

View File

@@ -37,8 +37,11 @@ var ActivityIndicatorIOS = React.createClass({
*/
color: PropTypes.string,
/**
* Size of the indicator. Small has a height of 20, large has a height of 36.
*/
size: PropTypes.oneOf([
'small', // default
'small',
'large',
]),
},
@@ -53,7 +56,7 @@ var ActivityIndicatorIOS = React.createClass({
render: function() {
var style = styles.sizeSmall;
var NativeConstants = NativeModules.RCTUIManager.UIActivityIndicatorView.Constants;
var NativeConstants = NativeModules.UIManager.UIActivityIndicatorView.Constants;
var activityIndicatorViewStyle = NativeConstants.StyleWhite;
if (this.props.size === 'large') {
style = styles.sizeLarge;

View File

@@ -11,7 +11,7 @@ var NativeMethodsMixin = require('NativeMethodsMixin');
var PropTypes = require('ReactPropTypes');
var React = require('React');
var ReactIOSViewAttributes = require('ReactIOSViewAttributes');
var RCTDatePickerIOSConsts = require('NativeModules').RCTUIManager.RCTDatePicker.Constants;
var RCTDatePickerIOSConsts = require('NativeModules').UIManager.RCTDatePicker.Constants;
var StyleSheet = require('StyleSheet');
var View = require('View');
@@ -62,10 +62,8 @@ var DatePickerIOS = React.createClass({
/**
* The date picker mode.
*
* Valid modes on iOS are: 'date', 'time', 'datetime'.
*/
mode: PropTypes.oneOf(Object.keys(RCTDatePickerIOSConsts.DatePickerModes)),
mode: PropTypes.oneOf(['date', 'time', 'datetime']),
/**
* The interval at which minutes can be selected.
@@ -73,7 +71,7 @@ var DatePickerIOS = React.createClass({
minuteInterval: PropTypes.oneOf([1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30]),
/**
* Timezone offset in seconds.
* Timezone offset in minutes.
*
* By default, the date picker will use the device's timezone. With this
* parameter, it is possible to force a certain timezone offset. For

View File

@@ -7,7 +7,7 @@
var ListViewDataSource = require('ListViewDataSource');
var React = require('React');
var RCTUIManager = require('NativeModules').RCTUIManager;
var RCTUIManager = require('NativeModules').UIManager;
var ScrollView = require('ScrollView');
var ScrollResponder = require('ScrollResponder');
var StaticRenderer = require('StaticRenderer');

View File

@@ -215,9 +215,10 @@ class ListViewDataSource {
/**
* @param {number} index
*
* Gets the rowID at index provided if the dataSource arrays were flattened
* Gets the rowID at index provided if the dataSource arrays were flattened,
* or null of out of range indexes.
*/
getRowIDForFlatIndex(index: number): string {
getRowIDForFlatIndex(index: number): ?string {
var accessIndex = index;
for (var ii = 0; ii < this.sectionIdentities.length; ii++) {
if (accessIndex >= this.rowIdentities[ii].length) {
@@ -226,14 +227,16 @@ class ListViewDataSource {
return this.rowIdentities[ii][accessIndex];
}
}
return null;
}
/**
* @param {number} index
*
* Gets the sectionID at index provided if the dataSource arrays were flattened
* Gets the sectionID at index provided if the dataSource arrays were flattened,
* or null for out of range indexes.
*/
getSectionIDForFlatIndex(index: number): string {
getSectionIDForFlatIndex(index: number): ?string {
var accessIndex = index;
for (var ii = 0; ii < this.sectionIdentities.length; ii++) {
if (accessIndex >= this.rowIdentities[ii].length) {
@@ -242,6 +245,7 @@ class ListViewDataSource {
return this.sectionIdentities[ii];
}
}
return null;
}
/**

View File

@@ -8,7 +8,7 @@
var EventEmitter = require('EventEmitter');
var React = require('React');
var ReactIOSViewAttributes = require('ReactIOSViewAttributes');
var { RCTNavigatorManager } = require('NativeModules');
var RCTNavigatorManager = require('NativeModules').NavigatorManager;
var StyleSheet = require('StyleSheet');
var StaticContainer = require('StaticContainer.react');
var View = require('View');

View File

@@ -11,8 +11,8 @@ var RCTDeviceEventEmitter = require('RCTDeviceEventEmitter');
var Subscribable = require('Subscribable');
var TextInputState = require('TextInputState');
var RCTUIManager = NativeModules.RCTUIManager;
var RCTUIManagerDeprecated = NativeModules.RCTUIManager;
var RCTUIManager = NativeModules.UIManager;
var RCTUIManagerDeprecated = NativeModules.UIManager;
var RCTScrollViewConsts = RCTUIManager.RCTScrollView.Constants;
var warning = require('warning');

View File

@@ -8,12 +8,12 @@
var EdgeInsetsPropType = require('EdgeInsetsPropType');
var Platform = require('Platform');
var PointPropType = require('PointPropType');
var RCTScrollView = require('NativeModules').RCTUIManager.RCTScrollView;
var RCTScrollView = require('NativeModules').UIManager.RCTScrollView;
var RCTScrollViewConsts = RCTScrollView.Constants;
var React = require('React');
var ReactIOSTagHandles = require('ReactIOSTagHandles');
var ReactIOSViewAttributes = require('ReactIOSViewAttributes');
var RCTUIManager = require('NativeModules').RCTUIManager;
var RCTUIManager = require('NativeModules').UIManager;
var ScrollResponder = require('ScrollResponder');
var StyleSheet = require('StyleSheet');
var StyleSheetPropType = require('StyleSheetPropType');

View File

@@ -1,7 +1,7 @@
/**
* Copyright 2004-present Facebook. All Rights Reserved.
*
* @providesModule Slider
* @providesModule SliderIOS
*/
'use strict';
@@ -16,7 +16,7 @@ var createReactIOSNativeComponentClass =
require('createReactIOSNativeComponentClass');
var merge = require('merge');
var Slider = React.createClass({
var SliderIOS = React.createClass({
mixins: [NativeMethodsMixin],
propTypes: {
@@ -80,4 +80,4 @@ var RCTSlider = createReactIOSNativeComponentClass({
uiViewClassName: 'RCTSlider',
});
module.exports = Slider;
module.exports = SliderIOS;

View File

@@ -6,7 +6,7 @@
*/
'use strict';
var { RCTStatusBarManager } = require('NativeModules');
var RCTStatusBarManager = require('NativeModules').StatusBarManager;
var StatusBarIOS = {

View File

@@ -8,7 +8,7 @@
var DocumentSelectionState = require('DocumentSelectionState');
var EventEmitter = require('EventEmitter');
var NativeMethodsMixin = require('NativeMethodsMixin');
var RCTUIManager = require('NativeModules').RCTUIManager;
var RCTUIManager = require('NativeModules').UIManager;
var PropTypes = require('ReactPropTypes');
var React = require('React');
var ReactChildren = require('ReactChildren');

View File

@@ -9,7 +9,7 @@
*/
'use strict';
var RCTUIManager = require('NativeModules').RCTUIManager;
var RCTUIManager = require('NativeModules').UIManager;
var TextInputState = {
/**

View File

@@ -1,22 +0,0 @@
/**
* Copyright 2004-present Facebook. All Rights Reserved.
*
* @providesModule TouchableFeedbackPropType
* @flow
*/
'use strict';
var { PropTypes } = require('React');
var TouchableFeedbackPropType = {
/**
* Called when the touch is released, but not if cancelled (e.g. by a scroll
* that steals the responder lock).
*/
onPress: PropTypes.func,
onPressIn: PropTypes.func,
onPressOut: PropTypes.func,
onLongPress: PropTypes.func,
};
module.exports = TouchableFeedbackPropType;

View File

@@ -11,7 +11,7 @@ var ReactIOSViewAttributes = require('ReactIOSViewAttributes');
var StyleSheet = require('StyleSheet');
var TimerMixin = require('TimerMixin');
var Touchable = require('Touchable');
var TouchableFeedbackPropType = require('TouchableFeedbackPropType');
var TouchableWithoutFeedback = require('TouchableWithoutFeedback');
var View = require('View');
var cloneWithProps = require('cloneWithProps');
@@ -51,12 +51,7 @@ var DEFAULT_PROPS = {
var TouchableHighlight = React.createClass({
propTypes: {
...TouchableFeedbackPropType,
/**
* Called when the touch is released, but not if cancelled (e.g. by
* a scroll that steals the responder lock).
*/
onPress: React.PropTypes.func.isRequired,
...TouchableWithoutFeedback.propTypes,
/**
* Determines what the opacity of the wrapped view should be when touch is
* active.
@@ -164,7 +159,10 @@ var TouchableHighlight = React.createClass({
this._hideTimeout = null;
if (this.refs[UNDERLAY_REF]) {
this.refs[CHILD_REF].setNativeProps(INACTIVE_CHILD_PROPS);
this.refs[UNDERLAY_REF].setNativeProps(INACTIVE_UNDERLAY_PROPS);
this.refs[UNDERLAY_REF].setNativeProps({
...INACTIVE_UNDERLAY_PROPS,
style: this.state.underlayStyle,
});
}
},

View File

@@ -9,7 +9,7 @@ var NativeMethodsMixin = require('NativeMethodsMixin');
var POPAnimationMixin = require('POPAnimationMixin');
var React = require('React');
var Touchable = require('Touchable');
var TouchableFeedbackPropType = require('TouchableFeedbackPropType');
var TouchableWithoutFeedback = require('TouchableWithoutFeedback');
var cloneWithProps = require('cloneWithProps');
var ensureComponentIsNative = require('ensureComponentIsNative');
@@ -42,7 +42,7 @@ var TouchableOpacity = React.createClass({
mixins: [Touchable.Mixin, NativeMethodsMixin, POPAnimationMixin],
propTypes: {
...TouchableFeedbackPropType,
...TouchableWithoutFeedback.propTypes,
/**
* Determines what the opacity of the wrapped view should be when touch is
* active.

View File

@@ -7,7 +7,6 @@
var React = require('React');
var Touchable = require('Touchable');
var TouchableFeedbackPropType = require('TouchableFeedbackPropType');
var onlyChild = require('onlyChild');
@@ -28,7 +27,16 @@ var PRESS_RECT_OFFSET = {top: 20, left: 20, right: 20, bottom: 30};
var TouchableWithoutFeedback = React.createClass({
mixins: [Touchable.Mixin],
propTypes: TouchableFeedbackPropType,
propTypes: {
/**
* Called when the touch is released, but not if cancelled (e.g. by a scroll
* that steals the responder lock).
*/
onPress: React.PropTypes.func,
onPressIn: React.PropTypes.func,
onPressOut: React.PropTypes.func,
onLongPress: React.PropTypes.func,
},
getInitialState: function() {
return this.touchableGetInitialState();

View File

@@ -16,7 +16,7 @@ var keyMirror = require('keyMirror');
var merge = require('merge');
var PropTypes = React.PropTypes;
var RCTUIManager = require('NativeModules').RCTUIManager;
var RCTUIManager = require('NativeModules').UIManager;
var RCT_WEBVIEW_REF = 'webview';

View File

@@ -17,7 +17,7 @@ var insetsDiffer = require('insetsDiffer');
var merge = require('merge');
var PropTypes = React.PropTypes;
var { RCTWebViewManager } = require('NativeModules');
var RCTWebViewManager = require('NativeModules').WebViewManager;
var RCT_WEBVIEW_REF = 'webview';

View File

@@ -6,7 +6,7 @@
'use strict';
var RCTDeviceEventEmitter = require('RCTDeviceEventEmitter');
var RCTLocationObserver = require('NativeModules').RCTLocationObserver;
var RCTLocationObserver = require('NativeModules').LocationObserver;
var invariant = require('invariant');
var logError = require('logError');

View File

@@ -114,7 +114,7 @@ var Image = React.createClass({
warning(RawImage === RCTStaticImage, 'tintColor style only supported on static images.');
}
var contentModes = NativeModules.RCTUIManager.UIView.ContentMode;
var contentModes = NativeModules.UIManager.UIView.ContentMode;
var resizeMode;
if (style.resizeMode === ImageResizeMode.stretch) {
resizeMode = contentModes.ScaleToFill;

View File

@@ -60,7 +60,7 @@ function setupDocumentShim() {
var sourceMapPromise;
function handleErrorWithRedBox(e) {
var RCTExceptionsManager = require('NativeModules').RCTExceptionsManager;
var RCTExceptionsManager = require('NativeModules').ExceptionsManager;
var errorToString = require('errorToString');
var loadSourceMap = require('loadSourceMap');
@@ -115,7 +115,7 @@ function setupTimers() {
}
function setupAlert() {
var { RCTAlertManager } = require('NativeModules');
var RCTAlertManager = require('NativeModules').AlertManager;
if (!GLOBAL.alert) {
GLOBAL.alert = function(text) {
var alertOpts = {

View File

@@ -8,7 +8,7 @@
'use strict';
var Promise = require('Promise');
var RCTSourceCode = require('NativeModules').RCTSourceCode;
var RCTSourceCode = require('NativeModules').SourceCode;
var SourceMapConsumer = require('SourceMap').SourceMapConsumer;
var SourceMapURL = require('./source-map-url');

View File

@@ -7,7 +7,7 @@
// Note that the module JSTimers is split into two in order to solve a cycle
// in dependencies. NativeModules > BatchedBridge > MessageQueue > JSTimersExecution
var RCTTiming = require('NativeModules').RCTTiming;
var RCTTiming = require('NativeModules').Timing;
var JSTimersExecution = require('JSTimersExecution');
/**
@@ -90,7 +90,7 @@ var JSTimers = {
JSTimersExecution.timerIDs[freeIndex] = newID;
JSTimersExecution.callbacks[freeIndex] = func;
JSTimersExecution.types[freeIndex] = JSTimersExecution.Type.requestAnimationFrame;
RCTTiming.createTimer(newID, 0, Date.now(), /** recurring */ false);
RCTTiming.createTimer(newID, 1, Date.now(), /** recurring */ false);
return newID;
},

View File

@@ -8,7 +8,7 @@
var NativeModules = require('NativeModules');
var RCTDeviceEventEmitter = require('RCTDeviceEventEmitter');
var RCTReachability = NativeModules.RCTReachability;
var RCTReachability = NativeModules.Reachability;
var DEVICE_REACHABILITY_EVENT = 'reachabilityDidChange';

View File

@@ -6,7 +6,7 @@
*/
'use strict';
var RCTDataManager = require('NativeModules').RCTDataManager;
var RCTDataManager = require('NativeModules').DataManager;
var crc32 = require('crc32');

View File

@@ -11,7 +11,7 @@ var NativeMethodsMixin = require('NativeMethodsMixin');
var React = require('React');
var ReactChildren = require('ReactChildren');
var ReactIOSViewAttributes = require('ReactIOSViewAttributes');
var RCTPickerIOSConsts = require('NativeModules').RCTUIManager.RCTPicker.Constants;
var RCTPickerIOSConsts = require('NativeModules').UIManager.RCTPicker.Constants;
var StyleSheet = require('StyleSheet');
var View = require('View');

View File

@@ -6,7 +6,7 @@
'use strict';
var ReactIOSTagHandles = require('ReactIOSTagHandles');
var RCTUIManager = require('NativeModules').RCTUIManager;
var RCTUIManager = require('NativeModules').UIManager;
/**
* Queries the layout of a view. The layout does not reflect the element as

View File

@@ -13,7 +13,7 @@ var SyntheticEvent = require('SyntheticEvent');
var merge = require('merge');
var warning = require('warning');
var RCTUIManager = NativeModules.RCTUIManager;
var RCTUIManager = NativeModules.UIManager;
var customBubblingEventTypes = RCTUIManager.customBubblingEventTypes;
var customDirectEventTypes = RCTUIManager.customDirectEventTypes;

View File

@@ -7,8 +7,8 @@
var NativeModules = require('NativeModules');
var NativeModules = require('NativeModules');
var RCTPOPAnimationManager = NativeModules.RCTPOPAnimationManager;
var RCTUIManager = NativeModules.RCTUIManager;
var RCTPOPAnimationManager = NativeModules.POPAnimationManager;
var RCTUIManager = NativeModules.UIManager;
var TextInputState = require('TextInputState');
var flattenStyle = require('flattenStyle');

View File

@@ -9,7 +9,7 @@
var ReactIOSTagHandles = require('ReactIOSTagHandles');
var ReactMultiChildUpdateTypes = require('ReactMultiChildUpdateTypes');
var RCTUIManager = require('NativeModules').RCTUIManager;
var RCTUIManager = require('NativeModules').UIManager;
var ReactPerf = require('ReactPerf');
/**

View File

@@ -3,7 +3,7 @@
*/
'use strict';
var RCTUIManager = require('NativeModules').RCTUIManager;
var RCTUIManager = require('NativeModules').UIManager;
var ReactIOSTagHandles = require('ReactIOSTagHandles');
var ReactIOSGlobalResponderHandler = {

View File

@@ -5,7 +5,7 @@
*/
'use strict';
var RCTUIManager = require('NativeModules').RCTUIManager;
var RCTUIManager = require('NativeModules').UIManager;
var ReactIOSTagHandles = require('ReactIOSTagHandles');
var ReactPerf = require('ReactPerf');

View File

@@ -11,7 +11,7 @@ var ReactIOSEventEmitter = require('ReactIOSEventEmitter');
var ReactIOSStyleAttributes = require('ReactIOSStyleAttributes');
var ReactIOSTagHandles = require('ReactIOSTagHandles');
var ReactMultiChild = require('ReactMultiChild');
var RCTUIManager = require('NativeModules').RCTUIManager;
var RCTUIManager = require('NativeModules').UIManager;
var styleDiffer = require('styleDiffer');
var deepFreezeAndThrowOnMutationInDev = require('deepFreezeAndThrowOnMutationInDev');

View File

@@ -7,7 +7,7 @@
'use strict';
var ReactIOSTagHandles = require('ReactIOSTagHandles');
var RCTUIManager = require('NativeModules').RCTUIManager;
var RCTUIManager = require('NativeModules').UIManager;
var assign = require('Object.assign');

View File

@@ -7,8 +7,8 @@
'use strict';
var NativeModules = require('NativeModules');
var RCTAsyncLocalStorage = NativeModules.RCTAsyncLocalStorage;
var RCTAsyncRocksDBStorage = NativeModules.RCTAsyncRocksDBStorage;
var RCTAsyncLocalStorage = NativeModules.AsyncLocalStorage;
var RCTAsyncRocksDBStorage = NativeModules.AsyncRocksDBStorage;
// We use RocksDB if available.
var RCTAsyncStorage = RCTAsyncRocksDBStorage || RCTAsyncLocalStorage;

View File

@@ -1,130 +0,0 @@
/**
* Copyright 2004-present Facebook. All Rights Reserved.
*
* @providesModule ExpandingText
*/
'use strict';
var React = require('React');
var StyleSheet = require('StyleSheet');
var Text = require('Text');
var TouchableWithoutFeedback = require('TouchableWithoutFeedback');
var View = require('View');
var truncate = require('truncate');
var styles = StyleSheet.create({
boldText: {
fontWeight: 'bold',
},
});
/**
* A react component for displaying text which supports truncating
* based on a set truncLength.
*
* In the following example, the text will truncate
* to show only the first 17 characters plus '...' with a See More button to
* expand the text to its full length.
*
* ```
* render: function() {
* return <ExpandingText truncLength={20} text={EXAMPLE_TEXT} />;
* },
* ```
*/
var ExpandingText = React.createClass({
propTypes: {
/**
* Text to be displayed. It will be truncated if the character length
* is greater than the `truncLength` property.
*/
text: React.PropTypes.string,
/**
* The styles that will be applied to the text (both truncated and
* expanded).
*/
textStyle: Text.propTypes.style,
/**
* The styles that will be applied to the See More button. Default
* is bold.
*/
seeMoreStyle: Text.propTypes.style,
/**
* The caption that will be appended at the end, by default it is
* `'See More'`.
*/
seeMoreText: React.PropTypes.string,
/**
* The maximum character length for the text that will
* be displayed by default. Note that ... will be
* appended to the truncated text which is counted towards
* the total truncLength of the default displayed string.
* The default is 130.
*/
truncLength: React.PropTypes.number,
},
getDefaultProps: function() {
return {
truncLength: 130,
seeMoreText: 'See More',
seeMoreStyle: styles.boldText,
};
},
getInitialState: function() {
return {
truncated: true,
};
},
onTapSeeMore: function() {
this.setState({
truncated: !this.state.truncated,
});
},
isTruncated: function() {
return (
this.props.text.length > this.props.truncLength &&
this.state.truncated
);
},
getText: function() {
var text = this.props.text;
if (!this.isTruncated()) {
return text;
}
return truncate(text, this.props.truncLength) + ' ';
},
renderSeeMore: function() {
if (!this.isTruncated()) {
return null;
}
return (
<Text style={this.props.seeMoreStyle}>
{this.props.seeMoreText}
</Text>
);
},
render: function() {
return (
<TouchableWithoutFeedback onPress={this.onTapSeeMore}>
<View>
<Text style={this.props.textStyle}>
{this.getText()}
{this.renderSeeMore()}
</Text>
</View>
</TouchableWithoutFeedback>
);
}
});
module.exports = ExpandingText;

View File

@@ -6,7 +6,7 @@
*/
'use strict';
var { RCTAlertManager } = require('NativeModules');
var RCTAlertManager = require('NativeModules').AlertManager;
var DEFAULT_BUTTON_TEXT = 'OK';
var DEFAULT_BUTTON = {

View File

@@ -9,7 +9,7 @@ var NativeModules = require('NativeModules');
var invariant = require('invariant');
var dimensions = NativeModules.RCTUIManager.Dimensions;
var dimensions = NativeModules.UIManager.Dimensions;
class Dimensions {
/**

View File

@@ -8,7 +8,7 @@
var NativeModules = require('NativeModules');
var RCTDeviceEventEmitter = require('RCTDeviceEventEmitter');
var RCTPushNotificationManager = NativeModules.RCTPushNotificationManager;
var RCTPushNotificationManager = NativeModules.PushNotificationManager;
if (RCTPushNotificationManager) {
var _initialNotification = RCTPushNotificationManager.initialNotification;
}

View File

@@ -37,6 +37,19 @@ var RCTRenderingPerf = {
ReactDefaultPerf.stop();
ReactDefaultPerf.printInclusive();
ReactDefaultPerf.printWasted();
var totalRender = 0;
var totalTime = 0;
var measurements = ReactDefaultPerf.getLastMeasurements();
for (var ii = 0; ii < measurements.length; ii++) {
var render = measurements[ii].render;
for (var nodeName in render) {
totalRender += render[nodeName];
}
totalTime += measurements[ii].totalTime;
}
console.log('Total time spent in render(): ' + totalRender + 'ms');
perfModules.forEach((module) => module.stop());
},

View File

@@ -1,25 +0,0 @@
/**
* Copyright 2004-present Facebook. All Rights Reserved.
*
* @providesModule nativeModulePrefixDuplicator
*/
'use strict';
// Dirty hack to support old (RK) and new (RCT) native module name conventions
function nativeModulePrefixDuplicator(modules) {
Object.keys(modules).forEach((moduleName) => {
var rkModuleName = moduleName.replace(/^RCT/, 'RK');
var rctModuleName = moduleName.replace(/^RK/, 'RCT');
if (rkModuleName !== rctModuleName) {
if (modules[rkModuleName] && modules[rctModuleName]) {
throw new Error(
'Module cannot be registered as both RCT and RK: ' + moduleName
);
}
modules[rkModuleName] = modules[moduleName];
modules[rctModuleName] = modules[moduleName];
}
});
}
module.exports = nativeModulePrefixDuplicator;

View File

@@ -0,0 +1,24 @@
/**
* Copyright 2004-present Facebook. All Rights Reserved.
*
* @providesModule nativeModulePrefixNormalizer
*/
'use strict';
// Dirty hack to support old (RK) and new (RCT) native module name conventions
function nativeModulePrefixNormalizer(modules) {
Object.keys(modules).forEach((moduleName) => {
var strippedName = moduleName.replace(/^(RCT|RK)/, '');
if (modules['RCT' + strippedName] && modules['RK' + strippedName]) {
throw new Error(
'Module cannot be registered as both RCT and RK: ' + moduleName
);
}
if (strippedName !== moduleName) {
modules[strippedName] = modules[moduleName];
delete modules[moduleName];
}
});
}
module.exports = nativeModulePrefixNormalizer;

View File

@@ -5,7 +5,8 @@
*/
'use strict';
var {RCTVibration} = require('NativeModules');
var RCTVibration = require('NativeModules').Vibration;
var invariant = require('invariant');
/**

View File

@@ -19,6 +19,8 @@ var addons = {
batchedUpdates: ReactUpdates.batchedUpdates,
cloneWithProps: cloneWithProps,
update: update,
Perf: undefined,
TestUtils: undefined,
};
if (__DEV__) {

View File

@@ -4,7 +4,6 @@ declare module "react-native" {
}
declare var AppRegistry: ReactClass<any, any, any>;
declare var ExpandingText: ReactClass<any, any, any>;
declare var Image: ReactClass<any, any, any>;
declare var ListView: ReactClass<any, any, any>;
declare var NavigatorIOS: ReactClass<any, any, any>;

View File

@@ -7,7 +7,29 @@
var ReactNative = {
...require('React'),
// Components
ActivityIndicatorIOS: require('ActivityIndicatorIOS'),
DatePickerIOS: require('DatePickerIOS'),
Image: require('Image'),
ListView: require('ListView'),
ListViewDataSource: require('ListViewDataSource'),
MapView: require('MapView'),
NavigatorIOS: require('NavigatorIOS'),
PickerIOS: require('PickerIOS'),
ScrollView: require('ScrollView'),
SliderIOS: require('SliderIOS'),
SwitchIOS: require('SwitchIOS'),
TabBarIOS: require('TabBarIOS'),
Text: require('Text'),
TextInput: require('TextInput'),
TouchableHighlight: require('TouchableHighlight'),
TouchableOpacity: require('TouchableOpacity'),
TouchableWithoutFeedback: require('TouchableWithoutFeedback'),
View: require('View'),
WebView: require('WebView'),
// APIs
AlertIOS: require('AlertIOS'),
Animation: require('Animation'),
AppRegistry: require('AppRegistry'),
@@ -15,32 +37,15 @@ var ReactNative = {
AppStateIOS: require('AppStateIOS'),
AsyncStorage: require('AsyncStorage'),
CameraRoll: require('CameraRoll'),
DatePickerIOS: require('DatePickerIOS'),
ExpandingText: require('ExpandingText'),
Image: require('Image'),
InteractionManager: require('InteractionManager'),
LayoutAnimation: require('LayoutAnimation'),
ListView: require('ListView'),
ListViewDataSource: require('ListViewDataSource'),
MapView: require('MapView'),
NavigatorIOS: require('NavigatorIOS'),
NetInfo: require('NetInfo'),
PickerIOS: require('PickerIOS'),
PixelRatio: require('PixelRatio'),
ScrollView: require('ScrollView'),
Slider: require('Slider'),
StatusBarIOS: require('StatusBarIOS'),
StyleSheet: require('StyleSheet'),
SwitchIOS: require('SwitchIOS'),
Text: require('Text'),
TextInput: require('TextInput'),
TimerMixin: require('TimerMixin'),
TouchableHighlight: require('TouchableHighlight'),
TouchableOpacity: require('TouchableOpacity'),
TouchableWithoutFeedback: require('TouchableWithoutFeedback'),
VibrationIOS: require('VibrationIOS'),
View: require('View'),
WebView: require('WebView'),
invariant: require('invariant'),
ix: require('ix'),
};