33 lines
1.1 KiB
C#
33 lines
1.1 KiB
C#
using System.Diagnostics.CodeAnalysis;
|
|
using Microsoft.AspNetCore.Components;
|
|
|
|
namespace Moonlight.Frontend.Configuration;
|
|
|
|
public class LayoutPageOptions
|
|
{
|
|
public IReadOnlyList<LayoutPageComponent> Components => InnerComponents;
|
|
|
|
private readonly List<LayoutPageComponent> 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
|
|
} |