@@ -71,25 +71,37 @@ export function useKeyPress(keyFilter: MaybeRefOrGetter<KeyFilter | null>, onCha
71
71
72
72
watch (
73
73
( ) => toValue ( keyFilter ) ,
74
- ( unrefKeyFilter ) => {
74
+ ( nextKeyFilter , previousKeyFilter ) => {
75
75
if ( window && typeof window . addEventListener !== 'undefined' ) {
76
76
useEventListener ( window , 'blur' , ( ) => {
77
77
isPressed . value = false
78
78
} )
79
79
}
80
80
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
83
95
return
84
96
}
85
97
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 )
88
100
}
89
101
90
- if ( unrefKeyFilter ) {
102
+ if ( nextKeyFilter ) {
91
103
onKeyStroke (
92
- unrefKeyFilter ,
104
+ nextKeyFilter ,
93
105
( e ) => {
94
106
modifierPressed = wasModifierPressed ( e )
95
107
@@ -105,18 +117,14 @@ export function useKeyPress(keyFilter: MaybeRefOrGetter<KeyFilter | null>, onCha
105
117
)
106
118
107
119
onKeyStroke (
108
- unrefKeyFilter ,
120
+ nextKeyFilter ,
109
121
( e ) => {
110
122
if ( isPressed . value ) {
111
123
if ( ! modifierPressed && isInputDOMNode ( e ) ) {
112
124
return
113
125
}
114
126
115
- modifierPressed = false
116
-
117
- pressedKeys . clear ( )
118
-
119
- isPressed . value = false
127
+ reset ( )
120
128
}
121
129
} ,
122
130
{ eventName : 'keyup' } ,
@@ -129,4 +137,12 @@ export function useKeyPress(keyFilter: MaybeRefOrGetter<KeyFilter | null>, onCha
129
137
)
130
138
131
139
return isPressed
140
+
141
+ function reset ( ) {
142
+ modifierPressed = false
143
+
144
+ pressedKeys . clear ( )
145
+
146
+ isPressed . value = false
147
+ }
132
148
}
0 commit comments