70 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "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;
 | |
|   };
 | |
| } | 
