fix(dashboards): allow multiple types in search query (#111740)

This commit is contained in:
Jean-Philippe Quéméner
2025-09-29 16:13:43 +02:00
committed by GitHub
parent 0ac61983eb
commit d46e3d0e5a
2 changed files with 189 additions and 9 deletions
+11 -9
View File
@@ -302,20 +302,22 @@ func (s *SearchHandler) DoSearch(w http.ResponseWriter, r *http.Request) {
}
searchRequest.Fields = fields
// Search dashboards or folders (or both)
switch queryParams.Get("type") {
case "folder":
searchRequest.Options.Key, err = asResourceKey(user.GetNamespace(), folders.RESOURCE)
case "dashboard":
searchRequest.Options.Key, err = asResourceKey(user.GetNamespace(), dashboardv0alpha1.DASHBOARD_RESOURCE)
default:
// A search request can include multiple types, we need to acces the slice directly.
types := queryParams["type"]
hasDash := len(types) == 0 || slices.Contains(types, "dashboard")
hasFolder := len(types) == 0 || slices.Contains(types, "folder")
// If both types are present, we need to search both dashboards and folders, by default is nothing is set we also search both.
if (hasDash && hasFolder) || (!hasDash && !hasFolder) {
searchRequest.Options.Key, err = asResourceKey(user.GetNamespace(), dashboardv0alpha1.DASHBOARD_RESOURCE)
if err == nil {
federate, _ := asResourceKey(user.GetNamespace(), folders.RESOURCE)
if federate != nil {
if federate, _ := asResourceKey(user.GetNamespace(), folders.RESOURCE); federate != nil {
searchRequest.Federated = []*resourcepb.ResourceKey{federate}
}
}
} else if hasFolder {
searchRequest.Options.Key, err = asResourceKey(user.GetNamespace(), folders.RESOURCE)
} else if hasDash {
searchRequest.Options.Key, err = asResourceKey(user.GetNamespace(), dashboardv0alpha1.DASHBOARD_RESOURCE)
}
if err != nil {
errhttp.Write(ctx, err, w)