12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- "use strict";
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
- exports.__esModule = true;
- exports.unifySlots = unifySlots;
- exports.createComponent = createComponent;
- require("../../locale");
- var _ = require("..");
- var _string = require("../format/string");
- var _slots = require("../../mixins/slots");
- var _vue = _interopRequireDefault(require("vue"));
- /**
- * Create a basic component with common options
- */
- function install(Vue) {
- var name = this.name;
- Vue.component(name, this);
- Vue.component((0, _string.camelize)("-" + name), this);
- } // unify slots & scopedSlots
- function unifySlots(context) {
- // use data.scopedSlots in lower Vue version
- var scopedSlots = context.scopedSlots || context.data.scopedSlots || {};
- var slots = context.slots();
- Object.keys(slots).forEach(function (key) {
- if (!scopedSlots[key]) {
- scopedSlots[key] = function () {
- return slots[key];
- };
- }
- });
- return scopedSlots;
- } // should be removed after Vue 3
- function transformFunctionComponent(pure) {
- return {
- functional: true,
- props: pure.props,
- model: pure.model,
- render: function render(h, context) {
- return pure(h, context.props, unifySlots(context), context);
- }
- };
- }
- function createComponent(name) {
- return function (sfc) {
- if ((0, _.isFunction)(sfc)) {
- sfc = transformFunctionComponent(sfc);
- }
- if (!sfc.functional) {
- sfc.mixins = sfc.mixins || [];
- sfc.mixins.push(_slots.SlotsMixin);
- }
- sfc.name = name;
- sfc.install = install;
- return sfc;
- };
- }
|