This commit is contained in:
Adam 2024-07-01 20:01:30 +02:00
parent 434b143d9b
commit f6289c17a6
4 changed files with 195 additions and 36 deletions

View File

@ -1,4 +1,5 @@
@using BlazorAnimation
@using TIAMSharedUI.Shared.Components.Cards
@using TIAMWebApp.Shared.Application.Interfaces
@inject IServiceProviderDataService ServiceProviderDataService
@ -8,7 +9,7 @@
<div class="card-header py-2 px-4">
<div class="d-flex justify-content-between align-items-center">
<div>
<span class="fw-bold text-body">Hotel details</span>
<span class="fw-bold text-body">Transfers</span>
</div>
<div>
@ -17,26 +18,7 @@
</div>
</div>
<div class="card-body card-admin-body py-2 px-4">
<div class="d-flex flex-row mb-4 pb-2">
<div class="flex-fill">
<h4 class="bold">Your QR code</h4>
<p class="text-muted"> Use this in printed material, to gain referrals</p>
</div>
<div>
<a href="api/pictures/1" download="data:image/png;base64,@ImageSource" target="_top">
<img class="align-self-center img-fluid"
src="data:image/png;base64,@ImageSource" width="128" />
</a>
</div>
</div>
<div class="d-flex flex-column mb-4 pb-2">
<h4> Hotel name: <span class="small text-muted"> Example hotel </span></h4>
<h4> Address: <span class="small text-muted"> Budapest, Minta u. 46 </span></h4>
<h4> Phone number: <span class="small text-muted"> +36 1 123 4567</span></h4>
</div>
</div>
<div class="card-footer py-2 px-4">
<div class="d-flex justify-content-between">
@ -54,11 +36,9 @@
@code {
[Parameter] public Guid ContextID { get; set; }
public string ImageSource { get; set; } = "";
protected override async Task OnInitializedAsync()
{
ImageSource = await ServiceProviderDataService.GetQRCodeByProductIdAsync(Guid.NewGuid());
await base.OnInitializedAsync();
}
}

View File

@ -3,9 +3,9 @@ using TIAM.Entities.Addresses;
using TIAM.Entities.Transfers;
using TIAM.Services;
namespace TIAMSharedUI.Shared.Components.Grids;
namespace TIAMSharedUI.Shared.Components.Cards;
public class AddressCard : TiamGrid<Address>
public class AddressCard : CardBase<Address>
{
public AddressCard() : base()
{
@ -15,7 +15,7 @@ public class AddressCard : TiamGrid<Address>
//RemoveMessageTag = SignalRTags.RemoveAddress; - nem törlünk címet - J.
}
protected override Task SetParametersAsyncCore(ParameterView parameters)
protected override Task OnParametersSetAsync()
{
if (!IsFirstInitializeParameters)
{
@ -26,6 +26,6 @@ public class AddressCard : TiamGrid<Address>
//etc...
}
return base.SetParametersAsyncCore(parameters);
return base.OnParametersSetAsync();
}
}

View File

@ -0,0 +1,180 @@
using AyCode.Blazor.Components.Services;
using AyCode.Core.Enums;
using AyCode.Core.Helpers;
using AyCode.Core.Interfaces;
using AyCode.Core;
using AyCode.Services.SignalRs;
using DevExpress.Blazor;
using DevExpress.ClipboardSource.SpreadsheetML;
using DevExpress.Data.Design;
using Microsoft.AspNetCore.Components;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TIAMSharedUI.Shared.Components.Grids;
using TIAMWebApp.Shared.Application.Utility;
using AyCode.Core.Extensions;
using AyCode.Utils.Extensions;
namespace TIAMSharedUI.Shared.Components.Cards
{
public class CardBase<TDataItem> : ComponentBase where TDataItem : class, IId<Guid>
{
public CardBase() { }
protected bool IsFirstInitializeParameters;
private SignalRDataSource<TDataItem> _dataSource = null!;
private IList<TDataItem> _dataSourceParam = [];
private string _cardLogName;
[Parameter] public LoggerClient Logger { get; set; }
[Parameter] public string CardName { get; set; }
[Parameter] public Guid[]? ContextIds { get; set; }
private string? _filterText = null;
[Parameter]
public string? FilterText
{
get => _filterText;
set
{
_filterText = value;
if (_dataSource != null! && _dataSource.FilterText != value)
{
_dataSource.FilterText = value;
LoadDataSourceAsync().Forget();
}
}
}
[Parameter] public AcSignalRClientBase SignalRClient { get; set; }
[Parameter] public int GetAllMessageTag { get; set; }
[Parameter] public int GetItemMessageTag { get; set; }
[Parameter] public int AddMessageTag { get; set; }
[Parameter] public int UpdateMessageTag { get; set; }
[Parameter] public int RemoveMessageTag { get; set; }
[Parameter] public EventCallback<IList<TDataItem>> OnDataSourceChanged { get; set; }
/// <summary>
/// After the server has responded!
/// </summary>
[Parameter]
public EventCallback<TDataItem> OnCardItemChanged { get; set; }
[Parameter]
[DefaultValue(null)]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Usage", "BL0007:Component parameters should be auto properties", Justification = "<Pending>")]
public IList<TDataItem> DataSource
{
get
{
if (_dataSource == null)
{
Logger.Error($"{_cardLogName} Use the DataSource parameter instead of Data!");
throw new NullReferenceException($"{_cardLogName} Use the DataSource parameter instead of Data!");
}
return _dataSource!;
}
set => _dataSourceParam = value;
}
protected override async Task OnInitializedAsync()
{
if (Logger == null)
throw new NullReferenceException($"[{GetType().Name}] Logger == null");
if (SignalRClient == null)
{
Logger.Error($"[{GetType().Name}] SignalRClient == null");
throw new NullReferenceException($"[{GetType().Name}] SignalRClient == null");
}
var crudTags = new SignalRCrudTags(GetAllMessageTag, GetItemMessageTag, AddMessageTag, UpdateMessageTag, RemoveMessageTag);
_dataSource = new SignalRDataSource<TDataItem>(SignalRClient, crudTags, ContextIds);
_dataSource.FilterText = FilterText;
//Data = _dataSource;
_dataSource.OnDataSourceLoaded += OnDataSourceLoaded;
await base.OnInitializedAsync();
}
private Task OnDataSourceLoaded()
{
Logger.Debug($"{_cardLogName} OnDataSourceLoaded; Count: {_dataSource.Count}");
//_dataSource.LoadItem(_dataSource.First().Id).Forget();
return OnDataSourceChanged.InvokeAsync(_dataSource);
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
await base.OnAfterRenderAsync(firstRender);
if (firstRender)
{
if (_dataSourceParam.Count > 0) await _dataSource.LoadDataSource(_dataSourceParam);
else _dataSource.LoadDataSourceAsync(true).Forget();
}
}
protected override Task OnParametersSetAsync()
{
if (!IsFirstInitializeParameters)
{
//if (typeof(TDataItem) is IId<Guid> || typeof(TDataItem) is IId<int>)
IsFirstInitializeParameters = true;
}
return Task.FromResult(base.OnParametersSetAsync);
}
protected override void OnParametersSet()
{
base.OnParametersSet();
if (CardName.IsNullOrWhiteSpace()) CardName = $"{typeof(TDataItem).Name}Card";
_cardLogName = $"[{CardName}]";
}
public Task AddOrUpdateDataItem(TDataItem dataItem) => _dataSource.AddOrUpdate(dataItem, true);
public Task RemoveDataItem(TDataItem dataItem) => _dataSource.Remove(dataItem, true);
//public Task RemoveDataItem(TDataItem dataItem, int messageTag) => PostDataToServerAsync(dataItem, messageTag, TrackingState.Remove);
public Task RemoveDataItem(Guid id) => RemoveDataItem(id, RemoveMessageTag);
public Task RemoveDataItem(Guid id, int messageTag)
{
var dataItem = _dataSource.FirstOrDefault(x => x.Id == id);
if (dataItem == null) return Task.CompletedTask;
return _dataSource.Remove(dataItem, true);
}
public Task LoadDataSourceAsync()
{
return _dataSource.LoadDataSourceAsync(false);
}
}
}

View File

@ -2,20 +2,19 @@
using TIAM.Entities.Addresses;
using TIAM.Entities.Transfers;
using TIAM.Services;
using TIAMSharedUI.Shared.Components.Cards;
namespace TIAMSharedUI.Shared.Components.Grids;
namespace TIAMSharedUI.Shared.Components.Cards;
public class TransferCard : TiamGrid<Address>
public class TransferCard : CardBase<Transfer>
{
public TransferCard() : base()
{
GetAllMessageTag = SignalRTags.GetTransfers;
//AddMessageTag = SignalRTags.AddAddress;
UpdateMessageTag = SignalRTags.UpdateAddress;
//RemoveMessageTag = SignalRTags.RemoveAddress; - nem törlünk címet - J.
GetAllMessageTag = SignalRTags.GetTransfersByCompanyId;
}
protected override Task SetParametersAsyncCore(ParameterView parameters)
protected override Task OnParametersSetAsync()
{
if (!IsFirstInitializeParameters)
{
@ -26,6 +25,6 @@ public class TransferCard : TiamGrid<Address>
//etc...
}
return base.SetParametersAsyncCore(parameters);
return base.OnParametersSetAsync();
}
}