| File: Model\ResourceSelectHelpers.cs | Web Access |
| Project: src\src\Aspire.Dashboard\Aspire.Dashboard.csproj (Aspire.Dashboard) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Collections.Immutable; using Aspire.Dashboard.Extensions; namespace Aspire.Dashboard.Model; internal static class ResourceSelectHelpers { internal static ImmutableList<SelectViewModel<ResourceTypeDetails>> CreateOptions( IDictionary<string, ResourceViewModel> resourcesByName, string unknownStateText, bool showHiddenResources) { var builder = ImmutableList.CreateBuilder<SelectViewModel<ResourceTypeDetails>>(); foreach (var grouping in resourcesByName.Values .Where(r => !r.IsResourceHidden(showHiddenResources)) .OrderBy(r => r, ResourceViewModelNameComparer.Instance) .GroupBy(r => r.DisplayName, StringComparers.ResourceName)) { var isReplica = grouping.Count() > 1; if (isReplica) { builder.Add(new() { Id = ResourceTypeDetails.CreateResourceGrouping(grouping.Key, true), Name = grouping.Key }); } foreach (var resource in grouping) { var name = ResourceViewModel.GetResourceName(resource, resourcesByName); builder.Add(new() { Id = isReplica ? ResourceTypeDetails.CreateReplicaInstance(resource.Name, grouping.Key) : ResourceTypeDetails.CreateSingleton(resource.Name, grouping.Key), Name = resource.HasNoState() ? $"{name} ({unknownStateText})" : resource.IsRunningState() ? name : $"{name} ({resource.State})" }); } } return builder.ToImmutable(); } internal static bool HasUsableTerminal(ResourceViewModel resource) => resource.HasTerminal(); }