using System.Diagnostics.CodeAnalysis; using Microsoft.AspNetCore.Components; namespace Moonlight.Frontend.Configuration; public class SystemSettingsOptions { public IReadOnlyList Components => InnerComponents; private readonly List InnerComponents = new(); public void Add<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] TIcon, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] TComponent>(string name, string description, int order) where TIcon : ComponentBase where TComponent : ComponentBase => Add(name, description, order, typeof(TIcon), typeof(TComponent)); public void Add(string name, string description, int order, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type iconComponent, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type component) => InnerComponents.Add(new SystemSettingsPage(name, description, order, iconComponent, component)); public void Remove<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] TComponent>() where TComponent : ComponentBase => Remove(typeof(TComponent)); public void Remove([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type componentType) => InnerComponents.RemoveAll(x => x.ComponentType == componentType); } public record SystemSettingsPage( string Name, string Description, int Order, Type IconComponentType, Type ComponentType );