@@ -136,14 +136,17 @@ export const CDropdown = forwardRef<HTMLDivElement | HTMLLIElement, CDropdownPro
136136 )
137137
138138 useEffect ( ( ) => {
139- window . addEventListener ( 'click' , handleClickOutside )
140- window . addEventListener ( 'keyup' , handleKeyup )
139+ _visible &&
140+ setTimeout ( ( ) => {
141+ window . addEventListener ( 'click' , handleClickOutside )
142+ window . addEventListener ( 'keyup' , handleKeyup )
143+ } )
141144
142145 return ( ) => {
143146 window . removeEventListener ( 'click' , handleClickOutside )
144147 window . removeEventListener ( 'keyup' , handleKeyup )
145148 }
146- } )
149+ } , [ _visible ] )
147150
148151 useEffect ( ( ) => {
149152 setVisible ( visible )
@@ -165,24 +168,23 @@ export const CDropdown = forwardRef<HTMLDivElement | HTMLLIElement, CDropdownPro
165168 }
166169 }
167170
171+ const dropdownContent = ( ) => {
172+ return variant === 'input-group' ? (
173+ < > { children } </ >
174+ ) : (
175+ < Component className = { _className } { ...rest } ref = { forkedRef } >
176+ { children }
177+ </ Component >
178+ )
179+ }
180+
168181 return popper ? (
169182 < CDropdownContext . Provider value = { contextValues } >
170- < Manager >
171- { /* TODO: find solution how to handle click outside */ }
172- { variant === 'input-group' ? (
173- < > { children } </ >
174- ) : (
175- < Component className = { _className } { ...rest } ref = { forkedRef } >
176- { children }
177- </ Component >
178- ) }
179- </ Manager >
183+ < Manager > { dropdownContent ( ) } </ Manager >
180184 </ CDropdownContext . Provider >
181185 ) : (
182186 < CDropdownContext . Provider value = { contextValues } >
183- < Component className = { _className } { ...rest } ref = { forkedRef } >
184- { children }
185- </ Component >
187+ { dropdownContent ( ) }
186188 </ CDropdownContext . Provider >
187189 )
188190 } ,
0 commit comments