From 7c2bf272f4daf635ecc571647aa09361ee9f971f Mon Sep 17 00:00:00 2001 From: vvo Date: Wed, 21 Oct 2015 11:34:32 +0200 Subject: [PATCH] fix: merge plain strings props replacements --- index-test.js | 17 +++++++++++++++++ index.js | 13 +++++++++++++ 2 files changed, 30 insertions(+) diff --git a/index-test.js b/index-test.js index fcdf277ef..7c06bc256 100644 --- a/index-test.js +++ b/index-test.js @@ -278,6 +278,23 @@ describe(`reactElementToJSXString(ReactElement)`, () => { reactElementToJSXString(renderer.getRenderOutput()) ).toEqual(`
+
`); + }); + + it(`reactElementToJSXString(
Hello {this.props.name}
`, () => { + class InlineProps extends React.Component { + render() { + return
Hello {this.props.name}
+ } + } + + let renderer = createRenderer(); + renderer.render(); + let actualElement = renderer.getRenderOutput(); + expect(reactElementToJSXString(actualElement)) + .toEqual( +`
+ Hello John
`); }); }); diff --git a/index.js b/index.js index f7df8764e..1f16a2863 100644 --- a/index.js +++ b/index.js @@ -60,6 +60,7 @@ function toJSXString({ReactElement = null, lvl = 0, inline = false}) { } else { out += React.Children .toArray(children) + .reduce(mergePlainStringChildren, []) .map( recurse({lvl, inline}) ).join('\n' + spacer(lvl)); @@ -80,6 +81,18 @@ function toJSXString({ReactElement = null, lvl = 0, inline = false}) { return out; } +function mergePlainStringChildren(prev, cur, index, arr) { + var lastItem = prev[prev.length - 1]; + + if (typeof lastItem === 'string' && typeof cur === 'string') { + prev[prev.length - 1] += cur; + } else { + prev.push(cur); + } + + return prev; +} + function formatProps(props) { return Object .keys(props)