Skip to content

Commit e61c9e0

Browse files
authored
[Flare] Fix Press retention state regression (#15936)
1 parent 76864f7 commit e61c9e0

2 files changed

Lines changed: 52 additions & 1 deletion

File tree

packages/react-events/src/Press.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,7 @@ function updateIsPressWithinResponderRegion(
576576
props: PressProps,
577577
state: PressState,
578578
): void {
579+
let isPressWithinResponderRegion = true;
579580
if (
580581
state.pressTarget != null &&
581582
!context.isTargetWithinElement(target, state.pressTarget)
@@ -607,7 +608,7 @@ function updateIsPressWithinResponderRegion(
607608
}
608609
const {clientX: x, clientY: y} = (nativeEventOrTouchEvent: any);
609610

610-
state.isPressWithinResponderRegion =
611+
isPressWithinResponderRegion =
611612
left != null &&
612613
right != null &&
613614
top != null &&
@@ -616,6 +617,7 @@ function updateIsPressWithinResponderRegion(
616617
y !== null &&
617618
(x >= left && x <= right && y >= top && y <= bottom);
618619
}
620+
state.isPressWithinResponderRegion = isPressWithinResponderRegion;
619621
}
620622

621623
const PressResponder = {

packages/react-events/src/__tests__/Press-test.internal.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1049,6 +1049,55 @@ describe('Event responder: Press', () => {
10491049
]);
10501050
});
10511051

1052+
it('no delay and "onPress*" events are correctly called with target change', () => {
1053+
let events = [];
1054+
const outerRef = React.createRef();
1055+
const innerRef = React.createRef();
1056+
const createEventHandler = msg => () => {
1057+
events.push(msg);
1058+
};
1059+
1060+
const element = (
1061+
<div ref={outerRef}>
1062+
<Press
1063+
onPress={createEventHandler('onPress')}
1064+
onPressChange={createEventHandler('onPressChange')}
1065+
onPressMove={createEventHandler('onPressMove')}
1066+
onPressStart={createEventHandler('onPressStart')}
1067+
onPressEnd={createEventHandler('onPressEnd')}>
1068+
<div ref={innerRef} />
1069+
</Press>
1070+
</div>
1071+
);
1072+
1073+
ReactDOM.render(element, container);
1074+
1075+
innerRef.current.getBoundingClientRect = getBoundingClientRectMock;
1076+
innerRef.current.dispatchEvent(createEvent('pointerdown'));
1077+
outerRef.current.dispatchEvent(
1078+
createEvent('pointermove', coordinatesOutside),
1079+
);
1080+
innerRef.current.dispatchEvent(
1081+
createEvent('pointermove', coordinatesInside),
1082+
);
1083+
innerRef.current.dispatchEvent(
1084+
createEvent('pointerup', coordinatesInside),
1085+
);
1086+
jest.runAllTimers();
1087+
1088+
expect(events).toEqual([
1089+
'onPressStart',
1090+
'onPressChange',
1091+
'onPressEnd',
1092+
'onPressChange',
1093+
'onPressStart',
1094+
'onPressChange',
1095+
'onPressEnd',
1096+
'onPressChange',
1097+
'onPress',
1098+
]);
1099+
});
1100+
10521101
it('delay and "onPressMove" is called before "onPress*" events', () => {
10531102
let events = [];
10541103
const ref = React.createRef();

0 commit comments

Comments
 (0)