UNPKG

element-plus

Version:
67 lines (66 loc) 1.96 kB
"use strict"; 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;