From 82c69ff68dcdb9a812b827a593b9e553e06ac599 Mon Sep 17 00:00:00 2001 From: GodD6366 Date: Sun, 9 Oct 2022 09:40:37 +0000 Subject: [PATCH 1/4] 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 88c25cc47..c457bda2e 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 }) { )} - {services && ( + {sortedServices && (
- {services.map((group) => ( + {sortedServices.map((group) => ( ))}
From 3740426bb559dd2cbeb9cda33e24b79e6753cc56 Mon Sep 17 00:00:00 2001 From: GodD6366 Date: Sun, 9 Oct 2022 09:55:36 +0000 Subject: [PATCH 2/4] Change to server-side implementation --- src/pages/index.jsx | 18 ++---------------- src/utils/config/api-response.js | 26 ++++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/pages/index.jsx b/src/pages/index.jsx index c457bda2e..33074b369 100644 --- a/src/pages/index.jsx +++ b/src/pages/index.jsx @@ -177,20 +177,6 @@ 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) { @@ -278,9 +264,9 @@ function Home({ initialSettings }) { )} - {sortedServices && ( + {services && (
- {sortedServices.map((group) => ( + {services.map((group) => ( ))}
diff --git a/src/utils/config/api-response.js b/src/utils/config/api-response.js index 5cc1127e3..c1651a783 100644 --- a/src/utils/config/api-response.js +++ b/src/utils/config/api-response.js @@ -4,7 +4,7 @@ import path from "path"; import yaml from "js-yaml"; -import checkAndCopyConfig from "utils/config/config"; +import checkAndCopyConfig, { getSettings } from "utils/config/config"; import { servicesFromConfig, servicesFromDocker, cleanServiceGroups } from "utils/config/service-helpers"; import { cleanWidgetGroups, widgetsFromConfig } from "utils/config/widget-helpers"; @@ -46,6 +46,7 @@ export async function widgetsResponse() { export async function servicesResponse() { let discoveredServices; let configuredServices; + let initialSettings; try { discoveredServices = cleanServiceGroups(await servicesFromDocker()); @@ -63,6 +64,14 @@ export async function servicesResponse() { configuredServices = []; } + try { + initialSettings = await getSettings(); + } catch (e) { + console.error("Failed to load settings.yaml, please check for errors"); + if (e) console.error(e); + initialSettings = {}; + } + const mergedGroupsNames = [ ...new Set([discoveredServices.map((group) => group.name), configuredServices.map((group) => group.name)].flat()), ]; @@ -81,5 +90,18 @@ export async function servicesResponse() { mergedGroups.push(mergedGroup); }); - return mergedGroups; + let sortedServices = []; + + const layouts = Object.keys(initialSettings.layout); + layouts.forEach((currentServer) => { + if (initialSettings.layout[currentServer]?.sort) { + const idx = mergedGroups.findIndex((service) => service.name === currentServer); + sortedServices.push(...mergedGroups.splice(idx, 1)); + } + }); + if (mergedGroups.length) { + sortedServices = sortedServices.concat(mergedGroups); + } + + return sortedServices; } From bd97d5ff2e55b6a72fed5c476fdcde5dbbdd1cfb Mon Sep 17 00:00:00 2001 From: GodD6366 Date: Sun, 9 Oct 2022 09:58:16 +0000 Subject: [PATCH 3/4] lint --- src/pages/index.jsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pages/index.jsx b/src/pages/index.jsx index 33074b369..88c25cc47 100644 --- a/src/pages/index.jsx +++ b/src/pages/index.jsx @@ -177,7 +177,6 @@ function Home({ initialSettings }) { const servicesAndBookmarks = [...services.map(sg => sg.services).flat(), ...bookmarks.map(bg => bg.bookmarks).flat()] - useEffect(() => { if (settings.language) { i18n.changeLanguage(settings.language); From ae3f847cef317f86fde4e125bd7606681a396045 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 27 Oct 2022 02:19:42 -0700 Subject: [PATCH 4/4] Sort layout groups by default, simplify sorting --- src/utils/config/api-response.js | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/src/utils/config/api-response.js b/src/utils/config/api-response.js index c1651a783..d3561a553 100644 --- a/src/utils/config/api-response.js +++ b/src/utils/config/api-response.js @@ -77,6 +77,7 @@ export async function servicesResponse() { ]; const mergedGroups = []; + const definedLayouts = initialSettings.layout ? Object.keys(initialSettings.layout) : null; mergedGroupsNames.forEach((groupName) => { const discoveredGroup = discoveredServices.find((group) => group.name === groupName) || { services: [] }; @@ -87,21 +88,14 @@ export async function servicesResponse() { services: [...discoveredGroup.services, ...configuredGroup.services].filter((service) => service), }; - mergedGroups.push(mergedGroup); - }); - - let sortedServices = []; - - const layouts = Object.keys(initialSettings.layout); - layouts.forEach((currentServer) => { - if (initialSettings.layout[currentServer]?.sort) { - const idx = mergedGroups.findIndex((service) => service.name === currentServer); - sortedServices.push(...mergedGroups.splice(idx, 1)); + if (definedLayouts) { + const layoutIndex = definedLayouts.findIndex(layout => layout === mergedGroup.name); + if (layoutIndex > -1) mergedGroups.splice(layoutIndex, 0, mergedGroup); + else mergedGroups.push(mergedGroup); + } else { + mergedGroups.push(mergedGroup); } }); - if (mergedGroups.length) { - sortedServices = sortedServices.concat(mergedGroups); - } - return sortedServices; + return mergedGroups; }