!headerCollapsableOnly && this.handleItemClick()}
+ onClick={() => collapsible !== 'header' && this.handleItemClick()}
role={accordion ? 'tab' : 'button'}
tabIndex={disabled ? -1 : 0}
aria-expanded={isActive}
onKeyPress={this.handleKeyPress}
>
{showArrow && icon}
- {headerCollapsableOnly ? (
+ {collapsible === 'header' ? (
{header}
diff --git a/src/interface.ts b/src/interface.ts
index e3b06e1..234192a 100644
--- a/src/interface.ts
+++ b/src/interface.ts
@@ -1,6 +1,8 @@
import * as React from 'react';
import { CSSMotionProps } from 'rc-motion';
+type CollapsibleType = boolean | 'header';
+
export interface CollapseProps {
prefixCls?: string;
activeKey?: React.Key | React.Key[];
@@ -12,7 +14,7 @@ export interface CollapseProps {
style?: object;
destroyInactivePanel?: boolean;
expandIcon?: (props: object) => React.ReactNode;
- headerCollapsableOnly?: boolean;
+ collapsible?: CollapsibleType;
}
export interface CollapsePanelProps {
@@ -25,7 +27,6 @@ export interface CollapsePanelProps {
style?: object;
isActive?: boolean;
openMotion?: CSSMotionProps;
- disabled?: boolean;
destroyInactivePanel?: boolean;
accordion?: boolean;
forceRender?: boolean;
@@ -34,5 +35,5 @@ export interface CollapsePanelProps {
expandIcon?: (props: object) => React.ReactNode;
panelKey?: string | number;
role?: string;
- headerCollapsableOnly?: boolean;
+ collapsible?: CollapsibleType;
}
diff --git a/tests/index.spec.tsx b/tests/index.spec.tsx
index 30a0ecc..d6b5513 100644
--- a/tests/index.spec.tsx
+++ b/tests/index.spec.tsx
@@ -127,7 +127,7 @@ describe('collapse', () => {
const element = (
-
+
first
ExtraSpan}>
@@ -197,7 +197,7 @@ describe('collapse', () => {
const expandIcon = () => test{'>'};
const element = (
-
+
first
ExtraSpan}>
@@ -320,7 +320,7 @@ describe('collapse', () => {
it('when forceRender is not supplied it should lazy render the panel content', () => {
renderCollapse(
-
+
first
@@ -334,7 +334,7 @@ describe('collapse', () => {
it('when forceRender is FALSE it should lazy render the panel content', () => {
renderCollapse(
-
+
first
@@ -348,7 +348,7 @@ describe('collapse', () => {
it('when forceRender is TRUE then it should render all the panel content to the DOM', () => {
renderCollapse(
-
+
first
@@ -377,7 +377,7 @@ describe('collapse', () => {
second
-
+
second
,
@@ -429,7 +429,7 @@ describe('collapse', () => {
const element = (
-
+
first
ExtraSpan}>
@@ -475,7 +475,7 @@ describe('collapse', () => {
expect(collapse.find('.custom-child').getDOMNode().innerHTML).toBe('custom-child');
});
- describe('headerCollapsableOnly', () => {
+ describe('collapsible', () => {
it('default', () => {
const collapse = mount(
@@ -485,10 +485,12 @@ describe('collapse', () => {
,
);
expect(collapse.find('.rc-collapse-header-text').exists()).toBeFalsy();
+ collapse.find('.rc-collapse-header').simulate('click');
+ expect(collapse.find('.rc-collapse-item-active').length).toBe(1);
});
- it('should work', () => {
+ it('should work when value is header', () => {
const collapse = mount(
-
+
first
@@ -500,5 +502,37 @@ describe('collapse', () => {
collapse.find('.rc-collapse-header-text').simulate('click');
expect(collapse.find('.rc-collapse-item-active').length).toBe(1);
});
+
+ it('should disabled when value is false', () => {
+ const collapse = mount(
+
+
+ first
+
+ ,
+ );
+ expect(collapse.find('.rc-collapse-header-text').exists()).toBeFalsy();
+
+ expect(collapse.find('.rc-collapse-item-disabled').length).toBe(1);
+
+ collapse.find('.rc-collapse-header').simulate('click');
+ expect(collapse.find('.rc-collapse-item-active').length).toBe(0);
+ });
+
+ it('the value of panel should be read first', () => {
+ const collapse = mount(
+
+
+ first
+
+ ,
+ );
+ expect(collapse.find('.rc-collapse-header-text').exists()).toBeFalsy();
+
+ expect(collapse.find('.rc-collapse-item-disabled').length).toBe(1);
+
+ collapse.find('.rc-collapse-header').simulate('click');
+ expect(collapse.find('.rc-collapse-item-active').length).toBe(0);
+ });
});
});