Files
Moonlight/Moonlight.Frontend/Admin/Sys/Settings/SystemSettingsOptions.cs

52 lines
1.6 KiB
C#

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