Skip to content

Commit b24f2e6

Browse files
committed
fix(useSelect): preventDefault on item props onMouseDown
1 parent 7d8c32d commit b24f2e6

File tree

3 files changed

+45
-1
lines changed

3 files changed

+45
-1
lines changed

src/hooks/useSelect/__tests__/getItemProps.test.js

+38
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,44 @@ describe('getItemProps', () => {
123123
expect(result.current.highlightedIndex).toBe(1)
124124
})
125125

126+
test('event handler onMouseDown is called along with downshift handler', () => {
127+
const userOnMouseDown = jest.fn()
128+
const preventDefault = jest.fn()
129+
const {result} = renderUseSelect({initialIsOpen: true})
130+
131+
act(() => {
132+
const {onMouseDown} = result.current.getItemProps({
133+
index: 1,
134+
onMouseDown: userOnMouseDown,
135+
})
136+
137+
onMouseDown({preventDefault})
138+
})
139+
140+
expect(userOnMouseDown).toHaveBeenCalledTimes(1)
141+
expect(preventDefault).toHaveBeenCalledTimes(1)
142+
})
143+
144+
test("event handler onMouseDown is called without downshift handler if 'preventDownshiftDefault' is passed in user event", () => {
145+
const userOnMouseDown = jest.fn(event => {
146+
event.preventDownshiftDefault = true
147+
})
148+
const preventDefault = jest.fn()
149+
const {result} = renderUseSelect({initialIsOpen: true})
150+
151+
act(() => {
152+
const {onMouseDown} = result.current.getItemProps({
153+
index: 0,
154+
onMouseDown: userOnMouseDown,
155+
})
156+
157+
onMouseDown({preventDefault})
158+
})
159+
160+
expect(userOnMouseDown).toHaveBeenCalledTimes(1)
161+
expect(preventDefault).not.toHaveBeenCalled()
162+
})
163+
126164
test("event handler onClick is called without downshift handler if 'preventDownshiftDefault' is passed in user event", () => {
127165
const userOnClick = jest.fn(event => {
128166
event.preventDownshiftDefault = true

src/hooks/useSelect/index.js

+6
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,7 @@ function useSelect(userProps = {}) {
451451
index: indexProp,
452452
onMouseMove,
453453
onClick,
454+
onMouseDown,
454455
onPress,
455456
refKey = 'ref',
456457
disabled: disabledProp,
@@ -489,6 +490,7 @@ function useSelect(userProps = {}) {
489490
index,
490491
})
491492
}
493+
const itemHandleMouseDown = e => e.preventDefault()
492494

493495
const itemProps = {
494496
[refKey]: handleRefs(ref, itemNode => {
@@ -516,6 +518,10 @@ function useSelect(userProps = {}) {
516518
onMouseMove,
517519
itemHandleMouseMove,
518520
)
521+
itemProps.onMouseDown = callAllEventHandlers(
522+
onMouseDown,
523+
itemHandleMouseDown,
524+
)
519525

520526
return itemProps
521527
},

typings/index.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -425,7 +425,7 @@ export interface UseSelectGetItemPropsOptions<Item>
425425
GetPropsWithRefKey {}
426426

427427
export interface UseSelectGetItemPropsReturnValue
428-
extends Omit<GetItemPropsReturnValue, 'onMouseDown'> {
428+
extends GetItemPropsReturnValue {
429429
'aria-disabled': boolean
430430
ref?: React.RefObject<any>
431431
}

0 commit comments

Comments
 (0)