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

44 lines
1.8 KiB
Plaintext

@page "/voiceworks"
@using JSMR.Application.Common.Search
@using JSMR.Application.VoiceWorks.Queries.Search
@using JSMR.UI.Blazor.Components
@using JSMR.UI.Blazor.Filters
@using JSMR.UI.Blazor.Services
@using JSMR.UI.Blazor.Shared
@using Microsoft.AspNetCore.WebUtilities
@inject VoiceWorksClient Client
@inherits SearchPageBase<VoiceWorkFilterState, VoiceWorkSearchResult>
<PageTitle>Voice Works</PageTitle>
<h3>Voice Works</h3>
<VoiceWorkFilters Value="@State" ValueChanged="UpdateAsync" />
<JProductCollection Products="Result?.Items"></JProductCollection>
@if (Result is not null)
{
<JPagination PageNumber="@State.PageNumber"
PageNumberChanged="@(pageNumber => UpdateAsync(State with { PageNumber = pageNumber }))"
PageSize="@State.PageSize"
PageSizeChanged="@(pageSize => UpdateAsync(State with { PageSize = pageSize, PageNumber = 1 }))"
@bind-TotalItems="Result.TotalItems" />
}
@code {
protected override VoiceWorkFilterState ParseStateFromUri(string absoluteUri)
=> VoiceWorkFilterState.FromQuery(new Uri(absoluteUri).Query);
protected override string BuildUri(VoiceWorkFilterState 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("voiceworks", StringComparison.OrdinalIgnoreCase);
protected override Task<SearchResult<VoiceWorkSearchResult>> ExecuteSearchAsync(VoiceWorkFilterState state, CancellationToken ct)
=> Client.SearchAsync(state.ToSearchRequest(), ct).ContinueWith(t => t.Result?.Results ?? new SearchResult<VoiceWorkSearchResult>(), ct);
}