using System.Diagnostics.CodeAnalysis; using Microsoft.AspNetCore.Components; namespace Moonlight.Frontend.Configuration; public class LayoutPageOptions { public IReadOnlyList Components => InnerComponents; private readonly List InnerComponents = new(); 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 }