Skip to content

Commit b0f1bf0

Browse files
committed
fix(core): add options to useKeyPress
1 parent f3c1ac7 commit b0f1bf0

File tree

2 files changed

+36
-24
lines changed

2 files changed

+36
-24
lines changed

packages/core/src/composables/useKeyPress.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ import type { KeyFilter, KeyPredicate } from '@vueuse/core'
44
import { onKeyStroke, useEventListener } from '@vueuse/core'
55
import { useWindow } from './useWindow'
66

7+
export interface UseKeyPressOptions {
8+
actInsideInputWithModifier?: MaybeRefOrGetter<boolean>
9+
}
10+
711
export function isInputDOMNode(event: KeyboardEvent): boolean {
812
const target = (event.composedPath?.()?.[0] || event.target) as HTMLElement
913

@@ -72,7 +76,11 @@ function useKeyOrCode(code: string, keysToWatch: string | string[]) {
7276
* @param keyFilter - Can be a boolean, a string or an array of strings. If it's a boolean, it will always return that value. If it's a string, it will return true if the key is pressed. If it's an array of strings, it will return true if any of the keys are pressed, or a combination is pressed (e.g. ['ctrl+a', 'ctrl+b'])
7377
* @param onChange - Callback function that will be called when the key state changes
7478
*/
75-
export function useKeyPress(keyFilter: MaybeRefOrGetter<KeyFilter | null>, onChange?: (keyPressed: boolean) => void) {
79+
export function useKeyPress(
80+
keyFilter: MaybeRefOrGetter<KeyFilter | null>,
81+
onChange?: (keyPressed: boolean) => void,
82+
options: UseKeyPressOptions = { actInsideInputWithModifier: true },
83+
) {
7684
const window = useWindow()
7785

7886
const isPressed = ref(toValue(keyFilter) === true)

packages/core/src/container/Pane/Pane.vue

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -43,35 +43,39 @@ const containerBounds = ref<DOMRect>()
4343
4444
const hasActiveSelection = toRef(() => elementsSelectable.value && (isSelecting || userSelectionActive.value))
4545
46-
useKeyPress(deleteKeyCode, (keyPressed) => {
47-
if (!keyPressed) {
48-
return
49-
}
50-
51-
const nodesToRemove = getNodes.value.reduce<GraphNode[]>((res, node) => {
52-
if (!node.selected && node.parentNode && res.find((n) => n.id === node.parentNode)) {
53-
res.push(node)
54-
} else if (node.selected) {
55-
res.push(node)
46+
useKeyPress(
47+
deleteKeyCode,
48+
(keyPressed) => {
49+
if (!keyPressed) {
50+
return
5651
}
5752
58-
return res
59-
}, [])
53+
const nodesToRemove = getNodes.value.reduce<GraphNode[]>((res, node) => {
54+
if (!node.selected && node.parentNode && res.find((n) => n.id === node.parentNode)) {
55+
res.push(node)
56+
} else if (node.selected) {
57+
res.push(node)
58+
}
6059
61-
if (nodesToRemove || getSelectedEdges.value) {
62-
if (getSelectedEdges.value.length > 0) {
63-
removeEdges(getSelectedEdges.value)
64-
}
60+
return res
61+
}, [])
6562
66-
if (nodesToRemove.length > 0) {
67-
removeNodes(nodesToRemove)
68-
}
63+
if (nodesToRemove || getSelectedEdges.value) {
64+
if (getSelectedEdges.value.length > 0) {
65+
removeEdges(getSelectedEdges.value)
66+
}
6967
70-
nodesSelectionActive.value = false
68+
if (nodesToRemove.length > 0) {
69+
removeNodes(nodesToRemove)
70+
}
7171
72-
removeSelectedElements()
73-
}
74-
})
72+
nodesSelectionActive.value = false
73+
74+
removeSelectedElements()
75+
}
76+
},
77+
{ actInsideInputWithModifier: false },
78+
)
7579
7680
useKeyPress(multiSelectionKeyCode, (keyPressed) => {
7781
multiSelectionActive.value = keyPressed

0 commit comments

Comments
 (0)