From 4aaf308d6e562827f87fda928ca772486f0ff96a Mon Sep 17 00:00:00 2001
From: Lim Chee Aun <cheeaun@gmail.com>
Date: Tue, 22 Aug 2023 20:16:09 +0800
Subject: [PATCH] Don't show list of instances by default

Very basic sorting too
---
 src/pages/login.css |  8 ++++++++
 src/pages/login.jsx | 31 +++++++++++++++++++++++++------
 2 files changed, 33 insertions(+), 6 deletions(-)

diff --git a/src/pages/login.css b/src/pages/login.css
index 58a4388f..16873c3b 100644
--- a/src/pages/login.css
+++ b/src/pages/login.css
@@ -51,3 +51,11 @@
   margin: 0;
   padding: 0;
 }
+
+#instances-eg {
+  margin: 0.2em 0 0;
+  padding: 8px;
+  height: 2.5em;
+  color: var(--text-insignificant-color);
+  font-style: italic;
+}
diff --git a/src/pages/login.jsx b/src/pages/login.jsx
index a805eaee..53f9f388 100644
--- a/src/pages/login.jsx
+++ b/src/pages/login.jsx
@@ -83,6 +83,24 @@ function Login() {
     submitInstance(instanceURL);
   };
 
+  const instancesSuggestions = instanceText
+    ? instancesList
+        .filter((instance) => instance.includes(instanceText))
+        .sort((a, b) => {
+          // Move text that starts with instanceText to the start
+          const aStartsWith = a
+            .toLowerCase()
+            .startsWith(instanceText.toLowerCase());
+          const bStartsWith = b
+            .toLowerCase()
+            .startsWith(instanceText.toLowerCase());
+          if (aStartsWith && !bStartsWith) return -1;
+          if (!aStartsWith && bStartsWith) return 1;
+          return 0;
+        })
+        .slice(0, 10)
+    : [];
+
   return (
     <main id="login" style={{ textAlign: 'center' }}>
       <form onSubmit={onSubmit}>
@@ -107,11 +125,9 @@ function Login() {
               setInstanceText(e.target.value);
             }}
           />
-          <ul id="instances-suggestions">
-            {instancesList
-              .filter((instance) => instance.includes(instanceText))
-              .slice(0, 10)
-              .map((instance) => (
+          {instancesSuggestions?.length > 0 ? (
+            <ul id="instances-suggestions">
+              {instancesSuggestions.map((instance) => (
                 <li>
                   <button
                     type="button"
@@ -124,7 +140,10 @@ function Login() {
                   </button>
                 </li>
               ))}
-          </ul>
+            </ul>
+          ) : (
+            <div id="instances-eg">e.g. &ldquo;mastodon.social&rsquo;</div>
+          )}
           {/* <datalist id="instances-list">
             {instancesList.map((instance) => (
               <option value={instance} />