GuestLog - Added dialog for Address search.

This commit is contained in:
2026-08-11 13:14:49 +02:00
parent 3fe558c231
commit 5c7fed2677
2 changed files with 169 additions and 17 deletions
@@ -0,0 +1,103 @@
@using Somnia.GuestLog.Models.DTOs;
@using Somnia.GuestLog.Services.AddressQuery;
@inject ILogger<AddressQueryDialog> logger;
@inject IAddressQueryFactory addressQueryFactory;
@inject ISnackbar Snackbar
<MudDialog>
<TitleContent>
<MudText Typo="Typo.h6">
<MudIcon Icon="@Icons.Material.Filled.NotListedLocation" Class="mr-3 mb-n1" />
Search Address
</MudText>
</TitleContent>
<DialogContent>
<MudStack row>
<MudTextField @ref="txtSearch" @bind-Value="SearchText" Label="Search address" Required />
<MudIconButton Icon="@Icons.Material.Filled.Search" OnClick="btnSearchAddress" />
</MudStack>
<MudPaper Class="mt-4 pa-2">
@if (addressResults.Count == 0)
{
<MudText Typo="Typo.body1">No results!</MudText>
}
<MudList T="AddressResultDTO" @bind-SelectedValue="SelectedAddressResult"
SelectionMode="SelectionMode.SingleSelection" Color="Color.Info">
@foreach (AddressResultDTO result in addressResults)
{
<MudListItem Value="result">
<ChildContent>
<MudTextField Value="@($"{result.AddressRoad}, {result.HouseNumber}")" Label="Address"
ReadOnly />
<MudStack row>
<MudTextField Value="@result.AddressCity" Label="City" ReadOnly />
<MudTextField Value="@result.AddressProvince" Label="Province" ReadOnly />
<MudTextField Value="@result.AddressState" Label="State" ReadOnly />
</MudStack>
<MudStack row>
<MudTextField Value="@result.AddressCountry" Label="Country" ReadOnly />
<MudTextField Value="@result.ZipCode" Label="Zip Code" ReadOnly />
</MudStack>
</ChildContent>
</MudListItem>
}
</MudList>
</MudPaper>
</DialogContent>
<DialogActions>
<MudButton OnClick="Cancel">Cancel</MudButton>
<MudButton Color="Color.Primary" OnClick="btnSelectAddress">Select Address</MudButton>
</DialogActions>
</MudDialog>
@code {
[CascadingParameter]
private IMudDialogInstance MudDialog { get; set; } = null!;
public string SearchText { get; set; } = "";
private List<AddressResultDTO> addressResults = [];
private AddressResultDTO? SelectedAddressResult { get; set; }
private MudTextField<string> txtSearch = null!;
private void Cancel() => MudDialog.Cancel();
private async Task btnSearchAddress()
{
if (SearchText.Length == 0)
{
return;
}
try
{
var queryService = addressQueryFactory.GetService();
addressResults = await queryService.SearchAddressAsync(SearchText);
}
catch (Exception ex)
{
logger.LogError(ex, "SearchAddress returned an error!");
Snackbar.Add($"Error searching address: {ex.Message}", Severity.Error);
}
}
private void btnSelectAddress()
{
if (SelectedAddressResult is null)
{
Snackbar.Add("Select an address", Severity.Warning);
return;
}
//In a real world scenario this bool would probably be a service to delete the item from api/database
Snackbar.Add("Address Selected", Severity.Success);
MudDialog.Close(DialogResult.Ok<AddressResultDTO?>(SelectedAddressResult));
}
}