@page "/voiceworks"
@using JSMR.Application.Common.Search
@using JSMR.Application.VoiceWorks.Queries.Search
@using JSMR.UI.Blazor.Components
@using JSMR.UI.Blazor.Services
@inject VoiceWorksClient Client
@inject IJSRuntime JS
Voice Works
Voice Works
Available
Upcoming
All
Not Blacklisted
Favorite
Blacklisted
All
Not Blacklisted
Favorite (Exclude Blacklisted)
Favorite (Include Blacklisted)
Blacklisted
All
Not Blacklisted
Favorite (Exclude Blacklisted)
Favorite (Include Blacklisted)
Blacklisted
All
@if (searchResults is not null)
{
}
@code {
public string? Keywords { get; set; }
public string? SelectedSaleStatus { get; set; } = string.Empty;
public string? SelectedCircleStatus { get; set; } = string.Empty;
public string? SelectedTagStatus { get; set; } = string.Empty;
public string? SelectedCreatorStatus { get; set; } = string.Empty;
public int PageNumber { get; set; } = 1;
public int PageSize { get; set; } = 100;
SearchResult? searchResults;
protected override async Task OnInitializedAsync()
{
await UpdateDataAsync(true);
}
private async Task UpdateDataAsync(bool resetPageNumber)
{
await JS.InvokeVoidAsync("pageHelpers.scrollToTop");
if (resetPageNumber)
PageNumber = 1;
SearchVoiceWorksRequest request = new(
Options: new()
{
Criteria = new()
{
Keywords = Keywords,
SaleStatus = string.IsNullOrWhiteSpace(SelectedSaleStatus) == false ? Enum.Parse(SelectedSaleStatus) : null,
CircleStatus = string.IsNullOrWhiteSpace(SelectedCircleStatus) == false ? Enum.Parse(SelectedCircleStatus) : null,
TagStatus = string.IsNullOrWhiteSpace(SelectedTagStatus) == false ? Enum.Parse(SelectedTagStatus) : null,
CreatorStatus = string.IsNullOrWhiteSpace(SelectedCreatorStatus) == false ? Enum.Parse(SelectedCreatorStatus) : null,
//SupportedLanguages = [Domain.Enums.Language.English]
},
SortOptions =
[
new(GetSortField(), Application.Common.Search.SortDirection.Descending)
],
PageNumber = PageNumber,
PageSize = PageSize
}
);
SearchVoiceWorksResponse? response = await Client.SearchAsync(request);
searchResults = response?.Results;
}
public async Task OnKeywordsChanged(string? newKeywords)
{
Keywords = newKeywords;
await UpdateDataAsync(true);
}
public async Task OnSaleStatusChanged(string? saleStatus)
{
SelectedSaleStatus = saleStatus;
await UpdateDataAsync(true);
}
public async Task OnCircleStatusChanged(string? circleStatus)
{
SelectedCircleStatus = circleStatus;
await UpdateDataAsync(true);
}
public async Task OnTagStatusChanged(string? tagStatus)
{
SelectedTagStatus = tagStatus;
await UpdateDataAsync(true);
}
public async Task OnCreatorStatusChanged(string? creatorStatus)
{
SelectedCreatorStatus = creatorStatus;
await UpdateDataAsync(true);
}
public async Task OnPageNumberChanged(int newPageNumber)
{
PageNumber = newPageNumber;
await UpdateDataAsync(false);
}
public async Task OnPageSizeChanged(int newPageSize)
{
PageSize = newPageSize;
await UpdateDataAsync(true);
}
private VoiceWorkSortField GetSortField()
{
SaleStatus? saleStatus = string.IsNullOrWhiteSpace(SelectedSaleStatus) == false ? Enum.Parse(SelectedSaleStatus) : null;
switch (saleStatus)
{
case SaleStatus.Available:
return VoiceWorkSortField.ReleaseDate;
case SaleStatus.Upcoming:
return VoiceWorkSortField.ExpectedReleaseDate;
default:
return VoiceWorkSortField.AnyReleaseDate;
}
}
}