File tree Expand file tree Collapse file tree 3 files changed +27
-8
lines changed Expand file tree Collapse file tree 3 files changed +27
-8
lines changed Original file line number Diff line number Diff line change @@ -15,7 +15,7 @@ function getActiveKeysArray(activeKey: React.Key | React.Key[]) {
15
15
return currentActiveKey . map ( ( key ) => String ( key ) ) ;
16
16
}
17
17
18
- function Collapse ( props : CollapseProps ) {
18
+ const Collapse = React . forwardRef < HTMLDivElement , CollapseProps > ( ( props , ref ) => {
19
19
const {
20
20
prefixCls = 'rc-collapse' ,
21
21
destroyInactivePanel = false ,
@@ -111,10 +111,15 @@ function Collapse(props: CollapseProps) {
111
111
112
112
// ======================== Render ========================
113
113
return (
114
- < div className = { collapseClassName } style = { style } role = { accordion ? 'tablist' : undefined } >
114
+ < div
115
+ ref = { ref }
116
+ className = { collapseClassName }
117
+ style = { style }
118
+ role = { accordion ? 'tablist' : undefined }
119
+ >
115
120
{ children }
116
121
</ div >
117
122
) ;
118
- }
123
+ } ) ;
119
124
120
125
export default Object . assign ( Collapse , { Panel : CollapsePanel } ) ;
Original file line number Diff line number Diff line change @@ -5,7 +5,7 @@ import KeyCode from 'rc-util/lib/KeyCode';
5
5
import CSSMotion from 'rc-motion' ;
6
6
import PanelContent from './PanelContent' ;
7
7
8
- function CollapsePanel ( props : CollapsePanelProps ) {
8
+ const CollapsePanel = React . forwardRef < HTMLDivElement , CollapsePanelProps > ( ( props , ref ) => {
9
9
const {
10
10
showArrow = true ,
11
11
headerClass,
@@ -88,7 +88,7 @@ function CollapsePanel(props: CollapsePanelProps) {
88
88
89
89
// ======================== Render ========================
90
90
return (
91
- < div { ...resetProps } className = { collapsePanelClassNames } >
91
+ < div { ...resetProps } ref = { ref } className = { collapsePanelClassNames } >
92
92
< div { ...headerProps } >
93
93
{ showArrow && iconNode }
94
94
< span
@@ -106,10 +106,10 @@ function CollapsePanel(props: CollapsePanelProps) {
106
106
forceRender = { forceRender }
107
107
removeOnLeave = { destroyInactivePanel }
108
108
>
109
- { ( { className : motionClassName , style : motionStyle } , ref ) => {
109
+ { ( { className : motionClassName , style : motionStyle } , motionRef ) => {
110
110
return (
111
111
< PanelContent
112
- ref = { ref }
112
+ ref = { motionRef }
113
113
prefixCls = { prefixCls }
114
114
className = { motionClassName }
115
115
style = { motionStyle }
@@ -124,6 +124,6 @@ function CollapsePanel(props: CollapsePanelProps) {
124
124
</ CSSMotion >
125
125
</ div >
126
126
) ;
127
- }
127
+ } ) ;
128
128
129
129
export default CollapsePanel ;
Original file line number Diff line number Diff line change @@ -638,4 +638,18 @@ describe('collapse', () => {
638
638
639
639
expect ( container . querySelectorAll ( '.rc-collapse-item' ) ) . toHaveLength ( 2 ) ;
640
640
} ) ;
641
+
642
+ it ( 'ref should work' , ( ) => {
643
+ const ref = React . createRef < any > ( ) ;
644
+ const panelRef = React . createRef < any > ( ) ;
645
+ const { container } = render (
646
+ < Collapse ref = { ref } >
647
+ < Panel header = "collapse 1" key = "1" ref = { panelRef } >
648
+ first
649
+ </ Panel >
650
+ </ Collapse > ,
651
+ ) ;
652
+ expect ( ref . current ) . toBe ( container . firstChild ) ;
653
+ expect ( panelRef . current ) . toBe ( container . querySelector ( '.rc-collapse-item' ) ) ;
654
+ } ) ;
641
655
} ) ;
You can’t perform that action at this time.
0 commit comments