mirror of
				https://github.com/karl0ss/homepage.git
				synced 2025-11-04 08:20:58 +00: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