Skip to content

Commit c62d0cb

Browse files
committed
Revert "Revert "fix: 31039 (#215)" (#227)"
This reverts commit 97124db.
1 parent c723d76 commit c62d0cb

File tree

2 files changed

+36
-10
lines changed

2 files changed

+36
-10
lines changed

src/Panel.tsx

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,11 @@ class CollapsePanel extends React.Component<CollapsePanelProps, any> {
5454
} = this.props;
5555

5656
const disabled = collapsible === 'disabled';
57+
const collapsibleHeader = collapsible === 'header';
5758

5859
const headerCls = classNames(`${prefixCls}-header`, {
5960
[headerClass]: headerClass,
60-
[`${prefixCls}-header-collapsible-only`]: collapsible === 'header',
61+
[`${prefixCls}-header-collapsible-only`]: collapsibleHeader,
6162
});
6263
const itemCls = classNames(
6364
{
@@ -69,24 +70,36 @@ class CollapsePanel extends React.Component<CollapsePanelProps, any> {
6970
);
7071

7172
let icon: any = <i className="arrow" />;
73+
74+
/** header 节点属性 */
75+
const headerProps: React.HTMLAttributes<HTMLDivElement> = {
76+
className: headerCls,
77+
'aria-expanded': isActive,
78+
onKeyPress: this.handleKeyPress,
79+
};
80+
7281
if (showArrow && typeof expandIcon === 'function') {
7382
icon = expandIcon(this.props);
7483
}
84+
if (collapsibleHeader) {
85+
icon = (
86+
<span style={{ cursor: 'pointer' }} onClick={() => this.handleItemClick()}>
87+
{icon}
88+
</span>
89+
);
90+
} else {
91+
headerProps.onClick = this.handleItemClick;
92+
headerProps.role = accordion ? 'tab' : 'button';
93+
headerProps.tabIndex = disabled ? -1 : 0;
94+
}
7595

7696
const ifExtraExist = extra !== null && extra !== undefined && typeof extra !== 'boolean';
7797

7898
return (
7999
<div className={itemCls} style={style} id={id}>
80-
<div
81-
className={headerCls}
82-
onClick={() => collapsible !== 'header' && this.handleItemClick()}
83-
role={accordion ? 'tab' : 'button'}
84-
tabIndex={disabled ? -1 : 0}
85-
aria-expanded={isActive}
86-
onKeyPress={this.handleKeyPress}
87-
>
100+
<div {...headerProps}>
88101
{showArrow && icon}
89-
{collapsible === 'header' ? (
102+
{collapsibleHeader ? (
90103
<span onClick={this.handleItemClick} className={`${prefixCls}-header-text`}>
91104
{header}
92105
</span>

tests/index.spec.tsx

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -545,5 +545,18 @@ describe('collapse', () => {
545545
collapse.find('.rc-collapse-header').simulate('click');
546546
expect(collapse.find('.rc-collapse-item-active').length).toBe(0);
547547
});
548+
549+
it('icon trigger when collapsible equal header', () => {
550+
const collapse = mount(
551+
<Collapse collapsible="header">
552+
<Panel header="collapse 1" key="1">
553+
first
554+
</Panel>
555+
</Collapse>,
556+
);
557+
558+
collapse.find('.rc-collapse-header .arrow').simulate('click');
559+
expect(collapse.find('.rc-collapse-item-active').length).toBe(1);
560+
});
548561
});
549562
});

0 commit comments

Comments
 (0)