Skip to content

Commit 8facc05

Browse files
authored
[react-interactions] Allow event.preventDefault on LegacyPress responder (#17113)
[react-interactions] Allow event.preventDefault on LegacyPress responder
1 parent 7cec151 commit 8facc05

File tree

2 files changed

+25
-9
lines changed

2 files changed

+25
-9
lines changed

packages/react-interactions/events/src/dom/PressLegacy.js

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -157,9 +157,10 @@ function createPressEvent(
157157
let ctrlKey = false;
158158
let metaKey = false;
159159
let shiftKey = false;
160+
let nativeEvent;
160161

161162
if (event) {
162-
const nativeEvent = (event.nativeEvent: any);
163+
nativeEvent = (event.nativeEvent: any);
163164
({altKey, ctrlKey, metaKey, shiftKey} = nativeEvent);
164165
// Only check for one property, checking for all of them is costly. We can assume
165166
// if clientX exists, so do the rest.
@@ -169,7 +170,7 @@ function createPressEvent(
169170
({clientX, clientY, pageX, pageY, screenX, screenY} = eventObject);
170171
}
171172
}
172-
return {
173+
const pressEvent = {
173174
altKey,
174175
buttons: state.buttons,
175176
clientX,
@@ -189,13 +190,10 @@ function createPressEvent(
189190
x: clientX,
190191
y: clientY,
191192
preventDefault() {
192-
// NO-OP, we should remove this in the future
193-
if (__DEV__) {
194-
warning(
195-
false,
196-
'preventDefault is not available on event objects created from event responder modules (React Flare). ' +
197-
'Try wrapping in a conditional, i.e. `if (event.type !== "press") { event.preventDefault() }`',
198-
);
193+
state.shouldPreventClick = true;
194+
if (nativeEvent) {
195+
pressEvent.defaultPrevented = true;
196+
nativeEvent.preventDefault();
199197
}
200198
},
201199
stopPropagation() {
@@ -209,6 +207,7 @@ function createPressEvent(
209207
}
210208
},
211209
};
210+
return pressEvent;
212211
}
213212

214213
function dispatchEvent(

packages/react-interactions/events/src/dom/__tests__/PressLegacy-test.internal.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1131,4 +1131,21 @@ describe.each(environmentTable)('Press responder', hasPointerEvents => {
11311131
target.pointerup();
11321132
target.pointerdown();
11331133
});
1134+
1135+
it('event.preventDefault works as expected', () => {
1136+
const onPress = jest.fn(e => e.preventDefault());
1137+
const preventDefault = jest.fn();
1138+
const buttonRef = React.createRef();
1139+
1140+
const Component = () => {
1141+
const listener = usePress({onPress});
1142+
return <button ref={buttonRef} listeners={listener} />;
1143+
};
1144+
ReactDOM.render(<Component />, container);
1145+
1146+
const target = createEventTarget(buttonRef.current);
1147+
target.pointerdown();
1148+
target.pointerup({preventDefault});
1149+
expect(preventDefault).toBeCalled();
1150+
});
11341151
});

0 commit comments

Comments
 (0)