@inherits LocalizableComponentBase @* The reports moderators handle (/clientapi/moderator/reports): from someone here (never said who) or from another server, about an account and some of its posts; resolved here. *@
@if (IsLoading) {

@Localizer["loading"]

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

@(resolved ? Localizer["No resolved report."] : Localizer["No open report."])

} @foreach (var report in reports) {
@CategoryName(report.Category) @if (report.Forwarded) { @Localizer["Forwarded"] } @report.CreatedAt.GetPassedTime(Localizer) @if (!report.IsResolved) { @Localizer["Resolve"] } else if (report.ResolvedAt is { } resolvedAt) { @Localizer["Resolved {0}", resolvedAt.GetPassedTime(Localizer)] }

@Localizer["About"] @if (report.TargetAccountId is { Length: > 0 } targetId) { @report.TargetActorURI } else { @report.TargetActorURI }

@Localizer["From"] @(report.Reporter == "local" ? Localizer["someone here"] : report.Reporter)

@if (report.Comment is { Length: > 0 } comment) {

@comment

} @if (report.PostIds.Count > 0 || report.ObjectURIs.Count > 0) {
@foreach (var postId in report.PostIds) { @Localizer["Post {0}", postId] } @* a report from another server names posts by their ids there when we hold none of them *@ @if (report.PostIds.Count == 0) { @foreach (var uri in report.ObjectURIs) { @uri } }
}
}
@code { [Inject] AdminService AdminService { get; set; } List reports = []; bool resolved; HashSet busy = []; protected override async Task OnInitializedAsync() { if (CascadingState.IsOffline) { WhenOnline(LoadData); StartOnlinePolling(); IsLoading = false; return; } await LoadData(); IsLoading = false; } async Task LoadData() => reports = await AdminService.Reports(resolved); async Task ShowResolved(bool value) { resolved = value; IsLoading = true; await LoadData(); IsLoading = false; } string CategoryName(string category) => category switch { "spam" => Localizer["Spam"], "legal" => Localizer["Illegal"], "violation" => Localizer["Breaks the rules"], _ => Localizer["Other"] }; async Task Resolve(ViewReport report) { busy.Add(report.ID); var result = await AdminService.Resolve(report.ID); busy.Remove(report.ID); if (result.IsInvalid) { Toast.AddResponseError(result); return; } reports.Remove(report); Toast.AddResponseSuccess(Localizer["Report resolved."]); } }