using System.Diagnostics.CodeAnalysis; using Microsoft.AspNetCore.Components; namespace Moonlight.Frontend.Infrastructure.Configuration; public class LayoutPageOptions { private readonly List InnerComponents = new(); public IReadOnlyList Components => InnerComponents; public void Add<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] T>(LayoutPageSlot slot, int order) where T : ComponentBase { Add(typeof(T), slot, order); } public void Add(Type componentType, LayoutPageSlot slot, int order) { InnerComponents.Add(new LayoutPageComponent(componentType, order, slot)); } public void Remove<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] T>() where T : ComponentBase { Remove(typeof(T)); } public void Remove(Type componentType) { InnerComponents.RemoveAll(x => x.ComponentType == componentType); } } public record LayoutPageComponent(Type ComponentType, int Order, LayoutPageSlot Slot); public enum LayoutPageSlot { Header = 0, Footer = 1 }