@@ -10,56 +10,71 @@ import {
1010 PopoverTrigger ,
1111 Tooltip ,
1212} from '@chakra-ui/react' ;
13- import React from 'react' ;
13+ import React , { useState } from 'react' ;
1414
15- const Popover = ( { props, children, label, trigger } ) => (
16- < ChakPopover autoFocus = { false } isLazy placement = "top" arrowSize = "0" >
17- < PopoverTrigger >
18- < Box >
19- { ! ! trigger && < Box > { trigger } </ Box > }
20- { ! trigger && (
21- < Box >
22- < Tooltip
23- label = { label }
24- aria-label = { label }
25- hasArrow
26- variant = "default"
27- >
28- < Box
29- as = "button"
30- p = "15px"
31- _focus = { { outline : 0 } }
32- _hover = { { boxShadow : 'xl' } }
33- rounded = "2xl"
34- { ...props }
35- />
36- </ Tooltip >
37- </ Box >
38- ) }
39- </ Box >
40- </ PopoverTrigger >
41- < PopoverContent
42- bg = "gray.50"
43- shadow = "2xl"
44- _dark = { { bg : 'gray.700' } }
45- _focus = { { boxShadow : 'none' , outline : 'none' } }
15+ const Popover = ( { props, children, label, trigger } ) => {
16+ const [ isOpen , setIsOpen ] = useState ( false ) ;
17+ const open = ( ) => setIsOpen ( ! isOpen ) ;
18+ const close = ( ) => setIsOpen ( false ) ;
19+ 20+ return (
21+ < ChakPopover
22+ autoFocus = { false }
23+ isLazy
24+ placement = "top"
25+ arrowSize = "0"
26+ isOpen = { isOpen }
27+ onClose = { close }
4628 >
47- < PopoverArrow />
48- < PopoverCloseButton mt = "6px" />
49- < PopoverHeader py = "3" >
50- < Heading
51- fontSize = "md"
52- letterSpacing = "-0.9px"
53- textAlign = "center"
54- fontWeight = "700"
55- variant = "main"
56- >
57- { label }
58- </ Heading >
59- </ PopoverHeader >
60- < PopoverBody p = "0" > { children } </ PopoverBody >
61- </ PopoverContent >
62- </ ChakPopover >
63- ) ;
29+ < PopoverTrigger >
30+ < Box onClick = { open } >
31+ { ! ! trigger && < Box > { trigger } </ Box > }
32+ { ! trigger && (
33+ < Box >
34+ < Tooltip
35+ label = { label }
36+ aria-label = { label }
37+ hasArrow
38+ variant = "default"
39+ >
40+ < Box
41+ as = "button"
42+ p = "15px"
43+ _focus = { { outline : 0 } }
44+ _hover = { { boxShadow : 'xl' } }
45+ rounded = "2xl"
46+ { ...props }
47+ />
48+ </ Tooltip >
49+ </ Box >
50+ ) }
51+ </ Box >
52+ </ PopoverTrigger >
53+ < PopoverContent
54+ bg = "gray.50"
55+ shadow = "2xl"
56+ _dark = { { bg : 'gray.700' } }
57+ _focus = { { boxShadow : 'none' , outline : 'none' } }
58+ >
59+ < PopoverArrow />
60+ < PopoverCloseButton mt = "6px" />
61+ < PopoverHeader py = "3" >
62+ < Heading
63+ fontSize = "md"
64+ letterSpacing = "-0.9px"
65+ textAlign = "center"
66+ fontWeight = "700"
67+ variant = "main"
68+ >
69+ { label }
70+ </ Heading >
71+ </ PopoverHeader >
72+ < PopoverBody p = "0" >
73+ { typeof children === 'function' ? children ( close ) : children }
74+ </ PopoverBody >
75+ </ PopoverContent >
76+ </ ChakPopover >
77+ ) ;
78+ } ;
6479
6580export default Popover ;
0 commit comments