using System.Diagnostics.CodeAnalysis; using Microsoft.AspNetCore.Components; namespace Moonlight.Frontend.Admin.Sys.Settings; public class SystemSettingsOptions { public IReadOnlyList Components => InnerComponents; private readonly List InnerComponents = []; 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 );