From a3c8a155c2a7eb2f6f51b5728eda21eb505ad700 Mon Sep 17 00:00:00 2001 From: Enix Date: Tue, 24 Sep 2019 16:38:10 +0800 Subject: [PATCH] fix: capture keyboard event that has no key --- src/utils/keyHelper.ts | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/utils/keyHelper.ts b/src/utils/keyHelper.ts index b048c07..ad456d4 100644 --- a/src/utils/keyHelper.ts +++ b/src/utils/keyHelper.ts @@ -38,15 +38,20 @@ function parseKeyCode(code: string) { function parseEvent(e: KeyboardEvent | React.KeyboardEvent) { const { altKey: alt, shiftKey: shift, metaKey: meta, ctrlKey: ctrl } = e - const code = parseKeyCode(e.key) - const keys = { meta, ctrl, shift, alt, [code]: true } - const combination = parse( - Object.entries(keys) - .filter(([key, pressed]) => pressed) - .map(([key, pressed]) => key) - .join('+') - ) - return combination + try { + const code = parseKeyCode(e.key) + const keys = { meta, ctrl, shift, alt, [code]: true } + const combination = parse( + Object.entries(keys) + .filter(([key, pressed]) => pressed) + .map(([key, pressed]) => key) + .join('+'), + ) + return combination + } catch (err) { + const serializedKeyData = JSON.stringify({ keyCode: e.keyCode, key: e.key }) + throw new Error(`Error parse keyboard event: ${serializedKeyData}`) + } } export default {