diff --git a/oxlint-suppressions.json b/oxlint-suppressions.json
index 705ebc84533..af293786ef7 100644
--- a/oxlint-suppressions.json
+++ b/oxlint-suppressions.json
@@ -180,14 +180,6 @@
"count": 4
}
},
- "web/app/components/app-sidebar/dataset-info/menu-item.tsx": {
- "jsx_a11y/click-events-have-key-events": {
- "count": 1
- },
- "jsx_a11y/no-static-element-interactions": {
- "count": 1
- }
- },
"web/app/components/app/annotation/add-annotation-modal/edit-item/index.tsx": {
"erasable-syntax-only/enums": {
"count": 1
diff --git a/web/app/components/app-sidebar/dataset-info/__tests__/index.spec.tsx b/web/app/components/app-sidebar/dataset-info/__tests__/index.spec.tsx
index 933e0dd76e0..37d5d4ef9f3 100644
--- a/web/app/components/app-sidebar/dataset-info/__tests__/index.spec.tsx
+++ b/web/app/components/app-sidebar/dataset-info/__tests__/index.spec.tsx
@@ -240,33 +240,47 @@ describe('MenuItem', () => {
render()
// Act
- await user.click(screen.getByText('Edit'))
+ await user.click(screen.getByRole('button', { name: 'Edit' }))
// Assert
expect(handleClick).toHaveBeenCalledTimes(1)
})
- it('should stop propagation before invoking the handler', () => {
- const parentClick = vi.fn()
+ it.each([
+ ['Enter', '{Enter}'],
+ ['Space', ' '],
+ ])('should be reachable and activate with %s', async (_, key) => {
+ const user = userEvent.setup()
const handleClick = vi.fn()
+ render()
- render(
-
-
-
,
- )
+ await user.tab()
+ expect(screen.getByRole('button', { name: 'Edit' })).toHaveFocus()
- fireEvent.click(screen.getByText('Edit'))
+ await user.keyboard(key)
+ expect(handleClick).toHaveBeenCalledTimes(1)
+ })
+
+ it('should stop propagation before invoking the handler', () => {
+ const handleClick = vi.fn()
+ render()
+
+ const menuItem = screen.getByRole('button', { name: 'Edit' })
+ const event = createEvent.click(menuItem)
+ const stopPropagation = vi.spyOn(event, 'stopPropagation')
+
+ fireEvent(menuItem, event)
expect(handleClick).toHaveBeenCalledTimes(1)
- expect(parentClick).not.toHaveBeenCalled()
+ expect(stopPropagation).toHaveBeenCalledTimes(1)
})
it('should prevent the default action when no click handler is provided', () => {
render()
- const event = createEvent.click(screen.getByText('Edit'))
- fireEvent(screen.getByText('Edit'), event)
+ const menuItem = screen.getByRole('button', { name: 'Edit' })
+ const event = createEvent.click(menuItem)
+ fireEvent(menuItem, event)
expect(event.defaultPrevented).toBe(true)
})
diff --git a/web/app/components/app-sidebar/dataset-info/menu-item.tsx b/web/app/components/app-sidebar/dataset-info/menu-item.tsx
index 6e0269d269a..d46cf617468 100644
--- a/web/app/components/app-sidebar/dataset-info/menu-item.tsx
+++ b/web/app/components/app-sidebar/dataset-info/menu-item.tsx
@@ -9,17 +9,18 @@ type MenuItemProps = {
const MenuItem = ({ Icon, name, handleClick }: MenuItemProps) => {
return (
- {
e.preventDefault()
e.stopPropagation()
handleClick?.()
}}
>
-
+
{name}
-
+
)
}