Skip to content

Commit 992706c

Browse files
Support Spread Element (#286)
* spread element support * handled property mapping and nested * fix comment
1 parent 55b43ee commit 992706c

File tree

3 files changed

+79
-4
lines changed

3 files changed

+79
-4
lines changed

src/visitors/transpileCssProp.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,13 @@ export default t => (path, state) => {
125125
[]
126126
)
127127

128+
acc.push(property)
129+
} else if (t.isSpreadElement(property)) {
130+
// recurse for objects within objects (e.g. {'::before': { content: x }})
131+
property.argument.properties = property.argument.properties.reduce(
132+
propertiesReducer,
133+
[]
134+
)
128135
acc.push(property)
129136
} else if (
130137
// if a non-primitive value we have to interpolate it

test/fixtures/transpile-css-prop-all-options-on/code.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,31 @@ const ObjectPropMixedInputs = p => {
136136
)
137137
}
138138

139+
const SpreadObjectPropMixedInputs = p => {
140+
const color = 'red'
141+
142+
return (
143+
<p
144+
css={{
145+
...{
146+
'::before': { content: globalVar },
147+
'::after': { content: getAfterValue() },
148+
...{
149+
'::before': { content: globalVar },
150+
'::after': { content: getAfterValue() },
151+
},
152+
},
153+
background: p.background,
154+
textAlign: 'left',
155+
'::before': { content: globalVar },
156+
'::after': { content: getAfterValue() },
157+
}}
158+
>
159+
A
160+
</p>
161+
)
162+
}
163+
139164
/* styled component defined after function it's used in */
140165

141166
const EarlyUsageComponent = p => <Thing3 css="color: red;" />

test/fixtures/transpile-css-prop-all-options-on/output.js

Lines changed: 47 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@ var _SomeComponentPath = _interopRequireDefault(require("../SomeComponentPath"))
66

77
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
88

9+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
10+
11+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
12+
13+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
14+
915
var _require = require('../SomeOtherComponentPath'),
1016
SomeOtherComponent = _require.SomeOtherComponent;
1117
/**
@@ -236,6 +242,43 @@ var ObjectPropMixedInputs = function ObjectPropMixedInputs(p) {
236242
A
237243
</_StyledP12>;
238244
};
245+
246+
var _StyledP13 = (0, _styledComponents["default"])("p").withConfig({
247+
displayName: "code___StyledP13",
248+
componentId: "sc-7evkve-20"
249+
})(function (p) {
250+
return _objectSpread({}, _objectSpread({
251+
'::before': {
252+
content: p._css8
253+
},
254+
'::after': {
255+
content: p._css9
256+
}
257+
}, {
258+
'::before': {
259+
content: p._css10
260+
},
261+
'::after': {
262+
content: p._css11
263+
}
264+
}), {
265+
background: p._css12,
266+
textAlign: 'left',
267+
'::before': {
268+
content: p._css13
269+
},
270+
'::after': {
271+
content: p._css14
272+
}
273+
});
274+
});
275+
276+
var SpreadObjectPropMixedInputs = function SpreadObjectPropMixedInputs(p) {
277+
var color = 'red';
278+
return <_StyledP13 _css8={globalVar} _css9={getAfterValue()} _css10={globalVar} _css11={getAfterValue()} _css12={p.background} _css13={globalVar} _css14={getAfterValue()}>
279+
A
280+
</_StyledP13>;
281+
};
239282
/* styled component defined after function it's used in */
240283

241284

@@ -245,12 +288,12 @@ var EarlyUsageComponent = function EarlyUsageComponent(p) {
245288

246289
var Thing3 = _styledComponents["default"].div.withConfig({
247290
displayName: "code__Thing3",
248-
componentId: "sc-7evkve-20"
291+
componentId: "sc-7evkve-21"
249292
})(["color:blue;"]);
250293

251294
var _StyledThing = (0, _styledComponents["default"])(Thing3).withConfig({
252295
displayName: "code___StyledThing",
253-
componentId: "sc-7evkve-21"
296+
componentId: "sc-7evkve-22"
254297
})(["color:red;"]);
255298

256299
var EarlyUsageComponent2 = function EarlyUsageComponent2(p) {
@@ -265,12 +308,12 @@ function Thing4(props) {
265308

266309
var _StyledThing2 = (0, _styledComponents["default"])(Thing4).withConfig({
267310
displayName: "code___StyledThing2",
268-
componentId: "sc-7evkve-22"
311+
componentId: "sc-7evkve-23"
269312
})(["color:red;"]);
270313

271314
var _StyledSomeComponent = (0, _styledComponents["default"])(_SomeComponentPath["default"]).withConfig({
272315
displayName: "code___StyledSomeComponent",
273-
componentId: "sc-7evkve-23"
316+
componentId: "sc-7evkve-24"
274317
})(["color:red;"]);
275318

276319
var ImportedComponentUsage = function ImportedComponentUsage(p) {

0 commit comments

Comments
 (0)