@page "/circles"
@using JSMR.Application.Circles.Queries.Search
@using JSMR.Application.Common.Search
@using JSMR.UI.Blazor.Components
@using JSMR.UI.Blazor.Services
@inject VoiceWorksClient Client
@inject IJSRuntime JS
@inject HttpClient Http
Circles
Circles
Not Blacklisted
Favorite
Blacklisted
Spam
All
@if (searchResults is null)
{
Loading…
}
else if (searchResults.Items.Length == 0)
{
No results.
}
else
{
@*
@context.Item.MakerId
*@
@*
*@
@if (context.Item.Favorite)
{
Favorite
}
else if (context.Item.Blacklisted)
{
Blacklisted
}
else if (context.Item.Spam)
{
Spam
}
else
{
Normal
}
@if (context.Item.Releases > 0)
{
}
@*
@context.Item.FirstReleaseDate?.ToString("MMMM d, yyyy")
@context.Item.LatestReleaseDate?.ToString("MMMM d, yyyy")
*@
@*
@foreach (var item in searchResults.Items)
{
@item.Name
@item.Releases
@item.Pending
@if (item.Releases > 0)
{
}
@item.Downloads
@item.Downloads.ToString("n0")
@item.FirstReleaseDate?.ToString("MMMM d, yyyy")
@item.LatestReleaseDate?.ToString("MMMM d, yyyy")
}
*@
}
@code {
private string? keywords;
public string? Keywords
{
get { return keywords; }
set
{
keywords = value;
_ = UpdateDataAsync(true);
}
}
private string circleStatus = string.Empty;
public string SelectedCircleStatus
{
get { return circleStatus; }
set
{
circleStatus = value;
_ = UpdateDataAsync(true);
}
}
private int pageNumber = 1;
public int PageNumber
{
get { return pageNumber; }
set
{
pageNumber = value;
_ = UpdateDataAsync(false);
}
}
int pageSize = 100;
public int PageSize
{
get { return pageSize; }
set
{
pageSize = value;
_ = UpdateDataAsync(true);
}
}
SearchResult? searchResults;
protected override Task OnInitializedAsync()
{
_ = LoadCirclesAsync();
return Task.CompletedTask;
}
private async Task LoadCirclesAsync()
{
SearchCirclesRequest request = new(
Options: new()
{
PageNumber = PageNumber,
PageSize = pageSize,
Criteria = new()
{
Name = Keywords,
Status = string.IsNullOrWhiteSpace(SelectedCircleStatus) == false ? Enum.Parse(SelectedCircleStatus) : null
},
SortOptions =
[
new(CircleSortField.Name, Application.Common.Search.SortDirection.Ascending)
]
}
);
await JS.InvokeVoidAsync("pageHelpers.scrollToTop");
var result = await Client.SearchAsync(request);
searchResults = result?.Results ?? new();
await InvokeAsync(StateHasChanged);
}
private async Task UpdateDataAsync(bool resetPageNumber)
{
if (resetPageNumber)
pageNumber = 1;
await LoadCirclesAsync();
}
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";
}
}