@@ -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