From 47c51dbcf0f380931875b8ebf8ec2f343af9b3ba Mon Sep 17 00:00:00 2001
From: hmhealey <harrisonmhealey@gmail.com>
Date: Tue, 8 Dec 2015 10:07:21 -0500
Subject: Changed ordering of emoticon suggestions

---
 .../components/suggestion/emoticon_provider.jsx    | 23 +++++++++++++++++++---
 1 file changed, 20 insertions(+), 3 deletions(-)

(limited to 'web/react/components/suggestion/emoticon_provider.jsx')

diff --git a/web/react/components/suggestion/emoticon_provider.jsx b/web/react/components/suggestion/emoticon_provider.jsx
index 7dcb86442..fd470cf21 100644
--- a/web/react/components/suggestion/emoticon_provider.jsx
+++ b/web/react/components/suggestion/emoticon_provider.jsx
@@ -51,23 +51,40 @@ export default class EmoticonProvider {
             const text = captured[1];
             const partialName = captured[2];
 
-            const terms = [];
             const names = [];
 
             for (const emoticon of Emoticons.emoticonMap.keys()) {
                 if (emoticon.indexOf(partialName) !== -1) {
-                    terms.push(':' + emoticon + ':');
                     names.push(emoticon);
 
-                    if (terms.length >= MAX_EMOTICON_SUGGESTIONS) {
+                    if (names.length >= MAX_EMOTICON_SUGGESTIONS) {
                         break;
                     }
                 }
             }
 
+            // sort the emoticons so that emoticons starting with the entered text come first
+            names.sort((a, b) => {
+                const aPrefix = a.startsWith(partialName);
+                const bPrefix = b.startsWith(partialName);
+
+                if (aPrefix === bPrefix) {
+                    return a.localeCompare(b);
+                } else if (aPrefix) {
+                    return -1;
+                }
+
+                return 1;
+            });
+
+            const terms = names.map((name) => ':' + name + ':');
+
             if (terms.length > 0) {
                 SuggestionStore.setMatchedPretext(suggestionId, text);
                 SuggestionStore.addSuggestions(suggestionId, terms, names, EmoticonSuggestion);
+
+                // force the selection to be cleared since the order of elements may have changed
+                SuggestionStore.clearSelection(suggestionId);
             }
         }
     }
-- 
cgit v1.2.3-1-g7c22

