File tree Expand file tree Collapse file tree 1 file changed +36
-3
lines changed Expand file tree Collapse file tree 1 file changed +36
-3
lines changed Original file line number Diff line number Diff line change 1
- import React , { ReactNode } from "react"
1
+ import React , { ReactNode , useEffect } from "react"
2
2
import {
3
3
Popover ,
4
4
PopoverArrow ,
5
5
PopoverBody ,
6
6
PopoverContent ,
7
7
PopoverProps ,
8
8
PopoverTrigger ,
9
+ useDisclosure ,
9
10
} from "@chakra-ui/react"
10
11
12
+ import { isMobile } from "@/lib/utils/isMobile"
13
+
11
14
export interface IProps extends PopoverProps {
12
15
content : ReactNode
13
16
children ?: ReactNode
14
17
}
15
18
16
19
const Tooltip : React . FC < IProps > = ( { content, children, ...rest } ) => {
20
+ const { isOpen, onOpen, onClose } = useDisclosure ( )
21
+
22
+ // Close the popover when the user scrolls.
23
+ // This is useful for mobile devices where the popover is open by clicking the
24
+ // trigger, not hovering.
25
+ useEffect ( ( ) => {
26
+ let originalPosition = 0
27
+
28
+ const handleScroll = ( ) => {
29
+ const delta = window . scrollY - originalPosition
30
+
31
+ // Close the popover if the user scrolls more than 80px
32
+ if ( isOpen && Math . abs ( delta ) > 80 ) {
33
+ onClose ( )
34
+ }
35
+ }
36
+
37
+ // Add event listener when the popover is open
38
+ if ( isOpen ) {
39
+ window . addEventListener ( "scroll" , handleScroll )
40
+ originalPosition = window . scrollY
41
+ }
42
+
43
+ return ( ) => {
44
+ window . removeEventListener ( "scroll" , handleScroll )
45
+ }
46
+ } , [ isOpen , onClose ] )
47
+
17
48
return (
18
49
< Popover
50
+ isOpen = { isOpen }
51
+ onOpen = { onOpen }
52
+ onClose = { onClose }
19
53
placement = "top"
20
- trigger = "hover"
21
- strategy = "fixed"
54
+ trigger = { isMobile ( ) ? "click" : "hover" }
22
55
gutter = { 8 }
23
56
{ ...rest }
24
57
>
You can’t perform that action at this time.
0 commit comments