@using Ardalis.GuardClauses @using SharpIDE.Application.Features.Run @using SharpIDE.Application.Features.SolutionDiscovery @using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence @inject RunService RunService @if (SolutionModel is null) { return; } @foreach (var folder in SolutionModel.SlnFolders) { @GetSolutionFolderFragment(folder) } @foreach (var project in SolutionModel.Projects) { @GetProjectFragment(project) } @code { [Parameter, EditorRequired] public SharpIdeSolutionModel SolutionModel { get; set; } = null!; [Parameter, EditorRequired] public ISharpIdeNode? SelectedNode { get; set; } = null!; [Parameter] public EventCallback SelectedNodeChanged { get; set; } private MudMenu _contextMenuRef = null!; private SharpIdeProjectModel? _contextMenuProject; private async Task OpenProjectContextMenu(MouseEventArgs args, SharpIdeProjectModel project) { _contextMenuProject = null; _contextMenuProject = project; await _contextMenuRef.OpenMenuAsync(args); } private async Task RunProject() { Guard.Against.Null(_contextMenuProject, nameof(_contextMenuProject)); await RunService.RunProject(_contextMenuProject); } private RenderFragment GetSolutionFolderFragment(SharpIdeSolutionFolder slnFolder) => @ @if (slnFolder.Expanded) { @foreach (var childFolder in slnFolder.Folders) { @GetSolutionFolderFragment(childFolder) } @foreach (var childProject in slnFolder.Projects) { @GetProjectFragment(childProject) } @foreach(var file in slnFolder.Files) { @GetFileFragment(file) } } ; private RenderFragment GetProjectFragment(SharpIdeProjectModel project) => @
@if (project.Expanded) { @foreach (var folder in project.Folders) { @GetFolderFragment(folder) } @foreach (var file in project.Files) { @GetFileFragment(file) } }
; private RenderFragment GetFolderFragment(SharpIdeFolder folder) => @ @if (folder.Expanded) { @foreach (var subFolder in folder.Folders) { @GetFolderFragment(subFolder) } @foreach (var file in folder.Files) { @GetFileFragment(file) } } ; private RenderFragment GetFileFragment(SharpIdeFile file) => @ ; }