@@ -207,8 +207,7 @@ export const CDropdown: PolymorphicRefForwardingComponent<'div', CDropdownProps>
207
207
ref
208
208
) => {
209
209
const dropdownRef = useRef < HTMLDivElement > ( null )
210
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
211
- const dropdownToggleRef = useRef < any > ( null )
210
+ const dropdownToggleRef = useRef < HTMLElement > ( null )
212
211
const dropdownMenuRef = useRef < HTMLDivElement | HTMLUListElement > ( null )
213
212
const forkedRef = useForkedRef ( ref , dropdownRef )
214
213
const [ _visible , setVisible ] = useState ( visible )
@@ -256,28 +255,45 @@ export const CDropdown: PolymorphicRefForwardingComponent<'div', CDropdownProps>
256
255
} , [ visible ] )
257
256
258
257
useEffect ( ( ) => {
259
- if ( _visible && dropdownToggleRef . current && dropdownMenuRef . current ) {
260
- dropdownToggleRef . current . focus ( )
261
- popper &&
262
- initPopper ( dropdownToggleRef . current , dropdownMenuRef . current , computedPopperConfig )
258
+ const toggleElement = dropdownToggleRef . current
259
+ const menuElement = dropdownMenuRef . current
260
+
261
+ if ( _visible && toggleElement && menuElement ) {
262
+ if ( popper ) {
263
+ initPopper ( toggleElement , menuElement , computedPopperConfig )
264
+ }
265
+
266
+ toggleElement . focus ( )
267
+ toggleElement . addEventListener ( 'keydown' , handleKeydown )
268
+ menuElement . addEventListener ( 'keydown' , handleKeydown )
269
+
263
270
window . addEventListener ( 'mouseup' , handleMouseUp )
264
271
window . addEventListener ( 'keyup' , handleKeyup )
265
- dropdownToggleRef . current . addEventListener ( 'keydown' , handleKeydown )
266
- dropdownMenuRef . current . addEventListener ( 'keydown' , handleKeydown )
267
- onShow && onShow ( )
272
+
273
+ onShow ?.( )
268
274
}
269
275
270
276
return ( ) => {
271
- popper && destroyPopper ( )
277
+ if ( popper ) {
278
+ destroyPopper ( )
279
+ }
280
+
281
+ toggleElement ?. removeEventListener ( 'keydown' , handleKeydown )
282
+ menuElement ?. removeEventListener ( 'keydown' , handleKeydown )
283
+
272
284
window . removeEventListener ( 'mouseup' , handleMouseUp )
273
285
window . removeEventListener ( 'keyup' , handleKeyup )
274
- dropdownToggleRef . current &&
275
- dropdownToggleRef . current . removeEventListener ( 'keydown' , handleKeydown )
276
- dropdownMenuRef . current &&
277
- dropdownMenuRef . current . removeEventListener ( 'keydown' , handleKeydown )
278
- onHide && onHide ( )
286
+
287
+ onHide ?.( )
279
288
}
280
- } , [ _visible ] )
289
+ } , [
290
+ computedPopperConfig ,
291
+ destroyPopper ,
292
+ dropdownMenuRef ,
293
+ dropdownToggleRef ,
294
+ initPopper ,
295
+ _visible ,
296
+ ] )
281
297
282
298
const handleKeydown = ( event : KeyboardEvent ) => {
283
299
if (
0 commit comments