mirror of
https://github.com/karl0ss/homepage.git
synced 2025-04-29 12:03:41 +01:00
Services are now sorted by the 'weight' field.
* Default for discovered services is 0 * Default weight for configured services is their index within their group scaled by 100, i.e. (index + 1) * 100 * Should be backwards compatible with current loose ordering
This commit is contained in:
parent
5ecb9466ae
commit
8d016629d3
@ -13,6 +13,17 @@ import {
|
|||||||
} from "utils/config/service-helpers";
|
} from "utils/config/service-helpers";
|
||||||
import { cleanWidgetGroups, widgetsFromConfig } from "utils/config/widget-helpers";
|
import { cleanWidgetGroups, widgetsFromConfig } from "utils/config/widget-helpers";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compares services by weight then by name.
|
||||||
|
*/
|
||||||
|
function compareServices(service1, service2) {
|
||||||
|
const comp = service1.weight - service2.weight;
|
||||||
|
if (comp !== 0) {
|
||||||
|
return comp;
|
||||||
|
}
|
||||||
|
return service1.name.localeCompare(service2.name);
|
||||||
|
}
|
||||||
|
|
||||||
export async function bookmarksResponse() {
|
export async function bookmarksResponse() {
|
||||||
checkAndCopyConfig("bookmarks.yaml");
|
checkAndCopyConfig("bookmarks.yaml");
|
||||||
|
|
||||||
@ -112,7 +123,8 @@ export async function servicesResponse() {
|
|||||||
...discoveredDockerGroup.services,
|
...discoveredDockerGroup.services,
|
||||||
...discoveredKubernetesGroup.services,
|
...discoveredKubernetesGroup.services,
|
||||||
...configuredGroup.services
|
...configuredGroup.services
|
||||||
].filter((service) => service),
|
].filter((service) => service)
|
||||||
|
.sort(compareServices),
|
||||||
};
|
};
|
||||||
|
|
||||||
if (definedLayouts) {
|
if (definedLayouts) {
|
||||||
|
@ -33,6 +33,15 @@ export async function servicesFromConfig() {
|
|||||||
})),
|
})),
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
// add default weight to services based on their position in the configuration
|
||||||
|
servicesArray.forEach((group, groupIndex) => {
|
||||||
|
group.services.forEach((service, serviceIndex) => {
|
||||||
|
if(!service.weight) {
|
||||||
|
servicesArray[groupIndex].services[serviceIndex].weight = (serviceIndex + 1) * 100;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
return servicesArray;
|
return servicesArray;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -152,6 +161,7 @@ export async function servicesFromKubernetes() {
|
|||||||
href: ingress.metadata.annotations[`${ANNOTATION_BASE}/href`] || getUrlFromIngress(ingress),
|
href: ingress.metadata.annotations[`${ANNOTATION_BASE}/href`] || getUrlFromIngress(ingress),
|
||||||
name: ingress.metadata.annotations[`${ANNOTATION_BASE}/name`] || ingress.metadata.name,
|
name: ingress.metadata.annotations[`${ANNOTATION_BASE}/name`] || ingress.metadata.name,
|
||||||
group: ingress.metadata.annotations[`${ANNOTATION_BASE}/group`] || "Kubernetes",
|
group: ingress.metadata.annotations[`${ANNOTATION_BASE}/group`] || "Kubernetes",
|
||||||
|
weight: ingress.metadata.annotations[`${ANNOTATION_BASE}/weight`] || '0',
|
||||||
icon: ingress.metadata.annotations[`${ANNOTATION_BASE}/icon`] || '',
|
icon: ingress.metadata.annotations[`${ANNOTATION_BASE}/icon`] || '',
|
||||||
description: ingress.metadata.annotations[`${ANNOTATION_BASE}/description`] || '',
|
description: ingress.metadata.annotations[`${ANNOTATION_BASE}/description`] || '',
|
||||||
};
|
};
|
||||||
@ -201,6 +211,17 @@ export function cleanServiceGroups(groups) {
|
|||||||
name: serviceGroup.name,
|
name: serviceGroup.name,
|
||||||
services: serviceGroup.services.map((service) => {
|
services: serviceGroup.services.map((service) => {
|
||||||
const cleanedService = { ...service };
|
const cleanedService = { ...service };
|
||||||
|
if (typeof service.weight === 'string') {
|
||||||
|
const weight = parseInt(service.weight, 10);
|
||||||
|
if (Number.isNaN(weight)) {
|
||||||
|
cleanedService.weight = 0;
|
||||||
|
} else {
|
||||||
|
cleanedService.weight = weight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (typeof cleanedService.weight !== "number") {
|
||||||
|
cleanedService.weight = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (cleanedService.widget) {
|
if (cleanedService.widget) {
|
||||||
// whitelisted set of keys to pass to the frontend
|
// whitelisted set of keys to pass to the frontend
|
||||||
|
Loading…
x
Reference in New Issue
Block a user