Skip to content

Commit c6215e8

Browse files
authoredNov 3, 2022
Fix pointer keys drag config (#553)
* fix: correctly resolve pointer.keys * tests: add test for drag and keydown * ci: changeset
1 parent 1c09e30 commit c6215e8

File tree

3 files changed

+29
-4
lines changed

3 files changed

+29
-4
lines changed
 

‎.changeset/great-carrots-grow.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@use-gesture/core': patch
3+
---
4+
5+
fix: properly resolve pointer.keys config

‎packages/core/src/config/dragConfigResolver.ts

+7-4
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,16 @@ export const dragConfigResolver = {
3737
if (!SUPPORT.touchscreen || preventScroll === false) return undefined
3838
return value ? value : preventScroll !== undefined ? 'y' : undefined
3939
},
40-
pointerCapture(this: InternalDragOptions, _v: any, _k: string, { pointer: { capture = true, buttons = 1 } = {} }) {
40+
pointerCapture(
41+
this: InternalDragOptions,
42+
_v: any,
43+
_k: string,
44+
{ pointer: { capture = true, buttons = 1, keys = true } = {} }
45+
) {
4146
this.pointerButtons = buttons
47+
this.keys = keys
4248
return !this.pointerLock && this.device === 'pointer' && capture
4349
},
44-
keys(value = true) {
45-
return value
46-
},
4750
threshold(
4851
this: InternalDragOptions,
4952
value: number | Vector2,

‎test/drag.test.tsx

+17
Original file line numberDiff line numberDiff line change
@@ -390,4 +390,21 @@ describe.each([
390390
expect(getByTestId(`${prefix}drag-active`)).toHaveTextContent(`false`)
391391
fireEvent.pointerUp(element, { pointerId: 26 })
392392
})
393+
394+
test(`drag should react to key press`, () => {
395+
rerender(<Component gestures={['Drag']} />)
396+
fireEvent.keyDown(element, { key: 'ArrowDown' })
397+
expect(getByTestId(`${prefix}drag-active`)).toHaveTextContent(`true`)
398+
expect(getByTestId(`${prefix}drag-offset`)).toHaveTextContent(`15,40`)
399+
fireEvent.keyDown(element, { key: 'ArrowLeft', shiftKey: true })
400+
expect(getByTestId(`${prefix}drag-offset`)).toHaveTextContent(`-85,40`)
401+
fireEvent.keyUp(element, { key: 'ArrowDown' })
402+
expect(getByTestId(`${prefix}drag-active`)).toHaveTextContent(`false`)
403+
})
404+
405+
test(`drag should not react to key press when pointer.key = false`, () => {
406+
rerender(<Component gestures={['Drag']} config={{ drag: { pointer: { keys: false } } }} />)
407+
fireEvent.keyDown(element, { key: 'ArrowDown' })
408+
expect(getByTestId(`${prefix}drag-active`)).toHaveTextContent(`false`)
409+
})
393410
})

0 commit comments

Comments
 (0)
Please sign in to comment.