@inherits LocalizableComponentBase @* Servers blocked for everyone here (/clientapi/admin/domainblocks): suspended (nothing from or to them) or silenced (kept out of the public feeds), their media refused or not, with a comment for the public and one for the admins. *@
@Localizer["Block server"]
@if (IsLoading) {

@Localizer["loading"]

} else if (blocks.Count == 0) {

@Localizer["No server is blocked."]

} @foreach (var block in blocks) {
@block.Domain @(block.Severity == "Suspend" ? Localizer["Suspended"] : Localizer["Silenced"]) @if (block.RejectMedia) { @Localizer["Media refused"] } @block.CreatedAt.GetPassedTime(Localizer) @Localizer["Unblock"]
@if (block.PublicComment is { Length: > 0 } publicComment) {

@publicComment

} @if (block.PrivateComment is { Length: > 0 } privateComment) {

@privateComment

}
}
@code { [Inject] AdminService AdminService { get; set; } List blocks = []; DomainBlockForm form = new(); bool isSaving; HashSet busy = []; protected override async Task OnInitializedAsync() { if (CascadingState.IsOffline) { WhenOnline(LoadData); StartOnlinePolling(); IsLoading = false; return; } await LoadData(); IsLoading = false; } async Task LoadData() => blocks = await AdminService.ServerBlocks(); async Task Block() { isSaving = true; var result = await AdminService.BlockServer(form); isSaving = false; if (result.IsInvalid) { Toast.AddResponseError(result); return; } var block = (ViewDomainBlock)result.Data; blocks = [.. blocks.Where(b => b.Domain != block.Domain).Append(block).OrderBy(b => b.Domain, StringComparer.Ordinal)]; form = new(); Toast.AddResponseSuccess(Localizer["{0} is blocked.", block.Domain]); } async Task Unblock(ViewDomainBlock block) { busy.Add(block.Domain); var result = await AdminService.UnblockServer(block.Domain); busy.Remove(block.Domain); if (result.IsInvalid) { Toast.AddResponseError(result); return; } blocks.Remove(block); } }