diff --git a/assets/index.less b/assets/index.less index 0ce2d70..9658e2d 100644 --- a/assets/index.less +++ b/assets/index.less @@ -28,7 +28,7 @@ display: none; } - &-menu { + .rc-menu { outline: none; position: relative; list-style-type: none; diff --git a/package.json b/package.json index f47f9cd..a803d24 100644 --- a/package.json +++ b/package.json @@ -55,6 +55,7 @@ "rc-menu": "^9.5.2", "react": "^16.11.0", "react-dom": "^16.11.0", + "regenerator-runtime": "^0.13.9", "typescript": "^4.0.2" }, "peerDependencies": { @@ -62,9 +63,9 @@ "react-dom": ">=16.11.0" }, "dependencies": { - "@babel/runtime": "^7.10.1", + "@babel/runtime": "^7.18.3", "classnames": "^2.2.6", - "rc-trigger": "^5.0.4", + "rc-trigger": "^5.3.1", "rc-util": "^5.17.0" } } diff --git a/src/Dropdown.tsx b/src/Dropdown.tsx index 8fb6996..2837dad 100644 --- a/src/Dropdown.tsx +++ b/src/Dropdown.tsx @@ -10,7 +10,6 @@ import type { } from 'rc-trigger/lib/interface'; import Placements from './placements'; import useAccessibility from './hooks/useAccessibility'; -import { composeRef, supportRef } from 'rc-util/lib/ref'; export interface DropdownProps extends Pick< @@ -70,14 +69,10 @@ function Dropdown(props: DropdownProps, ref) { const triggerRef = React.useRef(null); React.useImperativeHandle(ref, () => triggerRef.current); - const menuRef = React.useRef(null); - const menuClassName = `${prefixCls}-menu`; - useAccessibility({ visible: mergedVisible, setTriggerVisible, triggerRef, - menuRef, onVisibleChange: props.onVisibleChange, autoFocus, }); @@ -95,15 +90,12 @@ function Dropdown(props: DropdownProps, ref) { const onClick = (e) => { const { onOverlayClick } = props; - const overlayProps = getOverlayElement().props; setTriggerVisible(false); + console.log('!!!!!!!!!!!!', onOverlayClick); if (onOverlayClick) { onOverlayClick(e); } - if (overlayProps.onClick) { - overlayProps.onClick(e); - } }; const onVisibleChange = (newVisible: boolean) => { @@ -116,23 +108,11 @@ function Dropdown(props: DropdownProps, ref) { const getMenuElement = () => { const overlayElement = getOverlayElement(); - // @ts-ignore - const composedMenuRef = composeRef(menuRef, overlayElement.ref); - - const extraOverlayProps = { - prefixCls: menuClassName, - ['data-dropdown-inject']: true, - onClick, - ref: supportRef(overlayElement) ? composedMenuRef : undefined, - }; - if (typeof overlayElement.type === 'string') { - delete extraOverlayProps.prefixCls; - delete extraOverlayProps['data-dropdown-inject']; - } + return ( <> {arrow &&
} - {React.cloneElement(overlayElement, extraOverlayProps)} + {overlayElement} > ); }; @@ -199,6 +179,7 @@ function Dropdown(props: DropdownProps, ref) { stretch={getMinOverlayWidthMatchTrigger() ? 'minWidth' : ''} popup={getMenuElementOrLambda()} onPopupVisibleChange={onVisibleChange} + onPopupClick={onClick} getPopupContainer={getPopupContainer} > {renderChildren()} diff --git a/src/hooks/useAccessibility.ts b/src/hooks/useAccessibility.ts index 8901dcc..cc01deb 100644 --- a/src/hooks/useAccessibility.ts +++ b/src/hooks/useAccessibility.ts @@ -1,6 +1,7 @@ import * as React from 'react'; import KeyCode from 'rc-util/lib/KeyCode'; import raf from 'rc-util/lib/raf'; +import { getFocusNodeList } from 'rc-util/lib/Dom/focus'; const { ESC, TAB } = KeyCode; @@ -8,7 +9,6 @@ interface UseAccessibilityProps { visible: boolean; setTriggerVisible: (visible: boolean) => void; triggerRef: React.RefObject