From 3cc717e4490261cecd0c1cb71a55dc7e76c7682f Mon Sep 17 00:00:00 2001 From: Nick Reiley Date: Thu, 12 Mar 2020 08:56:04 +0500 Subject: [PATCH] Add KeyboardEvent.code to synthetic event --- .../src/events/SyntheticKeyboardEvent.js | 6 +++ .../__tests__/SyntheticKeyboardEvent-test.js | 46 +++++++++++++++++++ .../events/src/dom/Keyboard.js | 1 + 3 files changed, 53 insertions(+) diff --git a/packages/react-dom/src/events/SyntheticKeyboardEvent.js b/packages/react-dom/src/events/SyntheticKeyboardEvent.js index ef1ceedebe64e..2db2dd179303b 100644 --- a/packages/react-dom/src/events/SyntheticKeyboardEvent.js +++ b/packages/react-dom/src/events/SyntheticKeyboardEvent.js @@ -16,6 +16,12 @@ import getEventModifierState from './getEventModifierState'; */ const SyntheticKeyboardEvent = SyntheticUIEvent.extend({ key: getEventKey, + code: function(event) { + if (event.type === 'keydown' || event.type === 'keyup') { + return event.code; + } + return 0; + }, location: null, ctrlKey: null, shiftKey: null, diff --git a/packages/react-dom/src/events/__tests__/SyntheticKeyboardEvent-test.js b/packages/react-dom/src/events/__tests__/SyntheticKeyboardEvent-test.js index 06673f0fbe045..9426e58baeb9d 100644 --- a/packages/react-dom/src/events/__tests__/SyntheticKeyboardEvent-test.js +++ b/packages/react-dom/src/events/__tests__/SyntheticKeyboardEvent-test.js @@ -451,6 +451,52 @@ describe('SyntheticKeyboardEvent', () => { }); }); }); + + describe('code', () => { + it('returns code on `keydown`, `keyup` and 0 on `keypress`', () => { + let codeDown = null; + let codeUp = null; + let codePress = null; + const node = ReactDOM.render( + { + codeDown = e.code; + }} + onKeyUp={e => { + codeUp = e.code; + }} + onKeyPress={e => { + codePress = e.code; + }} + />, + container, + ); + node.dispatchEvent( + new KeyboardEvent('keydown', { + code: 'KeyQ', + bubbles: true, + cancelable: true, + }), + ); + node.dispatchEvent( + new KeyboardEvent('keyup', { + code: 'KeyQ', + bubbles: true, + cancelable: true, + }), + ); + node.dispatchEvent( + new KeyboardEvent('keypress', { + charCode: 81, + bubbles: true, + cancelable: true, + }), + ); + expect(codeDown).toBe('KeyQ'); + expect(codeUp).toBe('KeyQ'); + expect(codePress).toBe(0); + }); + }); }); describe('EventInterface', () => { diff --git a/packages/react-interactions/events/src/dom/Keyboard.js b/packages/react-interactions/events/src/dom/Keyboard.js index 4e8a23ded61ab..d56e6a83211f7 100644 --- a/packages/react-interactions/events/src/dom/Keyboard.js +++ b/packages/react-interactions/events/src/dom/Keyboard.js @@ -39,6 +39,7 @@ export type KeyboardEvent = {| defaultPrevented: boolean, isComposing?: boolean, key?: string, + code?: string, metaKey: boolean, pointerType: 'keyboard', shiftKey: boolean,