86 lines
3.2 KiB
Plaintext
86 lines
3.2 KiB
Plaintext
@using Moonlight.Frontend.Interfaces
|
|
@using Moonlight.Frontend.Models
|
|
@using ShadcnBlazor.Extras.Common
|
|
@using ShadcnBlazor.Accordions
|
|
@using ShadcnBlazor.Checkboxes
|
|
@using ShadcnBlazor.Labels
|
|
|
|
@inject IEnumerable<IPermissionProvider> Providers
|
|
|
|
<LazyLoader Load="LoadAsync">
|
|
<Accordion ClassName="flex w-full flex-col gap-2 overflow-y-auto max-h-80 scrollbar-thin"
|
|
Type="AccordionType.Multiple">
|
|
@foreach (var category in Categories)
|
|
{
|
|
<AccordionItem
|
|
ClassName="rounded-lg border bg-background px-4 last:border-b"
|
|
Value="@category.Name"
|
|
@key="category.Name">
|
|
<AccordionTrigger className="group hover:no-underline [&>svg]:hidden">
|
|
<div class="flex w-full items-center gap-3">
|
|
<div class="relative size-4 shrink-0">
|
|
<DynamicComponent Type="category.Icon" Parameters="IconParameters"/>
|
|
</div>
|
|
<span class="flex-1 text-left">@category.Name</span>
|
|
</div>
|
|
</AccordionTrigger>
|
|
<AccordionContent ClassName="ps-7">
|
|
<div class="grid gap-3 grid-cols-2">
|
|
@foreach (var permission in category.Permissions)
|
|
{
|
|
<div class="flex flex-row gap-x-2">
|
|
@if (Permissions.Contains(permission.Identifier))
|
|
{
|
|
<Checkbox ValueChanged="b => HandleToggle(permission.Identifier, b)"
|
|
DefaultValue="true"
|
|
id="@permission.Identifier"/>
|
|
}
|
|
else
|
|
{
|
|
<Checkbox ValueChanged="b => HandleToggle(permission.Identifier, b)"
|
|
DefaultValue="false"
|
|
id="@permission.Identifier"/>
|
|
}
|
|
<Label for="@permission.Identifier">@permission.Name</Label>
|
|
</div>
|
|
}
|
|
</div>
|
|
</AccordionContent>
|
|
</AccordionItem>
|
|
}
|
|
</Accordion>
|
|
</LazyLoader>
|
|
|
|
@code
|
|
{
|
|
[Parameter] public List<string> Permissions { get; set; } = new();
|
|
|
|
private static readonly Dictionary<string, object> IconParameters = new()
|
|
{
|
|
["ClassName"] = "absolute inset-0 size-4 text-muted-foreground"
|
|
};
|
|
|
|
private readonly List<PermissionCategory> Categories = new();
|
|
|
|
private async Task LoadAsync(LazyLoader _)
|
|
{
|
|
foreach (var provider in Providers)
|
|
{
|
|
Categories.AddRange(
|
|
await provider.GetPermissionsAsync()
|
|
);
|
|
}
|
|
}
|
|
|
|
private void HandleToggle(string permission, bool toggle)
|
|
{
|
|
if (toggle)
|
|
{
|
|
if (!Permissions.Contains(permission))
|
|
Permissions.Add(permission);
|
|
}
|
|
else
|
|
Permissions.Remove(permission);
|
|
}
|
|
}
|