From 07a5bcc04a444f099baf957586af842e14d556c5 Mon Sep 17 00:00:00 2001 From: Ben Alpert Date: Wed, 11 Nov 2015 15:23:59 -0800 Subject: [PATCH] React inlining: Fix transform for computed key (This was broken before my last change too.) --- .../src/index.js | 12 +++++++++--- .../fixtures/inline-elements/key-computed/actual.js | 1 + .../inline-elements/key-computed/expected.js | 3 +++ 3 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 packages/babel-plugin-transform-react-inline-elements/test/fixtures/inline-elements/key-computed/actual.js create mode 100644 packages/babel-plugin-transform-react-inline-elements/test/fixtures/inline-elements/key-computed/expected.js diff --git a/packages/babel-plugin-transform-react-inline-elements/src/index.js b/packages/babel-plugin-transform-react-inline-elements/src/index.js index 93e7564e57..36812f1c04 100644 --- a/packages/babel-plugin-transform-react-inline-elements/src/index.js +++ b/packages/babel-plugin-transform-react-inline-elements/src/index.js @@ -12,6 +12,13 @@ export default function ({ types: t }) { return t.isJSXAttribute(attr) && t.isJSXIdentifier(attr.name, { name: name }); } + function getAttributeValue(attr) { + let value = attr.value; + if (!value) return t.identifier("true"); + if (t.isJSXExpressionContainer(value)) value = value.expression; + return value; + } + return { visitor: { JSXElement(path, file) { @@ -33,18 +40,17 @@ export default function ({ types: t }) { } function pushProp(objProps, key, value) { - if (t.isJSXExpressionContainer(value)) value = value.expression; objProps.push(t.objectProperty(key, value)); } // props for (let attr of (open.attributes: Array)) { if (isJSXAttributeOfName(attr, "key")) { - key = attr.value; + key = getAttributeValue(attr); } else { let name = attr.name.name; let propertyKey = t.isValidIdentifier(name) ? t.identifier(name) : t.stringLiteral(name); - pushProp(props.properties, propertyKey, attr.value || t.identifier("true")); + pushProp(props.properties, propertyKey, getAttributeValue(attr)); } } diff --git a/packages/babel-plugin-transform-react-inline-elements/test/fixtures/inline-elements/key-computed/actual.js b/packages/babel-plugin-transform-react-inline-elements/test/fixtures/inline-elements/key-computed/actual.js new file mode 100644 index 0000000000..890ce55647 --- /dev/null +++ b/packages/babel-plugin-transform-react-inline-elements/test/fixtures/inline-elements/key-computed/actual.js @@ -0,0 +1 @@ + diff --git a/packages/babel-plugin-transform-react-inline-elements/test/fixtures/inline-elements/key-computed/expected.js b/packages/babel-plugin-transform-react-inline-elements/test/fixtures/inline-elements/key-computed/expected.js new file mode 100644 index 0000000000..bf6853e7eb --- /dev/null +++ b/packages/babel-plugin-transform-react-inline-elements/test/fixtures/inline-elements/key-computed/expected.js @@ -0,0 +1,3 @@ +babelHelpers.createRawReactElement(Foo, "foo" + "baz", babelHelpers.defaultProps(Foo.defaultProps, { + "data-value": "bar" +}));