mldong-flow-designer-plus
Version:
本项目包含了作者为B站课堂视频[《工作流设计器开发最佳实践》](https://www.bilibili.com/cheese/play/ss24484)的过程源码。教程中开发的组件也可用于实际生产环境中。以下是和使用文档和课程章节说明。 ## 实战项目 [演示地址](https://flow-pro.mldong.com/)
160 lines (159 loc) • 5.24 kB
JavaScript
import { provide, computed, inject, defineComponent, onBeforeMount, onMounted, watch, onUpdated, nextTick, createVNode, Teleport } from "vue";
import { P as PropTypes, t as tuple, _ as _extends } from "./index-DMN4aeBG.js";
const PortalContextKey = Symbol("PortalContextKey");
const useProvidePortal = function(instance) {
let config = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {
inTriggerContext: true
};
provide(PortalContextKey, {
inTriggerContext: config.inTriggerContext,
shouldRender: computed(() => {
const {
sPopupVisible,
popupRef,
forceRender,
autoDestroy
} = instance || {};
let shouldRender = false;
if (sPopupVisible || popupRef || forceRender) {
shouldRender = true;
}
if (!sPopupVisible && autoDestroy) {
shouldRender = false;
}
return shouldRender;
})
});
};
const useInjectPortal = () => {
useProvidePortal({}, {
inTriggerContext: false
});
const portalContext = inject(PortalContextKey, {
shouldRender: computed(() => false),
inTriggerContext: false
});
return {
shouldRender: computed(() => portalContext.shouldRender.value || portalContext.inTriggerContext === false)
};
};
const Portal = defineComponent({
compatConfig: {
MODE: 3
},
name: "Portal",
inheritAttrs: false,
props: {
getContainer: PropTypes.func.isRequired,
didUpdate: Function
},
setup(props, _ref) {
let {
slots
} = _ref;
let isSSR = true;
let container;
const {
shouldRender
} = useInjectPortal();
function setContainer() {
if (shouldRender.value) {
container = props.getContainer();
}
}
onBeforeMount(() => {
isSSR = false;
setContainer();
});
onMounted(() => {
if (container) return;
setContainer();
});
const stopWatch = watch(shouldRender, () => {
if (shouldRender.value && !container) {
container = props.getContainer();
}
if (container) {
stopWatch();
}
});
onUpdated(() => {
nextTick(() => {
var _a;
if (shouldRender.value) {
(_a = props.didUpdate) === null || _a === void 0 ? void 0 : _a.call(props, props);
}
});
});
return () => {
var _a;
if (!shouldRender.value) return null;
if (isSSR) {
return (_a = slots.default) === null || _a === void 0 ? void 0 : _a.call(slots);
}
return container ? createVNode(Teleport, {
"to": container
}, slots) : null;
};
}
});
tuple("bottomLeft", "bottomRight", "topLeft", "topRight");
const getTransitionDirection = (placement) => {
if (placement !== void 0 && (placement === "topLeft" || placement === "topRight")) {
return `slide-down`;
}
return `slide-up`;
};
const getTransitionProps = function(transitionName) {
let opt = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
const transitionProps = transitionName ? _extends({
name: transitionName,
appear: true,
// type: 'animation',
// appearFromClass: `${transitionName}-appear ${transitionName}-appear-prepare`,
// appearActiveClass: `antdv-base-transtion`,
// appearToClass: `${transitionName}-appear ${transitionName}-appear-active`,
enterFromClass: `${transitionName}-enter ${transitionName}-enter-prepare ${transitionName}-enter-start`,
enterActiveClass: `${transitionName}-enter ${transitionName}-enter-prepare`,
enterToClass: `${transitionName}-enter ${transitionName}-enter-active`,
leaveFromClass: ` ${transitionName}-leave`,
leaveActiveClass: `${transitionName}-leave ${transitionName}-leave-active`,
leaveToClass: `${transitionName}-leave ${transitionName}-leave-active`
}, opt) : _extends({
css: false
}, opt);
return transitionProps;
};
const getTransitionGroupProps = function(transitionName) {
let opt = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
const transitionProps = transitionName ? _extends({
name: transitionName,
appear: true,
// appearFromClass: `${transitionName}-appear ${transitionName}-appear-prepare`,
appearActiveClass: `${transitionName}`,
appearToClass: `${transitionName}-appear ${transitionName}-appear-active`,
enterFromClass: `${transitionName}-appear ${transitionName}-enter ${transitionName}-appear-prepare ${transitionName}-enter-prepare`,
enterActiveClass: `${transitionName}`,
enterToClass: `${transitionName}-enter ${transitionName}-appear ${transitionName}-appear-active ${transitionName}-enter-active`,
leaveActiveClass: `${transitionName} ${transitionName}-leave`,
leaveToClass: `${transitionName}-leave-active`
}, opt) : _extends({
css: false
}, opt);
return transitionProps;
};
const getTransitionName = (rootPrefixCls, motion, transitionName) => {
if (transitionName !== void 0) {
return transitionName;
}
return `${rootPrefixCls}-${motion}`;
};
export {
Portal as P,
getTransitionName as a,
getTransitionGroupProps as b,
getTransitionDirection as c,
getTransitionProps as g,
useProvidePortal as u
};
//# sourceMappingURL=transition-DB3AYAM2.js.map