From 5bd8aa0db61bdae537a7be55603abe083e87b405 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 15 Jul 2020 21:59:51 +0300 Subject: [PATCH] Refactored cmskit reactions --- .../Pages/Index.cshtml | 5 +- .../Icons/CmsIconTagHelper.cs | 2 + .../Icons/CmsIconTagHelperService.cs | 9 +- .../DefaultReactionDefinitionStore.cs | 12 ++- .../Reactions/IReactionDefinitionStore.cs | 6 +- .../Reactions/IUserReactionRepository.cs | 5 + .../Volo/CmsKit/Reactions/ReactionManager.cs | 77 ++++++++++++---- .../Volo/CmsKit/Reactions/ReactionSummary.cs | 9 ++ .../ReactionSummaryQueryResultItem.cs | 9 ++ .../Reactions/EfCoreUserReactionRepository.cs | 32 +++++++ .../CmsKit/Reactions/GetForSelectionInput.cs | 9 ++ .../CmsKit/Reactions/GetMyReactionsDto.cs | 9 ++ .../Reactions/GetReactionSummariesDto.cs | 9 ++ .../Reactions/IReactionPublicAppService.cs | 14 ++- .../CmsKit/Reactions/ReactionSummaryDto.cs | 9 ++ .../Reactions/ReactionWithSelectionDto.cs | 11 +++ .../Reactions/ReactionPublicAppService.cs | 91 +++++++++++++++++-- .../ReactionSelection/Default.cshtml | 14 ++- .../ReactionSelectionViewComponent.cs | 24 +++-- .../ReactionSelectionViewModel.cs | 2 + .../ReactionSelection/ReactionViewModel.cs | 5 + .../Components/ReactionSelection/default.js | 15 ++- 22 files changed, 319 insertions(+), 59 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/ReactionSummary.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/ReactionSummaryQueryResultItem.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Reactions/EfCoreUserReactionRepository.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Reactions/GetForSelectionInput.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Reactions/GetMyReactionsDto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Reactions/GetReactionSummariesDto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Reactions/ReactionSummaryDto.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Reactions/ReactionWithSelectionDto.cs diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Pages/Index.cshtml b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Pages/Index.cshtml index 79b04b905e..62ef15d4b7 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Pages/Index.cshtml +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Pages/Index.cshtml @@ -2,7 +2,6 @@ @using Localization.Resources.AbpUi @using Microsoft.Extensions.Localization @using Volo.CmsKit.Pages -@using Volo.CmsKit.Web.Pages.CmsKit.Shared.Components @using Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.ReactionSelection @model IndexModel @inject IStringLocalizer Localizer @@ -22,7 +21,7 @@ - @await Component.InvokeAsync(typeof(ReactionSelectionViewComponent), new { entityType = "quote" }) + @await Component.InvokeAsync(typeof(ReactionSelectionViewComponent), new { entityType = "quote", entityId = "1" }) @@ -38,6 +37,6 @@ - @await Component.InvokeAsync(typeof(ReactionSelectionViewComponent), new { entityType = "quote" }) + @await Component.InvokeAsync(typeof(ReactionSelectionViewComponent), new { entityType = "quote", entityId = "2" }) diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Icons/CmsIconTagHelper.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Icons/CmsIconTagHelper.cs index d3704b7bd2..ce90cd83fb 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Icons/CmsIconTagHelper.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Icons/CmsIconTagHelper.cs @@ -7,6 +7,8 @@ namespace Volo.CmsKit.Web.Icons public class CmsIconTagHelper : AbpTagHelper { public string Name { get; set; } + + public bool Highlight { get; set; } public CmsIconTagHelper(CmsIconTagHelperService service) : base(service) diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Icons/CmsIconTagHelperService.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Icons/CmsIconTagHelperService.cs index b90025f96a..6cef46572a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Icons/CmsIconTagHelperService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Icons/CmsIconTagHelperService.cs @@ -1,4 +1,6 @@ -using System.Threading.Tasks; +using System.Text.Encodings.Web; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc.TagHelpers; using Microsoft.AspNetCore.Razor.TagHelpers; using Volo.Abp; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers; @@ -22,6 +24,11 @@ namespace Volo.CmsKit.Web.Icons throw new AbpException("Only file icons are allowed!"); } + if (TagHelper.Highlight) + { + output.AddClass("cms-icon-highlighted", HtmlEncoder.Default); + } + return Task.CompletedTask; } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/DefaultReactionDefinitionStore.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/DefaultReactionDefinitionStore.cs index ba41f5ab6e..cc0daa3b65 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/DefaultReactionDefinitionStore.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/DefaultReactionDefinitionStore.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.Extensions.Options; @@ -16,11 +15,14 @@ namespace Volo.CmsKit.Reactions Options = options.Value; } - public virtual Task> GetAvailableReactionsAsync( - string entityType, - Guid? userId) + public virtual Task> GetAvailableReactionsAsync(string entityType) { return Task.FromResult(Options.Reactions.Values.ToList()); } + + public Task GetReactionOrNullAsync(string reactionName, string entityType) + { + return Task.FromResult(Options.Reactions.GetOrDefault(reactionName)); + } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/IReactionDefinitionStore.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/IReactionDefinitionStore.cs index 879c632428..fa3cad8076 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/IReactionDefinitionStore.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/IReactionDefinitionStore.cs @@ -7,6 +7,8 @@ namespace Volo.CmsKit.Reactions { public interface IReactionDefinitionStore { - Task> GetAvailableReactionsAsync([CanBeNull] string entityType, [CanBeNull] Guid? userId); + Task> GetAvailableReactionsAsync([CanBeNull] string entityType); + + Task GetReactionOrNullAsync([NotNull] string reactionName, [CanBeNull] string entityType); } -} \ No newline at end of file +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/IUserReactionRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/IUserReactionRepository.cs index 93828d2bdd..d4dda55f30 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/IUserReactionRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/IUserReactionRepository.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Threading.Tasks; using JetBrains.Annotations; using Volo.Abp.Domain.Repositories; @@ -12,5 +13,9 @@ namespace Volo.CmsKit.Reactions [NotNull] string entityType, [NotNull] string entityId, [NotNull] string reactionName); + + Task> GetListForUserAsync(Guid userId, string entityType, string entityId); + + Task> GetSummariesAsync(string inputEntityType, string inputEntityId); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/ReactionManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/ReactionManager.cs index 343c7cd296..7d36d79c21 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/ReactionManager.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/ReactionManager.cs @@ -20,27 +20,79 @@ namespace Volo.CmsKit.Reactions } public virtual async Task> GetAvailableReactionsAsync( - [CanBeNull] string entityType = null, - [CanBeNull] Guid? userId = null) + [CanBeNull] string entityType = null) { - return await ReactionDefinitionStore.GetAvailableReactionsAsync(entityType, userId); + return await ReactionDefinitionStore.GetAvailableReactionsAsync(entityType); } - public virtual Task GetSummariesAsync( + public virtual async Task> GetSummariesAsync( [NotNull] string entityType, [NotNull] string entityId) { - //TODO: ... - throw new NotImplementedException(); + var summaries = await UserReactionRepository.GetSummariesAsync(entityType, entityId); + + var summaryDtos = new List(); + + foreach (var summary in summaries) + { + var summaryDto = new ReactionSummary + { + Count = summary.Count + }; + + //TODO: Get all definitions then filter here? + var reactionDefinition = await ReactionDefinitionStore + .GetReactionOrNullAsync( + summary.ReactionName, + entityType + ); + + if (reactionDefinition == null) + { + continue; + } + + summaryDto.Reaction = reactionDefinition; + + summaryDtos.Add(summaryDto); + } + + return summaryDtos; } - public virtual Task GetUserReactionsAsync( + public virtual async Task> GetUserReactionsAsync( Guid userId, [NotNull] string entityType, [NotNull] string entityId) { - //TODO: ... - throw new NotImplementedException(); + var userReactions = await UserReactionRepository + .GetListForUserAsync( + userId, + entityType, + entityId + ); + + var reactionDtos = new List(); + + foreach (var userReaction in userReactions) + { + //TODO: Get all definitions then filter here? + var reactionDefinition = await ReactionDefinitionStore + .GetReactionOrNullAsync( + userReaction.ReactionName, + userReaction.EntityType + ); + + if (reactionDefinition == null) + { + await UserReactionRepository.DeleteAsync(userReaction); + continue; + } + + reactionDtos.Add(reactionDefinition); + } + + return reactionDtos; } public virtual async Task CreateAsync( @@ -87,11 +139,4 @@ namespace Volo.CmsKit.Reactions return true; } } - - public class ReactionSummary - { - public ReactionDefinition Reaction { get; set; } - - public int Count { get; set; } - } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/ReactionSummary.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/ReactionSummary.cs new file mode 100644 index 0000000000..8e397a85f0 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/ReactionSummary.cs @@ -0,0 +1,9 @@ +namespace Volo.CmsKit.Reactions +{ + public class ReactionSummary + { + public ReactionDefinition Reaction { get; set; } + + public int Count { get; set; } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/ReactionSummaryQueryResultItem.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/ReactionSummaryQueryResultItem.cs new file mode 100644 index 0000000000..ddba49d73c --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/ReactionSummaryQueryResultItem.cs @@ -0,0 +1,9 @@ +namespace Volo.CmsKit.Reactions +{ + public class ReactionSummaryQueryResultItem + { + public string ReactionName { get; set; } + + public int Count { get; set; } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Reactions/EfCoreUserReactionRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Reactions/EfCoreUserReactionRepository.cs new file mode 100644 index 0000000000..93b80d759c --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Reactions/EfCoreUserReactionRepository.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.Domain.Repositories.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; +using Volo.CmsKit.EntityFrameworkCore; + +namespace Volo.CmsKit.Reactions +{ + public class EfCoreUserReactionRepository : EfCoreRepository, IUserReactionRepository + { + public EfCoreUserReactionRepository(IDbContextProvider dbContextProvider) + : base(dbContextProvider) + { + } + + public Task FindAsync(Guid userId, string entityType, string entityId, string reactionName) + { + throw new NotImplementedException(); + } + + public Task> GetListForUserAsync(Guid userId, string entityType, string entityId) + { + throw new NotImplementedException(); + } + + public Task> GetSummariesAsync(string inputEntityType, string inputEntityId) + { + throw new NotImplementedException(); + } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Reactions/GetForSelectionInput.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Reactions/GetForSelectionInput.cs new file mode 100644 index 0000000000..3a99ff6bcb --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Reactions/GetForSelectionInput.cs @@ -0,0 +1,9 @@ +namespace Volo.CmsKit.Reactions +{ + public class GetForSelectionInput + { + public string EntityType { get; set; } + + public string EntityId { get; set; } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Reactions/GetMyReactionsDto.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Reactions/GetMyReactionsDto.cs new file mode 100644 index 0000000000..f5f2362eb2 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Reactions/GetMyReactionsDto.cs @@ -0,0 +1,9 @@ +namespace Volo.CmsKit.Reactions +{ + public class GetMyReactionsDto + { + public string EntityType { get; set; } + + public string EntityId { get; set; } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Reactions/GetReactionSummariesDto.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Reactions/GetReactionSummariesDto.cs new file mode 100644 index 0000000000..354edbf0e9 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Reactions/GetReactionSummariesDto.cs @@ -0,0 +1,9 @@ +namespace Volo.CmsKit.Reactions +{ + public class GetReactionSummariesDto + { + public string EntityType { get; set; } + + public string EntityId { get; set; } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Reactions/IReactionPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Reactions/IReactionPublicAppService.cs index fe969890d5..2ef00a7ce7 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Reactions/IReactionPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Reactions/IReactionPublicAppService.cs @@ -1,4 +1,6 @@ -using System.Threading.Tasks; +using System.Collections.Generic; +using System.Threading.Tasks; +using JetBrains.Annotations; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; @@ -9,5 +11,15 @@ namespace Volo.CmsKit.Reactions Task> GetAvailableReactions( GetAvailableReactionsDto input ); + + Task> GetReactionSummariesAsync( + GetReactionSummariesDto input + ); + + Task> GetMyReactions( + GetMyReactionsDto input + ); + + Task> GetForSelectionAsync(GetForSelectionInput input); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Reactions/ReactionSummaryDto.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Reactions/ReactionSummaryDto.cs new file mode 100644 index 0000000000..72d3007aaf --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Reactions/ReactionSummaryDto.cs @@ -0,0 +1,9 @@ +namespace Volo.CmsKit.Reactions +{ + public class ReactionSummaryDto + { + public ReactionDto Reaction { get; set; } + + public int Count { get; set; } + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Reactions/ReactionWithSelectionDto.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Reactions/ReactionWithSelectionDto.cs new file mode 100644 index 0000000000..643b5b5099 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Reactions/ReactionWithSelectionDto.cs @@ -0,0 +1,11 @@ +namespace Volo.CmsKit.Reactions +{ + public class ReactionWithSelectionDto + { + public ReactionDto Reaction { get; set; } + + public int Count { get; set; } + + public bool IsSelectedByCurrentUser { get; set; } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Reactions/ReactionPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Reactions/ReactionPublicAppService.cs index 7e8a90b969..702ab30f56 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Reactions/ReactionPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Reactions/ReactionPublicAppService.cs @@ -1,31 +1,108 @@ -using System.Linq; +using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using Volo.Abp.Application.Dtos; +using Volo.Abp.Users; namespace Volo.CmsKit.Reactions { + //TODO: Authorization public class ReactionPublicAppService : CmsKitPublicAppService, IReactionPublicAppService { protected IReactionDefinitionStore ReactionDefinitionStore { get; } - public ReactionPublicAppService(IReactionDefinitionStore reactionDefinitionStore) + protected IUserReactionRepository UserReactionRepository { get; } + + protected ReactionManager ReactionManager { get; } + + public ReactionPublicAppService( + IReactionDefinitionStore reactionDefinitionStore, + IUserReactionRepository userReactionRepository, + ReactionManager reactionManager) { ReactionDefinitionStore = reactionDefinitionStore; + UserReactionRepository = userReactionRepository; + ReactionManager = reactionManager; } public virtual async Task> GetAvailableReactions( GetAvailableReactionsDto input) { - var reactionDefinitions = await ReactionDefinitionStore.GetAvailableReactionsAsync(input.EntityType, CurrentUser.Id); + var reactionDefinitions = await ReactionManager + .GetAvailableReactionsAsync( + input.EntityType + ); var reactionDtos = reactionDefinitions - .Select(reactionDefinition => new ReactionDto + .Select(ConvertToReactionDto) + .ToList(); + + return new ListResultDto(reactionDtos); + } + + public async Task> GetReactionSummariesAsync(GetReactionSummariesDto input) + { + var summaries = await ReactionManager.GetSummariesAsync(input.EntityType, input.EntityId); + + var summaryDtos = summaries + .Select(summary => new ReactionSummaryDto { - Name = reactionDefinition.Name, - DisplayName = reactionDefinition.DisplayName?.Localize(StringLocalizerFactory) - }).ToList(); + Count = summary.Count, + Reaction = ConvertToReactionDto(summary.Reaction) + }) + .ToList(); + + return new ListResultDto(summaryDtos); + } + + public async Task> GetMyReactions(GetMyReactionsDto input) + { + var userReactions = await ReactionManager.GetUserReactionsAsync( + CurrentUser.GetId(), + input.EntityType, + input.EntityId + ); + + var reactionDtos = userReactions + .Select(ConvertToReactionDto) + .ToList(); return new ListResultDto(reactionDtos); } + + public async Task> GetForSelectionAsync(GetForSelectionInput input) + { + var reactionDefinitions = await ReactionManager + .GetAvailableReactionsAsync( + input.EntityType + ); + + //var summaries = await ReactionManager.GetSummariesAsync(input.EntityType, input.EntityId); + + var reactionDtos = new List(); + + foreach (var reactionDefinition in reactionDefinitions) + { + reactionDtos.Add( + new ReactionWithSelectionDto + { + Reaction = ConvertToReactionDto(reactionDefinition), + Count = 0, + IsSelectedByCurrentUser = false + } + ); + } + + return new ListResultDto(reactionDtos); + } + + private ReactionDto ConvertToReactionDto(ReactionDefinition reactionDefinition) + { + return new ReactionDto + { + Name = reactionDefinition.Name, + DisplayName = reactionDefinition.DisplayName?.Localize(StringLocalizerFactory) + }; + } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/ReactionSelection/Default.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/ReactionSelection/Default.cshtml index 4714e3e63b..fb7c501775 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/ReactionSelection/Default.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/ReactionSelection/Default.cshtml @@ -1,12 +1,16 @@ @model Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.ReactionSelection.ReactionSelectionViewModel - - - -