From 2c42294bbcab3cd5cfdce9604e5872fe4a12e538 Mon Sep 17 00:00:00 2001
From: David Lu <david.lu@hotmail.com>
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/message_history_store.jsx')

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

