[react-interactions] Prevent duplicate onPress firing for keyboard Enter (#17266)
* [react-interactions] Prevent duplicate onPress firing for keyboard Enter * address feedback
Dominic Gannaway committed
Nov 5, 2019 at 23:28 UTC
cd1bdcd0672d87f275a6394b055dea1016a7f29d
3 files changed
+8
-7
packages/react-interactions/events/src/dom/Press.js
+5
-2
@@ -97,7 +97,7 @@ function isValidKey(e): boolean {
97
const {key, target} = e;
98
const {tagName, isContentEditable} = (target: any);
99
return (
100
- (key === 'Enter' || key === ' ') &&
100
+ (key === 'Enter' || key === ' ' || key === 'Spacebar') &&
101
(tagName !== 'INPUT' &&
102
tagName !== 'TEXTAREA' &&
103
isContentEditable !== true)
@@ -106,7 +106,10 @@ function isValidKey(e): boolean {
106
107
function handlePreventDefault(preventDefault: ?boolean, e: any): void {
108
const key = e.key;
109
- if (preventDefault !== false && (key === ' ' || key === 'Enter')) {
109
+ if (
110
+ preventDefault !== false &&
111
+ (key === ' ' || key === 'Enter' || key === 'Spacebar')
112
+ ) {
113
e.preventDefault();
114
}
115
}
packages/react-interactions/events/src/dom/PressLegacy.js
+2
-3
@@ -570,15 +570,14 @@ const pressResponderImpl = {
570
metaKey,
571
shiftKey,
572
} = (nativeEvent: MouseEvent);
573
- if (nativeEvent.key === ' ') {
574
- nativeEvent.preventDefault();
575
- } else if (
573
+ if (
574
props.preventDefault !== false &&
575
!shiftKey &&
576
!metaKey &&
577
!ctrlKey &&
578
!altKey
579
) {
580
+ nativeEvent.preventDefault();
581
state.shouldPreventClick = true;
582
}
583
} else {
packages/react-interactions/events/src/dom/__tests__/PressLegacy-test.internal.js
+1
-2
@@ -914,8 +914,7 @@ describe.each(environmentTable)('Press responder', hasPointerEvents => {
914
ReactDOM.render(<Component />, container);
915
916
const target = createEventTarget(ref.current);
917
- target.keydown({key: 'Enter'});
918
- target.click({preventDefault});
917
+ target.keydown({key: 'Enter', preventDefault});
918
target.keyup({key: 'Enter'});
919
expect(preventDefault).toBeCalled();
920
expect(onPress).toHaveBeenCalledWith(