Skip to content

Commit 505ecc4

Browse files
committed
fix(core): reset isPressed value when switching from boolean to other keyfilter
1 parent 65c3a05 commit 505ecc4

File tree

1 file changed

+29
-13
lines changed

1 file changed

+29
-13
lines changed

packages/core/src/composables/useKeyPress.ts

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)