@@ -136,14 +136,17 @@ export const CDropdown = forwardRef<HTMLDivElement | HTMLLIElement, CDropdownPro
136
136
)
137
137
138
138
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
+ } )
141
144
142
145
return ( ) => {
143
146
window . removeEventListener ( 'click' , handleClickOutside )
144
147
window . removeEventListener ( 'keyup' , handleKeyup )
145
148
}
146
- } )
149
+ } , [ _visible ] )
147
150
148
151
useEffect ( ( ) => {
149
152
setVisible ( visible )
@@ -165,24 +168,23 @@ export const CDropdown = forwardRef<HTMLDivElement | HTMLLIElement, CDropdownPro
165
168
}
166
169
}
167
170
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
+
168
181
return popper ? (
169
182
< 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 >
180
184
</ CDropdownContext . Provider >
181
185
) : (
182
186
< CDropdownContext . Provider value = { contextValues } >
183
- < Component className = { _className } { ...rest } ref = { forkedRef } >
184
- { children }
185
- </ Component >
187
+ { dropdownContent ( ) }
186
188
</ CDropdownContext . Provider >
187
189
)
188
190
} ,
0 commit comments