1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.withSmartKnobs = exports.propTypeKnobResolver = exports.addKnobResolver = undefined;
|
7 |
|
8 | var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
|
9 |
|
10 | var _react = require('react');
|
11 |
|
12 | var _storybook = require('@kadira/storybook');
|
13 |
|
14 | var _storybookAddonKnobs = require('@kadira/storybook-addon-knobs');
|
15 |
|
16 | function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
17 |
|
18 | function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
|
19 |
|
20 | var knobResolvers = {};
|
21 | var addKnobResolver = exports.addKnobResolver = function addKnobResolver(_ref) {
|
22 | var name = _ref.name,
|
23 | resolver = _ref.resolver,
|
24 | _ref$weight = _ref.weight,
|
25 | weight = _ref$weight === undefined ? 0 : _ref$weight;
|
26 | return knobResolvers[name] = { name: name, resolver: resolver, weight: weight };
|
27 | };
|
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 | var propTypeKnobResolver = exports.propTypeKnobResolver = function propTypeKnobResolver(name, knob) {
|
35 | for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
|
36 | args[_key - 2] = arguments[_key];
|
37 | }
|
38 |
|
39 | return function (propName, propType, value, propTypes, defaultProps) {
|
40 | return propType.type.name === name ? knob.apply(undefined, [propName, value].concat(args)) : undefined;
|
41 | };
|
42 | };
|
43 |
|
44 |
|
45 |
|
46 | var propTypeKnobsMap = [{ name: 'string', knob: _storybookAddonKnobs.text }, { name: 'number', knob: _storybookAddonKnobs.number }, { name: 'bool', knob: _storybookAddonKnobs.boolean }, { name: 'func', knob: function knob(name, value) {
|
47 | return value || (0, _storybook.action)(name);
|
48 | } }, { name: 'object', knob: _storybookAddonKnobs.object }, { name: 'node', knob: _storybookAddonKnobs.text }, { name: 'element', knob: _storybookAddonKnobs.text }];
|
49 |
|
50 | propTypeKnobsMap.forEach(function (_ref2, weight) {
|
51 | var name = _ref2.name,
|
52 | knob = _ref2.knob,
|
53 | _ref2$args = _ref2.args,
|
54 | args = _ref2$args === undefined ? [] : _ref2$args;
|
55 | return addKnobResolver({
|
56 | weight: weight * 10,
|
57 | name: 'PropTypes.' + name,
|
58 | resolver: propTypeKnobResolver.apply(undefined, [name, knob].concat(_toConsumableArray(args)))
|
59 | });
|
60 | });
|
61 |
|
62 |
|
63 | addKnobResolver({
|
64 | name: 'PropTypes.oneOf',
|
65 | resolver: function resolver(propName, propType, value, propTypes, defaultProps) {
|
66 |
|
67 | if (propType.type.name === 'enum' && propType.type.value.length) {
|
68 | try {
|
69 | var options = propType.type.value.map(function (value) {
|
70 | return value.value;
|
71 | })
|
72 |
|
73 | .map(function (value) {
|
74 | return value[0] === "'" && value[value.length - 1] === "'" ? '"' + value.replace(/'"'/g, '\\"').slice(1, value.length - 1) + '"' : value;
|
75 | }).map(JSON.parse).reduce(function (res, value) {
|
76 | return _extends({}, res, _defineProperty({}, value, value));
|
77 | }, {});
|
78 |
|
79 | return (0, _storybookAddonKnobs.select)(propName, _extends({ '': '--' }, options), defaultProps[propName]);
|
80 | } catch (e) {}
|
81 | }
|
82 | }
|
83 | });
|
84 |
|
85 | var withSmartKnobs = exports.withSmartKnobs = function withSmartKnobs(story, context) {
|
86 | var component = story(context);
|
87 | var _component$type$__doc = component.type.__docgenInfo;
|
88 | _component$type$__doc = _component$type$__doc === undefined ? { props: {} } : _component$type$__doc;
|
89 | var props = _component$type$__doc.props;
|
90 |
|
91 | var defaultProps = _extends({}, component.type.defaultProps || {}, component.props);
|
92 |
|
93 | var finalProps = Object.keys(props).reduce(function (acc, n) {
|
94 | var item = props[n];
|
95 | if (!item.type) {
|
96 | console.warn('There is a prop with defaultValue ' + item.defaultValue.value + ' but it wasnt specified on element.propTypes. Check story: "' + context.kind + '".');
|
97 | return acc;
|
98 | }
|
99 |
|
100 | return _extends({}, acc, _defineProperty({}, n, item));
|
101 | }, {});
|
102 |
|
103 | return (0, _storybookAddonKnobs.withKnobs)(function () {
|
104 | return (0, _react.cloneElement)(component, resolvePropValues(finalProps, defaultProps));
|
105 | }, context);
|
106 | };
|
107 |
|
108 | var resolvePropValues = function resolvePropValues(propTypes, defaultProps) {
|
109 | var propNames = Object.keys(propTypes);
|
110 | var resolvers = Object.keys(knobResolvers).sort(function (a, b) {
|
111 | return knobResolvers[a].weight < knobResolvers[b].weight;
|
112 | }).map(function (name) {
|
113 | return knobResolvers[name].resolver;
|
114 | });
|
115 |
|
116 | return propNames.map(function (propName) {
|
117 | return resolvers.reduce(function (value, resolver) {
|
118 | return value !== undefined ? value : resolver(propName, propTypes[propName], defaultProps[propName], propTypes, defaultProps);
|
119 | }, undefined);
|
120 | }).reduce(function (props, value, i) {
|
121 | return _extends({}, props, _defineProperty({}, propNames[i], value));
|
122 | }, defaultProps);
|
123 | }; |
\ | No newline at end of file |