From 2c42294bbcab3cd5cfdce9604e5872fe4a12e538 Mon Sep 17 00:00:00 2001 From: David Lu Date: Mon, 6 Jun 2016 10:01:35 -0700 Subject: PLT-3101 Added message history (#3205) * Added message history * Minor logical changes * Fixed indexes resetting * Fixed double messages * Fixed resetting main history when RHS opened --- webapp/stores/message_history_store.jsx | 79 +++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 webapp/stores/message_history_store.jsx (limited to 'webapp/stores') diff --git a/webapp/stores/message_history_store.jsx b/webapp/stores/message_history_store.jsx new file mode 100644 index 000000000..51f673d9e --- /dev/null +++ b/webapp/stores/message_history_store.jsx @@ -0,0 +1,79 @@ +// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +import Constants from 'utils/constants.jsx'; + +const TYPE_POST = 'post'; +const TYPE_COMMENT = 'comment'; + +class MessageHistoryStoreClass { + constructor() { + this.messageHistory = []; + this.index = []; + this.index[TYPE_POST] = 0; + this.index[TYPE_COMMENT] = 0; + } + + getMessageInHistory(type) { + if (this.index[type] >= this.messageHistory.length) { + return ''; + } else if (this.index[type] < 0) { + return null; + } + + return this.messageHistory[this.index[type]]; + } + + getHistoryLength() { + if (this.messageHistory === null) { + return 0; + } + return this.messageHistory.length; + } + + storeMessageInHistory(message) { + this.messageHistory.push(message); + this.resetAllHistoryIndex(); + if (this.messageHistory.length > Constants.MAX_PREV_MSGS) { + this.messageHistory = this.messageHistory.slice(1, Constants.MAX_PREV_MSGS + 1); + } + } + + storeMessageInHistoryByIndex(index, message) { + this.messageHistory[index] = message; + } + + resetAllHistoryIndex() { + this.index[TYPE_POST] = this.messageHistory.length; + this.index[TYPE_COMMENT] = this.messageHistory.length; + } + + resetHistoryIndex(type) { + this.index[type] = this.messageHistory.length; + } + + nextMessageInHistory(keyCode, messageText, type) { + if (messageText !== '' && messageText !== this.getMessageInHistory(type)) { + return null; + } + + if (keyCode === Constants.KeyCodes.UP) { + this.index[type]--; + } else if (keyCode === Constants.KeyCodes.DOWN) { + this.index[type]++; + } + + if (this.index[type] < 0) { + this.index[type] = 0; + return null; + } else if (this.index[type] >= this.getHistoryLength()) { + this.index[type] = this.getHistoryLength(); + } + + return this.getMessageInHistory(type); + } +} + +var MessageHistoryStore = new MessageHistoryStoreClass(); + +export default MessageHistoryStore; \ No newline at end of file -- cgit v1.2.3-1-g7c22