Add onMoveShouldSetResponder to element enabled checking (#577)

* fix: add onMoveShouldSetResponder to element enabled checking

* Update src/fireEvent.js

Co-authored-by: Maciej Jastrzebski <mdjastrzebski@gmail.com>

Co-authored-by: Michał Pierzchała <thymikee@gmail.com>
Co-authored-by: Maciej Jastrzebski <mdjastrzebski@gmail.com>
This commit is contained in:
Abílio Costa
2020-11-03 18:14:40 +00:00
committed by GitHub
parent ec060011f3
commit 808aa3150e
2 changed files with 31 additions and 1 deletions
+25
View File
@@ -3,6 +3,7 @@ import React from 'react';
import {
View,
TouchableOpacity,
PanResponder,
Pressable,
Text,
ScrollView,
@@ -305,3 +306,27 @@ test('is not fooled by non-responder wrapping host elements', () => {
fireEvent.press(screen.getByText('Trigger'));
expect(handlePress).not.toHaveBeenCalled();
});
function TestDraggableComponent({ onDrag }) {
const responderHandlers = PanResponder.create({
onMoveShouldSetPanResponder: (_evt, _gestureState) => true,
onPanResponderMove: onDrag,
}).panHandlers;
return (
<View {...responderHandlers}>
<Text>Trigger</Text>
</View>
);
}
test('has only onMove', () => {
const handleDrag = jest.fn();
const screen = render(<TestDraggableComponent onDrag={handleDrag} />);
fireEvent(screen.getByText('Trigger'), 'responderMove', {
touchHistory: { mostRecentTimeStamp: '2', touchBank: [] },
});
expect(handleDrag).toHaveBeenCalled();
});
+6 -1
View File
@@ -23,7 +23,12 @@ const isEventEnabled = (
) => {
if (isTextInput(element)) return element?.props.editable !== false;
return touchResponder?.props.onStartShouldSetResponder?.() !== false;
const touchStart = touchResponder?.props.onStartShouldSetResponder?.();
const touchMove = touchResponder?.props.onMoveShouldSetResponder?.();
if (touchStart || touchMove) return true;
return touchStart === undefined && touchMove === undefined;
};
const findEventHandler = (