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. “mastodon.social’</div> + )} {/* <datalist id="instances-list"> {instancesList.map((instance) => ( <option value={instance} />