mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
@@ -62,13 +62,15 @@ var dependencies = [
|
||||
topLevelTypes.topMouseUp
|
||||
];
|
||||
|
||||
var touchDependencies = [
|
||||
topLevelTypes.topTouchStart,
|
||||
topLevelTypes.topTouchCancel,
|
||||
topLevelTypes.topTouchEnd,
|
||||
topLevelTypes.topTouchMove
|
||||
];
|
||||
|
||||
if (EventPluginUtils.useTouchEvents) {
|
||||
dependencies.push(
|
||||
topLevelTypes.topTouchCancel,
|
||||
topLevelTypes.topTouchEnd,
|
||||
topLevelTypes.topTouchStart,
|
||||
topLevelTypes.topTouchMove
|
||||
);
|
||||
dependencies = dependencies.concat(touchDependencies);
|
||||
}
|
||||
|
||||
var eventTypes = {
|
||||
@@ -81,6 +83,10 @@ var eventTypes = {
|
||||
}
|
||||
};
|
||||
|
||||
var usedTouch = false;
|
||||
var usedTouchTime = 0;
|
||||
var TOUCH_DELAY = 500;
|
||||
|
||||
var TapEventPlugin = {
|
||||
|
||||
tapMoveThreshold: tapMoveThreshold,
|
||||
@@ -103,6 +109,17 @@ var TapEventPlugin = {
|
||||
if (!isStartish(topLevelType) && !isEndish(topLevelType)) {
|
||||
return null;
|
||||
}
|
||||
// on ios, there is a delay after touch event and synthetic
|
||||
// mouse events, so that user can perform double tap
|
||||
// solution: ignore mouse events following touchevent within small timeframe
|
||||
if (touchDependencies.indexOf(topLevelType) !== -1) {
|
||||
usedTouch = true;
|
||||
usedTouchTime = Date.now();
|
||||
} else {
|
||||
if (usedTouch && (Date.now() - usedTouchTime < TOUCH_DELAY)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
var event = null;
|
||||
var distance = getDistance(startCoords, nativeEvent);
|
||||
if (isEndish(topLevelType) && distance < tapMoveThreshold) {
|
||||
|
||||
@@ -407,8 +407,32 @@ describe('ReactPropTypes', function() {
|
||||
});
|
||||
|
||||
it('should still work for deprecated typechecks', function() {
|
||||
typeCheckPass(PropTypes.renderable, []);
|
||||
typeCheckPass(PropTypes.renderable.isRequired, []);
|
||||
// We can't use typeCheckPass here because the warning module may do
|
||||
// something different in some environments. Luckily they should be fine
|
||||
// if they detect that console.warn is spied upon.
|
||||
spyOn(console, 'warn');
|
||||
|
||||
// typeCheckPass(PropTypes.renderable, []);
|
||||
var error = PropTypes.renderable(
|
||||
{testProp: []},
|
||||
'testProp',
|
||||
'testComponent',
|
||||
ReactPropTypeLocations.prop
|
||||
);
|
||||
|
||||
expect(error).toBe(undefined);
|
||||
expect(console.warn.calls.length).toBe(1);
|
||||
|
||||
// typeCheckPass(PropTypes.renderable.isRequired, []);
|
||||
error = PropTypes.renderable.isRequired(
|
||||
{testProp: []},
|
||||
'testProp',
|
||||
'testComponent',
|
||||
ReactPropTypeLocations.prop
|
||||
);
|
||||
|
||||
expect(error).toBe(undefined);
|
||||
expect(console.warn.calls.length).toBe(1);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user