1
1
import React from "react" ;
2
- import { findDOMNode } from "react-dom" ;
3
- import Trigger , { TriggerProps , feedbackToPlacement } from "react-widget-trigger" ;
2
+ import Trigger , { TriggerProps , feedbackToPlacement , Feedback } from "react-widget-trigger" ;
4
3
import offset from "dom-helpers-extra/offset" ;
5
4
6
5
export interface TooltipProps
7
- extends Omit < TriggerProps , "popup" | "defaultPopupVisible" | "popupVisible" > {
6
+ extends Omit <
7
+ TriggerProps ,
8
+ | "popup"
9
+ | "defaultPopupVisible"
10
+ | "popupVisible"
11
+ | "destroyPopupOnHide"
12
+ | "action"
13
+ | "popupTransition"
14
+ | "adjustPosition"
15
+ > {
8
16
title ?: React . ReactNode | ( ( ) => React . ReactNode ) ;
9
17
defaultVisible ?: boolean ;
10
18
visible ?: boolean ;
@@ -15,11 +23,16 @@ export interface TooltipProps
15
23
16
24
offset ?: number ;
17
25
18
- visibieArrow ?: boolean ;
26
+ visibleArrow ?: boolean ;
19
27
arrowSize ?: number ;
20
28
keepArrowAtCenter ?: boolean ;
29
+ destroyTooltipOnHide ?: boolean ;
30
+
31
+ transition ?: TriggerProps [ "popupTransition" ] ;
21
32
22
33
onVisibleChange ?: ( visible : boolean ) => void ;
34
+
35
+ role ?: string ;
23
36
}
24
37
25
38
export interface TooltipState { }
@@ -28,18 +41,42 @@ export class Tooltip extends React.Component<TooltipProps, TooltipState> {
28
41
static defaultProps : TooltipProps = {
29
42
prefixCls : "rw-tooltip" ,
30
43
defaultVisible : false ,
31
- visibieArrow : true ,
44
+ visibleArrow : true ,
45
+ keepArrowAtCenter : false ,
46
+ destroyTooltipOnHide : true ,
32
47
arrowSize : 6 ,
33
48
offset : 0 ,
34
- keepArrowAtCenter : false ,
49
+ delay : 100 ,
50
+ trigger : [ "hover" ] ,
51
+ outsideHideEventName : [ "mousedown" , "click" ] ,
52
+ transition : {
53
+ classNames : {
54
+ appear : "tooltip-animated" ,
55
+ appearActive : "tooltip-fade-in" ,
56
+ appearDone : "" ,
57
+ enter : "tooltip-animated" ,
58
+ enterActive : "tooltip-fade-in" ,
59
+ enterDone : "" ,
60
+ exit : "tooltip-animated" ,
61
+ exitActive : "tooltip-fade-out" ,
62
+ exitDone : "" ,
63
+ } ,
64
+ timeout : 290 ,
65
+ } ,
66
+ role : "tooltip" ,
35
67
} ;
36
68
37
69
arrowRef : React . RefObject < HTMLDivElement > = React . createRef ( ) ;
38
70
triggerRef : React . RefObject < Trigger > = React . createRef ( ) ;
71
+ feedback : Feedback | null ;
39
72
40
- adjustArrowPosition : TriggerProps [ "adjustPosition" ] = ( _ , pos , feedback ) => {
41
- const { visibieArrow, keepArrowAtCenter } = this . props ;
42
- if ( ! visibieArrow ) return ;
73
+ adjustArrowPosition = ( ) => {
74
+ const feedback = this . feedback ;
75
+
76
+ if ( ! feedback ) return ;
77
+
78
+ const { visibleArrow, keepArrowAtCenter } = this . props ;
79
+ if ( ! visibleArrow ) return ;
43
80
if ( ! this . triggerRef . current ) return ;
44
81
45
82
const arrowNode = this . arrowRef . current ;
@@ -82,19 +119,35 @@ export class Tooltip extends React.Component<TooltipProps, TooltipState> {
82
119
} ) ;
83
120
}
84
121
}
122
+
123
+ //reset
124
+ this . feedback = null ;
125
+ } ;
126
+
127
+ saveFeedback : TriggerProps [ "adjustPosition" ] = ( _ , __ , feedback ) => {
128
+ this . feedback = feedback ;
85
129
} ;
86
130
131
+ componentDidMount ( ) {
132
+ this . componentDidUpdate ( ) ;
133
+ }
134
+ componentDidUpdate ( ) {
135
+ this . adjustArrowPosition ( ) ;
136
+ }
137
+
87
138
getPopup = ( ) => {
88
- const { prefixCls, title, visibieArrow } = this . props ;
139
+ const { prefixCls, title, visibleArrow , role } = this . props ;
89
140
90
141
const titleNode = typeof title === "function" ? title ( ) : title ;
91
142
92
143
return (
93
144
< >
94
- { visibieArrow ? (
145
+ { visibleArrow ? (
95
146
< div className = { `${ prefixCls } -arrow` } ref = { this . arrowRef } > </ div >
96
147
) : null }
97
- < div className = { `${ prefixCls } -inner` } > { titleNode } </ div >
148
+ < div className = { `${ prefixCls } -inner` } role = { role } >
149
+ { titleNode }
150
+ </ div >
98
151
</ >
99
152
) ;
100
153
} ;
@@ -107,8 +160,11 @@ export class Tooltip extends React.Component<TooltipProps, TooltipState> {
107
160
trigger,
108
161
arrowSize,
109
162
offset,
110
- visibieArrow ,
163
+ visibleArrow ,
111
164
keepArrowAtCenter,
165
+ destroyTooltipOnHide,
166
+ transition,
167
+ role,
112
168
// color,
113
169
...restProps
114
170
} = this . props ;
@@ -117,8 +173,11 @@ export class Tooltip extends React.Component<TooltipProps, TooltipState> {
117
173
< Trigger
118
174
{ ...restProps }
119
175
ref = { this . triggerRef }
120
- adjustPosition = { this . adjustArrowPosition }
121
- offset = { visibieArrow ? offset ! + arrowSize ! : offset }
176
+ popupTransition = { transition }
177
+ action = { trigger }
178
+ adjustPosition = { this . saveFeedback }
179
+ offset = { visibleArrow ? offset ! + arrowSize ! : offset }
180
+ destroyPopupOnHide = { destroyTooltipOnHide }
122
181
defaultPopupVisible = { defaultVisible }
123
182
popupVisible = { visible }
124
183
popup = { this . getPopup }
0 commit comments