UNPKG

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