Browse Source

Allow saving multiple level routes with `/`

pull/17642/head
Enis Necipoglu 2 years ago
parent
commit
c8c8ce45aa
No known key found for this signature in database GPG Key ID: 1EC55E13241E1680
  1. 4
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Pages/PageAdminAppService.cs
  2. 37
      modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Pages/PageChangedHandler.cs
  3. 2
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/SlugNormalizer.cs
  4. 14
      modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Blogs/SlugExtensions_Tests.cs

4
modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Pages/PageAdminAppService.cs

@ -66,6 +66,8 @@ public class PageAdminAppService : CmsKitAdminAppServiceBase, IPageAdminAppServi
input.MapExtraPropertiesTo(page);
await PageRepository.InsertAsync(page);
await PageCache.RemoveAsync(new PageCacheKey(page.Slug));
return ObjectMapper.Map<Page, PageDto>(page);
}
@ -77,6 +79,8 @@ public class PageAdminAppService : CmsKitAdminAppServiceBase, IPageAdminAppServi
{
await InvalidateDefaultHomePageCacheAsync(considerUow: true);
}
await PageCache.RemoveAsync(new PageCacheKey(page.Slug));
await PageManager.SetSlugAsync(page, input.Slug);

37
modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Pages/PageChangedHandler.cs

@ -1,37 +0,0 @@
using System;
using System.Threading.Tasks;
using Volo.Abp.Caching;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Entities.Events;
using Volo.Abp.EventBus;
namespace Volo.CmsKit.Pages;
public class PageChangedHandler :
ILocalEventHandler<EntityCreatedEventData<Page>>,
ILocalEventHandler<EntityUpdatedEventData<Page>>,
ITransientDependency
{
protected IDistributedCache<PageCacheItem, PageCacheKey> Cache { get; }
public PageChangedHandler(IDistributedCache<PageCacheItem, PageCacheKey> cache)
{
Cache = cache;
}
public Task RemoveFromCacheAsync(string slug)
{
return Cache.RemoveAsync(new PageCacheKey(slug));
}
public Task HandleEventAsync(EntityCreatedEventData<Page> eventData)
{
return RemoveFromCacheAsync(eventData.Entity.Slug);
}
public Task HandleEventAsync(EntityUpdatedEventData<Page> eventData)
{
return RemoveFromCacheAsync(eventData.Entity.Slug);
}
}

2
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/SlugNormalizer.cs

@ -15,6 +15,6 @@ public static class SlugNormalizer
public static string Normalize(string value)
{
return SlugHelper.GenerateSlug(value?.Unidecode());
return SlugHelper.GenerateSlug(value?.Unidecode()).Trim('/');
}
}

14
modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Blogs/SlugExtensions_Tests.cs

@ -143,4 +143,18 @@ public class SlugExtensions_Tests
// Assert
actual.ShouldBe(expected);
}
[Fact]
public void NormalizeSlug_ShouldWorkProperly_WithMultipleLevelStartingSlash()
{
// Arrange
var name = "/path/to/my/page";
var expected = "path/to/my/page";
// Act
var actual = SlugNormalizer.Normalize(name);
// Assert
actual.ShouldBe(expected);
}
}

Loading…
Cancel
Save