Skip to content

Commit

Permalink
fix(click): right click triggers contextmenu (#601)
Browse files Browse the repository at this point in the history
  • Loading branch information
ph-fritsche committed Mar 19, 2021
1 parent 2ef89dd commit 16847e1
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 3 deletions.
14 changes: 14 additions & 0 deletions src/__tests__/click.js
Expand Up @@ -459,3 +459,17 @@ test('move focus to closest focusable element', () => {
userEvent.click(element.children[0])
expect(element).toHaveFocus()
})

test('right click fires `contextmenu` instead of `click', () => {
const {element, getEvents, clearEventCalls} = setup(`<button/>`)

userEvent.click(element)
expect(getEvents('click')).toHaveLength(1)
expect(getEvents('contextmenu')).toHaveLength(0)

clearEventCalls()

userEvent.click(element, {buttons: 2})
expect(getEvents('contextmenu')).toHaveLength(1)
expect(getEvents('click')).toHaveLength(0)
})
14 changes: 11 additions & 3 deletions src/click.ts
Expand Up @@ -38,7 +38,7 @@ function clickLabel(
)
fireEvent.pointerUp(label, init)
fireEvent.mouseUp(label, getMouseEventOptions('mouseup', init, clickCount))
fireEvent.click(label, getMouseEventOptions('click', init, clickCount))
fireClick(label, getMouseEventOptions('click', init, clickCount))
// clicking the label will trigger a click of the label.control
// however, it will not focus the label.control so we have to do it
// ourselves.
Expand All @@ -64,7 +64,7 @@ function clickBooleanElement(
element,
getMouseEventOptions('mouseup', init, clickCount),
)
fireEvent.click(element, getMouseEventOptions('click', init, clickCount))
fireClick(element, getMouseEventOptions('click', init, clickCount))
}
}

Expand Down Expand Up @@ -95,7 +95,7 @@ function clickElement(
element,
getMouseEventOptions('mouseup', init, clickCount),
)
fireEvent.click(element, getMouseEventOptions('click', init, clickCount))
fireClick(element, getMouseEventOptions('click', init, clickCount))
const parentLabel = element.closest('label')
if (parentLabel?.control) focus(parentLabel.control)
}
Expand Down Expand Up @@ -133,6 +133,14 @@ function click(
}
}

function fireClick(element: Element, mouseEventOptions: MouseEventInit) {
if (mouseEventOptions.button === 2) {
fireEvent.contextMenu(element, mouseEventOptions)
} else {
fireEvent.click(element, mouseEventOptions)
}
}

function dblClick(element: Element, init?: MouseEventInit) {
hover(element, init)
click(element, init, {skipHover: true, clickCount: 0})
Expand Down

0 comments on commit 16847e1

Please sign in to comment.