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)
{