TourIAm/TIAMSharedUI/Shared/ComboboxItemSelector.razor

180 lines
5.5 KiB
Plaintext

@using System.Linq.Expressions
@using AyCode.Core.Extensions
@using AyCode.Core.Loggers
@using AyCode.Services.Loggers
@using TIAM.Core.Loggers
@using TIAM.Entities.Products
@using TIAM.Entities.Transfers
@using TIAM.Services
@using TIAMSharedUI.Pages
@using TIAMSharedUI.Pages.Components
@using TIAMSharedUI.Pages.User.SysAdmins
@using TIAMWebApp.Shared.Application.Interfaces
@using TIAMWebApp.Shared.Application.Services
@using TIAMWebApp.Shared.Application.Utility
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject AdminSignalRClient _adminSignalRClient
@inject ITransferDataService TransferDataService
@using TIAMWebApp.Shared.Application.Services
@inject GooglePlacesService GooglePlacesService
<DxTabs SizeMode="SizeMode.Small" CssClass="bg-light">
<DxTabPage Text="Preset addresses">
<DxComboBox Data="@Data"
CssClass="p-3"
InputCssClass="@CssClass"
@bind-Value="@SelectedDestination"
SearchMode="@ListSearchMode.AutoSearch"
SearchFilterCondition="@ListSearchFilterCondition.Contains"
ListRenderMode="ListRenderMode.Virtual"
TextFieldName="@nameof(TransferDestination.Name)"
InputId="cbOverview"
SizeMode="SizeMode.Small" />
</DxTabPage>
<DxTabPage Text="Custom address">
<AddressSearchAndSelectComponent AddressChanged="@OnSelectedAddressChanged" CssClass="@CssClass">
</AddressSearchAndSelectComponent>
@* <DxFormLayoutItem Caption="Type a custom address">
<DxTextBox @bind-Text="Address" />
</DxFormLayoutItem>
<DxFormLayoutItem>
<DxButton Context="ButtonContext" Click="ValidateAddress">Validate Address</DxButton>
</DxFormLayoutItem>
<DxFormLayoutItem>
<p>@ValidationMessage</p>
</DxFormLayoutItem> *@
</DxTabPage>
</DxTabs>
<p>Selected address: @Address</p>
@* <p class="demo-text cw-480 mt-3">
@GetSelectedItemDescription()
</p> *@
@*
<DxComboBox Data="@Data"
ValueExpression="@valueExpression"
TextFieldName="@nameof(TransferDestination.Name)"
CssClass="cw-480"
InputId="cbOverview"
ValueChanged="@((TransferDestination destination) => SetNewDestination(destination))" /> *@
@code {
[Parameter] public EventCallback<string> OnSliderChanged { get; set; }
[Parameter] public string TextValue { get; set; } = "";
[Parameter] public string CssClass { get; set; } = "";
[Parameter] public Guid? ProductId { get; set; }
public List<TransferDestination> Destinations = new List<TransferDestination>();
public DxTextBox TextField;
TransferDestination Result;
ILogger _logger;
IEnumerable<TransferDestination> Data { get; set; }
private string Address { get; set; }
private string ValidationMessage { get; set; }
private TransferDestination _selectedDestination;
public TransferDestination SelectedDestination
{
get => _selectedDestination;
set
{
if (_selectedDestination != value)
{
_selectedDestination = value;
SetNewDestination(value.AddressString!);
}
}
}
protected override void OnParametersSet()
{
// StateHasChanged();
}
protected override async Task OnInitializedAsync()
{
_logger = new LoggerClient<ComboboxItemSelector>(LogWriters.ToArray());
Data = await _adminSignalRClient.GetAllAsync<List<TransferDestination>>(SignalRTags.GetAllTransferDestinations);
Guid? productAddressId = Guid.Empty;
if (!ProductId.IsNullOrEmpty())
{
var currentProduct = await _adminSignalRClient.GetByIdAsync<Product>(SignalRTags.GetProductById, ProductId);
if (currentProduct != null)
{
if (!currentProduct.Profile.AddressId.IsNullOrEmpty())
{
productAddressId = currentProduct.Profile.AddressId;
}
}
}
_logger.Debug($"List length: {Data.Count().ToString()}");
if (Data.Any(x => x.AddressId == (Guid)productAddressId))
{
SelectedDestination = Data.Where(x => x.AddressId == (Guid)productAddressId).FirstOrDefault()!;
}
else
{
SelectedDestination = Data.FirstOrDefault();
}
}
// RenderFragment GetSelectedItemDescription()
// {
// if (SelectedDestination != null)
// {
// SetNewDestination(SelectedDestination);
// return @<text>
// Selected Item: (
// @GetFieldDescription(nameof(TransferDestination.Name), SelectedDestination.Name),
// @GetFieldDescription(nameof(TransferDestination.AddressString), SelectedDestination.AddressString),
// @GetFieldDescription(nameof(TransferDestination.Description), SelectedDestination.Description)
// )
// </text>;
// }
// return @<text>Selected Item: <b>null</b></text>;
// }
public void OnSelectedAddressChanged(string address)
{
Address = address;
OnSliderChanged.InvokeAsync(address);
}
public void SetNewDestination(string address)
{
Address = address;
OnSliderChanged.InvokeAsync(address);
}
// RenderFragment GetFieldDescription(string fieldName, object value)
// {
// return @<text>@fieldName: <b>@value</b></text>;
// }
}