File tree Expand file tree Collapse file tree 2 files changed +25
-2
lines changed
web/app/components/base/tooltip Expand file tree Collapse file tree 2 files changed +25
-2
lines changed Original file line number Diff line number Diff line change
1
+ class TooltipManager {
2
+ private activeCloser : ( ( ) => void ) | null = null
3
+
4
+ register ( closeFn : ( ) => void ) {
5
+ if ( this . activeCloser )
6
+ this . activeCloser ( )
7
+ this . activeCloser = closeFn
8
+ }
9
+
10
+ clear ( closeFn : ( ) => void ) {
11
+ if ( this . activeCloser === closeFn )
12
+ this . activeCloser = null
13
+ }
14
+ }
15
+
16
+ export const tooltipManager = new TooltipManager ( )
Original file line number Diff line number Diff line change @@ -6,6 +6,8 @@ import type { OffsetOptions, Placement } from '@floating-ui/react'
6
6
import { RiQuestionLine } from '@remixicon/react'
7
7
import cn from '@/utils/classnames'
8
8
import { PortalToFollowElem , PortalToFollowElemContent , PortalToFollowElemTrigger } from '@/app/components/base/portal-to-follow-elem'
9
+ import { tooltipManager } from './TooltipManager'
10
+
9
11
export type TooltipProps = {
10
12
position ?: Placement
11
13
triggerMethod ?: 'hover' | 'click'
@@ -56,22 +58,26 @@ const Tooltip: FC<TooltipProps> = ({
56
58
isHoverTriggerRef . current = isHoverTrigger
57
59
} , [ isHoverTrigger ] )
58
60
61
+ const close = ( ) => setOpen ( false )
62
+
59
63
const handleLeave = ( isTrigger : boolean ) => {
60
64
if ( isTrigger )
61
65
setNotHoverTrigger ( )
62
-
63
66
else
64
67
setNotHoverPopup ( )
65
68
66
69
// give time to move to the popup
67
70
if ( needsDelay ) {
68
71
setTimeout ( ( ) => {
69
- if ( ! isHoverPopupRef . current && ! isHoverTriggerRef . current )
72
+ if ( ! isHoverPopupRef . current && ! isHoverTriggerRef . current ) {
70
73
setOpen ( false )
74
+ tooltipManager . clear ( close )
75
+ }
71
76
} , 300 )
72
77
}
73
78
else {
74
79
setOpen ( false )
80
+ tooltipManager . clear ( close )
75
81
}
76
82
}
77
83
@@ -87,6 +93,7 @@ const Tooltip: FC<TooltipProps> = ({
87
93
onMouseEnter = { ( ) => {
88
94
if ( triggerMethod === 'hover' ) {
89
95
setHoverTrigger ( )
96
+ tooltipManager . register ( close )
90
97
setOpen ( true )
91
98
}
92
99
} }
You can’t perform that action at this time.
0 commit comments