Skip to content

Commit e366798

Browse files
committed
[tooltip] Cancel pending open on pointerdown
1 parent 02240e7 commit e366798

2 files changed

Lines changed: 23 additions & 0 deletions

File tree

packages/react/src/tooltip/root/TooltipRoot.test.tsx

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -821,6 +821,26 @@ describe('<Tooltip.Root />', () => {
821821
expect(screen.queryByText('Content')).toBe(null);
822822
});
823823

824+
it('should not open when the trigger receives pointerdown before delay duration', async () => {
825+
await render(<TestTooltip />);
826+
827+
const trigger = screen.getByRole('button', { name: 'Toggle' });
828+
829+
fireEvent.pointerEnter(trigger, { pointerType: 'mouse' });
830+
fireEvent.mouseEnter(trigger);
831+
fireEvent.mouseMove(trigger);
832+
833+
clock.tick(OPEN_DELAY / 2);
834+
835+
fireEvent.pointerDown(trigger, { pointerType: 'mouse' });
836+
837+
clock.tick(OPEN_DELAY / 2);
838+
839+
await flushMicrotasks();
840+
841+
expect(screen.queryByText('Content')).toBe(null);
842+
});
843+
824844
it('should open when the trigger was clicked before delay duration and closeOnClick is false', async () => {
825845
await render(<TestTooltip triggerProps={{ closeOnClick: false }} />);
826846

packages/react/src/tooltip/trigger/TooltipTrigger.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,9 @@ export const TooltipTrigger = fastComponentRef(function TooltipTrigger(
289289
onPointerDown(event: React.PointerEvent) {
290290
pointerTypeRef.current = event.pointerType;
291291
store.set('closeOnClick', closeOnClick);
292+
if (closeOnClick && !store.select('open')) {
293+
store.cancelPendingOpen(event.nativeEvent);
294+
}
292295
},
293296
onClick(event) {
294297
if (closeOnClick && !store.select('open')) {

0 commit comments

Comments
 (0)