86 lines
2.6 KiB
Plaintext
86 lines
2.6 KiB
Plaintext
@using Microsoft.Build.Construction
|
|
@using SharpIDE.Application.Features.SolutionDiscovery
|
|
|
|
@if (_solutionFile is null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
<MudTreeView T="ProjectInSolution" Dense="true" >
|
|
@foreach(var project in _rootNodes)
|
|
{
|
|
@GetProjectFragment(project)
|
|
}
|
|
</MudTreeView>
|
|
|
|
|
|
@code {
|
|
|
|
private SolutionFile _solutionFile = null!;
|
|
private List<ProjectInSolution> _rootNodes = [];
|
|
private Dictionary<string, Folder?> _folders = new();
|
|
|
|
private RenderFragment GetProjectFragment(ProjectInSolution project) =>
|
|
@<text>
|
|
<MudTreeViewItem TextTypo="Typo.body2" Icon="@Icons.Material.Filled.Folder" IconColor="Color.Primary" Value="project" Text="@project.ProjectName">
|
|
@foreach(var child in _solutionFile.ProjectsByGuid.Values.Where(s => s.ParentProjectGuid == project.ProjectGuid).OrderBy(s => s.ProjectName))
|
|
{
|
|
@GetProjectFragment(child)
|
|
}
|
|
@if (_folders.GetValueOrDefault(project.ProjectGuid, null) is {} value)
|
|
{
|
|
@GetFolderFragment(value)
|
|
}
|
|
</MudTreeViewItem>
|
|
</text>;
|
|
|
|
private RenderFragment GetFolderFragment(Folder folder) =>
|
|
@<text>
|
|
@foreach (var subFolder in folder.Folders)
|
|
{
|
|
<MudTreeViewItem TextTypo="Typo.body2" @bind-Expanded="subFolder.Expanded" T="ProjectInSolution" Text="@subFolder.Name">
|
|
@if (subFolder.Expanded)
|
|
{
|
|
@GetFolderFragment(subFolder)
|
|
}
|
|
</MudTreeViewItem>
|
|
}
|
|
@foreach (var file in folder.Files)
|
|
{
|
|
<MudTreeViewItem TextTypo="Typo.body2" T="ProjectInSolution" Text="@file.Name" />
|
|
}
|
|
</text>;
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
await Task.Run(() => LoadSolution("C:/Users/Matthew/Documents/Git/amazon/ClientPortal.sln"));
|
|
}
|
|
|
|
private void LoadSolution(string solutionPath)
|
|
{
|
|
var solutionFile = GetNodesInSolution.ParseSolutionFileFromPath("C:/Users/Matthew/Documents/Git/amazon/ClientPortal.sln");
|
|
ArgumentNullException.ThrowIfNull(solutionFile);
|
|
_solutionFile = solutionFile;
|
|
var rootNodes = solutionFile.ProjectsByGuid.Values.Where(p => p.ParentProjectGuid == null).OrderBy(s => s.ProjectName).ToList();
|
|
_rootNodes = rootNodes;
|
|
|
|
var folders2 = _solutionFile.ProjectsByGuid.Values
|
|
.Where(s => s.ProjectType == SolutionProjectType.KnownToBeMSBuildFormat)
|
|
//.Take(2)
|
|
.Select(s =>
|
|
{
|
|
var rootFolder = new Folder
|
|
{
|
|
Name = Path.GetFileNameWithoutExtension(s.AbsolutePath),
|
|
Path = Path.GetDirectoryName(s.AbsolutePath)!,
|
|
IsPseudoFolder = false
|
|
};
|
|
rootFolder.Folders = rootFolder.GetSubFolders();
|
|
return (s, rootFolder);
|
|
})
|
|
.ToDictionary(s => s.s.ProjectGuid, s => s.Item2);
|
|
_folders = folders2!;
|
|
}
|
|
|
|
}
|