lazy load nodes in explorer

This commit is contained in:
Matt Parker
2025-08-02 18:26:00 +10:00
parent 30bc449c5f
commit ebd3376836
2 changed files with 25 additions and 17 deletions

View File

@@ -14,6 +14,7 @@ public class SharpIdeSolutionFolder : ISharpIdeNode
public required string Name { get; set; } public required string Name { get; set; }
public required List<SharpIdeSolutionFolder> Folders { get; set; } public required List<SharpIdeSolutionFolder> Folders { get; set; }
public required List<SharpIdeProjectModel> Projects { get; set; } public required List<SharpIdeProjectModel> Projects { get; set; }
public bool Expanded { get; set; }
} }
public class SharpIdeProjectModel : ISharpIdeNode public class SharpIdeProjectModel : ISharpIdeNode
{ {
@@ -21,4 +22,5 @@ public class SharpIdeProjectModel : ISharpIdeNode
public required string FilePath { get; set; } public required string FilePath { get; set; }
public required List<SharpIdeFolder> Folders { get; set; } public required List<SharpIdeFolder> Folders { get; set; }
public required List<SharpIdeFile> Files { get; set; } public required List<SharpIdeFile> Files { get; set; }
public bool Expanded { get; set; }
} }

View File

@@ -45,7 +45,9 @@
private RenderFragment GetSolutionFolderFragment(SharpIdeSolutionFolder slnFolder) => private RenderFragment GetSolutionFolderFragment(SharpIdeSolutionFolder slnFolder) =>
@<text> @<text>
<MudTreeViewItem T="ISharpIdeNode" TextTypo="Typo.body2" Icon="@Icons.Material.Filled.Folder" IconColor="Color.Primary" Value="@slnFolder" Text="@slnFolder.Name"> <MudTreeViewItem T="ISharpIdeNode" TextTypo="Typo.body2" Icon="@Icons.Material.Filled.Folder" IconColor="Color.Primary" Value="@slnFolder" Text="@slnFolder.Name" @bind-Expanded="@slnFolder.Expanded">
@if (slnFolder.Expanded)
{
@foreach (var childFolder in slnFolder.Folders) @foreach (var childFolder in slnFolder.Folders)
{ {
@GetSolutionFolderFragment(childFolder) @GetSolutionFolderFragment(childFolder)
@@ -54,12 +56,15 @@
{ {
@GetProjectFragment(childProject) @GetProjectFragment(childProject)
} }
}
</MudTreeViewItem> </MudTreeViewItem>
</text>; </text>;
private RenderFragment GetProjectFragment(SharpIdeProjectModel project) => private RenderFragment GetProjectFragment(SharpIdeProjectModel project) =>
@<text> @<text>
<MudTreeViewItem T="ISharpIdeNode" TextTypo="Typo.body2" Icon="@Icons.Custom.FileFormats.FileCode" IconColor="Color.Success" Text="@project.Name" Value="project"> <MudTreeViewItem T="ISharpIdeNode" TextTypo="Typo.body2" Icon="@Icons.Custom.FileFormats.FileCode" IconColor="Color.Success" Text="@project.Name" Value="project" @bind-Expanded="@project.Expanded">
@if (project.Expanded)
{
@foreach (var folder in project.Folders) @foreach (var folder in project.Folders)
{ {
<MudTreeViewItem T="ISharpIdeNode" TextTypo="Typo.body2" Icon="@Icons.Material.Filled.Folder" IconColor="Color.Default" @bind-Expanded="folder.Expanded" Text="@folder.Name" Value="@folder"> <MudTreeViewItem T="ISharpIdeNode" TextTypo="Typo.body2" Icon="@Icons.Material.Filled.Folder" IconColor="Color.Default" @bind-Expanded="folder.Expanded" Text="@folder.Name" Value="@folder">
@@ -70,6 +75,7 @@
{ {
@GetFileFragment(file) @GetFileFragment(file)
} }
}
</MudTreeViewItem> </MudTreeViewItem>
</text>; </text>;