UNPKG

2.08 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.createHOCc = exports.createHOC = undefined;
7
8var _courier = require('./courier');
9
10var _courier2 = _interopRequireDefault(_courier);
11
12var _createRenderFn = require('./createRenderFn');
13
14var _vue = require('vue');
15
16var _vue2 = _interopRequireDefault(_vue);
17
18function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
20var defaultStrategy = function defaultStrategy(parent, child) {
21 return child;
22};
23
24var normalizeProps = function normalizeProps(props) {
25 if (!props) {
26 return {};
27 }
28 if (Array.isArray(props)) {
29 var obj = {};
30 props.forEach(function (key) {
31 if (typeof key === 'string') {
32 obj[key] = {};
33 }
34 });
35 return obj;
36 }
37 return Object.assign({}, props);
38};
39
40var createHOC = exports.createHOC = function createHOC(Component, options, renderOptions) {
41 var hoc = {
42 props: normalizeProps(typeof Component === 'function' ? Component.options.props : Component.props),
43 mixins: [],
44 name: (Component.name || 'Anonymous') + 'HOC',
45 render: (0, _createRenderFn.createRenderFnc)(renderOptions)
46 };
47 if (options) {
48 Object.keys(options).forEach(function (key) {
49 var child = options && options[key];
50 var parent = hoc[key];
51 var strategy = _vue2.default.config.optionMergeStrategies[key] || defaultStrategy;
52
53 if (key === 'props') {
54
55 // $FlowFixMe
56 hoc[key] = strategy(parent, normalizeProps(child));
57 } else {
58 hoc[key] = strategy(parent, child);
59 }
60 });
61 }
62
63 hoc.mixins && hoc.mixins.push({
64 created: function created() {
65 this.$createElement = this.$parent.$createElement;
66 }
67 });
68
69 if (hoc.render && hoc.render.curried) {
70 hoc.render = hoc.render(Component);
71 }
72
73 return hoc;
74};
75
76var createHOCc = exports.createHOCc = (0, _courier2.default)(3, function (options, renderOptions, Component) {
77 return createHOC(Component, options, renderOptions);
78});
79
80exports.default = createHOC;
81//# sourceMappingURL=createHOC.js.map
\No newline at end of file