diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 00000000..d0a77842 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +npx lint-staged \ No newline at end of file diff --git a/docs/examples/basic.tsx b/docs/examples/basic.tsx index b97a0962..7c460422 100644 --- a/docs/examples/basic.tsx +++ b/docs/examples/basic.tsx @@ -38,7 +38,11 @@ export default () => { } const onTabClick = (key: string) => { - console.log('key', key); + console.log('onTabClick', key); + }; + + const onChange = (key: string) => { + console.log('onChange', key); }; return ( @@ -46,6 +50,7 @@ export default () => { diff --git a/package.json b/package.json index 2802eb42..91a8efb5 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,8 @@ "now-build": "npm run build", "prepublishOnly": "npm run lint && npm run test && npm run compile && rc-np", "start": "dumi dev", - "test": "rc-test" + "test": "rc-test", + "prepare": "husky && dumi setup" }, "dependencies": { "@rc-component/resize-observer": "^1.0.0", @@ -45,6 +46,8 @@ "@rc-component/menu": "~1.0.0" }, "devDependencies": { + "@typescript-eslint/eslint-plugin": "^5.59.7", + "@typescript-eslint/parser": "^5.59.7", "@rc-component/father-plugin": "^2.0.0", "@rc-component/np": "^1.0.3", "@rc-component/trigger": "^3.0.0", @@ -54,36 +57,35 @@ "@types/classnames": "^2.2.10", "@types/enzyme": "^3.10.5", "@types/jest": "^29.4.0", - "@types/keyv": "4.2.0", "@types/react": "^18.2.42", "@types/react-dom": "^18.0.11", "@umijs/fabric": "^4.0.1", - "coveralls": "^3.0.6", "cross-env": "^7.0.2", "dumi": "^2.0.0", "eslint": "^8.54.0", "eslint-plugin-jest": "^28.9.0", "eslint-plugin-unicorn": "^56.0.1", - "fastclick": "~1.0.6", "father": "^4.0.0", "gh-pages": "^6.1.0", - "history": "^5.3.0", - "immutability-helper": "^3.0.1", + "husky": "^9.1.7", "less": "^4.1.3", - "preact-compat": "^3.16.0", + "lint-staged": "^15.5.0", + "prettier": "^3.5.3", "rc-test": "^7.0.14", "react": "^18.0.0", "react-dnd": "^10.0.0", "react-dnd-html5-backend": "^10.0.0", "react-dom": "^18.0.0", "react-sticky": "^6.0.3", - "sortablejs": "^1.7.0", "typescript": "^5.3.2" }, "peerDependencies": { "react": ">=16.9.0", "react-dom": ">=16.9.0" }, + "lint-staged": { + "*": "prettier --write --ignore-unknown" + }, "engines": { "node": ">=8.x" } diff --git a/src/TabNavList/index.tsx b/src/TabNavList/index.tsx index 7b49007b..1caca657 100644 --- a/src/TabNavList/index.tsx +++ b/src/TabNavList/index.tsx @@ -375,8 +375,9 @@ const TabNavList = React.forwardRef((props, ref // Enter & Space case 'Enter': case 'Space': { + console.log('press', code); e.preventDefault(); - onTabClick(focusKey, e); + onTabClick(activeKey, e); break; } // Backspace diff --git a/tests/accessibility.test.tsx b/tests/accessibility.test.tsx index bb0531a4..809a2409 100644 --- a/tests/accessibility.test.tsx +++ b/tests/accessibility.test.tsx @@ -91,9 +91,10 @@ describe('Tabs.Accessibility', () => { it('should activate tab on Enter/Space', async () => { const onTabClick = jest.fn(); + const onChange = jest.fn(); const user = userEvent.setup(); - render(createTabs({ onTabClick })); + render(createTabs({ onTabClick, onChange })); // jump to first tab await user.tab(); @@ -101,6 +102,7 @@ describe('Tabs.Accessibility', () => { // activate tab await user.keyboard(' '); expect(onTabClick).toHaveBeenCalledTimes(1); + expect(onChange).not.toHaveBeenCalled(); // move focus to second tab await user.keyboard('{ArrowRight}'); @@ -108,6 +110,7 @@ describe('Tabs.Accessibility', () => { // activate tab await user.keyboard('{Enter}'); expect(onTabClick).toHaveBeenCalledTimes(2); + expect(onChange).not.toHaveBeenCalled(); }); it('should not navigate to disabled tabs', async () => {