JewelryMall/admin/node_modules/element-plus/lib/hooks/use-delayed-toggle/index.js
2026-02-14 19:29:15 +08:00

75 lines
1.8 KiB
JavaScript

'use strict';
var vue = require('vue');
var index = require('../use-timeout/index.js');
var runtime = require('../../utils/vue/props/runtime.js');
var types = require('../../utils/types.js');
const useDelayedToggleProps = runtime.buildProps({
/**
* @description delay of appearance, in millisecond, not valid in controlled mode
*/
showAfter: {
type: Number,
default: 0
},
/**
* @description delay of disappear, in millisecond, not valid in controlled mode
*/
hideAfter: {
type: Number,
default: 200
},
/**
* @description disappear automatically, in millisecond, not valid in controlled mode
*/
autoClose: {
type: Number,
default: 0
}
});
const useDelayedTogglePropsDefaults = {
showAfter: 0,
hideAfter: 200,
autoClose: 0
};
const useDelayedToggle = ({
showAfter,
hideAfter,
autoClose,
open,
close
}) => {
const { registerTimeout } = index.useTimeout();
const {
registerTimeout: registerTimeoutForAutoClose,
cancelTimeout: cancelTimeoutForAutoClose
} = index.useTimeout();
const onOpen = (event, delay = vue.unref(showAfter)) => {
registerTimeout(() => {
open(event);
const _autoClose = vue.unref(autoClose);
if (types.isNumber(_autoClose) && _autoClose > 0) {
registerTimeoutForAutoClose(() => {
close(event);
}, _autoClose);
}
}, delay);
};
const onClose = (event, delay = vue.unref(hideAfter)) => {
cancelTimeoutForAutoClose();
registerTimeout(() => {
close(event);
}, delay);
};
return {
onOpen,
onClose
};
};
exports.useDelayedToggle = useDelayedToggle;
exports.useDelayedToggleProps = useDelayedToggleProps;
exports.useDelayedTogglePropsDefaults = useDelayedTogglePropsDefaults;
//# sourceMappingURL=index.js.map