refactor: use watchEffect for keypress

This commit is contained in:
Braks
2022-05-11 22:10:40 +02:00
parent 412c0e500f
commit 8e91e4a8e5
+15 -13
View File
@@ -7,44 +7,46 @@ import { isInputDOMNode } from '~/utils'
export default (keyCode: Ref<KeyCode>, onChange?: (keyPressed: boolean) => void): Ref<boolean> => { export default (keyCode: Ref<KeyCode>, onChange?: (keyPressed: boolean) => void): Ref<boolean> => {
const window = useWindow() const window = useWindow()
const isPressed = controlledRef<boolean>(false, { let isPressed = $ref(false)
onBeforeChange(val, oldVal) {
if (val === oldVal) return false watchEffect(
() => {
if (onChange && typeof onChange === 'function') onChange(isPressed)
}, },
onChanged() { { flush: 'post' },
if (onChange && typeof onChange === 'function') onChange(isPressed.value) )
},
})
onKeyPressed( onKeyPressed(
(e) => !isInputDOMNode(e) && (e.key === keyCode.value || e.keyCode === keyCode.value), (e) => !isInputDOMNode(e) && (e.key === keyCode.value || e.keyCode === keyCode.value),
(e) => { (e) => {
e.preventDefault() e.preventDefault()
isPressed.value = true isPressed = true
}, },
) )
onKeyDown( onKeyDown(
(e) => !isInputDOMNode(e) && (e.key === keyCode.value || e.keyCode === keyCode.value), (e) => !isInputDOMNode(e) && (e.key === keyCode.value || e.keyCode === keyCode.value),
(e) => { (e) => {
e.preventDefault() e.preventDefault()
isPressed.value = true isPressed = true
}, },
) )
onKeyUp( onKeyUp(
(e) => !isInputDOMNode(e) && (e.key === keyCode.value || e.keyCode === keyCode.value), (e) => !isInputDOMNode(e) && (e.key === keyCode.value || e.keyCode === keyCode.value),
(e) => { (e) => {
e.preventDefault() e.preventDefault()
isPressed.value = false isPressed = false
}, },
) )
if (typeof window.addEventListener !== 'undefined') { if (typeof window.addEventListener !== 'undefined') {
useEventListener(window, 'blur', () => { useEventListener(window, 'blur', () => {
isPressed.value = false isPressed = false
}) })
} }
if (onChange && typeof onChange === 'function') onChange(isPressed.value) if (onChange && typeof onChange === 'function') onChange(isPressed)
return isPressed return $$(isPressed)
} }