Implemented roles and action timestamps. Added oermissions selector and interfaces
This commit was merged in pull request #3.
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
@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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user