diff --git a/MoonlightServers.Frontend/UI/Components/Nodes/UpdateNodePartials/AllocationsNodeUpdate.razor b/MoonlightServers.Frontend/UI/Components/Nodes/UpdateNodePartials/AllocationsNodeUpdate.razor index 79f5cdf..138ca35 100644 --- a/MoonlightServers.Frontend/UI/Components/Nodes/UpdateNodePartials/AllocationsNodeUpdate.razor +++ b/MoonlightServers.Frontend/UI/Components/Nodes/UpdateNodePartials/AllocationsNodeUpdate.razor @@ -31,8 +31,10 @@
- + + + diff --git a/MoonlightServers.Frontend/UI/Components/Servers/ServerTabs/FilesTab.razor b/MoonlightServers.Frontend/UI/Components/Servers/ServerTabs/FilesTab.razor index fd89340..dfe2f8c 100644 --- a/MoonlightServers.Frontend/UI/Components/Servers/ServerTabs/FilesTab.razor +++ b/MoonlightServers.Frontend/UI/Components/Servers/ServerTabs/FilesTab.razor @@ -8,7 +8,7 @@ @inject ServerFileSystemService FileSystemService @inject DownloadService DownloadService - + @code { diff --git a/MoonlightServers.Frontend/UI/Views/Client/Manage.razor b/MoonlightServers.Frontend/UI/Views/Client/Manage.razor index 4d097c7..4ce9491 100644 --- a/MoonlightServers.Frontend/UI/Views/Client/Manage.razor +++ b/MoonlightServers.Frontend/UI/Views/Client/Manage.razor @@ -1,4 +1,5 @@ @page "/servers/{ServerId:int}" +@page "/servers/{ServerId:int}/{TabPath:alpha}" @using Microsoft.AspNetCore.SignalR.Client @using MoonlightServers.Shared.Http.Responses.Users.Servers @@ -9,10 +10,9 @@ @using MoonlightServers.Frontend.Models @using MoonlightServers.Frontend.Services @using MoonlightServers.Shared.Enums -@using MoonlightServers.Frontend.UI.Components -@using MoonlightServers.Frontend.UI.Components.Servers.ServerTabs @inject ServerService ServerService +@inject NavigationManager Navigation @inject IEnumerable TabProviders @implements IAsyncDisposable @@ -124,25 +124,43 @@
- + + + @{ + var rf = ComponentHelper.FromType(CurrentTab!.ComponentType, parameters => + { + parameters.Add("Server", Server); + parameters.Add("State", State); + parameters.Add("InitialConsoleMessage", InitialConsoleMessage); + parameters.Add("HubConnection", HubConnection); + parameters.Add("Parent", this); + }); + } + +
+ @rf +
} @@ -150,8 +168,10 @@ @code { [Parameter] public int ServerId { get; set; } + [Parameter] public string? TabPath { get; set; } - private List Tabs = new(); + private ServerTab[] Tabs; + private ServerTab? CurrentTab; private ServerDetailResponse Server; private bool NotFound = false; @@ -168,8 +188,23 @@ Server = await ServerService.GetServer(ServerId); // Load server tabs + var tmpTabs = new List(); + foreach (var serverTabProvider in TabProviders) - Tabs.AddRange(await serverTabProvider.GetTabs(Server)); + tmpTabs.AddRange(await serverTabProvider.GetTabs(Server)); + + Tabs = tmpTabs.OrderBy(x => x.Priority).ToArray(); + + // Find current tab + if (!string.IsNullOrEmpty(TabPath)) + { + CurrentTab = Tabs.FirstOrDefault( + x => TabPath.Equals(x.Path, StringComparison.InvariantCultureIgnoreCase) + ); + } + + if (CurrentTab == null) + CurrentTab = Tabs.First(); // Load initial status for first render var status = await ServerService.GetStatus(ServerId); @@ -224,6 +259,14 @@ } } + private async Task SwitchTab(ServerTab tab) + { + CurrentTab = tab; + Navigation.NavigateTo($"/servers/{ServerId}/{tab.Path}"); + + await InvokeAsync(StateHasChanged); + } + private async Task Start() => await ServerService.Start(ServerId);