From 82c69ff68dcdb9a812b827a593b9e553e06ac599 Mon Sep 17 00:00:00 2001
From: GodD6366 <daichangchun6366@gmail.com>
Date: Sun, 9 Oct 2022 09:40:37 +0000
Subject: [PATCH] support sort layout

---
 src/pages/index.jsx | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/src/pages/index.jsx b/src/pages/index.jsx
index 88c25cc4..c457bda2 100644
--- a/src/pages/index.jsx
+++ b/src/pages/index.jsx
@@ -177,6 +177,21 @@ function Home({ initialSettings }) {
   
   const servicesAndBookmarks = [...services.map(sg => sg.services).flat(), ...bookmarks.map(bg => bg.bookmarks).flat()]
 
+  // sort layout
+  const layouts = Object.keys(initialSettings.layout);
+  let sortedServices = [];
+  const copiedServices = services.slice();
+  layouts.forEach((currentServer) => {
+    if (initialSettings.layout[currentServer]?.sort) {
+      const idx = copiedServices.findIndex((service) => service.name === currentServer);
+      sortedServices.push(...copiedServices.splice(idx, 1));
+    }
+  });
+
+  if (copiedServices.length) {
+    sortedServices = sortedServices.concat(copiedServices);
+  }
+
   useEffect(() => {
     if (settings.language) {
       i18n.changeLanguage(settings.language);
@@ -263,9 +278,9 @@ function Home({ initialSettings }) {
           )}
         </div>
 
-        {services && (
+        {sortedServices && (
           <div className="flex flex-wrap p-4 sm:p-8 sm:pt-4 items-start pb-2">
-            {services.map((group) => (
+            {sortedServices.map((group) => (
               <ServicesGroup key={group.name} services={group} layout={initialSettings.layout?.[group.name]} />
             ))}
           </div>