Skip to content

Commit ee40b3f

Browse files
committed
Add KeyboardEvent.code to synthetic event
1 parent 8b155d2 commit ee40b3f

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

packages/react-dom/src/events/SyntheticKeyboardEvent.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@ import getEventModifierState from './getEventModifierState';
1616
*/
1717
const SyntheticKeyboardEvent = SyntheticUIEvent.extend({
1818
key: getEventKey,
19+
code: function(event) {
20+
if (event.type === 'keydown' || event.type === 'keyup') {
21+
return event.code;
22+
}
23+
return 0;
24+
},
1925
location: null,
2026
ctrlKey: null,
2127
shiftKey: null,

packages/react-dom/src/events/__tests__/SyntheticKeyboardEvent-test.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,52 @@ describe('SyntheticKeyboardEvent', () => {
451451
});
452452
});
453453
});
454+
455+
describe('code', () => {
456+
it('returns code on `keydown`, `keyup` and 0 on `keypress`', () => {
457+
let codeDown = null;
458+
let codeUp = null;
459+
let codePress = null;
460+
const node = ReactDOM.render(
461+
<input
462+
onKeyDown={e => {
463+
codeDown = e.code;
464+
}}
465+
onKeyUp={e => {
466+
codeUp = e.code;
467+
}}
468+
onKeyPress={e => {
469+
codePress = e.code;
470+
}}
471+
/>,
472+
container,
473+
);
474+
node.dispatchEvent(
475+
new KeyboardEvent('keydown', {
476+
code: 'KeyQ',
477+
bubbles: true,
478+
cancelable: true,
479+
}),
480+
);
481+
node.dispatchEvent(
482+
new KeyboardEvent('keyup', {
483+
code: 'KeyQ',
484+
bubbles: true,
485+
cancelable: true,
486+
}),
487+
);
488+
node.dispatchEvent(
489+
new KeyboardEvent('keypress', {
490+
charCode: 81,
491+
bubbles: true,
492+
cancelable: true,
493+
}),
494+
);
495+
expect(codeDown).toBe('KeyQ');
496+
expect(codeUp).toBe('KeyQ');
497+
expect(codePress).toBe(0);
498+
});
499+
});
454500
});
455501

456502
describe('EventInterface', () => {

0 commit comments

Comments
 (0)