Skip to content

Commit 3faa5dc

Browse files
Group Parameters as collapsible parent resource in Resources table
Co-authored-by: maddymontaquila <12660687+maddymontaquila@users.noreply.github.com>
1 parent 854e8af commit 3faa5dc

File tree

1 file changed

+93
-1
lines changed

1 file changed

+93
-1
lines changed

src/Aspire.Dashboard/Components/Pages/Resources.razor.cs

Lines changed: 93 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// The .NET Foundation licenses this file to you under the MIT license.
33

44
using System.Collections.Concurrent;
5+
using System.Collections.Immutable;
56
using System.Diagnostics;
67
using System.Globalization;
78
using System.Text;
@@ -454,7 +455,12 @@ internal IEnumerable<ResourceViewModel> GetFilteredResources()
454455
private ValueTask<GridItemsProviderResult<ResourceGridViewModel>> GetData(GridItemsProviderRequest<ResourceGridViewModel> request)
455456
{
456457
// Get filtered and ordered resources.
457-
var filteredResources = GetFilteredResources()
458+
var filteredResourcesList = GetFilteredResources().ToList();
459+
460+
// Group parameters under a synthetic "Parameters" parent resource
461+
var resourcesWithParametersGrouped = GroupParametersUnderParent(filteredResourcesList);
462+
463+
var filteredResources = resourcesWithParametersGrouped
458464
.Select(r => new ResourceGridViewModel { Resource = r })
459465
.AsQueryable();
460466
filteredResources = request.ApplySorting(filteredResources);
@@ -478,6 +484,92 @@ private ValueTask<GridItemsProviderResult<ResourceGridViewModel>> GetData(GridIt
478484
return ValueTask.FromResult(GridItemsProviderResult.From(query, orderedResources.Count));
479485
}
480486

487+
private const string ParametersGroupName = "Parameters";
488+
489+
private List<ResourceViewModel> GroupParametersUnderParent(List<ResourceViewModel> resources)
490+
{
491+
var parameters = resources.Where(r => StringComparers.ResourceType.Equals(r.ResourceType, KnownResourceTypes.Parameter)).ToList();
492+
493+
if (parameters.Count == 0)
494+
{
495+
return resources;
496+
}
497+
498+
// Create synthetic "Parameters" parent resource
499+
var parametersParent = new ResourceViewModel
500+
{
501+
Name = ParametersGroupName,
502+
ResourceType = "ParameterGroup",
503+
DisplayName = ParametersGroupName,
504+
Uid = ParametersGroupName,
505+
State = null,
506+
StateStyle = null,
507+
CreationTimeStamp = null,
508+
StartTimeStamp = null,
509+
StopTimeStamp = null,
510+
Environment = ImmutableArray<EnvironmentVariableViewModel>.Empty,
511+
Urls = ImmutableArray<UrlViewModel>.Empty,
512+
Volumes = ImmutableArray<VolumeViewModel>.Empty,
513+
Relationships = ImmutableArray<RelationshipViewModel>.Empty,
514+
Properties = System.Collections.Immutable.ImmutableDictionary<string, ResourcePropertyViewModel>.Empty,
515+
Commands = ImmutableArray<CommandViewModel>.Empty,
516+
HealthReports = ImmutableArray<HealthReportViewModel>.Empty
517+
};
518+
519+
// Set synthetic parent to be collapsed by default
520+
if (!_collapsedResourceNames.Contains(ParametersGroupName))
521+
{
522+
_collapsedResourceNames.Add(ParametersGroupName);
523+
}
524+
525+
// Create new list with parameters having the parent set
526+
var result = new List<ResourceViewModel> { parametersParent };
527+
528+
foreach (var resource in resources)
529+
{
530+
if (StringComparers.ResourceType.Equals(resource.ResourceType, KnownResourceTypes.Parameter))
531+
{
532+
// Update parameter to have Parameters as parent
533+
var parentProperty = new ResourcePropertyViewModel(
534+
KnownProperties.Resource.ParentName,
535+
Google.Protobuf.WellKnownTypes.Value.ForString(ParametersGroupName),
536+
isValueSensitive: false,
537+
knownProperty: null,
538+
priority: 0);
539+
540+
var updatedProperties = resource.Properties.SetItem(KnownProperties.Resource.ParentName, parentProperty);
541+
542+
var updatedParameter = new ResourceViewModel
543+
{
544+
Name = resource.Name,
545+
ResourceType = resource.ResourceType,
546+
DisplayName = resource.DisplayName,
547+
Uid = resource.Uid,
548+
State = resource.State,
549+
StateStyle = resource.StateStyle,
550+
CreationTimeStamp = resource.CreationTimeStamp,
551+
StartTimeStamp = resource.StartTimeStamp,
552+
StopTimeStamp = resource.StopTimeStamp,
553+
Environment = resource.Environment,
554+
Urls = resource.Urls,
555+
Volumes = resource.Volumes,
556+
Relationships = resource.Relationships,
557+
Properties = updatedProperties,
558+
Commands = resource.Commands,
559+
HealthReports = resource.HealthReports
560+
};
561+
562+
result.Add(updatedParameter);
563+
}
564+
else
565+
{
566+
result.Add(resource);
567+
}
568+
}
569+
570+
return result;
571+
}
572+
481573
private void UpdateMenuButtons()
482574
{
483575
_resourcesMenuItems.Clear();

0 commit comments

Comments
 (0)