44 lines
1.8 KiB
Plaintext
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);
|
|
} |