element-plus
Version:
> TODO: description
67 lines (66 loc) • 1.96 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useTargetEvents = exports.DEFAULT_TRIGGER = void 0;
const vue_1 = require("vue");
const util_1 = require("../../utils/util");
exports.DEFAULT_TRIGGER = 'hover';
const useTargetEvents = (onShow, onHide, onToggle) => {
const { props } = vue_1.getCurrentInstance();
let triggerFocused = false;
const popperEventsHandler = (e) => {
e.stopPropagation();
switch (e.type) {
case 'click': {
if (triggerFocused) {
// reset previous focus event
triggerFocused = false;
}
else {
onToggle();
}
break;
}
case 'mouseenter': {
onShow();
break;
}
case 'mouseleave': {
onHide();
break;
}
case 'focus': {
triggerFocused = true;
onShow();
break;
}
case 'blur': {
triggerFocused = false;
onHide();
break;
}
}
};
const triggerEventsMap = {
click: ['onClick'],
hover: ['onMouseenter', 'onMouseleave'],
focus: ['onFocus', 'onBlur'],
};
const mapEvents = (t) => {
const events = {};
triggerEventsMap[t].forEach(event => {
events[event] = popperEventsHandler;
});
return events;
};
return vue_1.computed(() => {
if (util_1.isArray(props.trigger)) {
return Object.values(props.trigger).reduce((pre, t) => {
return Object.assign(Object.assign({}, pre), mapEvents(t));
}, {});
}
else {
return mapEvents(props.trigger);
}
});
};
exports.useTargetEvents = useTargetEvents;