22// The .NET Foundation licenses this file to you under the MIT license. 
33
44using  System . Collections . Concurrent ; 
5+ using  System . Collections . Immutable ; 
56using  System . Diagnostics ; 
67using  System . Globalization ; 
78using  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