@@ -71,25 +71,37 @@ export function useKeyPress(keyFilter: MaybeRefOrGetter<KeyFilter | null>, onCha
7171
7272 watch (
7373 ( ) => toValue ( keyFilter ) ,
74- ( unrefKeyFilter ) => {
74+ ( nextKeyFilter , previousKeyFilter ) => {
7575 if ( window && typeof window . addEventListener !== 'undefined' ) {
7676 useEventListener ( window , 'blur' , ( ) => {
7777 isPressed . value = false
7878 } )
7979 }
8080
81- if ( isBoolean ( unrefKeyFilter ) ) {
82- isPressed . value = unrefKeyFilter
81+ // if the previous keyFilter was a boolean but is now something else, we need to reset the isPressed value
82+ if ( isBoolean ( previousKeyFilter ) && ! isBoolean ( nextKeyFilter ) ) {
83+ reset ( )
84+ }
85+
86+ // if the keyFilter is null, we just set the isPressed value to false
87+ if ( nextKeyFilter === null ) {
88+ reset ( )
89+ return
90+ }
91+
92+ // if the keyFilter is a boolean, we just set the isPressed value to that boolean
93+ if ( isBoolean ( nextKeyFilter ) ) {
94+ isPressed . value = nextKeyFilter
8395 return
8496 }
8597
86- if ( Array . isArray ( unrefKeyFilter ) || ( isString ( unrefKeyFilter ) && unrefKeyFilter . includes ( '+' ) ) ) {
87- unrefKeyFilter = createKeyPredicate ( unrefKeyFilter , pressedKeys )
98+ if ( Array . isArray ( nextKeyFilter ) || ( isString ( nextKeyFilter ) && nextKeyFilter . includes ( '+' ) ) ) {
99+ nextKeyFilter = createKeyPredicate ( nextKeyFilter , pressedKeys )
88100 }
89101
90- if ( unrefKeyFilter ) {
102+ if ( nextKeyFilter ) {
91103 onKeyStroke (
92- unrefKeyFilter ,
104+ nextKeyFilter ,
93105 ( e ) => {
94106 modifierPressed = wasModifierPressed ( e )
95107
@@ -105,18 +117,14 @@ export function useKeyPress(keyFilter: MaybeRefOrGetter<KeyFilter | null>, onCha
105117 )
106118
107119 onKeyStroke (
108- unrefKeyFilter ,
120+ nextKeyFilter ,
109121 ( e ) => {
110122 if ( isPressed . value ) {
111123 if ( ! modifierPressed && isInputDOMNode ( e ) ) {
112124 return
113125 }
114126
115- modifierPressed = false
116-
117- pressedKeys . clear ( )
118-
119- isPressed . value = false
127+ reset ( )
120128 }
121129 } ,
122130 { eventName : 'keyup' } ,
@@ -129,4 +137,12 @@ export function useKeyPress(keyFilter: MaybeRefOrGetter<KeyFilter | null>, onCha
129137 )
130138
131139 return isPressed
140+
141+ function reset ( ) {
142+ modifierPressed = false
143+
144+ pressedKeys . clear ( )
145+
146+ isPressed . value = false
147+ }
132148}
0 commit comments