Skip to content

Commit 88465f8

Browse files
feat: close click tooltip on click outside
1 parent 9f5311a commit 88465f8

File tree

2 files changed

+11
-4
lines changed

2 files changed

+11
-4
lines changed

src/components/Tooltip/Tooltip.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,10 +143,17 @@ const Tooltip = ({
143143
if (setIsOpen) {
144144
setIsOpen(!isOpen)
145145
} else if (!setIsOpen && isOpen === undefined) {
146-
setShow((currentValue) => !currentValue)
146+
setShow(true)
147147
}
148148
}
149149

150+
const handleClickOutsideAnchor = (e: MouseEvent) => {
151+
if (e.target === activeAnchor.current) {
152+
return
153+
}
154+
setShow(false)
155+
}
156+
150157
// debounce handler to prevent call twice when
151158
// mouse enter and focus events being triggered toggether
152159
const debouncedHandleShowTooltip = debounce(handleShowTooltip, 50)
@@ -170,6 +177,7 @@ const Tooltip = ({
170177
const enabledEvents: { event: string; listener: (event?: Event) => void }[] = []
171178

172179
if (events.find((event: string) => event === 'click')) {
180+
window.addEventListener('click', handleClickOutsideAnchor)
173181
enabledEvents.push({ event: 'click', listener: handleClickTooltipAnchor })
174182
}
175183

@@ -189,13 +197,14 @@ const Tooltip = ({
189197
})
190198

191199
return () => {
200+
window.removeEventListener('click', handleClickOutsideAnchor)
192201
enabledEvents.forEach(({ event, listener }) => {
193202
elementRefs.forEach((ref) => {
194203
ref.current?.removeEventListener(event, listener)
195204
})
196205
})
197206
}
198-
}, [anchorRefs, anchorId, events, delayHide, delayShow])
207+
}, [anchorRefs, activeAnchor, anchorId, events, delayHide, delayShow])
199208

200209
useEffect(() => {
201210
if (position?.x && position?.y) {

src/components/Tooltip/TooltipTypes.d.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ export type EventsType = 'hover' | 'click'
1212

1313
export type PositionStrategy = 'absolute' | 'fixed'
1414

15-
export type Type = 'fixed' | 'float' | 'free'
16-
1715
export type DataAttribute =
1816
| 'place'
1917
| 'content'

0 commit comments

Comments
 (0)