fix: dropdown menu hide error
parent
98be7071e5
commit
61d6312783
|
@ -65,7 +65,7 @@ export const menuProps = () => ({
|
|||
mode: { type: String as PropType<MenuMode>, default: 'vertical' },
|
||||
|
||||
inlineIndent: { type: Number, default: 24 },
|
||||
subMenuOpenDelay: { type: Number, default: 0.1 },
|
||||
subMenuOpenDelay: { type: Number, default: 0 },
|
||||
subMenuCloseDelay: { type: Number, default: 0.1 },
|
||||
|
||||
builtinPlacements: { type: Object as PropType<BuiltinPlacements> },
|
||||
|
@ -201,9 +201,7 @@ export default defineComponent({
|
|||
|
||||
// >>>>> Trigger select
|
||||
const triggerSelection = (info: MenuInfo) => {
|
||||
if (!props.selectable) {
|
||||
return;
|
||||
}
|
||||
if (props.selectable) {
|
||||
// Insert or Remove
|
||||
const { key: targetKey } = info;
|
||||
const exist = mergedSelectedKeys.value.includes(targetKey);
|
||||
|
@ -235,7 +233,8 @@ export default defineComponent({
|
|||
emit('select', selectInfo);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
// Whatever selectable, always close it
|
||||
if (mergedMode.value !== 'inline' && !props.multiple && mergedOpenKeys.value.length) {
|
||||
triggerOpenKeys(EMPTY_LIST);
|
||||
}
|
||||
|
@ -432,7 +431,6 @@ export default defineComponent({
|
|||
registerMenuInfo,
|
||||
unRegisterMenuInfo,
|
||||
selectedSubMenuKeys,
|
||||
isRootMenu: shallowRef(true),
|
||||
expandIcon,
|
||||
forceSubMenuRender: computed(() => props.forceSubMenuRender),
|
||||
rootClassName: hashId,
|
||||
|
|
|
@ -39,7 +39,6 @@ export default defineComponent({
|
|||
subMenuCloseDelay,
|
||||
builtinPlacements,
|
||||
triggerSubMenuAction,
|
||||
isRootMenu,
|
||||
forceSubMenuRender,
|
||||
motion,
|
||||
defaultMotions,
|
||||
|
@ -91,9 +90,7 @@ export default defineComponent({
|
|||
rootClassName.value,
|
||||
)}
|
||||
stretch={mode === 'horizontal' ? 'minWidth' : null}
|
||||
getPopupContainer={
|
||||
isRootMenu.value ? getPopupContainer.value : triggerNode => triggerNode.parentNode
|
||||
}
|
||||
getPopupContainer={getPopupContainer.value}
|
||||
builtinPlacements={placement.value}
|
||||
popupPlacement={popupPlacement.value}
|
||||
popupVisible={innerVisible.value}
|
||||
|
|
|
@ -302,7 +302,7 @@ export default defineComponent({
|
|||
onVisibleChange={onPopupVisibleChange}
|
||||
v-slots={{
|
||||
popup: () => (
|
||||
<MenuContextProvider mode={subMenuTriggerModeRef.value} isRootMenu={false}>
|
||||
<MenuContextProvider mode={subMenuTriggerModeRef.value}>
|
||||
<SubMenuList
|
||||
id={popupId}
|
||||
ref={popupRef}
|
||||
|
|
|
@ -19,7 +19,6 @@ export interface StoreMenuInfo {
|
|||
parentKeys: Ref<Key[]>;
|
||||
}
|
||||
export interface MenuContextProps {
|
||||
isRootMenu: Ref<boolean>;
|
||||
rootClassName: Ref<string>;
|
||||
registerMenuInfo: (key: string, info: StoreMenuInfo) => void;
|
||||
unRegisterMenuInfo: (key: string) => void;
|
||||
|
@ -114,7 +113,6 @@ const MenuContextProvider = defineComponent({
|
|||
props: {
|
||||
mode: { type: String as PropType<MenuMode>, default: undefined },
|
||||
overflowDisabled: { type: Boolean, default: undefined },
|
||||
isRootMenu: { type: Boolean, default: undefined },
|
||||
},
|
||||
setup(props, { slots }) {
|
||||
const menuContext = useInjectMenu();
|
||||
|
@ -124,9 +122,6 @@ const MenuContextProvider = defineComponent({
|
|||
if (props.mode !== undefined) {
|
||||
newContext.mode = toRef(props, 'mode');
|
||||
}
|
||||
if (props.isRootMenu !== undefined) {
|
||||
newContext.isRootMenu = toRef(props, 'isRootMenu');
|
||||
}
|
||||
if (props.overflowDisabled !== undefined) {
|
||||
newContext.overflowDisabled = toRef(props, 'overflowDisabled');
|
||||
}
|
||||
|
|
|
@ -70,7 +70,6 @@ export default defineComponent({
|
|||
const extraOverlayProps = {
|
||||
prefixCls: `${props.prefixCls}-menu`,
|
||||
onClick,
|
||||
getPopupContainer: () => triggerRef.value.getPopupDomNode(),
|
||||
};
|
||||
return (
|
||||
<Fragment key={skipFlattenKey}>
|
||||
|
|
|
@ -13,6 +13,7 @@ export default defineComponent({
|
|||
const innerVisible = shallowRef(false);
|
||||
const inMobile = shallowRef(false);
|
||||
const popupRef = shallowRef();
|
||||
const rootRef = shallowRef<HTMLElement>();
|
||||
watch(
|
||||
[() => props.visible, () => props.mobile],
|
||||
() => {
|
||||
|
@ -45,7 +46,7 @@ export default defineComponent({
|
|||
);
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div ref={rootRef}>
|
||||
<Mask {...cloneProps} />
|
||||
{popupNode}
|
||||
</div>
|
||||
|
|
|
@ -11,7 +11,6 @@ import {
|
|||
getSlot,
|
||||
findDOMNode,
|
||||
} from '../_util/props-util';
|
||||
import { requestAnimationTimeout, cancelAnimationTimeout } from '../_util/requestAnimationTimeout';
|
||||
import addEventListener from '../vc-util/Dom/addEventListener';
|
||||
import Popup from './Popup';
|
||||
import { getAlignFromPlacement, getAlignPopupClassName } from './utils/alignUtil';
|
||||
|
@ -43,7 +42,6 @@ const ALL_HANDLERS = [
|
|||
'onBlur',
|
||||
'onContextmenu',
|
||||
];
|
||||
|
||||
export default defineComponent({
|
||||
compatConfig: { MODE: 3 },
|
||||
name: 'Trigger',
|
||||
|
@ -107,7 +105,11 @@ export default defineComponent({
|
|||
setPortal,
|
||||
vcTriggerContext: inject(
|
||||
'vcTriggerContext',
|
||||
{} as { onPopupMouseDown?: (...args: any[]) => void },
|
||||
{} as {
|
||||
onPopupMouseDown?: (...args: any[]) => void;
|
||||
onPopupMouseenter?: (...args: any[]) => void;
|
||||
onPopupMouseleave?: (...args: any[]) => void;
|
||||
},
|
||||
),
|
||||
popupRef,
|
||||
setPopupRef,
|
||||
|
@ -165,6 +167,8 @@ export default defineComponent({
|
|||
created() {
|
||||
provide('vcTriggerContext', {
|
||||
onPopupMouseDown: this.onPopupMouseDown,
|
||||
onPopupMouseenter: this.onPopupMouseenter,
|
||||
onPopupMouseleave: this.onPopupMouseleave,
|
||||
});
|
||||
useProvidePortal(this);
|
||||
},
|
||||
|
@ -256,6 +260,10 @@ export default defineComponent({
|
|||
},
|
||||
|
||||
onPopupMouseenter() {
|
||||
const { vcTriggerContext = {} } = this;
|
||||
if (vcTriggerContext.onPopupMouseenter) {
|
||||
vcTriggerContext.onPopupMouseenter();
|
||||
}
|
||||
this.clearDelayTimer();
|
||||
},
|
||||
|
||||
|
@ -269,6 +277,10 @@ export default defineComponent({
|
|||
return;
|
||||
}
|
||||
this.delaySetPopupVisible(false, this.$props.mouseLeaveDelay);
|
||||
const { vcTriggerContext = {} } = this;
|
||||
if (vcTriggerContext.onPopupMouseleave) {
|
||||
vcTriggerContext.onPopupMouseleave(e);
|
||||
}
|
||||
},
|
||||
|
||||
onFocus(e) {
|
||||
|
@ -359,7 +371,6 @@ export default defineComponent({
|
|||
this.mouseDownTimeout = setTimeout(() => {
|
||||
this.hasPopupMouseDown = false;
|
||||
}, 0);
|
||||
|
||||
if (vcTriggerContext.onPopupMouseDown) {
|
||||
vcTriggerContext.onPopupMouseDown(...args);
|
||||
}
|
||||
|
@ -574,7 +585,7 @@ export default defineComponent({
|
|||
this.clearDelayTimer();
|
||||
if (delay) {
|
||||
const point = event ? { pageX: event.pageX, pageY: event.pageY } : null;
|
||||
this.delayTimer = requestAnimationTimeout(() => {
|
||||
this.delayTimer = setTimeout(() => {
|
||||
this.setPopupVisible(visible, point);
|
||||
this.clearDelayTimer();
|
||||
}, delay);
|
||||
|
@ -585,7 +596,7 @@ export default defineComponent({
|
|||
|
||||
clearDelayTimer() {
|
||||
if (this.delayTimer) {
|
||||
cancelAnimationTimeout(this.delayTimer);
|
||||
clearTimeout(this.delayTimer);
|
||||
this.delayTimer = null;
|
||||
}
|
||||
},
|
||||
|
|
Loading…
Reference in New Issue