UNPKG

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