Use ContentState instead and persist over localStorage
							parent
							
								
									084a933dbd
								
							
						
					
					
						commit
						3d5b3ed7ad
					
				| 
						 | 
					@ -132,7 +132,10 @@ export default class MessageComposerInput extends React.Component {
 | 
				
			||||||
            isRichtextEnabled,
 | 
					            isRichtextEnabled,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // the currently displayed editor state (note: this is always what is modified on input)
 | 
					            // the currently displayed editor state (note: this is always what is modified on input)
 | 
				
			||||||
            editorState: null,
 | 
					            editorState: this.createEditorState(
 | 
				
			||||||
 | 
					                isRichtextEnabled,
 | 
				
			||||||
 | 
					                MessageComposerStore.getContentState(this.props.room.roomId),
 | 
				
			||||||
 | 
					            ),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // the original editor state, before we started tabbing through completions
 | 
					            // the original editor state, before we started tabbing through completions
 | 
				
			||||||
            originalEditorState: null,
 | 
					            originalEditorState: null,
 | 
				
			||||||
| 
						 | 
					@ -142,10 +145,6 @@ export default class MessageComposerInput extends React.Component {
 | 
				
			||||||
            currentlyComposedEditorState: null,
 | 
					            currentlyComposedEditorState: null,
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // bit of a hack, but we need to do this here since createEditorState needs isRichtextEnabled
 | 
					 | 
				
			||||||
        /* eslint react/no-direct-mutation-state:0 */
 | 
					 | 
				
			||||||
        this.state.editorState = this.createEditorState();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        this.client = MatrixClientPeg.get();
 | 
					        this.client = MatrixClientPeg.get();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -172,11 +171,6 @@ export default class MessageComposerInput extends React.Component {
 | 
				
			||||||
    componentDidMount() {
 | 
					    componentDidMount() {
 | 
				
			||||||
        this.dispatcherRef = dis.register(this.onAction);
 | 
					        this.dispatcherRef = dis.register(this.onAction);
 | 
				
			||||||
        this.historyManager = new ComposerHistoryManager(this.props.room.roomId);
 | 
					        this.historyManager = new ComposerHistoryManager(this.props.room.roomId);
 | 
				
			||||||
 | 
					 | 
				
			||||||
        // Reinstate the editor state for this room
 | 
					 | 
				
			||||||
        this.setState({
 | 
					 | 
				
			||||||
            editorState: MessageComposerStore.getEditorState(this.props.room.roomId),
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    componentWillUnmount() {
 | 
					    componentWillUnmount() {
 | 
				
			||||||
| 
						 | 
					@ -346,9 +340,9 @@ export default class MessageComposerInput extends React.Component {
 | 
				
			||||||
            // Record the editor state for this room so that it can be retrieved after
 | 
					            // Record the editor state for this room so that it can be retrieved after
 | 
				
			||||||
            // switching to another room and back
 | 
					            // switching to another room and back
 | 
				
			||||||
            dis.dispatch({
 | 
					            dis.dispatch({
 | 
				
			||||||
                action: 'editor_state',
 | 
					                action: 'content_state',
 | 
				
			||||||
                room_id: this.props.room.roomId,
 | 
					                room_id: this.props.room.roomId,
 | 
				
			||||||
                editor_state: state.editorState,
 | 
					                content_state: state.editorState.getCurrentContent(),
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (!state.hasOwnProperty('originalEditorState')) {
 | 
					            if (!state.hasOwnProperty('originalEditorState')) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,9 +15,11 @@ limitations under the License.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
import dis from '../dispatcher';
 | 
					import dis from '../dispatcher';
 | 
				
			||||||
import {Store} from 'flux/utils';
 | 
					import {Store} from 'flux/utils';
 | 
				
			||||||
 | 
					import {convertToRaw, convertFromRaw} from 'draft-js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const INITIAL_STATE = {
 | 
					const INITIAL_STATE = {
 | 
				
			||||||
    editorStateMap: {},
 | 
					    editorStateMap: localStorage.getItem('content_state') ?
 | 
				
			||||||
 | 
					        JSON.parse(localStorage.getItem('content_state')) : {},
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					@ -40,8 +42,8 @@ class MessageComposerStore extends Store {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    __onDispatch(payload) {
 | 
					    __onDispatch(payload) {
 | 
				
			||||||
        switch (payload.action) {
 | 
					        switch (payload.action) {
 | 
				
			||||||
            case 'editor_state':
 | 
					            case 'content_state':
 | 
				
			||||||
                this._editorState(payload);
 | 
					                this._contentState(payload);
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
            case 'on_logged_out':
 | 
					            case 'on_logged_out':
 | 
				
			||||||
                this.reset();
 | 
					                this.reset();
 | 
				
			||||||
| 
						 | 
					@ -49,16 +51,19 @@ class MessageComposerStore extends Store {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    _editorState(payload) {
 | 
					    _contentState(payload) {
 | 
				
			||||||
        const editorStateMap = this._state.editorStateMap;
 | 
					        const editorStateMap = this._state.editorStateMap;
 | 
				
			||||||
        editorStateMap[payload.room_id] = payload.editor_state;
 | 
					        editorStateMap[payload.room_id] = convertToRaw(payload.content_state);
 | 
				
			||||||
 | 
					        localStorage.setItem('content_state', JSON.stringify(editorStateMap));
 | 
				
			||||||
 | 
					        console.info(localStorage.getItem('content_state'));
 | 
				
			||||||
        this._setState({
 | 
					        this._setState({
 | 
				
			||||||
            editorStateMap: editorStateMap,
 | 
					            editorStateMap: editorStateMap,
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    getEditorState(roomId) {
 | 
					    getContentState(roomId) {
 | 
				
			||||||
        return this._state.editorStateMap[roomId];
 | 
					        return this._state.editorStateMap[roomId] ?
 | 
				
			||||||
 | 
					            convertFromRaw(this._state.editorStateMap[roomId]) : null;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    reset() {
 | 
					    reset() {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue