@@ -22,28 +22,7 @@ export const isModifierKey = (nativeEvent: any): boolean => {
2222 ) ;
2323} ;
2424
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 [ ] ) {
4726 const onKeyEvent = ( e : KeyPressEvent ) => {
4827 if ( userCallback !== undefined && ! isModifierKey ( e . nativeEvent ) && ( keys === undefined || keys . includes ( e . nativeEvent . key ) ) ) {
4928 userCallback ( e ) ;
@@ -58,18 +37,20 @@ function getKeyUpPropsWorker(userCallback: KeyCallback, ...keys: string[]): KeyP
5837 ios : undefined ,
5938 android : undefined ,
6039 macos : {
61- onKeyUp : getKeyCallbackWorker ( userCallback , ...keys ) ,
40+ onKeyUp : keyPressCallback ( userCallback , ...keys ) ,
6241 validKeysUp : keys ,
6342 } ,
6443 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 ) ,
6950 } ,
7051 // win32
7152 default : {
72- onKeyUp : getKeyCallbackWorker ( userCallback , ...keys ) ,
53+ onKeyUp : keyPressCallback ( userCallback , ...keys ) ,
7354 keyUpEvents : keys . map ( ( keyCode ) => {
7455 return { key : keyCode } ;
7556 } ) ,
@@ -83,18 +64,20 @@ function getKeyDownPropsWorker(userCallback: KeyCallback, ...keys: string[]): Ke
8364 ios : undefined ,
8465 android : undefined ,
8566 macos : {
86- onKeyDown : getKeyCallbackWorker ( userCallback , ...keys ) ,
67+ onKeyDown : keyPressCallback ( userCallback , ...keys ) ,
8768 validKeysDown : keys ,
8869 } ,
8970 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 ) ,
9477 } ,
9578 // win32
9679 default : {
97- onKeyDown : getKeyCallbackWorker ( userCallback , ...keys ) ,
80+ onKeyDown : keyPressCallback ( userCallback , ...keys ) ,
9881 keyDownEvents : keys . map ( ( keyCode ) => {
9982 return { key : keyCode } ;
10083 } ) ,
@@ -132,3 +115,24 @@ export const preferKeyDownForKeyEvents = Platform.select({
132115 * @returns KeyPressProps: An object containing the correct platform specific props to handle key press
133116 */
134117export 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