improvements, fixes

This commit is contained in:
Loretta 2025-11-15 15:42:43 +01:00
parent 5e574cd19e
commit d2d4ea56c5
3 changed files with 42 additions and 18 deletions

View File

@ -1,5 +1,12 @@
namespace FruitBankHybrid.Shared.Components; using DevExpress.Blazor;
namespace FruitBankHybrid.Shared.Components;
public class GridProductDto : MgGridBase public class GridProductDto : MgGridBase
{ {
protected override void CustomizeElementHideDetailButton(GridCustomizeElementEventArgs e)
{
//Felülírjuk, h ne adja hozzá a "hideDetailButton" css class-t!
return;
}
} }

View File

@ -1,4 +1,5 @@
@using AyCode.Core.Helpers @using System.Threading
@using AyCode.Core.Helpers
@using AyCode.Utils.Extensions @using AyCode.Utils.Extensions
@using DevExpress.Internal.About @using DevExpress.Internal.About
@using FruitBank.Common.Dtos @using FruitBank.Common.Dtos
@ -27,19 +28,19 @@
<DxGridCommandColumn Visible="!IsMasterGrid" Width="120"></DxGridCommandColumn> <DxGridCommandColumn Visible="!IsMasterGrid" Width="120"></DxGridCommandColumn>
</Columns> </Columns>
<DetailRowTemplate> <DetailRowTemplate>
@if (IsMasterGrid && LoggedInModel.IsDeveloper) @if (IsMasterGrid)
{ {
var productId = ((ProductDto)context.DataItem).Id; var productId = ((ProductDto)context.DataItem).Id;
<DxTabs ActiveTabIndexChanged="(i) => OnActiveTabChanged(i, productId)"> <DxTabs ActiveTabIndexChanged="(i) => OnActiveTabChanged(i, productId)">
<DxTabPage Text="Rendelések melyben megtalálható"> <DxTabPage Text="Rendelések melyben megtalálható" Visible="@LoggedInModel.IsDeveloper">
@{ @{
//GetOrderDtosFromDbAsync(productId).Forget(); //GetOrderDtosFromDbAsync(productId).Forget();
//var orderDtos = _orderDtos?.Where(o => o.OrderItemDtos.Any(oi => oi.ProductId == productId)).ToList() ?? []; //var orderDtos = _orderDtos?.Where(o => o.OrderItemDtos.Any(oi => oi.ProductId == productId)).ToList() ?? [];
<GridDetailOrderDto OrderDtos="_currentOrderDtos" IsMasterGrid="false"></GridDetailOrderDto> <GridDetailOrderDto OrderDtos="_currentOrderDtos" IsMasterGrid="false"></GridDetailOrderDto>
} }
</DxTabPage> </DxTabPage>
<DxTabPage Text="Rendelés tételek"> <DxTabPage Text="Rendelés tételek" Visible="@LoggedInModel.IsDeveloper">
@{ @{
//GetOrderItemDtosFromDbAsync(productId).Forget(); //GetOrderItemDtosFromDbAsync(productId).Forget();
//var orderItemDtos = _orderItemDtos?.Where(oi => oi.ProductId == productId).ToList() ?? []; //var orderItemDtos = _orderItemDtos?.Where(oi => oi.ProductId == productId).ToList() ?? [];
@ -77,6 +78,9 @@
private List<OrderDto>? _currentOrderDtos; private List<OrderDto>? _currentOrderDtos;
private List<OrderItemDto>? _currentOrderItemDtos; private List<OrderItemDto>? _currentOrderItemDtos;
private readonly SemaphoreSlim _lockOrderDtosByProductId = new(1);
private readonly SemaphoreSlim _lockOrderItemDtosByProductId = new(1);
private readonly Dictionary<int, List<OrderDto>> _orderDtosByProductId = new(); private readonly Dictionary<int, List<OrderDto>> _orderDtosByProductId = new();
private readonly Dictionary<int, List<OrderItemDto>> _orderItemDtosByProductId = new(); private readonly Dictionary<int, List<OrderItemDto>> _orderItemDtosByProductId = new();
@ -125,29 +129,37 @@
private async Task<List<OrderDto>> GetOrderDtosFromDbAsync(int productId) private async Task<List<OrderDto>> GetOrderDtosFromDbAsync(int productId)
{ {
if (_orderDtosByProductId.TryGetValue(productId, out var orderDtos)) return orderDtos; using(await _lockOrderDtosByProductId.UseWaitAsync())
{
if (_orderDtosByProductId.TryGetValue(productId, out var orderDtos)) return orderDtos;
orderDtos = await FruitBankSignalRClient.GetAllOrderDtoByProductId(productId) ?? []; orderDtos = await FruitBankSignalRClient.GetAllOrderDtoByProductId(productId) ?? [];
_orderDtosByProductId[productId] = orderDtos; _orderDtosByProductId[productId] = orderDtos;
return _currentOrderDtos = orderDtos; return _currentOrderDtos = orderDtos;
}
} }
private async Task<List<OrderItemDto>> GetOrderItemDtosFromDbAsync(int productId) private async Task<List<OrderItemDto>> GetOrderItemDtosFromDbAsync(int productId)
{ {
if (_orderItemDtosByProductId.TryGetValue(productId, out var orderItemDtos)) return orderItemDtos; using (await _lockOrderItemDtosByProductId.UseWaitAsync())
{
if (_orderItemDtosByProductId.TryGetValue(productId, out var orderItemDtos)) return orderItemDtos;
orderItemDtos = await FruitBankSignalRClient.GetAllOrderItemDtoByProductId(productId) ?? []; orderItemDtos = await FruitBankSignalRClient.GetAllOrderItemDtoByProductId(productId) ?? [];
_orderItemDtosByProductId[productId] = orderItemDtos; _orderItemDtosByProductId[productId] = orderItemDtos;
return _currentOrderItemDtos = orderItemDtos; return _currentOrderItemDtos = orderItemDtos;
}
} }
protected async Task OnFocusedRowChanged(GridFocusedRowChangedEventArgs e) protected async Task OnFocusedRowChanged(GridFocusedRowChangedEventArgs e)
{ {
if (!LoggedInModel.IsDeveloper) return;
var productDto = (ProductDto)e.DataItem; var productDto = (ProductDto)e.DataItem;
//if (e.Grid.IsDetailRowExpanded(e.VisibleIndex)) if (e.Grid.IsDetailRowExpanded(e.VisibleIndex))
{ {
_currentOrderDtos = null; _currentOrderDtos = null;
_currentOrderDtos = productDto != null ? await GetOrderDtosFromDbAsync(productDto.Id) : []; _currentOrderDtos = productDto != null ? await GetOrderDtosFromDbAsync(productDto.Id) : [];

View File

@ -41,6 +41,14 @@ public class MgGridBase : DxGrid
// Layouts = JsonSerializer.Deserialize<ObservableCollection<UserLayout>>(json); // Layouts = JsonSerializer.Deserialize<ObservableCollection<UserLayout>>(json);
} }
protected virtual void CustomizeElementHideDetailButton(GridCustomizeElementEventArgs e)
{
if (e.ElementType == GridElementType.DataRow && !LoggedInModel.IsDeveloper)
{
e.CssClass = "hideDetailButton";
}
}
protected void OnCustomizeElement(GridCustomizeElementEventArgs e) protected void OnCustomizeElement(GridCustomizeElementEventArgs e)
{ {
//if (!IsMasterGrid) e.CssClass = "hideDetailButton"; //if (!IsMasterGrid) e.CssClass = "hideDetailButton";
@ -50,10 +58,7 @@ public class MgGridBase : DxGrid
e.CssClass = " alt-item"; e.CssClass = " alt-item";
} }
if(e.ElementType == GridElementType.DataRow && !LoggedInModel.IsDeveloper) CustomizeElementHideDetailButton(e);
{
e.CssClass = "hideDetailButton";
}
if (e.ElementType == GridElementType.HeaderCell) if (e.ElementType == GridElementType.HeaderCell)
{ {