K8s: Search fallback: Support all sort by methods (#100776)

This commit is contained in:
Stephanie Hingtgen
2025-02-18 12:30:11 -06:00
committed by GitHub
parent 7b3b165c3d
commit 67be9aeed6
43 changed files with 356 additions and 99 deletions
+68
View File
@@ -0,0 +1,68 @@
package sort
import (
"sort"
"github.com/grafana/grafana/pkg/services/search/model"
"github.com/grafana/grafana/pkg/services/sqlstore/searchstore"
)
// sort is separated into its own service to allow the dashboard service to use it in the k8s
// fallback (see pkg/registry/apis/dashboard/legacysearcher/search_client.go), since search
// has a direct dependency on the dashboard service (and thus would create a circular dependency in wire)
var (
SortAlphaAsc = model.SortOption{
Name: "alpha-asc",
DisplayName: "Alphabetically (A–Z)",
Description: "Sort results in an alphabetically ascending order",
Index: 0,
Filter: []model.SortOptionFilter{
searchstore.TitleSorter{},
},
}
SortAlphaDesc = model.SortOption{
Name: "alpha-desc",
DisplayName: "Alphabetically (Z–A)",
Description: "Sort results in an alphabetically descending order",
Index: 0,
Filter: []model.SortOptionFilter{
searchstore.TitleSorter{Descending: true},
},
}
)
type Service struct {
sortOptions map[string]model.SortOption
}
func ProvideService() Service {
return Service{
sortOptions: map[string]model.SortOption{
SortAlphaAsc.Name: SortAlphaAsc,
SortAlphaDesc.Name: SortAlphaDesc,
},
}
}
// RegisterSortOption allows for hooking in more search options from
// other services.
func (s *Service) RegisterSortOption(option model.SortOption) {
s.sortOptions[option.Name] = option
}
func (s *Service) SortOptions() []model.SortOption {
opts := make([]model.SortOption, 0, len(s.sortOptions))
for _, o := range s.sortOptions {
opts = append(opts, o)
}
sort.Slice(opts, func(i, j int) bool {
return opts[i].Index < opts[j].Index || (opts[i].Index == opts[j].Index && opts[i].Name < opts[j].Name)
})
return opts
}
func (s *Service) GetSortOption(sort string) (model.SortOption, bool) {
option, ok := s.sortOptions[sort]
return option, ok
}