Files
jsmr/JSMR.UI.Blazor/Pages/VoiceWorks.razor

84 lines
2.5 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>
<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 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,
SupportedLanguages = [Domain.Enums.Language.English]
},
SortOptions =
[
new(VoiceWorkSortField.ReleaseDate, 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 OnPageNumberChanged(int newPageNumber)
{
PageNumber = newPageNumber;
await UpdateDataAsync(false);
}
public async Task OnPageSizeChanged(int newPageSize)
{
PageSize = newPageSize;
await UpdateDataAsync(true);
}
}