From abc4213500ce120f55946f90839efde409cb26f8 Mon Sep 17 00:00:00 2001 From: Matt Parker <61717342+MattParkerDev@users.noreply.github.com> Date: Fri, 1 Aug 2025 18:51:17 +1000 Subject: [PATCH] insta open and collapse explorer nodes --- .../SolutionDiscovery/FileOrFolder.cs | 8 ++-- .../VsPersistence/SharpIdeModels.cs | 8 ++-- .../Components/SolutionExplorer.razor | 40 +++++++++++-------- 3 files changed, 33 insertions(+), 23 deletions(-) diff --git a/src/SharpIDE.Application/Features/SolutionDiscovery/FileOrFolder.cs b/src/SharpIDE.Application/Features/SolutionDiscovery/FileOrFolder.cs index f75513b..87b324e 100644 --- a/src/SharpIDE.Application/Features/SolutionDiscovery/FileOrFolder.cs +++ b/src/SharpIDE.Application/Features/SolutionDiscovery/FileOrFolder.cs @@ -1,12 +1,14 @@ -namespace SharpIDE.Application.Features.SolutionDiscovery; +using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence; -public class SharpIdeFile +namespace SharpIDE.Application.Features.SolutionDiscovery; + +public class SharpIdeFile : ISharpIdeNode { public required string Path { get; set; } public required string Name { get; set; } } -public class SharpIdeFolder +public class SharpIdeFolder : ISharpIdeNode { public required string Path { get; set; } public required string Name { get; set; } diff --git a/src/SharpIDE.Application/Features/SolutionDiscovery/VsPersistence/SharpIdeModels.cs b/src/SharpIDE.Application/Features/SolutionDiscovery/VsPersistence/SharpIdeModels.cs index 178ed9d..1d1c898 100644 --- a/src/SharpIDE.Application/Features/SolutionDiscovery/VsPersistence/SharpIdeModels.cs +++ b/src/SharpIDE.Application/Features/SolutionDiscovery/VsPersistence/SharpIdeModels.cs @@ -1,19 +1,21 @@ namespace SharpIDE.Application.Features.SolutionDiscovery.VsPersistence; -public class SharpIdeSolutionModel +public interface ISharpIdeNode; + +public class SharpIdeSolutionModel : ISharpIdeNode { public required string Name { get; set; } public required string FilePath { get; set; } public required List Projects { get; set; } public required List Folders { get; set; } } -public class SharpIdeSolutionFolder +public class SharpIdeSolutionFolder : ISharpIdeNode { public required string Name { get; set; } public required List Folders { get; set; } public required List Projects { get; set; } } -public class SharpIdeProjectModel +public class SharpIdeProjectModel : ISharpIdeNode { public required string Name { get; set; } public required string FilePath { get; set; } diff --git a/src/SharpIDE.Photino/Components/SolutionExplorer.razor b/src/SharpIDE.Photino/Components/SolutionExplorer.razor index a2ae8f0..9c561ca 100644 --- a/src/SharpIDE.Photino/Components/SolutionExplorer.razor +++ b/src/SharpIDE.Photino/Components/SolutionExplorer.razor @@ -5,18 +5,24 @@ { return; } - - - - @foreach (var folder in SolutionModel.Folders) - { - @GetSolutionFolderFragment(folder) - } - @foreach(var project in SolutionModel.Projects) - { - @GetProjectFragment(project) - } - + + + + @foreach (var folder in SolutionModel.Folders) + { + @GetSolutionFolderFragment(folder) + } + @foreach(var project in SolutionModel.Projects) + { + @GetProjectFragment(project) + } @@ -42,7 +48,7 @@ private RenderFragment GetSolutionFolderFragment(SharpIdeSolutionFolder slnFolder) => @ - + @foreach(var childFolder in slnFolder.Folders) { @GetSolutionFolderFragment(childFolder) @@ -56,10 +62,10 @@ private RenderFragment GetProjectFragment(SharpIdeProjectModel project) => @ - + @foreach (var folder in project.Folders) { - + @GetFolderFragment(folder) } @@ -74,7 +80,7 @@ @ @foreach (var subFolder in folder.Folders) { - + @if (subFolder.Expanded) { @GetFolderFragment(subFolder) @@ -89,7 +95,7 @@ private RenderFragment GetFileFragment(SharpIdeFile file) => @ - + ;