diff --git a/oxlint-suppressions.json b/oxlint-suppressions.json
index c0b968118fccd1..f78e4697c0db74 100644
--- a/oxlint-suppressions.json
+++ b/oxlint-suppressions.json
@@ -806,14 +806,6 @@
"count": 3
}
},
- "web/app/components/base/chat/chat-with-history/sidebar/__tests__/operation.spec.tsx": {
- "jsx_a11y/click-events-have-key-events": {
- "count": 2
- },
- "jsx_a11y/no-static-element-interactions": {
- "count": 2
- }
- },
"web/app/components/base/chat/chat-with-history/sidebar/item.tsx": {
"jsx_a11y/click-events-have-key-events": {
"count": 2
diff --git a/web/app/components/base/chat/chat-with-history/sidebar/__tests__/operation.spec.tsx b/web/app/components/base/chat/chat-with-history/sidebar/__tests__/operation.spec.tsx
index 5aa8da79653dd9..e535fa42a51c89 100644
--- a/web/app/components/base/chat/chat-with-history/sidebar/__tests__/operation.spec.tsx
+++ b/web/app/components/base/chat/chat-with-history/sidebar/__tests__/operation.spec.tsx
@@ -5,6 +5,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest'
import Operation from '../operation'
describe('Operation', () => {
+ const getTrigger = () => screen.getByRole('button', { name: 'common.operation.more' })
const defaultProps = {
isActive: false,
isItemHovering: false,
@@ -22,14 +23,14 @@ describe('Operation', () => {
it('should render more icon button', () => {
render()
- expect(screen.getByRole('button')).toBeInTheDocument()
+ expect(getTrigger()).toBeInTheDocument()
})
it('should toggle dropdown when clicked', async () => {
const user = userEvent.setup()
render()
- const trigger = screen.getByRole('button')
+ const trigger = getTrigger()
await user.click(trigger)
expect(screen.getByText('explore.sidebar.action.pin')).toBeInTheDocument()
@@ -37,14 +38,14 @@ describe('Operation', () => {
it('should apply active state to ActionButton', () => {
render()
- expect(screen.getByRole('button')).toBeInTheDocument()
+ expect(getTrigger()).toBeInTheDocument()
})
it('should call togglePin when pin/unpin is clicked', async () => {
const user = userEvent.setup()
render()
- await user.click(screen.getByRole('button'))
+ await user.click(getTrigger())
await user.click(screen.getByText('explore.sidebar.action.pin'))
expect(defaultProps.togglePin).toHaveBeenCalled()
@@ -54,7 +55,7 @@ describe('Operation', () => {
const user = userEvent.setup()
render()
- await user.click(screen.getByRole('button'))
+ await user.click(getTrigger())
expect(screen.getByText('explore.sidebar.action.unpin')).toBeInTheDocument()
})
@@ -62,7 +63,7 @@ describe('Operation', () => {
const user = userEvent.setup()
render()
- await user.click(screen.getByRole('button'))
+ await user.click(getTrigger())
await user.click(screen.getByText('explore.sidebar.action.rename'))
await waitFor(() => {
@@ -74,7 +75,7 @@ describe('Operation', () => {
const user = userEvent.setup()
render()
- await user.click(screen.getByRole('button'))
+ await user.click(getTrigger())
await user.click(screen.getByText('explore.sidebar.action.delete'))
await waitFor(() => {
@@ -86,7 +87,7 @@ describe('Operation', () => {
const user = userEvent.setup()
render()
- await user.click(screen.getByRole('button'))
+ await user.click(getTrigger())
expect(screen.queryByText('explore.sidebar.action.rename')).not.toBeInTheDocument()
})
@@ -94,7 +95,7 @@ describe('Operation', () => {
const user = userEvent.setup()
render()
- await user.click(screen.getByRole('button'))
+ await user.click(getTrigger())
expect(screen.queryByText('explore.sidebar.action.rename')).not.toBeInTheDocument()
expect(screen.queryByText('explore.sidebar.action.delete')).not.toBeInTheDocument()
})
@@ -103,7 +104,7 @@ describe('Operation', () => {
const user = userEvent.setup()
render()
- await user.click(screen.getByRole('button'))
+ await user.click(getTrigger())
expect(screen.getByText('explore.sidebar.action.pin')).toBeInTheDocument()
})
@@ -112,7 +113,7 @@ describe('Operation', () => {
const user = userEvent.setup()
const { rerender } = render()
- await user.click(screen.getByRole('button'))
+ await user.click(getTrigger())
expect(screen.getByText('explore.sidebar.action.pin')).toBeInTheDocument()
rerender()
@@ -125,7 +126,7 @@ describe('Operation', () => {
it('should keep the trigger mounted while visually hidden', () => {
render()
- const trigger = screen.getByRole('button')
+ const trigger = getTrigger()
expect(trigger).toHaveClass('pointer-events-none')
expect(trigger).toHaveClass('opacity-0')
})
@@ -134,7 +135,7 @@ describe('Operation', () => {
const user = userEvent.setup()
render()
- await user.click(screen.getByRole('button'))
+ await user.click(getTrigger())
await user.click(screen.getByText('explore.sidebar.action.rename'))
await waitFor(() => {
@@ -146,13 +147,11 @@ describe('Operation', () => {
const user = userEvent.setup()
const parentClick = vi.fn()
- render(
-
-
-
,
- )
+ render()
+ document.body.addEventListener('click', parentClick)
- await user.click(screen.getByRole('button'))
+ await user.click(getTrigger())
+ document.body.removeEventListener('click', parentClick)
expect(parentClick).not.toHaveBeenCalled()
})
@@ -161,14 +160,12 @@ describe('Operation', () => {
const user = userEvent.setup()
const parentClick = vi.fn()
- render(
-
-
-
,
- )
+ render()
+ document.body.addEventListener('click', parentClick)
- await user.click(screen.getByRole('button'))
+ await user.click(getTrigger())
await user.click(screen.getByRole('menu'))
+ document.body.removeEventListener('click', parentClick)
expect(parentClick).not.toHaveBeenCalled()
})
diff --git a/web/app/components/base/chat/chat-with-history/sidebar/operation.tsx b/web/app/components/base/chat/chat-with-history/sidebar/operation.tsx
index e144c2d8946124..350fc3fec190b2 100644
--- a/web/app/components/base/chat/chat-with-history/sidebar/operation.tsx
+++ b/web/app/components/base/chat/chat-with-history/sidebar/operation.tsx
@@ -51,6 +51,7 @@ const Operation: FC = ({
render={(props, state) => (
$['operation.more'], { ns: 'common' })}
className={cn(
isItemHovering || state.open
? 'pointer-events-auto opacity-100'