2026-03-31 16:44:41 +08:00

196 lines
8.0 KiB
JavaScript

"use strict";
var common_vendor = require("../../../../common/vendor.js");
var uni_modules_wotDesignUni_components_common_util = require("../common/util.js");
var uni_modules_wotDesignUni_components_wdTransition_types = require("./types.js");
var uni_modules_wotDesignUni_components_common_AbortablePromise = require("../common/AbortablePromise.js");
require("../common/props.js");
const __default__ = {
name: "wd-transition",
options: {
addGlobalClass: true,
virtualHost: true,
styleIsolation: "shared"
}
};
const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
...__default__,
props: uni_modules_wotDesignUni_components_wdTransition_types.transitionProps,
emits: ["click", "before-enter", "enter", "before-leave", "leave", "after-leave", "after-enter"],
setup(__props, { emit }) {
const props = __props;
const getClassNames = (name) => {
let enter2 = `${props.enterClass} ${props.enterActiveClass}`;
let enterTo = `${props.enterToClass} ${props.enterActiveClass}`;
let leave2 = `${props.leaveClass} ${props.leaveActiveClass}`;
let leaveTo = `${props.leaveToClass} ${props.leaveActiveClass}`;
if (Array.isArray(name)) {
for (let index = 0; index < name.length; index++) {
enter2 = `wd-${name[index]}-enter wd-${name[index]}-enter-active ${enter2}`;
enterTo = `wd-${name[index]}-enter-to wd-${name[index]}-enter-active ${enterTo}`;
leave2 = `wd-${name[index]}-leave wd-${name[index]}-leave-active ${leave2}`;
leaveTo = `wd-${name[index]}-leave-to wd-${name[index]}-leave-active ${leaveTo}`;
}
} else if (name) {
enter2 = `wd-${name}-enter wd-${name}-enter-active ${enter2}`;
enterTo = `wd-${name}-enter-to wd-${name}-enter-active ${enterTo}`;
leave2 = `wd-${name}-leave wd-${name}-leave-active ${leave2}`;
leaveTo = `wd-${name}-leave-to wd-${name}-leave-active ${leaveTo}`;
}
return {
enter: enter2,
"enter-to": enterTo,
leave: leave2,
"leave-to": leaveTo
};
};
const inited = common_vendor.ref(false);
const display = common_vendor.ref(false);
const status = common_vendor.ref("");
const transitionEnded = common_vendor.ref(false);
const currentDuration = common_vendor.ref(300);
const classes = common_vendor.ref("");
const enterPromise = common_vendor.ref(null);
const enterLifeCyclePromises = common_vendor.ref(null);
const leaveLifeCyclePromises = common_vendor.ref(null);
const style = common_vendor.computed$1(() => {
return `-webkit-transition-duration:${currentDuration.value}ms;transition-duration:${currentDuration.value}ms;${display.value || !props.destroy ? "" : "display: none;"}${props.customStyle}`;
});
const rootClass = common_vendor.computed$1(() => {
return `wd-transition ${props.customClass} ${classes.value}`;
});
const isShow = common_vendor.computed$1(() => {
return !props.lazyRender || inited.value;
});
common_vendor.onBeforeMount(() => {
if (props.show) {
enter();
}
});
common_vendor.watch(
() => props.show,
(newVal) => {
handleShow(newVal);
},
{ deep: true }
);
function handleClick() {
emit("click");
}
function handleShow(value) {
if (value) {
handleAbortPromise();
enter();
} else {
leave();
}
}
function handleAbortPromise() {
uni_modules_wotDesignUni_components_common_util.isPromise(enterPromise.value) && enterPromise.value.abort();
uni_modules_wotDesignUni_components_common_util.isPromise(enterLifeCyclePromises.value) && enterLifeCyclePromises.value.abort();
uni_modules_wotDesignUni_components_common_util.isPromise(leaveLifeCyclePromises.value) && leaveLifeCyclePromises.value.abort();
enterPromise.value = null;
enterLifeCyclePromises.value = null;
leaveLifeCyclePromises.value = null;
}
function enter() {
enterPromise.value = new uni_modules_wotDesignUni_components_common_AbortablePromise.AbortablePromise(async (resolve) => {
try {
const classNames = getClassNames(props.name);
const duration = uni_modules_wotDesignUni_components_common_util.isObj(props.duration) ? props.duration.enter : props.duration;
status.value = "enter";
emit("before-enter");
enterLifeCyclePromises.value = uni_modules_wotDesignUni_components_common_util.pause();
await enterLifeCyclePromises.value;
emit("enter");
classes.value = classNames.enter;
currentDuration.value = duration;
enterLifeCyclePromises.value = uni_modules_wotDesignUni_components_common_util.pause();
await enterLifeCyclePromises.value;
inited.value = true;
display.value = true;
enterLifeCyclePromises.value = uni_modules_wotDesignUni_components_common_util.pause();
await enterLifeCyclePromises.value;
enterLifeCyclePromises.value = null;
transitionEnded.value = false;
classes.value = classNames["enter-to"];
resolve();
} catch (error) {
}
});
}
async function leave() {
if (!enterPromise.value) {
transitionEnded.value = false;
return onTransitionEnd();
}
try {
await enterPromise.value;
if (!display.value)
return;
const classNames = getClassNames(props.name);
const duration = uni_modules_wotDesignUni_components_common_util.isObj(props.duration) ? props.duration.leave : props.duration;
status.value = "leave";
emit("before-leave");
currentDuration.value = duration;
leaveLifeCyclePromises.value = uni_modules_wotDesignUni_components_common_util.pause();
await leaveLifeCyclePromises.value;
emit("leave");
classes.value = classNames.leave;
leaveLifeCyclePromises.value = uni_modules_wotDesignUni_components_common_util.pause();
await leaveLifeCyclePromises.value;
transitionEnded.value = false;
classes.value = classNames["leave-to"];
leaveLifeCyclePromises.value = setPromise(currentDuration.value);
await leaveLifeCyclePromises.value;
leaveLifeCyclePromises.value = null;
onTransitionEnd();
enterPromise.value = null;
} catch (error) {
}
}
function setPromise(duration) {
return new uni_modules_wotDesignUni_components_common_AbortablePromise.AbortablePromise((resolve) => {
const timer = setTimeout(() => {
clearTimeout(timer);
resolve();
}, duration);
});
}
function onTransitionEnd() {
if (transitionEnded.value)
return;
transitionEnded.value = true;
if (status.value === "leave") {
emit("after-leave");
} else if (status.value === "enter") {
emit("after-enter");
}
if (!props.show && display.value) {
display.value = false;
}
}
function noop() {
}
return (_ctx, _cache) => {
return common_vendor.e({
a: common_vendor.unref(isShow) && _ctx.disableTouchMove
}, common_vendor.unref(isShow) && _ctx.disableTouchMove ? {
b: common_vendor.n(common_vendor.unref(rootClass)),
c: common_vendor.s(common_vendor.unref(style)),
d: common_vendor.o(onTransitionEnd),
e: common_vendor.o(handleClick),
f: common_vendor.o(noop)
} : common_vendor.unref(isShow) && !_ctx.disableTouchMove ? {
h: common_vendor.n(common_vendor.unref(rootClass)),
i: common_vendor.s(common_vendor.unref(style)),
j: common_vendor.o(onTransitionEnd),
k: common_vendor.o(handleClick)
} : {}, {
g: common_vendor.unref(isShow) && !_ctx.disableTouchMove
});
};
}
});
var Component = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-433f2aff"], ["__file", "D:/\u7F51\u6291\u4E91Time/\u79C1\u6D3B/2000\u7B97\u5366/src/uni_modules/wot-design-uni/components/wd-transition/wd-transition.vue"]]);
wx.createComponent(Component);