diff --git a/FruitBankHybrid.Shared/Components/GridProductDto.cs b/FruitBankHybrid.Shared/Components/GridProductDto.cs index 619e85c..2da7718 100644 --- a/FruitBankHybrid.Shared/Components/GridProductDto.cs +++ b/FruitBankHybrid.Shared/Components/GridProductDto.cs @@ -1,5 +1,12 @@ -namespace FruitBankHybrid.Shared.Components; +using DevExpress.Blazor; + +namespace FruitBankHybrid.Shared.Components; public class GridProductDto : MgGridBase { + protected override void CustomizeElementHideDetailButton(GridCustomizeElementEventArgs e) + { + //Felülírjuk, h ne adja hozzá a "hideDetailButton" css class-t! + return; + } } \ No newline at end of file diff --git a/FruitBankHybrid.Shared/Components/GridProductDtoTemplate.razor b/FruitBankHybrid.Shared/Components/GridProductDtoTemplate.razor index 639a476..bd29465 100644 --- a/FruitBankHybrid.Shared/Components/GridProductDtoTemplate.razor +++ b/FruitBankHybrid.Shared/Components/GridProductDtoTemplate.razor @@ -1,4 +1,5 @@ -@using AyCode.Core.Helpers +@using System.Threading +@using AyCode.Core.Helpers @using AyCode.Utils.Extensions @using DevExpress.Internal.About @using FruitBank.Common.Dtos @@ -27,19 +28,19 @@ - @if (IsMasterGrid && LoggedInModel.IsDeveloper) + @if (IsMasterGrid) { var productId = ((ProductDto)context.DataItem).Id; - + @{ //GetOrderDtosFromDbAsync(productId).Forget(); //var orderDtos = _orderDtos?.Where(o => o.OrderItemDtos.Any(oi => oi.ProductId == productId)).ToList() ?? []; } - + @{ //GetOrderItemDtosFromDbAsync(productId).Forget(); //var orderItemDtos = _orderItemDtos?.Where(oi => oi.ProductId == productId).ToList() ?? []; @@ -77,6 +78,9 @@ private List? _currentOrderDtos; private List? _currentOrderItemDtos; + private readonly SemaphoreSlim _lockOrderDtosByProductId = new(1); + private readonly SemaphoreSlim _lockOrderItemDtosByProductId = new(1); + private readonly Dictionary> _orderDtosByProductId = new(); private readonly Dictionary> _orderItemDtosByProductId = new(); @@ -125,29 +129,37 @@ private async Task> 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) ?? []; - _orderDtosByProductId[productId] = orderDtos; + orderDtos = await FruitBankSignalRClient.GetAllOrderDtoByProductId(productId) ?? []; + _orderDtosByProductId[productId] = orderDtos; - return _currentOrderDtos = orderDtos; + return _currentOrderDtos = orderDtos; + } } private async Task> 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) ?? []; - _orderItemDtosByProductId[productId] = orderItemDtos; + orderItemDtos = await FruitBankSignalRClient.GetAllOrderItemDtoByProductId(productId) ?? []; + _orderItemDtosByProductId[productId] = orderItemDtos; - return _currentOrderItemDtos = orderItemDtos; + return _currentOrderItemDtos = orderItemDtos; + } } protected async Task OnFocusedRowChanged(GridFocusedRowChangedEventArgs e) { + if (!LoggedInModel.IsDeveloper) return; + var productDto = (ProductDto)e.DataItem; - //if (e.Grid.IsDetailRowExpanded(e.VisibleIndex)) + if (e.Grid.IsDetailRowExpanded(e.VisibleIndex)) { _currentOrderDtos = null; _currentOrderDtos = productDto != null ? await GetOrderDtosFromDbAsync(productDto.Id) : []; diff --git a/FruitBankHybrid.Shared/Components/MgGridBase.cs b/FruitBankHybrid.Shared/Components/MgGridBase.cs index e14fa07..87b6622 100644 --- a/FruitBankHybrid.Shared/Components/MgGridBase.cs +++ b/FruitBankHybrid.Shared/Components/MgGridBase.cs @@ -41,6 +41,14 @@ public class MgGridBase : DxGrid // Layouts = JsonSerializer.Deserialize>(json); } + protected virtual void CustomizeElementHideDetailButton(GridCustomizeElementEventArgs e) + { + if (e.ElementType == GridElementType.DataRow && !LoggedInModel.IsDeveloper) + { + e.CssClass = "hideDetailButton"; + } + } + protected void OnCustomizeElement(GridCustomizeElementEventArgs e) { //if (!IsMasterGrid) e.CssClass = "hideDetailButton"; @@ -50,10 +58,7 @@ public class MgGridBase : DxGrid e.CssClass = " alt-item"; } - if(e.ElementType == GridElementType.DataRow && !LoggedInModel.IsDeveloper) - { - e.CssClass = "hideDetailButton"; - } + CustomizeElementHideDetailButton(e); if (e.ElementType == GridElementType.HeaderCell) {