Added constraint of child type to touchablewithoutfeedback

Summary:
Added constraint of child type to touchablewithoutfeedback to match touchablehighlight (this would have failed silently previously), also added the cloneWithProps as by note of @vjeux
Closes https://github.com/facebook/react-native/pull/517
Github Author: Daniele Zannotti <d.zannotti@me.com>

Test Plan: Imported from GitHub, without a `Test Plan:` line.
This commit is contained in:
Daniele Zannotti 2015-04-04 10:14:51 -07:00
parent b6eeb61024
commit a2fa40f684
1 changed files with 22 additions and 3 deletions

View File

@ -13,8 +13,10 @@
var React = require('React');
var Touchable = require('Touchable');
var keyOf = require('keyOf');
var onlyChild = require('onlyChild');
var cloneWithProps = require('cloneWithProps');
var ensureComponentIsNative = require('ensureComponentIsNative');
/**
* When the scroll view is disabled, this defines how far your touch may move
@ -49,6 +51,14 @@ var TouchableWithoutFeedback = React.createClass({
return this.touchableGetInitialState();
},
componentDidMount: function() {
ensureComponentIsNative(this.refs[CHILD_REF]);
},
componentDidUpdate: function() {
ensureComponentIsNative(this.refs[CHILD_REF]);
},
/**
* `Touchable.Mixin` self callbacks. The mixin will invoke these if they are
* defined on your component.
@ -78,8 +88,15 @@ var TouchableWithoutFeedback = React.createClass({
},
render: function(): ReactElement {
// Note(vjeux): use cloneWithProps once React has been upgraded
var child = onlyChild(this.props.children);
var child = cloneWithProps(
onlyChild(this.props.children),
{
ref: CHILD_REF,
accessible: true,
testID: this.props.testID,
}
);
// Note(avik): remove dynamic typecast once Flow has been upgraded
return (React: any).cloneElement(child, {
accessible: true,
@ -94,4 +111,6 @@ var TouchableWithoutFeedback = React.createClass({
}
});
var CHILD_REF = keyOf({childRef: null});
module.exports = TouchableWithoutFeedback;