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:
@@ -1,7 +1,9 @@
|
|||||||
@page "/"
|
@page "/"
|
||||||
@page "/searches"
|
@page "/searches"
|
||||||
@attribute [Authorize]
|
@attribute [Authorize]
|
||||||
@inject ISearchService SearchService
|
@using JdeScoping.Core.ApiContracts
|
||||||
|
@using JdeScoping.Client.Extensions
|
||||||
|
@inject ISearchApiClient SearchApi
|
||||||
@inject IHubConnectionService HubConnection
|
@inject IHubConnectionService HubConnection
|
||||||
@inject NavigationManager NavigationManager
|
@inject NavigationManager NavigationManager
|
||||||
@implements IDisposable
|
@implements IDisposable
|
||||||
@@ -20,6 +22,12 @@
|
|||||||
{
|
{
|
||||||
<LoadingIndicator Message="Loading searches..." />
|
<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
|
else
|
||||||
{
|
{
|
||||||
<RadzenDataGrid @ref="_grid" Data="@_searches" TItem="ClientSearchViewModel" AllowSorting="true" AllowPaging="true" PageSize="10"
|
<RadzenDataGrid @ref="_grid" Data="@_searches" TItem="ClientSearchViewModel" AllowSorting="true" AllowPaging="true" PageSize="10"
|
||||||
@@ -49,6 +57,7 @@ else
|
|||||||
private List<ClientSearchViewModel> _searches = [];
|
private List<ClientSearchViewModel> _searches = [];
|
||||||
private RadzenDataGrid<ClientSearchViewModel>? _grid;
|
private RadzenDataGrid<ClientSearchViewModel>? _grid;
|
||||||
private bool _isLoading = true;
|
private bool _isLoading = true;
|
||||||
|
private string? _errorMessage;
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
@@ -59,9 +68,18 @@ else
|
|||||||
private async Task LoadSearchesAsync()
|
private async Task LoadSearchesAsync()
|
||||||
{
|
{
|
||||||
_isLoading = true;
|
_isLoading = true;
|
||||||
|
_errorMessage = null;
|
||||||
try
|
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
|
finally
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user