From a9b407367fd169ab6a03ac41d1be804df1a77489 Mon Sep 17 00:00:00 2001 From: Tom Jenkins Date: Fri, 11 Dec 2015 10:52:07 +0000 Subject: [PATCH 1/2] Update internal state if previewing prop updated after mount. --- src/components/markdown-editor.jsx | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/components/markdown-editor.jsx b/src/components/markdown-editor.jsx index 2e14fa8..c301068 100644 --- a/src/components/markdown-editor.jsx +++ b/src/components/markdown-editor.jsx @@ -54,6 +54,15 @@ export default class MarkdownEditor extends React.Component { this.setState({previewing: !!this.props.previewing}); } + componentWillReceiveProps(nextProps) { + // If previewing prop has changed, update internal state + if (typeof nextProps.previewing === 'boolean') { + this.setState({ + previewing: nextProps.previewing + }); + } + } + render() { var previewIcon; if (this.state.previewing) { From 59d5b1b79307066c4ea17d9373b89790e7a22512 Mon Sep 17 00:00:00 2001 From: Tom Jenkins Date: Fri, 11 Dec 2015 11:32:28 +0000 Subject: [PATCH 2/2] Add test for previewing prop change --- test/components/markdown-editor-test.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/test/components/markdown-editor-test.js b/test/components/markdown-editor-test.js index e38b8a5..8c69e2e 100644 --- a/test/components/markdown-editor-test.js +++ b/test/components/markdown-editor-test.js @@ -113,6 +113,28 @@ describe('MarkdownEditor', () => { }); }); + describe("#componentWillReceiveProps", () => { + it("should set state.previewing to the value of the previewing prop (after mount)", () => { + // We can't manipulate props of editor directly, so create a parent component to do it via render + var TestParent = React.createFactory(React.createClass({ + getInitialState() { + return { + previewing: true + }; + }, + render() { + return + } + })); + + var parent = TestUtils.renderIntoDocument(TestParent()); + parent.setState({ + previewing: false + }); + expect(parent.refs.editor.state.previewing).to.be.false; + }); + }); + describe("#render", () => { [["insert-link", "InsertLink"], ["insert-image", "InsertImage"],