From fd4f9679df7b035c0112dce135c47967713f9518 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 11 Jul 2018 09:39:14 +0100 Subject: [PATCH] convert md<->rt if the stored editorState was in a different state Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- .../views/rooms/MessageComposerInput.js | 58 +++++++++++-------- src/stores/MessageComposerStore.js | 5 +- 2 files changed, 37 insertions(+), 26 deletions(-) diff --git a/src/components/views/rooms/MessageComposerInput.js b/src/components/views/rooms/MessageComposerInput.js index e7fbbae8a8..c8d8c9d2f9 100644 --- a/src/components/views/rooms/MessageComposerInput.js +++ b/src/components/views/rooms/MessageComposerInput.js @@ -143,27 +143,6 @@ export default class MessageComposerInput extends React.Component { Analytics.setRichtextMode(isRichTextEnabled); - this.state = { - // whether we're in rich text or markdown mode - isRichTextEnabled, - - // the currently displayed editor state (note: this is always what is modified on input) - editorState: this.createEditorState( - isRichTextEnabled, - MessageComposerStore.getEditorState(this.props.room.roomId), - ), - - // the original editor state, before we started tabbing through completions - originalEditorState: null, - - // the virtual state "above" the history stack, the message currently being composed that - // we want to persist whilst browsing history - currentlyComposedEditorState: null, - - // whether there were any completions - someCompletions: null, - }; - this.client = MatrixClientPeg.get(); // track whether we should be trying to show autocomplete suggestions on the current editor @@ -296,19 +275,47 @@ export default class MessageComposerInput extends React.Component { } ] }); + + const savedState = MessageComposerStore.getEditorState(this.props.room.roomId); + this.state = { + // whether we're in rich text or markdown mode + isRichTextEnabled, + + // the currently displayed editor state (note: this is always what is modified on input) + editorState: this.createEditorState( + isRichTextEnabled, + savedState.editor_state, + savedState.rich_text, + ), + + // the original editor state, before we started tabbing through completions + originalEditorState: null, + + // the virtual state "above" the history stack, the message currently being composed that + // we want to persist whilst browsing history + currentlyComposedEditorState: null, + + // whether there were any completions + someCompletions: null, + }; } /* * "Does the right thing" to create an Editor value, based on: * - whether we've got rich text mode enabled * - contentState was passed in + * - whether the contentState that was passed in was rich text */ - createEditorState(richText: boolean, // eslint-disable-line no-unused-vars - editorState: ?Value): Value { + createEditorState(wantRichText: boolean, editorState: ?Value, wasRichText: ?boolean): Value { if (editorState instanceof Value) { + if (wantRichText && !wasRichText) { + return this.mdToRichEditorState(editorState); + } + if (wasRichText && !wantRichText) { + return this.richToMdEditorState(editorState); + } return editorState; - } - else { + } else { // ...or create a new one. return Plain.deserialize('', { defaultBlock: DEFAULT_NODE }); } @@ -569,6 +576,7 @@ export default class MessageComposerInput extends React.Component { dis.dispatch({ action: 'editor_state', room_id: this.props.room.roomId, + rich_text: this.state.isRichTextEnabled, editor_state: editorState, }); diff --git a/src/stores/MessageComposerStore.js b/src/stores/MessageComposerStore.js index 0e6c856e1b..e70714ff98 100644 --- a/src/stores/MessageComposerStore.js +++ b/src/stores/MessageComposerStore.js @@ -54,7 +54,10 @@ class MessageComposerStore extends Store { _editorState(payload) { const editorStateMap = this._state.editorStateMap; - editorStateMap[payload.room_id] = payload.editor_state; + editorStateMap[payload.room_id] = { + editor_state: payload.editor_state, + rich_text: payload.rich_text, + }; localStorage.setItem('editor_state', JSON.stringify(editorStateMap)); this._setState({ editorStateMap: editorStateMap,