164 lines
7.2 KiB
Plaintext
164 lines
7.2 KiB
Plaintext
@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
|
|
|
|
<PageTitle>Voice Works</PageTitle>
|
|
|
|
<h3>Voice Works</h3>
|
|
|
|
<div class="search-filter-control-container">
|
|
<div class="search-filter-control-span-4">
|
|
<MudTextField T="string" Value="Keywords" ValueChanged="OnKeywordsChanged" Immediate="true" DebounceInterval="500" Label="Filter" Variant="Variant.Text" Adornment="@Adornment.Start" AdornmentIcon="@Icons.Material.Outlined.Search" />
|
|
</div>
|
|
<div class="search-filter-control-span-1">
|
|
<MudSelect T="string" Value="SelectedSaleStatus" ValueChanged="OnSaleStatusChanged" Label="Sale Status" Variant="Variant.Text">
|
|
<MudSelectItem Value="@SaleStatus.Available.ToString()">Available</MudSelectItem>
|
|
<MudSelectItem Value="@SaleStatus.Upcoming.ToString()">Upcoming</MudSelectItem>
|
|
<MudSelectItem Value="@String.Empty">All</MudSelectItem>
|
|
</MudSelect>
|
|
</div>
|
|
<div class="search-filter-control-span-1">
|
|
<MudSelect T="string" Value="SelectedCircleStatus" ValueChanged="OnCircleStatusChanged" Label="Circle Status" Variant="Variant.Text">
|
|
<MudSelectItem Value="@CircleStatus.NotBlacklisted.ToString()">Not Blacklisted</MudSelectItem>
|
|
<MudSelectItem Value="@CircleStatus.Favorited.ToString()">Favorite</MudSelectItem>
|
|
<MudSelectItem Value="@CircleStatus.Blacklisted.ToString()">Blacklisted</MudSelectItem>
|
|
<MudSelectItem Value="@String.Empty">All</MudSelectItem>
|
|
</MudSelect>
|
|
</div>
|
|
<div class="search-filter-control-span-1">
|
|
<MudSelect T="string" Value="SelectedTagStatus" ValueChanged="OnTagStatusChanged" Label="Tag Status" Dense="true" Variant="Variant.Outlined" Margin="Margin.Dense" Adornment="@Adornment.Start" AdornmentIcon="@Icons.Material.Outlined.Search">
|
|
<MudSelectItem Value="@TagStatus.NotBlacklisted.ToString()">Not Blacklisted</MudSelectItem>
|
|
<MudSelectItem Value="@TagStatus.FavoriteExcludeBlacklist.ToString()">Favorite (Exclude Blacklisted)</MudSelectItem>
|
|
<MudSelectItem Value="@TagStatus.FavoriteIncludeBlacklist.ToString()">Favorite (Include Blacklisted)</MudSelectItem>
|
|
<MudSelectItem Value="@TagStatus.Blacklisted.ToString()">Blacklisted</MudSelectItem>
|
|
<MudSelectItem Value="@String.Empty">All</MudSelectItem>
|
|
</MudSelect>
|
|
</div>
|
|
<div class="search-filter-control-span-1">
|
|
<MudSelect T="string" Value="SelectedCreatorStatus" ValueChanged="OnCreatorStatusChanged" Label="Creator Status" Dense="true" Variant="Variant.Outlined" Margin="Margin.Dense" Adornment="@Adornment.Start" AdornmentIcon="@Icons.Material.Outlined.Search">
|
|
<MudSelectItem Value="@CreatorStatus.NotBlacklisted.ToString()">Not Blacklisted</MudSelectItem>
|
|
<MudSelectItem Value="@CreatorStatus.FavoriteExcludeBlacklist.ToString()">Favorite (Exclude Blacklisted)</MudSelectItem>
|
|
<MudSelectItem Value="@CreatorStatus.FavoriteIncludeBlacklist.ToString()">Favorite (Include Blacklisted)</MudSelectItem>
|
|
<MudSelectItem Value="@CreatorStatus.Blacklisted.ToString()">Blacklisted</MudSelectItem>
|
|
<MudSelectItem Value="@String.Empty">All</MudSelectItem>
|
|
</MudSelect>
|
|
</div>
|
|
</div>
|
|
|
|
<JProductCollection Products="searchResults?.Items"></JProductCollection>
|
|
|
|
@if (searchResults is not null)
|
|
{
|
|
<JPagination PageNumber="PageNumber" PageNumberChanged="OnPageNumberChanged" PageSize="PageSize" PageSizeChanged="OnPageSizeChanged" @bind-TotalItems="searchResults.TotalItems" />
|
|
}
|
|
|
|
@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<VoiceWorkSearchResult>? 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<SaleStatus>(SelectedSaleStatus) : null,
|
|
CircleStatus = string.IsNullOrWhiteSpace(SelectedCircleStatus) == false ? Enum.Parse<CircleStatus>(SelectedCircleStatus) : null,
|
|
TagStatus = string.IsNullOrWhiteSpace(SelectedTagStatus) == false ? Enum.Parse<TagStatus>(SelectedTagStatus) : null,
|
|
CreatorStatus = string.IsNullOrWhiteSpace(SelectedCreatorStatus) == false ? Enum.Parse<CreatorStatus>(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<SaleStatus>(SelectedSaleStatus) : null;
|
|
|
|
switch (saleStatus)
|
|
{
|
|
case SaleStatus.Available:
|
|
return VoiceWorkSortField.ReleaseDate;
|
|
case SaleStatus.Upcoming:
|
|
return VoiceWorkSortField.ExpectedReleaseDate;
|
|
default:
|
|
return VoiceWorkSortField.AnyReleaseDate;
|
|
}
|
|
}
|
|
} |