Skip to content

Commit a880d11

Browse files
authored
fix: preserve item click on keyboard activation (#395)
1 parent e1a4d01 commit a880d11

2 files changed

Lines changed: 16 additions & 8 deletions

File tree

src/Step.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
/* eslint react/prop-types: 0 */
22
import * as React from 'react';
33
import { clsx } from 'clsx';
4-
import { KeyCode } from '@rc-component/util';
54
import type { Status, StepItem, StepsProps } from './Steps';
65
import Rail from './Rail';
76
import { UnstableContext } from './UnstableContext';
@@ -113,9 +112,9 @@ export default function Step(props: StepProps) {
113112
};
114113

115114
accessibilityProps.onKeyDown = (e) => {
116-
const { which } = e;
117-
if (which === KeyCode.ENTER || which === KeyCode.SPACE) {
118-
onClick(index);
115+
if (e.key === 'Enter' || e.key === ' ') {
116+
e.preventDefault();
117+
e.currentTarget.click();
119118
}
120119
};
121120
}

tests/index.test.tsx

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React from 'react';
2-
import { render, fireEvent } from '@testing-library/react';
2+
import { createEvent, render, fireEvent } from '@testing-library/react';
33
import Steps from '../src';
44

55
describe('Steps', () => {
@@ -283,6 +283,7 @@ describe('Steps', () => {
283283

284284
it('key board support', () => {
285285
const onChange = jest.fn();
286+
const onItemClick = jest.fn();
286287
const { container } = render(
287288
<Steps
288289
current={0}
@@ -295,15 +296,23 @@ describe('Steps', () => {
295296
{
296297
title: 'Waiting',
297298
description: 'This is a description',
299+
onClick: onItemClick,
298300
},
299301
]}
300302
/>,
301303
);
302304

303305
const button = container.querySelectorAll('[role="button"]')[1];
304-
fireEvent.keyDown(button, { key: 'Enter', keyCode: 13, which: 13 });
305-
306-
expect(onChange).toHaveBeenCalledWith(1);
306+
const enterEvent = createEvent.keyDown(button, { key: 'Enter' });
307+
const spaceEvent = createEvent.keyDown(button, { key: ' ' });
308+
fireEvent(button, enterEvent);
309+
fireEvent(button, spaceEvent);
310+
311+
expect(onChange).toHaveBeenNthCalledWith(1, 1);
312+
expect(onChange).toHaveBeenNthCalledWith(2, 1);
313+
expect(onItemClick).toHaveBeenCalledTimes(2);
314+
expect(enterEvent.defaultPrevented).toBe(true);
315+
expect(spaceEvent.defaultPrevented).toBe(true);
307316
});
308317

309318
it('itemRender', () => {

0 commit comments

Comments
 (0)