Skip to content

Commit 5bc1fe6

Browse files
authored
Merge pull request #1282 from ReactTooltip/fix/issue-1281-global-events
fix: global events broke on ios
2 parents 1099ad1 + e74d5a5 commit 5bc1fe6

2 files changed

Lines changed: 32 additions & 0 deletions

File tree

src/components/Tooltip/use-tooltip-events.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,11 @@ const useTooltipEvents = ({
357357
debouncedHandleShowTooltip(resolveAnchorElementRef.current(event.target))
358358
})
359359
}
360+
if (actualOpenEvents.mouseenter || actualOpenEvents.mouseover || actualOpenEvents.focus) {
361+
addDelegatedListener('touchstart', (event) => {
362+
debouncedHandleShowTooltip(resolveAnchorElementRef.current(event.target))
363+
})
364+
}
360365
if (actualCloseEvents.blur) {
361366
addDelegatedListener('focusout', (event) => {
362367
const targetAnchor = resolveAnchorElementRef.current(event.target)
@@ -470,6 +475,7 @@ const useTooltipEvents = ({
470475
useEffect(() => {
471476
const handleScrollResize = () => {
472477
handleShowRef.current(false)
478+
clearTimeoutRef(tooltipShowDelayTimerRef)
473479
}
474480

475481
const tooltipScrollParent = tooltipScrollParentRef.current

src/test/tooltip-anchor-selection.spec.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,32 @@ describe('tooltip anchor selection', () => {
6363
await waitForTooltipToClose('scroll-resize-test')
6464
})
6565

66+
test('reopens on touch after closing from scroll', async () => {
67+
render(
68+
<>
69+
<span data-tooltip-id="touch-scroll-test">Tap Me</span>
70+
<TooltipController
71+
id="touch-scroll-test"
72+
content="Touch Scroll Test"
73+
globalCloseEvents={{ scroll: true }}
74+
/>
75+
</>,
76+
)
77+
78+
const anchor = screen.getByText('Tap Me')
79+
80+
fireEvent.touchStart(anchor)
81+
await waitForTooltip('touch-scroll-test')
82+
83+
fireEvent.scroll(window)
84+
await waitForTooltipToStopShowing('touch-scroll-test')
85+
86+
fireEvent.touchStart(anchor)
87+
await waitFor(() => {
88+
expect(document.getElementById('touch-scroll-test')).not.toHaveClass('react-tooltip__closing')
89+
})
90+
})
91+
6692
test('unmounts cleanly after opening and closing', async () => {
6793
const { unmount } = render(
6894
<>

0 commit comments

Comments
 (0)