UNPKG

3.65 kBJavaScriptView Raw
1'use strict';
2
3var _isObject2 = require('lodash/isObject');
4
5var _isObject3 = _interopRequireDefault(_isObject2);
6
7var _isArray2 = require('lodash/isArray');
8
9var _isArray3 = _interopRequireDefault(_isArray2);
10
11Object.defineProperty(exports, "__esModule", {
12 value: true
13});
14
15var _react = require('react');
16
17var _react2 = _interopRequireDefault(_react);
18
19var _makeConfiguration = require('./makeConfiguration');
20
21var _makeConfiguration2 = _interopRequireDefault(_makeConfiguration);
22
23var _isIterable = require('./isIterable');
24
25var _isIterable2 = _interopRequireDefault(_isIterable);
26
27var _parseStyleName = require('./parseStyleName');
28
29var _parseStyleName2 = _interopRequireDefault(_parseStyleName);
30
31var _generateAppendClassName = require('./generateAppendClassName');
32
33var _generateAppendClassName2 = _interopRequireDefault(_generateAppendClassName);
34
35var _objectUnfreeze = require('object-unfreeze');
36
37var _objectUnfreeze2 = _interopRequireDefault(_objectUnfreeze);
38
39function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
40
41var _linkElement = undefined;
42
43_linkElement = function linkElement(element, styles, configuration) {
44 var appendClassName = undefined,
45 elementIsFrozen = undefined,
46 clonedElement = undefined,
47 newChildren = undefined,
48 newProps = undefined,
49 styleNames = undefined;
50
51 if (Object.isFrozen && Object.isFrozen(element)) {
52 elementIsFrozen = true;
53
54 // https://github.com/facebook/react/blob/v0.13.3/src/classic/element/ReactElement.js#L131
55 element = (0, _objectUnfreeze2.default)(element);
56 element.props = (0, _objectUnfreeze2.default)(element.props);
57 }
58
59 styleNames = (0, _parseStyleName2.default)(element.props.styleName || '', configuration.allowMultiple);
60
61 if (_react2.default.isValidElement(element.props.children)) {
62 element.props.children = _linkElement(_react2.default.Children.only(element.props.children), styles, configuration);
63 } else if ((0, _isArray3.default)(element.props.children) || (0, _isIterable2.default)(element.props.children)) {
64 element.props.children = _react2.default.Children.map(element.props.children, function (node) {
65 if (_react2.default.isValidElement(node)) {
66 return _linkElement(node, styles, configuration);
67 } else {
68 return node;
69 }
70 });
71 }
72
73 if (styleNames.length) {
74 appendClassName = (0, _generateAppendClassName2.default)(styles, styleNames, configuration.errorWhenNotFound);
75
76 if (element.props.className) {
77 appendClassName = element.props.className + ' ' + appendClassName;
78 }
79
80 element.props.className = appendClassName;
81 element.props.styleName = null;
82 }
83
84 if (elementIsFrozen) {
85 Object.freeze(element);
86 Object.freeze(element.props);
87 }
88
89 return element;
90};
91
92/**
93 * @param {ReactElement} element
94 * @param {Object} styles CSS modules class map.
95 * @param {CSSModules~Options} userConfiguration
96 * @returns {ReactElement}
97 */
98
99exports.default = function (element) {
100 var styles = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
101 var userConfiguration = arguments[2];
102
103 var configuration = undefined;
104
105 // @see https://github.com/gajus/react-css-modules/pull/30
106 if (!(0, _isObject3.default)(element)) {
107 return element;
108 }
109
110 configuration = (0, _makeConfiguration2.default)(userConfiguration);
111
112 return _linkElement(element, styles, configuration);
113};
114
115module.exports = exports['default'];
116//# sourceMappingURL=linkClass.js.map