@@ -88,6 +88,12 @@ export interface TriggerProps {
88
88
maskTransitionName ?: TransitionNameType ;
89
89
/** @deprecated Please us `maskMotion` instead. */
90
90
maskAnimation ?: string ;
91
+
92
+ /**
93
+ * @private Get trigger DOM node.
94
+ * Used for some component is function component which can not access by `findDOMNode`
95
+ */
96
+ getTriggerDOMNode ?: ( node : React . ReactInstance ) => HTMLElement ;
91
97
}
92
98
93
99
interface TriggerState {
@@ -128,7 +134,7 @@ export function generateTrigger(PortalComponent: any): React.ComponentClass<Trig
128
134
129
135
popupRef = React . createRef < Popup > ( ) ;
130
136
131
- triggerRef = React . createRef < Popup > ( ) ;
137
+ triggerRef = React . createRef < React . ReactInstance > ( ) ;
132
138
133
139
clickOutsideHandler : CommonEventHandler ;
134
140
@@ -363,7 +369,7 @@ export function generateTrigger(PortalComponent: any): React.ComponentClass<Trig
363
369
}
364
370
365
371
const { target } = event ;
366
- const root = findDOMNode ( this . triggerRef . current ) ;
372
+ const root = this . getRootDomNode ( ) ;
367
373
if ( ! contains ( root , target ) && ! this . hasPopupMouseDown ) {
368
374
this . close ( ) ;
369
375
}
@@ -388,7 +394,13 @@ export function generateTrigger(PortalComponent: any): React.ComponentClass<Trig
388
394
return null ;
389
395
}
390
396
391
- getRootDomNode = ( ) => findDOMNode < HTMLElement > ( this . triggerRef . current ) ;
397
+ getRootDomNode = ( ) => {
398
+ const { getTriggerDOMNode } = this . props ;
399
+ if ( getTriggerDOMNode ) {
400
+ return getTriggerDOMNode ( this . triggerRef . current ) ;
401
+ }
402
+ return findDOMNode < HTMLElement > ( this . triggerRef . current ) ;
403
+ } ;
392
404
393
405
getPopupClassNameFromAlign = align => {
394
406
const className = [ ] ;
@@ -490,7 +502,7 @@ export function generateTrigger(PortalComponent: any): React.ComponentClass<Trig
490
502
popupContainer . style . left = '0' ;
491
503
popupContainer . style . width = '100%' ;
492
504
const mountNode = props . getPopupContainer
493
- ? props . getPopupContainer ( findDOMNode ( this . triggerRef . current ) )
505
+ ? props . getPopupContainer ( this . getRootDomNode ( ) )
494
506
: props . getDocument ( ) . body ;
495
507
mountNode . appendChild ( popupContainer ) ;
496
508
return popupContainer ;
0 commit comments