Iceshrimp.NET/Iceshrimp.Backend/Pages/Admin/Rules.razor

83 lines
No EOL
2.4 KiB
Text

@page "/admin/rules"
@using Iceshrimp.Backend.Components.Admin
@using Iceshrimp.Backend.Core.Database.Tables
@using Iceshrimp.Backend.Core.Services
@using Microsoft.AspNetCore.Components.Forms
@using Microsoft.EntityFrameworkCore
@using Microsoft.AspNetCore.Components.Routing
@inherits AdminComponentBase
<AdminPageHeader Title="Rules"/>
<p>Here you can adjust instance rules. They get displayed to all users, including guests.</p>
<table class="auto-table">
<thead>
<th>#</th>
<th>Text & Description</th>
<th>Actions</th>
</thead>
@foreach (var rule in _rules)
{
<tr>
<td>@rule.Order</td>
<td>
@rule.Text
<br>
@if (rule.Description != null)
{
@rule.Description
}
else
{
<i>No description</i>
}
</td>
<td>
<NavLink href="@($"/admin/rules/{rule.Id}")">Edit</NavLink>
| <a class="fake-link" onclick="removeRule('@rule.Id', event.target)">Remove</a>
</td>
</tr>
}
</table>
@if (_rules is [])
{
<i>No rules configured.</i>
}
<EditForm FormName="add-rule" Model="Model" OnSubmit="OnSubmit">
<label for="text">Text</label>
<InputText @bind-Value="@Model.Text" id="text" class="width30" placeholder="Short rule" required/>
<label for="description">Description</label>
<InputText @bind-Value="@Model.Description" id="description" class="width30" placeholder="Longer rule description"/>
<button type="submit">Submit</button>
</EditForm>
@code {
[Inject] public required InstanceService Instance { get; set; }
[SupplyParameterFromForm] private RuleModel Model { get; set; } = null!;
private List<Rule> _rules = [];
private class RuleModel
{
public string? Text { get; set; }
public string? Description { get; set; }
}
protected override void OnParametersSet()
{
Model ??= new RuleModel();
}
protected override async Task OnGet()
{
_rules = await Database.Rules.OrderBy(p => p.Order).ThenBy(p => p.Id).ToListAsync();
}
private async Task OnSubmit()
{
await Instance.CreateRuleAsync(Model.Text!.Trim(), Model.Description?.Trim());
ReloadPage();
}
}