Skip to content

Commit ad3c99b

Browse files
committed
fix: Tabs press Enter/Space on active tab should not trigger onChange
1 parent 629f13b commit ad3c99b

File tree

5 files changed

+21
-5
lines changed

5 files changed

+21
-5
lines changed

.husky/pre-commit

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
npx lint-staged

docs/examples/basic.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,19 @@ export default () => {
3838
}
3939

4040
const onTabClick = (key: string) => {
41-
console.log('key', key);
41+
console.log('onTabClick', key);
42+
};
43+
44+
const onChange = (key: string) => {
45+
console.log('onChange', key);
4246
};
4347

4448
return (
4549
<React.StrictMode>
4650
<Tabs
4751
tabBarExtraContent="extra"
4852
onTabClick={onTabClick}
53+
onChange={onChange}
4954
direction={direction}
5055
items={items}
5156
/>

package.json

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@
3434
"now-build": "npm run build",
3535
"prepublishOnly": "npm run lint && npm run test && npm run compile && rc-np",
3636
"start": "dumi dev",
37-
"test": "rc-test"
37+
"test": "rc-test",
38+
"prepare": "husky && dumi setup"
3839
},
3940
"dependencies": {
4041
"@rc-component/resize-observer": "^1.0.0",
@@ -58,7 +59,6 @@
5859
"@types/react": "^18.2.42",
5960
"@types/react-dom": "^18.0.11",
6061
"@umijs/fabric": "^4.0.1",
61-
"coveralls": "^3.0.6",
6262
"cross-env": "^7.0.2",
6363
"dumi": "^2.0.0",
6464
"eslint": "^8.54.0",
@@ -68,9 +68,12 @@
6868
"father": "^4.0.0",
6969
"gh-pages": "^6.1.0",
7070
"history": "^5.3.0",
71+
"husky": "^9.1.7",
7172
"immutability-helper": "^3.0.1",
7273
"less": "^4.1.3",
74+
"lint-staged": "^15.5.0",
7375
"preact-compat": "^3.16.0",
76+
"prettier": "^3.5.3",
7477
"rc-test": "^7.0.14",
7578
"react": "^18.0.0",
7679
"react-dnd": "^10.0.0",
@@ -84,6 +87,9 @@
8487
"react": ">=16.9.0",
8588
"react-dom": ">=16.9.0"
8689
},
90+
"lint-staged": {
91+
"*": "prettier --write --ignore-unknown"
92+
},
8793
"engines": {
8894
"node": ">=8.x"
8995
}

src/TabNavList/index.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -375,8 +375,9 @@ const TabNavList = React.forwardRef<HTMLDivElement, TabNavListProps>((props, ref
375375
// Enter & Space
376376
case 'Enter':
377377
case 'Space': {
378+
console.log('press', code);
378379
e.preventDefault();
379-
onTabClick(focusKey, e);
380+
onTabClick(activeKey, e);
380381
break;
381382
}
382383
// Backspace

tests/accessibility.test.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,23 +91,26 @@ describe('Tabs.Accessibility', () => {
9191

9292
it('should activate tab on Enter/Space', async () => {
9393
const onTabClick = jest.fn();
94+
const onChange = jest.fn();
9495
const user = userEvent.setup();
9596

96-
render(createTabs({ onTabClick }));
97+
render(createTabs({ onTabClick, onChange }));
9798

9899
// jump to first tab
99100
await user.tab();
100101

101102
// activate tab
102103
await user.keyboard(' ');
103104
expect(onTabClick).toHaveBeenCalledTimes(1);
105+
expect(onChange).not.toHaveBeenCalled();
104106

105107
// move focus to second tab
106108
await user.keyboard('{ArrowRight}');
107109

108110
// activate tab
109111
await user.keyboard('{Enter}');
110112
expect(onTabClick).toHaveBeenCalledTimes(2);
113+
expect(onChange).not.toHaveBeenCalled();
111114
});
112115

113116
it('should not navigate to disabled tabs', async () => {

0 commit comments

Comments
 (0)