feat(client): migrate Searches.razor to ISearchApiClient

- Replace ISearchService injection with ISearchApiClient
- Add @using for JdeScoping.Core.ApiContracts and JdeScoping.Client.Extensions
- Update LoadSearchesAsync to use ApiResult<T>.Switch() pattern
- Add _errorMessage field for error state
- Display RadzenAlert for error conditions
- Use ToClientList() extension method to convert Core->Client view models
This commit is contained in:
Joseph Doherty
2026-01-06 10:18:11 -05:00
parent 81b07ce027
commit b08f5418ec
+20 -2
View File
@@ -1,7 +1,9 @@
@page "/"
@page "/searches"
@attribute [Authorize]
@inject ISearchService SearchService
@using JdeScoping.Core.ApiContracts
@using JdeScoping.Client.Extensions
@inject ISearchApiClient SearchApi
@inject IHubConnectionService HubConnection
@inject NavigationManager NavigationManager
@implements IDisposable
@@ -20,6 +22,12 @@
{
<LoadingIndicator Message="Loading searches..." />
}
else if (!string.IsNullOrEmpty(_errorMessage))
{
<RadzenAlert AlertStyle="AlertStyle.Danger" ShowIcon="true" Variant="Variant.Flat" class="rz-mb-4">
@_errorMessage
</RadzenAlert>
}
else
{
<RadzenDataGrid @ref="_grid" Data="@_searches" TItem="ClientSearchViewModel" AllowSorting="true" AllowPaging="true" PageSize="10"
@@ -49,6 +57,7 @@ else
private List<ClientSearchViewModel> _searches = [];
private RadzenDataGrid<ClientSearchViewModel>? _grid;
private bool _isLoading = true;
private string? _errorMessage;
protected override async Task OnInitializedAsync()
{
@@ -59,9 +68,18 @@ else
private async Task LoadSearchesAsync()
{
_isLoading = true;
_errorMessage = null;
try
{
_searches = await SearchService.GetUserSearchesAsync();
var result = await SearchApi.GetUserSearchesAsync();
result.Switch(
searches => { _searches = searches.ToClientList(); },
notFound => { _errorMessage = "No searches found."; _searches = []; },
validation => { _errorMessage = string.Join("; ", validation.FieldErrors.SelectMany(e => e.Value)); },
unauthorized => { _errorMessage = "Session expired. Please login again."; },
forbidden => { _errorMessage = "Access denied."; },
error => { _errorMessage = error.Message; }
);
}
finally
{