UNPKG

3.91 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 _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 elementShallowCopy = undefined,
47 styleNames = undefined;
48
49 elementShallowCopy = element;
50
51 if (Object.isFrozen && Object.isFrozen(elementShallowCopy)) {
52 elementIsFrozen = true;
53
54 // https://github.com/facebook/react/blob/v0.13.3/src/classic/element/ReactElement.js#L131
55 elementShallowCopy = (0, _objectUnfreeze2.default)(elementShallowCopy);
56 elementShallowCopy.props = (0, _objectUnfreeze2.default)(elementShallowCopy.props);
57 }
58
59 styleNames = (0, _parseStyleName2.default)(elementShallowCopy.props.styleName || '', configuration.allowMultiple);
60
61 if (_react2.default.isValidElement(elementShallowCopy.props.children)) {
62 elementShallowCopy.props.children = _linkElement(_react2.default.Children.only(elementShallowCopy.props.children), styles, configuration);
63 } else if ((0, _isArray3.default)(elementShallowCopy.props.children) || (0, _isIterable2.default)(elementShallowCopy.props.children)) {
64 elementShallowCopy.props.children = _react2.default.Children.map(elementShallowCopy.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 (appendClassName) {
77 if (elementShallowCopy.props.className) {
78 appendClassName = elementShallowCopy.props.className + ' ' + appendClassName;
79 }
80
81 elementShallowCopy.props.className = appendClassName;
82 elementShallowCopy.props.styleName = null;
83 }
84 }
85
86 if (elementIsFrozen) {
87 Object.freeze(elementShallowCopy.props);
88 Object.freeze(elementShallowCopy);
89 }
90
91 return elementShallowCopy;
92};
93
94/**
95 * @param {ReactElement} element
96 * @param {Object} styles CSS modules class map.
97 * @param {CSSModules~Options} userConfiguration
98 * @returns {ReactElement}
99 */
100
101exports.default = function (element) {
102 var styles = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
103 var userConfiguration = arguments[2];
104
105 var configuration = undefined;
106
107 // @see https://github.com/gajus/react-css-modules/pull/30
108 if (!(0, _isObject3.default)(element)) {
109 return element;
110 }
111
112 configuration = (0, _makeConfiguration2.default)(userConfiguration);
113
114 return _linkElement(element, styles, configuration);
115};
116
117module.exports = exports['default'];
118//# sourceMappingURL=linkClass.js.map