MCPcopy Index your code
hub / github.com/gajus/react-css-modules / linkElement

Function linkElement

src/linkClass.js:25–92  ·  view source on GitHub ↗
(element: ReactElement, styles: Object, configuration: Object)

Source from the content-addressed store, hash-verified

23};
24
25const linkElement = (element: ReactElement, styles: Object, configuration: Object): ReactElement => {
26 let appendClassName;
27 let elementShallowCopy;
28
29 elementShallowCopy = element;
30
31 if (Array.isArray(elementShallowCopy)) {
32 return elementShallowCopy.map((arrayElement) => {
33 return linkElement(arrayElement, styles, configuration);
34 });
35 }
36
37 const elementIsFrozen = Object.isFrozen && Object.isFrozen(elementShallowCopy);
38 const propsFrozen = Object.isFrozen && Object.isFrozen(elementShallowCopy.props);
39 const propsNotExtensible = Object.isExtensible && !Object.isExtensible(elementShallowCopy.props);
40
41 if (elementIsFrozen) {
42 // https://github.com/facebook/react/blob/v0.13.3/src/classic/element/ReactElement.js#L131
43 elementShallowCopy = objectUnfreeze(elementShallowCopy);
44 elementShallowCopy.props = objectUnfreeze(elementShallowCopy.props);
45 } else if (propsFrozen || propsNotExtensible) {
46 elementShallowCopy.props = objectUnfreeze(elementShallowCopy.props);
47 }
48
49 const styleNames = parseStyleName(elementShallowCopy.props.styleName || '', configuration.allowMultiple);
50 const {children, ...restProps} = elementShallowCopy.props;
51
52 if (React.isValidElement(children)) {
53 elementShallowCopy.props.children = linkElement(React.Children.only(children), styles, configuration);
54 } else if (_.isArray(children) || isIterable(children)) {
55 elementShallowCopy.props.children = linkArray(objectUnfreeze(children), styles, configuration);
56 }
57
58 _.forEach(restProps, (propValue, propName) => {
59 if (React.isValidElement(propValue)) {
60 elementShallowCopy.props[propName] = linkElement(React.Children.only(propValue), styles, configuration);
61 } else if (_.isArray(propValue)) {
62 elementShallowCopy.props[propName] = linkArray(propValue, styles, configuration);
63 }
64 });
65
66 if (styleNames.length) {
67 appendClassName = generateAppendClassName(styles, styleNames, configuration.handleNotFoundStyleName);
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);

Callers 2

linkArrayFunction · 0.85
linkClass.jsFile · 0.85

Calls 1

linkArrayFunction · 0.85

Tested by

no test coverage detected