wetrade-design
Version:
一款多语言支持Vue3的UI框架
71 lines (70 loc) • 3.07 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.cloneElement = cloneElement;
exports.cloneVNodes = cloneVNodes;
exports.customRenderSlot = customRenderSlot;
exports.deepCloneElement = deepCloneElement;
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _propsUtil = require("./props-util");
var _vue = require("vue");
var _warning = _interopRequireDefault(require("./warning"));
function cloneElement(vnode) {
var nodeProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var override = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
var mergeRef = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
var ele = vnode;
if (Array.isArray(vnode)) {
ele = (0, _propsUtil.filterEmpty)(vnode)[0];
}
if (!ele) {
return null;
}
var node = (0, _vue.cloneVNode)(ele, nodeProps, mergeRef);
// cloneVNode内部是合并属性,这里改成覆盖属性
node.props = override ? (0, _objectSpread2.default)((0, _objectSpread2.default)({}, node.props), nodeProps) : node.props;
(0, _warning.default)((0, _typeof2.default)(node.props.class) !== 'object', 'class must be string');
return node;
}
function cloneVNodes(vnodes) {
var nodeProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var override = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
return vnodes.map(function (vnode) {
return cloneElement(vnode, nodeProps, override);
});
}
function deepCloneElement(vnode) {
var nodeProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var override = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
var mergeRef = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
if (Array.isArray(vnode)) {
return vnode.map(function (item) {
return deepCloneElement(item, nodeProps, override, mergeRef);
});
} else {
var cloned = cloneElement(vnode, nodeProps, override, mergeRef);
if (Array.isArray(cloned.children)) {
cloned.children = deepCloneElement(cloned.children);
}
return cloned;
}
}
var ensureValidVNode = function ensureValidVNode(slot) {
return (slot || []).some(function (child) {
if (!(0, _vue.isVNode)(child)) return true;
if (child.type === _vue.Comment) return false;
if (child.type === _vue.Fragment && !ensureValidVNode(child.children)) return false;
return true;
}) ? slot : null;
};
function customRenderSlot(slots, name, props, fallback) {
var _slots$name;
var slot = (_slots$name = slots[name]) === null || _slots$name === void 0 ? void 0 : _slots$name.call(slots, props);
if (ensureValidVNode(slot)) {
return slot;
}
return fallback === null || fallback === void 0 ? void 0 : fallback();
}