From 7dfd118bbba9bfe1490ee61bd29479df8f6e8810 Mon Sep 17 00:00:00 2001 From: Saleh Yusefnejad Date: Sat, 1 Feb 2025 12:56:31 +0330 Subject: [PATCH 1/8] add missing skeleton loading to product page of Boilerplate #9773 --- .../Components/Pages/ProductPage.razor | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/ProductPage.razor b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/ProductPage.razor index 6ff5c087ca..86096f26a7 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/ProductPage.razor +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/ProductPage.razor @@ -17,7 +17,35 @@ @if (isLoadingProduct) { - + + + + + + + + + + + + + +
+ + @Localizer[nameof(AppStrings.AboutTitle)] + + + + + + + + + + + +
+
} else { From a296309485c196c174c7eeeab0672051354675f5 Mon Sep 17 00:00:00 2001 From: Saleh Yusefnejad Date: Sat, 1 Feb 2025 12:57:31 +0330 Subject: [PATCH 2/8] correct purge cache url --- .../Controllers/Products/ProductController.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Controllers/Products/ProductController.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Controllers/Products/ProductController.cs index d3101b32dd..0a30e8478d 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Controllers/Products/ProductController.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Controllers/Products/ProductController.cs @@ -78,7 +78,7 @@ public async Task Update(ProductDto dto, CancellationToken cancellat await DbContext.SaveChangesAsync(cancellationToken); - await responseCacheService.PurgeCache("/", $"product/{dto.Id}", $"api/ProductView/{dto.Id}" /*You can also use Url.Action to build urls.*/); + await responseCacheService.PurgeCache("/", $"product/{dto.Id}", $"api/ProductView/Get/{dto.Id}" /*You can also use Url.Action to build urls.*/); //#if (signalR == true) await PublishDashboardDataChanged(cancellationToken); @@ -94,7 +94,7 @@ public async Task Delete(Guid id, string concurrencyStamp, CancellationToken can await DbContext.SaveChangesAsync(cancellationToken); - await responseCacheService.PurgeCache("/", $"product/{id}", $"api/ProductView/{id}" /*You can also use Url.Action to build urls.*/); + await responseCacheService.PurgeCache("/", $"product/{id}", $"api/ProductView/Get/{id}" /*You can also use Url.Action to build urls.*/); //#if (signalR == true) await PublishDashboardDataChanged(cancellationToken); From e78228f64e6191f1bd01cac7aa84211a9c7f9314 Mon Sep 17 00:00:00 2001 From: Saleh Yusefnejad Date: Sat, 1 Feb 2025 12:59:53 +0330 Subject: [PATCH 3/8] improve razor --- .../Components/Pages/ProductPage.razor | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/ProductPage.razor b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/ProductPage.razor index 86096f26a7..a983f73995 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/ProductPage.razor +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/ProductPage.razor @@ -43,9 +43,6 @@ - -
-
} else { @@ -97,12 +94,12 @@ making it a reliable and convenient mode of transportation for daily activities. - -
-
} } +
+
+ @if (isLoadingSimilarProducts) { @Localizer[nameof(AppStrings.SimilarProducts)] From 9f4db2c30fe402cdc76d995cd3ed3f65d7c5b990 Mon Sep 17 00:00:00 2001 From: Saleh Yusefnejad Date: Sat, 1 Feb 2025 14:12:35 +0330 Subject: [PATCH 4/8] improve infinite scrolling loading --- .../Components/Pages/HomePage.razor | 11 +++++++++-- .../Components/Pages/HomePage.razor.cs | 1 + .../Components/Pages/HomePage.razor.scss | 1 + 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/HomePage.razor b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/HomePage.razor index 894730c986..272f493e44 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/HomePage.razor +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/HomePage.razor @@ -73,8 +73,15 @@ - - + + + + + + + + + diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/HomePage.razor.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/HomePage.razor.cs index c439b8ab1f..cda1713ec2 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/HomePage.razor.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/HomePage.razor.cs @@ -93,6 +93,7 @@ private async Task LoadGitHub() //#if(module == "Sales") private async ValueTask> LoadProducts(BitInfiniteScrollingItemsProviderRequest request) { + await Task.Delay(2000); return await productViewController .WithQueryString(new ODataQuery { Top = 10, Skip = request.Skip }) .Get(CurrentCancellationToken); diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/HomePage.razor.scss b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/HomePage.razor.scss index 5c49e09d50..7aba45ddf9 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/HomePage.razor.scss +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/HomePage.razor.scss @@ -36,6 +36,7 @@ section { .products-inf-scr { gap: 1rem; + width: 100%; display: flex; flex-wrap: wrap; position: relative; From f7b7ace5882ca7dd61cfdd3b12e03c3371ca09fe Mon Sep 17 00:00:00 2001 From: ysmoradi Date: Sat, 1 Feb 2025 12:32:12 +0100 Subject: [PATCH 5/8] correct cache/cookie ages --- .../Client/Boilerplate.Client.Core/Services/CultureService.cs | 2 +- .../Controllers/Products/ProductViewController.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Services/CultureService.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Services/CultureService.cs index 9221921744..f10c029bc0 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Services/CultureService.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Services/CultureService.cs @@ -22,7 +22,7 @@ await cookie.Set(new() { Name = ".AspNetCore.Culture", Value = Uri.EscapeDataString($"c={cultureName}|uic={cultureName}"), - MaxAge = 30 * 24 * 3600, + MaxAge = 3600 * 24 * 30, Path = "/", SameSite = SameSite.Strict, Secure = AppEnvironment.IsDev() is false diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Controllers/Products/ProductViewController.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Controllers/Products/ProductViewController.cs index 1af0b40187..b3ce18b208 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Controllers/Products/ProductViewController.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Controllers/Products/ProductViewController.cs @@ -7,13 +7,13 @@ namespace Boilerplate.Server.Api.Controllers.Products; [AllowAnonymous] public partial class ProductViewController : AppControllerBase, IProductViewController { - [HttpGet, EnableQuery] + [HttpGet, EnableQuery, AppResponseCache(MaxAge = 60 * 5, UserAgnostic = true)] public IQueryable Get() { return DbContext.Products.OrderByDescending(p => p.Name).Project(); } - [HttpGet] + [HttpGet, AppResponseCache(MaxAge = 60 * 5, UserAgnostic = true)] public async Task> GetHomeCarouselProducts(CancellationToken cancellationToken) { return await Get().Take(10).ToListAsync(cancellationToken); From 6a2aa7943e3f0cce0d361dc9f3c96eb28a134c88 Mon Sep 17 00:00:00 2001 From: ysmoradi Date: Sat, 1 Feb 2025 12:33:17 +0100 Subject: [PATCH 6/8] remove extra UserAgnostic --- .../Controllers/Products/ProductViewController.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Controllers/Products/ProductViewController.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Controllers/Products/ProductViewController.cs index b3ce18b208..83ddd8659a 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Controllers/Products/ProductViewController.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Controllers/Products/ProductViewController.cs @@ -7,13 +7,13 @@ namespace Boilerplate.Server.Api.Controllers.Products; [AllowAnonymous] public partial class ProductViewController : AppControllerBase, IProductViewController { - [HttpGet, EnableQuery, AppResponseCache(MaxAge = 60 * 5, UserAgnostic = true)] + [HttpGet, EnableQuery, AppResponseCache(MaxAge = 60 * 5)] public IQueryable Get() { return DbContext.Products.OrderByDescending(p => p.Name).Project(); } - [HttpGet, AppResponseCache(MaxAge = 60 * 5, UserAgnostic = true)] + [HttpGet, AppResponseCache(MaxAge = 60 * 5)] public async Task> GetHomeCarouselProducts(CancellationToken cancellationToken) { return await Get().Take(10).ToListAsync(cancellationToken); From 97122243e33c927950b6cbc4cb8d224d2666664c Mon Sep 17 00:00:00 2001 From: ysmoradi Date: Sat, 1 Feb 2025 12:52:08 +0100 Subject: [PATCH 7/8] fix --- .../Components/Pages/HomePage.razor.cs | 1 - .../Controllers/Products/ProductViewController.cs | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/HomePage.razor.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/HomePage.razor.cs index cda1713ec2..c439b8ab1f 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/HomePage.razor.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/HomePage.razor.cs @@ -93,7 +93,6 @@ private async Task LoadGitHub() //#if(module == "Sales") private async ValueTask> LoadProducts(BitInfiniteScrollingItemsProviderRequest request) { - await Task.Delay(2000); return await productViewController .WithQueryString(new ODataQuery { Top = 10, Skip = request.Skip }) .Get(CurrentCancellationToken); diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Controllers/Products/ProductViewController.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Controllers/Products/ProductViewController.cs index 83ddd8659a..8e3e1be26a 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Controllers/Products/ProductViewController.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Controllers/Products/ProductViewController.cs @@ -7,13 +7,13 @@ namespace Boilerplate.Server.Api.Controllers.Products; [AllowAnonymous] public partial class ProductViewController : AppControllerBase, IProductViewController { - [HttpGet, EnableQuery, AppResponseCache(MaxAge = 60 * 5)] + [HttpGet, EnableQuery, AppResponseCache(MaxAge = 60 * 5, SharedMaxAge = 0, UserAgnostic = true)] public IQueryable Get() { return DbContext.Products.OrderByDescending(p => p.Name).Project(); } - [HttpGet, AppResponseCache(MaxAge = 60 * 5)] + [HttpGet, AppResponseCache(MaxAge = 60 * 5, SharedMaxAge = 0, UserAgnostic = true)] public async Task> GetHomeCarouselProducts(CancellationToken cancellationToken) { return await Get().Take(10).ToListAsync(cancellationToken); From 18d997bc8f89fd33ce506232db83d9b8a6e6f8fa Mon Sep 17 00:00:00 2001 From: Saleh Yusefnejad Date: Sat, 1 Feb 2025 16:39:24 +0330 Subject: [PATCH 8/8] remove redundant delay --- .../Boilerplate.Client.Core/Components/Pages/HomePage.razor.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/HomePage.razor.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/HomePage.razor.cs index cda1713ec2..c439b8ab1f 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/HomePage.razor.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Pages/HomePage.razor.cs @@ -93,7 +93,6 @@ private async Task LoadGitHub() //#if(module == "Sales") private async ValueTask> LoadProducts(BitInfiniteScrollingItemsProviderRequest request) { - await Task.Delay(2000); return await productViewController .WithQueryString(new ODataQuery { Top = 10, Skip = request.Skip }) .Get(CurrentCancellationToken);