Skip to content

Commit

Permalink
Added constraint of child type to touchablewithoutfeedback
Browse files Browse the repository at this point in the history
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 #517
Github Author: Daniele Zannotti <d.zannotti@me.com>

Test Plan: Imported from GitHub, without a `Test Plan:` line.
  • Loading branch information
dzannotti authored and oss sync committed Apr 12, 2015
1 parent 4b17561 commit 76c86c8
Showing 1 changed file with 22 additions and 3 deletions.
25 changes: 22 additions & 3 deletions Libraries/Components/Touchable/TouchableWithoutFeedback.js
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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,
Expand All @@ -94,4 +111,6 @@ var TouchableWithoutFeedback = React.createClass({
}
});

var CHILD_REF = keyOf({childRef: null});

module.exports = TouchableWithoutFeedback;

0 comments on commit 76c86c8

Please sign in to comment.