diff --git a/Moonlight/Core/Actions/Dummy/DummyServiceDefinition.cs b/Moonlight/Core/Actions/Dummy/DummyServiceDefinition.cs index 72f0c84..dfa375c 100644 --- a/Moonlight/Core/Actions/Dummy/DummyServiceDefinition.cs +++ b/Moonlight/Core/Actions/Dummy/DummyServiceDefinition.cs @@ -11,14 +11,14 @@ public class DummyServiceDefinition : ServiceDefinition public override Type ConfigType => typeof(DummyConfig); public override async Task BuildUserView(ServiceViewContext context) { - context.Layout = ComponentHelper.FromType(); + context.Layout = typeof(DummyUser); await context.AddPage("Demo", "/demo"); } public override Task BuildAdminView(ServiceViewContext context) { - context.Layout = ComponentHelper.FromType(); + context.Layout = typeof(DummyAdmin); return Task.CompletedTask; } diff --git a/Moonlight/Features/Servers/Actions/ServerServiceDefinition.cs b/Moonlight/Features/Servers/Actions/ServerServiceDefinition.cs index be0d68c..75a52eb 100644 --- a/Moonlight/Features/Servers/Actions/ServerServiceDefinition.cs +++ b/Moonlight/Features/Servers/Actions/ServerServiceDefinition.cs @@ -10,7 +10,7 @@ public class ServerServiceDefinition : ServiceDefinition public override Type ConfigType => typeof(ServerConfig); public override async Task BuildUserView(ServiceViewContext context) { - context.Layout = ComponentHelper.FromType(); + context.Layout = typeof(UserLayout); } public override Task BuildAdminView(ServiceViewContext context) diff --git a/Moonlight/Features/ServiceManagement/Models/Abstractions/ServiceViewContext.cs b/Moonlight/Features/ServiceManagement/Models/Abstractions/ServiceViewContext.cs index e02b7b5..8e314bd 100644 --- a/Moonlight/Features/ServiceManagement/Models/Abstractions/ServiceViewContext.cs +++ b/Moonlight/Features/ServiceManagement/Models/Abstractions/ServiceViewContext.cs @@ -15,7 +15,7 @@ public class ServiceViewContext // Content public List Pages { get; set; } = new(); - public RenderFragment Layout { get; set; } + public Type Layout { get; set; } public Task AddPage(string name, string route, string icon = "") where T : ComponentBase { diff --git a/Moonlight/Features/ServiceManagement/UI/Views/View.razor b/Moonlight/Features/ServiceManagement/UI/Views/View.razor index b66dca3..3599a4f 100644 --- a/Moonlight/Features/ServiceManagement/UI/Views/View.razor +++ b/Moonlight/Features/ServiceManagement/UI/Views/View.razor @@ -1,6 +1,7 @@ @page "/service/{Id:int}/{Route?}" + @using Microsoft.EntityFrameworkCore -@using Moonlight.Core.Models.Enums +@using Moonlight.Core.Helpers @using Moonlight.Core.Repositories @using Moonlight.Core.Services @using Moonlight.Features.ServiceManagement.Entities @@ -19,22 +20,13 @@ } else { - // An admin should still be able to manage the service, that's why we check for permissions here - if (NeedsRenewal && !IdentityService.Permissions[Permission.AdminServices]) + if (NeedsRenewal) { } else { - - - - - @ViewContext.Layout - - - - + @Layout } } @@ -51,7 +43,9 @@ private ServiceDefinition Definition; private ServiceViewContext ViewContext; - private bool NeedsRenewal; + private bool NeedsRenewal = false; + + private RenderFragment Layout; private async Task Load(LazyLoader lazyLoader) { @@ -74,12 +68,9 @@ if (Service == null) return; - // Check expiration NeedsRenewal = await ServiceService.Manage.NeedsRenewal(Service); - // Stop loading more data if the user is not an admin - // because a admin should still be able to manage the service - if(NeedsRenewal && !IdentityService.Permissions[Permission.AdminServices]) + if(NeedsRenewal) // Stop loading more data return; // Load implementation @@ -98,5 +89,13 @@ await Definition.BuildUserView(ViewContext); await PluginService.BuildUserServiceView(ViewContext); + + Layout = ComponentHelper.FromType(ViewContext.Layout, parameters => + { + parameters.Add("Service", Service); + parameters.Add("Implementation", Definition); + parameters.Add("Route", Route!); + parameters.Add("ViewContext", ViewContext); + }); } -} +} \ No newline at end of file