diff --git a/README.md b/README.md index 898e727..92a1967 100644 --- a/README.md +++ b/README.md @@ -199,6 +199,41 @@ If `accordion` is true, only one panel can be open. Opening another panel will c If `key` is not provided, the panel's index will be used instead. +#### KeyBoard Event + +By default, Collapse will listen `onKeyDown`(<3.7.0 `onKeyPress`) event with `enter` key to toggle panel's active state when `collapsible` is not `disabled`. If you want to disable this behavior, you can prevent the event from bubbling like this: + +```jsx +const App = () => { + const items: CollapseProps['items'] = [ + { + label: e.stopPropagation()} />, + children: 'content', + }, + { + label: ( +
e.stopPropagation()}> + +
+ ), + children: 'content', + }, + { + label: 'title 2', + children: 'content 2', + collapsible: 'disabled', + }, + { + label: 'title 3', + children: 'content 3', + onItemClick: console.log, + }, + ]; + + return ; +}; +``` + ## Development ```bash diff --git a/docs/examples/basic.tsx b/docs/examples/basic.tsx index 4b45637..dcd1ff7 100644 --- a/docs/examples/basic.tsx +++ b/docs/examples/basic.tsx @@ -6,7 +6,7 @@ import '../../assets/index.less'; const App = () => { const items: CollapseProps['items'] = [ { - label: 'title', + label: e.stopPropagation()} />, children: 'content', }, { diff --git a/src/Panel.tsx b/src/Panel.tsx index af5a1c9..34d65f7 100644 --- a/src/Panel.tsx +++ b/src/Panel.tsx @@ -36,7 +36,7 @@ const CollapsePanel = React.forwardRef((prop onItemClick?.(panelKey!); }; - const handleKeyPress = (e: React.KeyboardEvent) => { + const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === 'Enter' || e.keyCode === KeyCode.ENTER || e.which === KeyCode.ENTER) { handleItemClick(); } @@ -76,7 +76,7 @@ const CollapsePanel = React.forwardRef((prop className: headerClassName, 'aria-expanded': isActive, 'aria-disabled': disabled, - onKeyPress: handleKeyPress, + onKeyDown: handleKeyDown, }; if (!collapsibleHeader && !collapsibleIcon) { diff --git a/tests/index.spec.tsx b/tests/index.spec.tsx index 533df08..34f49d5 100644 --- a/tests/index.spec.tsx +++ b/tests/index.spec.tsx @@ -396,16 +396,16 @@ describe('collapse', () => { second - second + third , ); - fireEvent.keyPress(container.querySelectorAll('.rc-collapse-header')?.[2], myKeyEvent); + fireEvent.keyDown(container.querySelectorAll('.rc-collapse-header')?.[2], myKeyEvent); jest.runAllTimers(); expect(container.querySelectorAll('.rc-collapse-content-active')).toHaveLength(0); - fireEvent.keyPress(container.querySelector('.rc-collapse-header')!, myKeyEvent); + fireEvent.keyDown(container.querySelector('.rc-collapse-header')!, myKeyEvent); jest.runAllTimers(); expect(container.querySelectorAll('.rc-collapse-content-active')).toHaveLength(1); @@ -414,7 +414,7 @@ describe('collapse', () => { 'rc-collapse-content-active', ); - fireEvent.keyPress(container.querySelector('.rc-collapse-header')!, myKeyEvent); + fireEvent.keyDown(container.querySelector('.rc-collapse-header')!, myKeyEvent); jest.runAllTimers(); expect(container.querySelectorAll('.rc-collapse-content-active')).toHaveLength(0);