tdesign-vue
Version:
100 lines (96 loc) • 4.36 kB
JavaScript
/**
* tdesign v1.14.1
* (c) 2025 tdesign
* @license MIT
*/
import _defineProperty from '@babel/runtime/helpers/defineProperty';
import '@babel/runtime/helpers/readOnlyError';
import _typeof from '@babel/runtime/helpers/typeof';
import Vue from 'vue';
import { h } from '@vue/composition-api';
import { camelCase, kebabCase } from 'lodash-es';
var RenderJsTypes = [Function, String, Number, Boolean, Object, Array];
function handleSlots(vm, params, name) {
var _vm$$scopedSlots$came, _vm$$scopedSlots, _vm$$scopedSlots$keba, _vm$$scopedSlots2;
var finaleParams = h;
if (params) {
Object.assign(finaleParams, params);
}
var node = (_vm$$scopedSlots$came = (_vm$$scopedSlots = vm.$scopedSlots)[camelCase(name)]) === null || _vm$$scopedSlots$came === void 0 ? void 0 : _vm$$scopedSlots$came.call(_vm$$scopedSlots, finaleParams);
if (node) return node;
node = (_vm$$scopedSlots$keba = (_vm$$scopedSlots2 = vm.$scopedSlots)[kebabCase(name)]) === null || _vm$$scopedSlots$keba === void 0 ? void 0 : _vm$$scopedSlots$keba.call(_vm$$scopedSlots2, finaleParams);
if (node) return node;
return null;
}
var getValueRenderWay = function getValueRenderWay(value) {
if (["string", "number", "boolean"].includes(_typeof(value))) return "text" /* Text */;
if (_typeof(value) === "object") {
if (!(value instanceof Array) && value && value.context instanceof Vue) {
return "vnode" /* VNode */;
}
return "jsonstring" /* JsonString */;
}
return "unknown" /* Unknown */;
};
var RenderTNodeTemplate = Vue.extend({
name: "render-tnode-template",
functional: true,
props: {
render: RenderJsTypes,
params: null
},
render: function render(h2, ctx) {
var _ctx$props = ctx.props,
render = _ctx$props.render,
params = _ctx$props.params;
var renderResult = typeof render === "function" ? render(h2, params) : render;
var renderWay = getValueRenderWay(renderResult);
var renderText = function renderText(c) {
return ctx.__proto__._v(c);
};
var renderMap = _defineProperty(_defineProperty(_defineProperty({}, "text" /* Text */, function text(c) {
return renderText(c);
}), "jsonstring" /* JsonString */, function jsonstring(c) {
return renderText(JSON.stringify(c, null, 2));
}), "vnode" /* VNode */, function vnode(c) {
return c;
});
return renderMap[renderWay] ? renderMap[renderWay](renderResult) : h2();
}
});
var renderTNodeJSX = function renderTNodeJSX(vm, name, options) {
var params = _typeof(options) === "object" && "params" in options ? options.params : null;
var slotFirst = _typeof(options) === "object" && "slotFirst" in options ? options.slotFirst : false;
var defaultNode = _typeof(options) === "object" && "defaultNode" in options ? options.defaultNode : options;
var propsNode = vm[name];
if (propsNode === false || propsNode === null) return;
if (propsNode === true && defaultNode) {
return handleSlots(vm, params, name) || defaultNode;
}
if (typeof propsNode === "function") {
return propsNode(vm.$createElement, params);
}
var isPropsEmpty = [void 0, params, ""].includes(propsNode);
if ((isPropsEmpty || slotFirst) && (vm.$scopedSlots[camelCase(name)] || vm.$scopedSlots[kebabCase(name)])) {
return handleSlots(vm, params, name);
}
return propsNode;
};
var renderTNodeJSXDefault = function renderTNodeJSXDefault(vm, name, options) {
var defaultNode = _typeof(options) === "object" && "defaultNode" in options ? options.defaultNode : options;
return renderTNodeJSX(vm, name, options) || defaultNode;
};
var renderContent = function renderContent(vm, name1, name2, options) {
var params = _typeof(options) === "object" && "params" in options ? options.params : null;
var defaultNode = _typeof(options) === "object" && "defaultNode" in options && options.defaultNode;
defaultNode = _typeof(options) === "object" && "context" in options && options;
var toParams = params ? {
params: params
} : void 0;
var node1 = renderTNodeJSX(vm, name1, toParams);
var node2 = renderTNodeJSX(vm, name2, toParams);
var r = [void 0, null, ""].includes(node1) ? node2 : node1;
return [void 0, null, ""].includes(r) ? defaultNode : r;
};
export { RenderTNodeTemplate, handleSlots, renderContent, renderTNodeJSX, renderTNodeJSXDefault };
//# sourceMappingURL=render-tnode.js.map