fix(models): fix sorting of hyper

Kieran Klukas created

Change summary

internal/config/provider.go  | 12 ++++++++++--
internal/ui/dialog/models.go | 16 ++--------------
2 files changed, 12 insertions(+), 16 deletions(-)

Detailed changes

internal/config/provider.go 🔗

@@ -147,6 +147,9 @@ func Providers(cfg *Config) ([]catwalk.Provider, error) {
 		ctx, cancel := context.WithTimeout(context.Background(), 45*time.Second)
 		defer cancel()
 
+		var hyperProvider catwalk.Provider
+		var hyperFound bool
+
 		wg.Go(func() {
 			if customProvidersOnly {
 				return
@@ -177,12 +180,17 @@ func Providers(cfg *Config) ([]catwalk.Provider, error) {
 				errs = append(errs, fmt.Errorf("Crush was unable to fetch updated information from Hyper: %w", err)) //nolint:staticcheck
 				return
 			}
-			providers.Append(item)
+			hyperProvider = item
+			hyperFound = true
 		})
 
 		wg.Wait()
 
-		providerList = slices.Collect(providers.Seq())
+		if hyperFound {
+			providerList = append([]catwalk.Provider{hyperProvider}, slices.Collect(providers.Seq())...)
+		} else {
+			providerList = slices.Collect(providers.Seq())
+		}
 		providerErr = errors.Join(errs...)
 	})
 	return providerList, providerErr

internal/ui/dialog/models.go 🔗

@@ -408,20 +408,8 @@ func (m *Models) setProviderItems() error {
 		}
 	}
 
-	// Move "Charm Hyper" to first position.
-	// (But still after recent models and custom providers).
-	slices.SortStableFunc(m.providers, func(a, b catwalk.Provider) int {
-		switch {
-		case a.ID == "hyper":
-			return -1
-		case b.ID == "hyper":
-			return 1
-		default:
-			return 0
-		}
-	})
-
-	// Now add known providers from the predefined list
+	// Now add known providers from the predefined list.
+	// Providers already has Hyper at the front of the list.
 	for _, provider := range m.providers {
 		providerID := string(provider.ID)
 		if addedProviders[providerID] {