1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.createHOCc = exports.createHOC = undefined;
|
7 |
|
8 | var _courier = require('./courier');
|
9 |
|
10 | var _courier2 = _interopRequireDefault(_courier);
|
11 |
|
12 | var _createRenderFn = require('./createRenderFn');
|
13 |
|
14 | var _vue = require('vue');
|
15 |
|
16 | var _vue2 = _interopRequireDefault(_vue);
|
17 |
|
18 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
19 |
|
20 | var defaultStrategy = function defaultStrategy(parent, child) {
|
21 | return child;
|
22 | };
|
23 |
|
24 | var 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 |
|
40 | var 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 |
|
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 |
|
76 | var createHOCc = exports.createHOCc = (0, _courier2.default)(3, function (options, renderOptions, Component) {
|
77 | return createHOC(Component, options, renderOptions);
|
78 | });
|
79 |
|
80 | exports.default = createHOC;
|
81 |
|
\ | No newline at end of file |