diff --git a/src/__tests__/fireEvent.test.tsx b/src/__tests__/fireEvent.test.tsx
index d5e337688..a8a7dca84 100644
--- a/src/__tests__/fireEvent.test.tsx
+++ b/src/__tests__/fireEvent.test.tsx
@@ -333,6 +333,40 @@ test('should not fire on box-only pointerEvents View with nested elements', () =
expect(handlePress).not.toHaveBeenCalled();
});
+test('should fire non-pointer events on box-none pointerEvents View', () => {
+ const handleTouchStart = jest.fn();
+
+ const screen = render(
+
+ {}}>
+ Trigger
+
+
+ );
+
+ fireEvent(screen.getByTestId('touch-start-view'), 'touchStart');
+ expect(handleTouchStart).toHaveBeenCalled();
+});
+
+test('should fire non-touch events on box-none pointerEvents View', () => {
+ const handleLayout = jest.fn();
+
+ const screen = render(
+
+ {}}>
+ Trigger
+
+
+ );
+
+ fireEvent(screen.getByTestId('layout-view'), 'layout');
+ expect(handleLayout).toHaveBeenCalled();
+});
+
test('should pass event up on disabled TouchableOpacity', () => {
const handleInnerPress = jest.fn();
const handleOuterPress = jest.fn();
diff --git a/src/fireEvent.ts b/src/fireEvent.ts
index 3fa931a6e..0f95381e4 100644
--- a/src/fireEvent.ts
+++ b/src/fireEvent.ts
@@ -35,12 +35,17 @@ const isPointerEventEnabled = (
return isPointerEventEnabled(element.parent, true);
};
+const isTouchEvent = (eventName?: string) => {
+ return eventName === 'press';
+};
+
const isEventEnabled = (
element?: ReactTestInstance,
- touchResponder?: ReactTestInstance
+ touchResponder?: ReactTestInstance,
+ eventName?: string
) => {
if (isTextInput(element)) return element?.props.editable !== false;
- if (!isPointerEventEnabled(element)) return false;
+ if (!isPointerEventEnabled(element) && isTouchEvent(eventName)) return false;
const touchStart = touchResponder?.props.onStartShouldSetResponder?.();
const touchMove = touchResponder?.props.onMoveShouldSetResponder?.();
@@ -61,7 +66,8 @@ const findEventHandler = (
: nearestTouchResponder;
const handler = getEventHandler(element, eventName);
- if (handler && isEventEnabled(element, touchResponder)) return handler;
+ if (handler && isEventEnabled(element, touchResponder, eventName))
+ return handler;
if (element.parent === null || element.parent.parent === null) {
return null;