Skip to content

Commit ab9dc6d

Browse files
committed
fix(NavBar): make back control keyboard accessible
1 parent df82203 commit ab9dc6d

3 files changed

Lines changed: 31 additions & 5 deletions

File tree

src/components/nav-bar/nav-bar.less

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@
2222
}
2323

2424
&-back {
25+
appearance: none;
26+
border: 0;
27+
background: transparent;
28+
color: inherit;
29+
font: inherit;
2530
display: flex;
2631
align-items: center;
2732
margin-right: 16px;

src/components/nav-bar/nav-bar.tsx

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,20 @@ export const NavBar: FC<NavBarProps> = props => {
4040
return withNativeProps(
4141
mergedProps,
4242
<div className={classNames(classPrefix)}>
43-
<div className={`${classPrefix}-left`} role='button'>
43+
<div className={`${classPrefix}-left`}>
4444
{back !== null && (
45-
<div className={`${classPrefix}-back`} onClick={mergedProps.onBack}>
45+
<button
46+
type='button'
47+
className={`${classPrefix}-back`}
48+
onClick={mergedProps.onBack}
49+
>
4650
{mergedBackIcon && (
4751
<span className={`${classPrefix}-back-arrow`}>
4852
{mergedBackIcon}
4953
</span>
5054
)}
51-
<span aria-hidden='true'>{back}</span>
52-
</div>
55+
<span>{back}</span>
56+
</button>
5357
)}
5458
{mergedProps.left}
5559
</div>

src/components/nav-bar/tests/nav-bar.test.tsx

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React from 'react'
2-
import { render, screen } from 'testing'
2+
import { render, screen, userEvent } from 'testing'
33
import NavBar from '..'
44
import ConfigProvider from '../../config-provider'
55

@@ -9,6 +9,23 @@ describe('NavBar', () => {
99
expect(screen.getByText('Title')).toBeInTheDocument()
1010
})
1111

12+
test('renders a keyboard-accessible back button', async () => {
13+
const onBack = jest.fn()
14+
render(
15+
<NavBar back='Back' onBack={onBack}>
16+
Title
17+
</NavBar>
18+
)
19+
20+
const backButton = screen.getByRole('button', { name: 'Back' })
21+
expect(backButton).toHaveAttribute('type', 'button')
22+
23+
await userEvent.tab()
24+
expect(backButton).toHaveFocus()
25+
await userEvent.keyboard('{Enter}')
26+
expect(onBack).toHaveBeenCalledTimes(1)
27+
})
28+
1229
describe('backIcon', () => {
1330
it('default', () => {
1431
const { baseElement } = render(<NavBar backIcon>Title</NavBar>)

0 commit comments

Comments
 (0)