@@ -22,28 +22,7 @@ export const isModifierKey = (nativeEvent: any): boolean => {
22
22
) ;
23
23
} ;
24
24
25
- /**
26
- * Re-usable hook for an onKeyDown event.
27
- * @param userCallback The function you want to be called once the key has been activated on key up
28
- * @param keys A string of the key you want to perform some action on. If undefined, always invokes userCallback
29
- * @returns onKeyEvent() - Callback to determine if key was pressed, if so, call userCallback
30
- * @deprecated use the hook `useKeyProps` instead
31
- */
32
- export function useKeyCallback ( userCallback ?: KeyCallback , ...keys : string [ ] ) {
33
- const onKeyEvent = React . useCallback (
34
- ( e : KeyPressEvent ) => {
35
- if ( userCallback !== undefined && ( keys === undefined || keys . includes ( e . nativeEvent . key ) ) ) {
36
- userCallback ( e ) ;
37
- e . stopPropagation ( ) ;
38
- }
39
- } ,
40
- [ keys , userCallback ] ,
41
- ) ;
42
-
43
- return onKeyEvent ;
44
- }
45
-
46
- function getKeyCallbackWorker ( userCallback ?: KeyCallback , ...keys : string [ ] ) {
25
+ function keyPressCallback ( userCallback ?: KeyCallback , ...keys : string [ ] ) {
47
26
const onKeyEvent = ( e : KeyPressEvent ) => {
48
27
if ( userCallback !== undefined && ! isModifierKey ( e . nativeEvent ) && ( keys === undefined || keys . includes ( e . nativeEvent . key ) ) ) {
49
28
userCallback ( e ) ;
@@ -58,18 +37,20 @@ function getKeyUpPropsWorker(userCallback: KeyCallback, ...keys: string[]): KeyP
58
37
ios : undefined ,
59
38
android : undefined ,
60
39
macos : {
61
- onKeyUp : getKeyCallbackWorker ( userCallback , ...keys ) ,
40
+ onKeyUp : keyPressCallback ( userCallback , ...keys ) ,
62
41
validKeysUp : keys ,
63
42
} ,
64
43
windows : {
65
- onKeyUp : getKeyCallbackWorker ( userCallback , ...keys ) ,
66
- keyUpEvents : keys . map ( ( keyCode ) => {
67
- return { key : keyCode } ;
68
- } ) ,
44
+ /**
45
+ * https://github.com/microsoft/react-native-windows/issues/11049
46
+ * Windows doesn't filter on `key` but on `code`, which is quite different ('A' vs 'KeyA' or 'GamepadA').
47
+ * While this discrepancy is present, let's not specify `keyUpEvents`.
48
+ */
49
+ onKeyUp : keyPressCallback ( userCallback , ...keys ) ,
69
50
} ,
70
51
// win32
71
52
default : {
72
- onKeyUp : getKeyCallbackWorker ( userCallback , ...keys ) ,
53
+ onKeyUp : keyPressCallback ( userCallback , ...keys ) ,
73
54
keyUpEvents : keys . map ( ( keyCode ) => {
74
55
return { key : keyCode } ;
75
56
} ) ,
@@ -83,18 +64,20 @@ function getKeyDownPropsWorker(userCallback: KeyCallback, ...keys: string[]): Ke
83
64
ios : undefined ,
84
65
android : undefined ,
85
66
macos : {
86
- onKeyDown : getKeyCallbackWorker ( userCallback , ...keys ) ,
67
+ onKeyDown : keyPressCallback ( userCallback , ...keys ) ,
87
68
validKeysDown : keys ,
88
69
} ,
89
70
windows : {
90
- onKeyDown : getKeyCallbackWorker ( userCallback , ...keys ) ,
91
- keyDownEvents : keys . map ( ( keyCode ) => {
92
- return { key : keyCode } ;
93
- } ) ,
71
+ /**
72
+ * https://github.com/microsoft/react-native-windows/issues/11049
73
+ * Windows doesn't filter on `key` but on `code`, which is quite different ('A' vs 'KeyA' or 'GamepadA').
74
+ * While this discrepancy is present, let's not specify `keyDownEvents`.
75
+ */
76
+ onKeyDown : keyPressCallback ( userCallback , ...keys ) ,
94
77
} ,
95
78
// win32
96
79
default : {
97
- onKeyDown : getKeyCallbackWorker ( userCallback , ...keys ) ,
80
+ onKeyDown : keyPressCallback ( userCallback , ...keys ) ,
98
81
keyDownEvents : keys . map ( ( keyCode ) => {
99
82
return { key : keyCode } ;
100
83
} ) ,
@@ -132,3 +115,24 @@ export const preferKeyDownForKeyEvents = Platform.select({
132
115
* @returns KeyPressProps: An object containing the correct platform specific props to handle key press
133
116
*/
134
117
export const useKeyProps = preferKeyDownForKeyEvents ? useKeyDownProps : useKeyUpProps ;
118
+
119
+ /**
120
+ * Re-usable hook for an onKeyDown event.
121
+ * @param userCallback The function you want to be called once the key has been activated on key up
122
+ * @param keys A string of the key you want to perform some action on. If undefined, always invokes userCallback
123
+ * @returns onKeyEvent() - Callback to determine if key was pressed, if so, call userCallback
124
+ * @deprecated use the hook `useKeyProps` instead
125
+ */
126
+ export function useKeyCallback ( userCallback ?: KeyCallback , ...keys : string [ ] ) {
127
+ const onKeyEvent = React . useCallback (
128
+ ( e : KeyPressEvent ) => {
129
+ if ( userCallback !== undefined && ( keys === undefined || keys . includes ( e . nativeEvent . key ) ) ) {
130
+ userCallback ( e ) ;
131
+ e . stopPropagation ( ) ;
132
+ }
133
+ } ,
134
+ [ keys , userCallback ] ,
135
+ ) ;
136
+
137
+ return onKeyEvent ;
138
+ }
0 commit comments