From c42bd46d812924dbdab87590a791738accfe64ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enis=20Necipo=C4=9Flu?= Date: Thu, 10 Jun 2021 12:27:17 +0300 Subject: [PATCH] CmsKit - Implement Page Update Handling for MenuItems --- .../CmsKit/Admin/Menus/MenuAdminController.cs | 1 - .../Volo/CmsKit/Menus/PageChangedHandler.cs | 31 +++++++++++++++---- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuAdminController.cs index 9e860e3f2c..7392369464 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuAdminController.cs @@ -119,7 +119,6 @@ namespace Volo.CmsKit.Admin.Menus { return MenuAdminAppService.UpdateMenuItemAsync(menuId, menuItemId, input); } - [HttpGet] [Route("lookup/pages")] diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/PageChangedHandler.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/PageChangedHandler.cs index 1ea62f0656..4c162ff01a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/PageChangedHandler.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/PageChangedHandler.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using System.Threading.Tasks; using Volo.Abp.DependencyInjection; using Volo.Abp.Domain.Entities.Events; @@ -7,20 +8,38 @@ using Volo.CmsKit.Pages; namespace Volo.CmsKit.Menus { - public class PageChangedHandler: ILocalEventHandler>, + public class PageChangedHandler: ILocalEventHandler>, ITransientDependency { protected IMenuRepository MenuRepository { get; } - - public PageChangedHandler(IMenuRepository menuRepository) + protected MenuManager MenuManager { get; } + + public PageChangedHandler( + IMenuRepository menuRepository, + MenuManager menuManager) { MenuRepository = menuRepository; + MenuManager = menuManager; } - public Task HandleEventAsync(EntityCreatedEventData eventData) + public async Task HandleEventAsync(EntityUpdatedEventData eventData) { - // TODO: Find a way to get affected MenuItems. - throw new NotImplementedException(); + // TODO: Write a repository query. + var allMenus = await MenuRepository.GetListAsync(includeDetails: true); + + var affectedMenus = allMenus + .Where(menu => menu.Items.Any(x => x.PageId == eventData.Entity.Id)) + .ToArray(); + + var affectedMenuItems = + affectedMenus.SelectMany(sm => sm.Items).Where(mItem => mItem.PageId == eventData.Entity.Id); + + foreach (var menuItem in affectedMenuItems) + { + MenuManager.SetPageUrl(menuItem, eventData.Entity); + } + + await MenuRepository.UpdateManyAsync(affectedMenus); } } } \ No newline at end of file