diff --git a/Iceshrimp.Backend/Components/Admin/AdminNav.razor b/Iceshrimp.Backend/Components/Admin/AdminNav.razor index 8872eeaa..9fdcde1d 100644 --- a/Iceshrimp.Backend/Components/Admin/AdminNav.razor +++ b/Iceshrimp.Backend/Components/Admin/AdminNav.razor @@ -10,6 +10,7 @@ [ new("/admin", "Overview", Icons.ChartLine), // spacer for alignment new("/admin/metadata", "Instance metadata", Icons.Info), + new("/admin/rules", "Rules", Icons.Scales), new("/admin/users", "User management", Icons.Users), new("/admin/federation", "Federation control", Icons.Graph), new("/admin/relays", "Relays", Icons.FastForward), diff --git a/Iceshrimp.Backend/Pages/Admin/Rules.razor b/Iceshrimp.Backend/Pages/Admin/Rules.razor new file mode 100644 index 00000000..a916370c --- /dev/null +++ b/Iceshrimp.Backend/Pages/Admin/Rules.razor @@ -0,0 +1,77 @@ +@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 +@inherits AdminComponentBase + + +

Here you can adjust instance rules. They get displayed to all users, including guests.

+ + + + + + + @foreach (var rule in _rules) + { + + + + + } +
#Text & Description
@rule.Order + @rule.Text +
+ @if (rule.Description != null) + { + @rule.Description + } + else + { + No description + } +
+ +@if (_rules is []) +{ + No rules configured. +} + + + + + + + + + +@code { + [Inject] public required InstanceService Instance { get; set; } + [SupplyParameterFromForm] private RuleModel Model { get; set; } = null!; + + private List _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(); + } +} \ No newline at end of file diff --git a/Iceshrimp.Backend/wwwroot/css/admin.css b/Iceshrimp.Backend/wwwroot/css/admin.css index 489c6463..24fd71e2 100644 --- a/Iceshrimp.Backend/wwwroot/css/admin.css +++ b/Iceshrimp.Backend/wwwroot/css/admin.css @@ -38,4 +38,4 @@ p { .auto-table { table-layout: auto; -} \ No newline at end of file +}