From bd36253cd0577210561e3751c4b68ed226a3714a Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Sun, 31 Jul 2022 14:48:23 +0200 Subject: [PATCH] refactor(viewpane): accept KeyFilter instead of KeyCode # What's changed? * accept type of `KeyFilter` instead of `KeyCode` for zoom/select/delete keypress * don't filter on input dom elements --- .../vue-flow/src/composables/useKeyPress.ts | 33 +++++++------------ .../container/SelectionPane/SelectionPane.vue | 9 +++-- .../src/container/Viewport/Viewport.vue | 4 +-- packages/vue-flow/src/types/flow.ts | 11 ++++--- packages/vue-flow/src/types/store.ts | 11 ++++--- packages/vue-flow/src/types/zoom.ts | 2 -- packages/vue-flow/src/utils/graph.ts | 10 ------ 7 files changed, 29 insertions(+), 51 deletions(-) diff --git a/packages/vue-flow/src/composables/useKeyPress.ts b/packages/vue-flow/src/composables/useKeyPress.ts index 02d8150e..8a5ad20d 100644 --- a/packages/vue-flow/src/composables/useKeyPress.ts +++ b/packages/vue-flow/src/composables/useKeyPress.ts @@ -1,43 +1,32 @@ import type { Ref } from 'vue' -import { onKeyDown, onKeyPressed, onKeyUp } from '@vueuse/core' +import type { KeyFilter } from '@vueuse/core' import useWindow from './useWindow' -import type { KeyCode } from '~/types' -import { isInputDOMNode } from '~/utils' -export default (keyCode: Ref, onChange?: (keyPressed: boolean) => void): Ref => { +export default (keyFilter: KeyFilter, onChange?: (keyPressed: boolean) => void): Ref => { const window = useWindow() let isPressed = $ref(false) - watchEffect( - () => { - if (onChange && typeof onChange === 'function') onChange(isPressed) - }, - { flush: 'post' }, - ) + watch($$(isPressed), () => { + if (onChange && typeof onChange === 'function') onChange(isPressed) + }) - onKeyPressed( - (e) => !isInputDOMNode(e) && (e.key === keyCode.value || e.keyCode === keyCode.value), + onKeyStroke( + keyFilter, (e) => { e.preventDefault() isPressed = true }, + { eventName: 'keydown' }, ) - onKeyDown( - (e) => !isInputDOMNode(e) && (e.key === keyCode.value || e.keyCode === keyCode.value), - (e) => { - e.preventDefault() - isPressed = true - }, - ) - - onKeyUp( - (e) => !isInputDOMNode(e) && (e.key === keyCode.value || e.keyCode === keyCode.value), + onKeyStroke( + keyFilter, (e) => { e.preventDefault() isPressed = false }, + { eventName: 'keyup' }, ) if (typeof window.addEventListener !== 'undefined') { diff --git a/packages/vue-flow/src/container/SelectionPane/SelectionPane.vue b/packages/vue-flow/src/container/SelectionPane/SelectionPane.vue index 5a778b59..b17f8e79 100644 --- a/packages/vue-flow/src/container/SelectionPane/SelectionPane.vue +++ b/packages/vue-flow/src/container/SelectionPane/SelectionPane.vue @@ -1,7 +1,6 @@