diff --git a/src/Somnia.GuestLog/Components/Controls/AddressQueryDialog.razor b/src/Somnia.GuestLog/Components/Controls/AddressQueryDialog.razor new file mode 100644 index 0000000..8b70e37 --- /dev/null +++ b/src/Somnia.GuestLog/Components/Controls/AddressQueryDialog.razor @@ -0,0 +1,103 @@ +@using Somnia.GuestLog.Models.DTOs; +@using Somnia.GuestLog.Services.AddressQuery; + +@inject ILogger logger; +@inject IAddressQueryFactory addressQueryFactory; +@inject ISnackbar Snackbar + + + + + + Search Address + + + + + + + + + + @if (addressResults.Count == 0) + { + No results! + } + + + @foreach (AddressResultDTO result in addressResults) + { + + + + + + + + + + + + + + + } + + + + + + Cancel + Select Address + + + +@code { + [CascadingParameter] + private IMudDialogInstance MudDialog { get; set; } = null!; + + public string SearchText { get; set; } = ""; + private List addressResults = []; + private AddressResultDTO? SelectedAddressResult { get; set; } + + private MudTextField 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(SelectedAddressResult)); + } +} diff --git a/src/Somnia.GuestLog/Components/Pages/DebugPages/AddressQuery.razor b/src/Somnia.GuestLog/Components/Pages/DebugPages/AddressQuery.razor index e1db666..7995ee8 100644 --- a/src/Somnia.GuestLog/Components/Pages/DebugPages/AddressQuery.razor +++ b/src/Somnia.GuestLog/Components/Pages/DebugPages/AddressQuery.razor @@ -6,32 +6,60 @@ @inject ILogger logger; @inject IAddressQueryFactory addressQueryFactory; @inject ISnackbar Snackbar +@inject IDialogService DialogService DEBUG - Address Query -Address Search +Address Search - + + + + Search + + -Search + + @if (addressResults.Count == 0) + { + No results! + } + @foreach (AddressResultDTO result in addressResults) + { + + + Address: @result.AddressRoad , @result.HouseNumber + City: @result.AddressCity + Province: @result.AddressProvince + State: @result.AddressState + Country: @result.AddressCountry + ZipCode: @result.ZipCode + + + } + + - - @if (addressResults.Count == 0) + + + + + Open Search Dialog + + + @if (dialogSelectedAddress is not null) { - No results! - } - @foreach (AddressResultDTO result in addressResults) - { - + + Selected Address: - Address: @result.AddressRoad , @result.HouseNumber - City: @result.AddressCity - Province: @result.AddressProvince - State: @result.AddressState - Country: @result.AddressCountry - ZipCode: @result.ZipCode + Address: @dialogSelectedAddress.AddressRoad , @dialogSelectedAddress.HouseNumber + City: @dialogSelectedAddress.AddressCity + Province: @dialogSelectedAddress.AddressProvince + State: @dialogSelectedAddress.AddressState + Country: @dialogSelectedAddress.AddressCountry + ZipCode: @dialogSelectedAddress.ZipCode - + } @@ -42,6 +70,8 @@ private MudTextField txtSearch = null!; + private AddressResultDTO? dialogSelectedAddress = null; + private async Task btnSearchAddress() { if (SearchText.Length == 0) @@ -62,4 +92,23 @@ Snackbar.Add($"Error searching address: {ex.Message}", Severity.Error); } } + + private async Task btnOpenSearchDialog() + { + DialogOptions options = new() + { + MaxWidth = MaxWidth.Large, + FullWidth= true, + }; + + var dialog = await DialogService.ShowAsync("Search Address", options); + DialogResult? result = await dialog.Result; + + if (result is not null && !result.Canceled) + { + AddressResultDTO? resultData = await dialog.GetReturnValueAsync(); + + dialogSelectedAddress = resultData; + } + } }