mirror of https://github.com/vector-im/riot-web
				
				
				
			remove edit history from main composer
							parent
							
								
									3591eedcfa
								
							
						
					
					
						commit
						bd3dbd1a89
					
				|  | @ -1,86 +0,0 @@ | |||
| //@flow
 | ||||
| /* | ||||
| Copyright 2017 Aviral Dasgupta | ||||
| 
 | ||||
| Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| you may not use this file except in compliance with the License. | ||||
| You may obtain a copy of the License at | ||||
| 
 | ||||
|     http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| 
 | ||||
| Unless required by applicable law or agreed to in writing, software | ||||
| distributed under the License is distributed on an "AS IS" BASIS, | ||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| See the License for the specific language governing permissions and | ||||
| limitations under the License. | ||||
| */ | ||||
| 
 | ||||
| import { Value } from 'slate'; | ||||
| 
 | ||||
| import _clamp from 'lodash/clamp'; | ||||
| 
 | ||||
| type MessageFormat = 'rich' | 'markdown'; | ||||
| 
 | ||||
| class HistoryItem { | ||||
|     // We store history items in their native format to ensure history is accurate
 | ||||
|     // and then convert them if our RTE has subsequently changed format.
 | ||||
|     value: Value; | ||||
|     format: MessageFormat = 'rich'; | ||||
| 
 | ||||
|     constructor(value: ?Value, format: ?MessageFormat) { | ||||
|         this.value = value; | ||||
|         this.format = format; | ||||
|     } | ||||
| 
 | ||||
|     static fromJSON(obj: Object): HistoryItem { | ||||
|         return new HistoryItem( | ||||
|             Value.fromJSON(obj.value), | ||||
|             obj.format, | ||||
|         ); | ||||
|     } | ||||
| 
 | ||||
|     toJSON(): Object { | ||||
|         return { | ||||
|             value: this.value.toJSON(), | ||||
|             format: this.format, | ||||
|         }; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| export default class ComposerHistoryManager { | ||||
|     history: Array<HistoryItem> = []; | ||||
|     prefix: string; | ||||
|     lastIndex: number = 0; // used for indexing the storage
 | ||||
|     currentIndex: number = 0; // used for indexing the loaded validated history Array
 | ||||
| 
 | ||||
|     constructor(roomId: string, prefix: string = 'mx_composer_history_') { | ||||
|         this.prefix = prefix + roomId; | ||||
| 
 | ||||
|         // TODO: Performance issues?
 | ||||
|         let item; | ||||
|         for (; item = sessionStorage.getItem(`${this.prefix}[${this.currentIndex}]`); this.currentIndex++) { | ||||
|             try { | ||||
|                 this.history.push( | ||||
|                     HistoryItem.fromJSON(JSON.parse(item)), | ||||
|                 ); | ||||
|             } catch (e) { | ||||
|                 console.warn("Throwing away unserialisable history", e); | ||||
|             } | ||||
|         } | ||||
|         this.lastIndex = this.currentIndex; | ||||
|         // reset currentIndex to account for any unserialisable history
 | ||||
|         this.currentIndex = this.history.length; | ||||
|     } | ||||
| 
 | ||||
|     save(value: Value, format: MessageFormat) { | ||||
|         const item = new HistoryItem(value, format); | ||||
|         this.history.push(item); | ||||
|         this.currentIndex = this.history.length; | ||||
|         sessionStorage.setItem(`${this.prefix}[${this.lastIndex++}]`, JSON.stringify(item.toJSON())); | ||||
|     } | ||||
| 
 | ||||
|     getItem(offset: number): ?HistoryItem { | ||||
|         this.currentIndex = _clamp(this.currentIndex + offset, 0, this.history.length - 1); | ||||
|         return this.history[this.currentIndex]; | ||||
|     } | ||||
| } | ||||
|  | @ -44,7 +44,6 @@ import * as HtmlUtils from '../../../HtmlUtils'; | |||
| import Autocomplete from './Autocomplete'; | ||||
| import {Completion} from "../../../autocomplete/Autocompleter"; | ||||
| import Markdown from '../../../Markdown'; | ||||
| import ComposerHistoryManager from '../../../ComposerHistoryManager'; | ||||
| import MessageComposerStore from '../../../stores/MessageComposerStore'; | ||||
| import ContentMessages from '../../../ContentMessages'; | ||||
| 
 | ||||
|  | @ -141,7 +140,6 @@ export default class MessageComposerInput extends React.Component { | |||
| 
 | ||||
|     client: MatrixClient; | ||||
|     autocomplete: Autocomplete; | ||||
|     historyManager: ComposerHistoryManager; | ||||
| 
 | ||||
|     constructor(props, context) { | ||||
|         super(props, context); | ||||
|  | @ -331,7 +329,6 @@ export default class MessageComposerInput extends React.Component { | |||
| 
 | ||||
|     componentWillMount() { | ||||
|         this.dispatcherRef = dis.register(this.onAction); | ||||
|         this.historyManager = new ComposerHistoryManager(this.props.room.roomId, 'mx_slate_composer_history_'); | ||||
|     } | ||||
| 
 | ||||
|     componentWillUnmount() { | ||||
|  | @ -1032,7 +1029,6 @@ export default class MessageComposerInput extends React.Component { | |||
| 
 | ||||
|         if (cmd) { | ||||
|             if (!cmd.error) { | ||||
|                 this.historyManager.save(editorState, this.state.isRichTextEnabled ? 'rich' : 'markdown'); | ||||
|                 this.setState({ | ||||
|                     editorState: this.createEditorState(), | ||||
|                 }, ()=>{ | ||||
|  | @ -1110,11 +1106,6 @@ export default class MessageComposerInput extends React.Component { | |||
|         let sendHtmlFn = ContentHelpers.makeHtmlMessage; | ||||
|         let sendTextFn = ContentHelpers.makeTextMessage; | ||||
| 
 | ||||
|         this.historyManager.save( | ||||
|             editorState, | ||||
|             this.state.isRichTextEnabled ? 'rich' : 'markdown', | ||||
|         ); | ||||
| 
 | ||||
|         if (commandText && commandText.startsWith('/me')) { | ||||
|             if (replyingToEv) { | ||||
|                 const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); | ||||
|  | @ -1206,54 +1197,6 @@ export default class MessageComposerInput extends React.Component { | |||
|         } | ||||
|     }; | ||||
| 
 | ||||
|     selectHistory = async (up) => { | ||||
|         const delta = up ? -1 : 1; | ||||
| 
 | ||||
|         // True if we are not currently selecting history, but composing a message
 | ||||
|         if (this.historyManager.currentIndex === this.historyManager.history.length) { | ||||
|             // We can't go any further - there isn't any more history, so nop.
 | ||||
|             if (!up) { | ||||
|                 return; | ||||
|             } | ||||
|             this.setState({ | ||||
|                 currentlyComposedEditorState: this.state.editorState, | ||||
|             }); | ||||
|         } else if (this.historyManager.currentIndex + delta === this.historyManager.history.length) { | ||||
|             // True when we return to the message being composed currently
 | ||||
|             this.setState({ | ||||
|                 editorState: this.state.currentlyComposedEditorState, | ||||
|             }); | ||||
|             this.historyManager.currentIndex = this.historyManager.history.length; | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         let editorState; | ||||
|         const historyItem = this.historyManager.getItem(delta); | ||||
|         if (!historyItem) return; | ||||
| 
 | ||||
|         if (historyItem.format === 'rich' && !this.state.isRichTextEnabled) { | ||||
|             editorState = this.richToMdEditorState(historyItem.value); | ||||
|         } else if (historyItem.format === 'markdown' && this.state.isRichTextEnabled) { | ||||
|             editorState = this.mdToRichEditorState(historyItem.value); | ||||
|         } else { | ||||
|             editorState = historyItem.value; | ||||
|         } | ||||
| 
 | ||||
|         // Move selection to the end of the selected history
 | ||||
|         const change = editorState.change().moveToEndOfNode(editorState.document); | ||||
| 
 | ||||
|         // We don't call this.onChange(change) now, as fixups on stuff like pills
 | ||||
|         // should already have been done and persisted in the history.
 | ||||
|         editorState = change.value; | ||||
| 
 | ||||
|         this.suppressAutoComplete = true; | ||||
| 
 | ||||
|         this.setState({ editorState }, ()=>{ | ||||
|             this._editor.focus(); | ||||
|         }); | ||||
|         return true; | ||||
|     }; | ||||
| 
 | ||||
|     onTab = async (e) => { | ||||
|         this.setState({ | ||||
|             someCompletions: null, | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Bruno Windels
						Bruno Windels