UNPKG

3.42 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _isObject2 = require('lodash/isObject');
8
9var _isObject3 = _interopRequireDefault(_isObject2);
10
11var _isArray2 = require('lodash/isArray');
12
13var _isArray3 = _interopRequireDefault(_isArray2);
14
15var _react = require('react');
16
17var _react2 = _interopRequireDefault(_react);
18
19var _objectUnfreeze = require('object-unfreeze');
20
21var _objectUnfreeze2 = _interopRequireDefault(_objectUnfreeze);
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
35function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
36
37var linkElement = function linkElement(element, styles, configuration) {
38 var appendClassName = void 0;
39 var elementIsFrozen = void 0;
40 var elementShallowCopy = void 0;
41
42 elementShallowCopy = element;
43
44 if (Object.isFrozen && Object.isFrozen(elementShallowCopy)) {
45 elementIsFrozen = true;
46
47 // https://github.com/facebook/react/blob/v0.13.3/src/classic/element/ReactElement.js#L131
48 elementShallowCopy = (0, _objectUnfreeze2.default)(elementShallowCopy);
49 elementShallowCopy.props = (0, _objectUnfreeze2.default)(elementShallowCopy.props);
50 }
51
52 var styleNames = (0, _parseStyleName2.default)(elementShallowCopy.props.styleName || '', configuration.allowMultiple);
53
54 if (_react2.default.isValidElement(elementShallowCopy.props.children)) {
55 elementShallowCopy.props.children = linkElement(_react2.default.Children.only(elementShallowCopy.props.children), styles, configuration);
56 } else if ((0, _isArray3.default)(elementShallowCopy.props.children) || (0, _isIterable2.default)(elementShallowCopy.props.children)) {
57 elementShallowCopy.props.children = _react2.default.Children.map(elementShallowCopy.props.children, function (node) {
58 if (_react2.default.isValidElement(node)) {
59 return linkElement(node, styles, configuration);
60 } else {
61 return node;
62 }
63 });
64 }
65
66 if (styleNames.length) {
67 appendClassName = (0, _generateAppendClassName2.default)(styles, styleNames, configuration.errorWhenNotFound);
68
69 if (appendClassName) {
70 if (elementShallowCopy.props.className) {
71 appendClassName = elementShallowCopy.props.className + ' ' + appendClassName;
72 }
73
74 elementShallowCopy.props.className = appendClassName;
75 }
76 }
77
78 delete elementShallowCopy.props.styleName;
79
80 if (elementIsFrozen) {
81 Object.freeze(elementShallowCopy.props);
82 Object.freeze(elementShallowCopy);
83 }
84
85 return elementShallowCopy;
86};
87
88/**
89 * @param {ReactElement} element
90 * @param {Object} styles CSS modules class map.
91 * @param {CSSModules~Options} configuration
92 */
93
94exports.default = function (element) {
95 var styles = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
96 var configuration = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
97
98 // @see https://github.com/gajus/react-css-modules/pull/30
99 if (!(0, _isObject3.default)(element)) {
100 return element;
101 }
102
103 return linkElement(element, styles, configuration);
104};
105
106module.exports = exports['default'];
\No newline at end of file