35 lines
1.5 KiB
C#
35 lines
1.5 KiB
C#
using System.Diagnostics.CodeAnalysis;
|
|
using Microsoft.AspNetCore.Components;
|
|
|
|
namespace Moonlight.Frontend.Configuration;
|
|
|
|
public class SystemSettingsOptions
|
|
{
|
|
public IReadOnlyList<SystemSettingsPage> Components => InnerComponents;
|
|
|
|
private readonly List<SystemSettingsPage> 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
|
|
); |