@page "/circles" @using JSMR.Application.Circles.Queries.Search @using JSMR.Application.Common.Search @using JSMR.UI.Blazor.Components @using JSMR.UI.Blazor.Filters @using JSMR.UI.Blazor.Services @using JSMR.UI.Blazor.Shared @inject VoiceWorksClient Client @inject HttpClient Http @inherits SearchPageBase Circles

Circles

@if (Result is null) {

Loading…

} else if (Result.Items.Length == 0) {

No results.

} else {
@foreach (var item in Result.Items) {
@item.Name
@item.MakerId
@if (item.Favorite) { Favorite } else if (item.Blacklisted) { Blacklisted } else if (item.Spam) { Spam } else { Normal }
@if (item.Releases > 0) {
}
@item.Releases @if (item.Pending > 0) { / @item.Pending }
@item.Downloads.ToString("n0")
}
} @code { protected override CircleFilterState ParseStateFromUri(string absoluteUri) => CircleFilterState.FromQuery(new Uri(absoluteUri).Query); protected override string BuildUri(CircleFilterState state) { var basePath = new Uri(Nav.Uri).GetLeftPart(UriPartial.Path); return Microsoft.AspNetCore.WebUtilities.QueryHelpers.AddQueryString(basePath, state.ToQuery()); } protected override bool IsThisPage(string absoluteUri) => Nav.ToBaseRelativePath(absoluteUri).StartsWith("circles", StringComparison.OrdinalIgnoreCase); protected override Task> ExecuteSearchAsync(CircleFilterState state, CancellationToken ct) => Client.SearchAsync(state.ToSearchRequest(), ct).ContinueWith(t => t.Result?.Results ?? new SearchResult(), ct); private string GetStarRatingClass(CircleSearchItem item) { double averageDownloads = item.Downloads / item.Releases; if (averageDownloads < 100) { return "circle-star-poor"; } if (averageDownloads < 250) { return "circle-star-below-average"; } if (averageDownloads < 500) { return "circle-star-average"; } if (averageDownloads < 1000) { return "circle-star-above-average"; } if (averageDownloads < 2000) { return "circle-star-popular"; } if (averageDownloads < 4000) { return "circle-star-super-popular"; } if (averageDownloads < 8000) { return "circle-star-ultra-popular"; } return "circle-star-god-tier"; } }