SHA256
GuestLog - Added dialog for Address search.
This commit is contained in:
@@ -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));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,16 +6,20 @@
|
|||||||
@inject ILogger<AddressQuery> logger;
|
@inject ILogger<AddressQuery> logger;
|
||||||
@inject IAddressQueryFactory addressQueryFactory;
|
@inject IAddressQueryFactory addressQueryFactory;
|
||||||
@inject ISnackbar Snackbar
|
@inject ISnackbar Snackbar
|
||||||
|
@inject IDialogService DialogService
|
||||||
|
|
||||||
<PageTitle>DEBUG - Address Query</PageTitle>
|
<PageTitle>DEBUG - Address Query</PageTitle>
|
||||||
|
|
||||||
<MudText Typo="Typo.h3" GutterBottom="true">Address Search</MudText>
|
<MudText Typo="Typo.h3" GutterBottom="true" Class="mt-2">Address Search</MudText>
|
||||||
|
|
||||||
|
<MudPaper Class="ma-2 pa-4">
|
||||||
|
<MudStack Row>
|
||||||
<MudTextField @ref="txtSearch" @bind-Value="SearchText" Label="Search address" Required />
|
<MudTextField @ref="txtSearch" @bind-Value="SearchText" Label="Search address" Required />
|
||||||
|
<MudButton Color="Color.Primary" Variant="Variant.Filled" @onclick="btnSearchAddress" Class="mt-2">Search
|
||||||
|
</MudButton>
|
||||||
|
</MudStack>
|
||||||
|
|
||||||
<MudButton Color="Color.Primary" Variant="Variant.Filled" @onclick="btnSearchAddress">Search</MudButton>
|
<MudPaper class="mt-2 pa-4">
|
||||||
|
|
||||||
<MudPaper>
|
|
||||||
@if (addressResults.Count == 0)
|
@if (addressResults.Count == 0)
|
||||||
{
|
{
|
||||||
<MudText Typo="Typo.body1">No results!</MudText>
|
<MudText Typo="Typo.body1">No results!</MudText>
|
||||||
@@ -34,6 +38,30 @@
|
|||||||
</MudItem>
|
</MudItem>
|
||||||
}
|
}
|
||||||
</MudPaper>
|
</MudPaper>
|
||||||
|
</MudPaper>
|
||||||
|
|
||||||
|
<MudDivider DividerType="DividerType.FullWidth" />
|
||||||
|
|
||||||
|
<MudPaper Class="ma-2 pa-4">
|
||||||
|
<MudButton OnClick="btnOpenSearchDialog" Color="Color.Primary" Variant="Variant.Filled" FullWidth>
|
||||||
|
Open Search Dialog
|
||||||
|
</MudButton>
|
||||||
|
|
||||||
|
@if (dialogSelectedAddress is not null)
|
||||||
|
{
|
||||||
|
<MudPaper class="mt-2 pa-4">
|
||||||
|
<MudText>Selected Address: </MudText>
|
||||||
|
<MudStack>
|
||||||
|
<MudText>Address: @dialogSelectedAddress.AddressRoad , @dialogSelectedAddress.HouseNumber</MudText>
|
||||||
|
<MudText>City: @dialogSelectedAddress.AddressCity</MudText>
|
||||||
|
<MudText>Province: @dialogSelectedAddress.AddressProvince</MudText>
|
||||||
|
<MudText>State: @dialogSelectedAddress.AddressState</MudText>
|
||||||
|
<MudText>Country: @dialogSelectedAddress.AddressCountry</MudText>
|
||||||
|
<MudText>ZipCode: @dialogSelectedAddress.ZipCode</MudText>
|
||||||
|
</MudStack>
|
||||||
|
</MudPaper>
|
||||||
|
}
|
||||||
|
</MudPaper>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
|
||||||
@@ -42,6 +70,8 @@
|
|||||||
|
|
||||||
private MudTextField<string> txtSearch = null!;
|
private MudTextField<string> txtSearch = null!;
|
||||||
|
|
||||||
|
private AddressResultDTO? dialogSelectedAddress = null;
|
||||||
|
|
||||||
private async Task btnSearchAddress()
|
private async Task btnSearchAddress()
|
||||||
{
|
{
|
||||||
if (SearchText.Length == 0)
|
if (SearchText.Length == 0)
|
||||||
@@ -62,4 +92,23 @@
|
|||||||
Snackbar.Add($"Error searching address: {ex.Message}", Severity.Error);
|
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<AddressQueryDialog>("Search Address", options);
|
||||||
|
DialogResult? result = await dialog.Result;
|
||||||
|
|
||||||
|
if (result is not null && !result.Canceled)
|
||||||
|
{
|
||||||
|
AddressResultDTO? resultData = await dialog.GetReturnValueAsync<AddressResultDTO>();
|
||||||
|
|
||||||
|
dialogSelectedAddress = resultData;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user