Browse Source

Refactored cmskit reactions

pull/4776/head
Halil İbrahim Kalkan 6 years ago
parent
commit
5bd8aa0db6
  1. 5
      modules/cms-kit/host/Volo.CmsKit.Web.Unified/Pages/Index.cshtml
  2. 2
      modules/cms-kit/src/Volo.CmsKit.Common.Web/Icons/CmsIconTagHelper.cs
  3. 9
      modules/cms-kit/src/Volo.CmsKit.Common.Web/Icons/CmsIconTagHelperService.cs
  4. 12
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/DefaultReactionDefinitionStore.cs
  5. 6
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/IReactionDefinitionStore.cs
  6. 5
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/IUserReactionRepository.cs
  7. 77
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/ReactionManager.cs
  8. 9
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/ReactionSummary.cs
  9. 9
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/ReactionSummaryQueryResultItem.cs
  10. 32
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Reactions/EfCoreUserReactionRepository.cs
  11. 9
      modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Reactions/GetForSelectionInput.cs
  12. 9
      modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Reactions/GetMyReactionsDto.cs
  13. 9
      modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Reactions/GetReactionSummariesDto.cs
  14. 14
      modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Reactions/IReactionPublicAppService.cs
  15. 9
      modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Reactions/ReactionSummaryDto.cs
  16. 11
      modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Reactions/ReactionWithSelectionDto.cs
  17. 91
      modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Reactions/ReactionPublicAppService.cs
  18. 14
      modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/ReactionSelection/Default.cshtml
  19. 24
      modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/ReactionSelection/ReactionSelectionViewComponent.cs
  20. 2
      modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/ReactionSelection/ReactionSelectionViewModel.cs
  21. 5
      modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/ReactionSelection/ReactionViewModel.cs
  22. 15
      modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/ReactionSelection/default.js

5
modules/cms-kit/host/Volo.CmsKit.Web.Unified/Pages/Index.cshtml

@ -2,7 +2,6 @@
@using Localization.Resources.AbpUi @using Localization.Resources.AbpUi
@using Microsoft.Extensions.Localization @using Microsoft.Extensions.Localization
@using Volo.CmsKit.Pages @using Volo.CmsKit.Pages
@using Volo.CmsKit.Web.Pages.CmsKit.Shared.Components
@using Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.ReactionSelection @using Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.ReactionSelection
@model IndexModel @model IndexModel
@inject IStringLocalizer<AbpUiResource> Localizer @inject IStringLocalizer<AbpUiResource> Localizer
@ -22,7 +21,7 @@
</abp-blockquote> </abp-blockquote>
</abp-card-body> </abp-card-body>
<abp-card-footer> <abp-card-footer>
@await Component.InvokeAsync(typeof(ReactionSelectionViewComponent), new { entityType = "quote" }) @await Component.InvokeAsync(typeof(ReactionSelectionViewComponent), new { entityType = "quote", entityId = "1" })
</abp-card-footer> </abp-card-footer>
</abp-card> </abp-card>
@ -38,6 +37,6 @@
</abp-blockquote> </abp-blockquote>
</abp-card-body> </abp-card-body>
<abp-card-footer> <abp-card-footer>
@await Component.InvokeAsync(typeof(ReactionSelectionViewComponent), new { entityType = "quote" }) @await Component.InvokeAsync(typeof(ReactionSelectionViewComponent), new { entityType = "quote", entityId = "2" })
</abp-card-footer> </abp-card-footer>
</abp-card> </abp-card>

2
modules/cms-kit/src/Volo.CmsKit.Common.Web/Icons/CmsIconTagHelper.cs

@ -7,6 +7,8 @@ namespace Volo.CmsKit.Web.Icons
public class CmsIconTagHelper : AbpTagHelper<CmsIconTagHelper, CmsIconTagHelperService> public class CmsIconTagHelper : AbpTagHelper<CmsIconTagHelper, CmsIconTagHelperService>
{ {
public string Name { get; set; } public string Name { get; set; }
public bool Highlight { get; set; }
public CmsIconTagHelper(CmsIconTagHelperService service) public CmsIconTagHelper(CmsIconTagHelperService service)
: base(service) : base(service)

9
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 Microsoft.AspNetCore.Razor.TagHelpers;
using Volo.Abp; using Volo.Abp;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers; 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!"); throw new AbpException("Only file icons are allowed!");
} }
if (TagHelper.Highlight)
{
output.AddClass("cms-icon-highlighted", HtmlEncoder.Default);
}
return Task.CompletedTask; return Task.CompletedTask;
} }
} }

12
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.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
@ -16,11 +15,14 @@ namespace Volo.CmsKit.Reactions
Options = options.Value; Options = options.Value;
} }
public virtual Task<List<ReactionDefinition>> GetAvailableReactionsAsync( public virtual Task<List<ReactionDefinition>> GetAvailableReactionsAsync(string entityType)
string entityType,
Guid? userId)
{ {
return Task.FromResult(Options.Reactions.Values.ToList()); return Task.FromResult(Options.Reactions.Values.ToList());
} }
public Task<ReactionDefinition> GetReactionOrNullAsync(string reactionName, string entityType)
{
return Task.FromResult(Options.Reactions.GetOrDefault(reactionName));
}
} }
} }

6
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/IReactionDefinitionStore.cs

@ -7,6 +7,8 @@ namespace Volo.CmsKit.Reactions
{ {
public interface IReactionDefinitionStore public interface IReactionDefinitionStore
{ {
Task<List<ReactionDefinition>> GetAvailableReactionsAsync([CanBeNull] string entityType, [CanBeNull] Guid? userId); Task<List<ReactionDefinition>> GetAvailableReactionsAsync([CanBeNull] string entityType);
Task<ReactionDefinition> GetReactionOrNullAsync([NotNull] string reactionName, [CanBeNull] string entityType);
} }
} }

5
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/IUserReactionRepository.cs

@ -1,4 +1,5 @@
using System; using System;
using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using JetBrains.Annotations; using JetBrains.Annotations;
using Volo.Abp.Domain.Repositories; using Volo.Abp.Domain.Repositories;
@ -12,5 +13,9 @@ namespace Volo.CmsKit.Reactions
[NotNull] string entityType, [NotNull] string entityType,
[NotNull] string entityId, [NotNull] string entityId,
[NotNull] string reactionName); [NotNull] string reactionName);
Task<List<UserReaction>> GetListForUserAsync(Guid userId, string entityType, string entityId);
Task<List<ReactionSummaryQueryResultItem>> GetSummariesAsync(string inputEntityType, string inputEntityId);
} }
} }

77
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Reactions/ReactionManager.cs

@ -20,27 +20,79 @@ namespace Volo.CmsKit.Reactions
} }
public virtual async Task<List<ReactionDefinition>> GetAvailableReactionsAsync( public virtual async Task<List<ReactionDefinition>> GetAvailableReactionsAsync(
[CanBeNull] string entityType = null, [CanBeNull] string entityType = null)
[CanBeNull] Guid? userId = null)
{ {
return await ReactionDefinitionStore.GetAvailableReactionsAsync(entityType, userId); return await ReactionDefinitionStore.GetAvailableReactionsAsync(entityType);
} }
public virtual Task<ReactionSummary> GetSummariesAsync( public virtual async Task<List<ReactionSummary>> GetSummariesAsync(
[NotNull] string entityType, [NotNull] string entityType,
[NotNull] string entityId) [NotNull] string entityId)
{ {
//TODO: ... var summaries = await UserReactionRepository.GetSummariesAsync(entityType, entityId);
throw new NotImplementedException();
var summaryDtos = new List<ReactionSummary>();
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<ReactionDefinition> GetUserReactionsAsync( public virtual async Task<List<ReactionDefinition>> GetUserReactionsAsync(
Guid userId, Guid userId,
[NotNull] string entityType, [NotNull] string entityType,
[NotNull] string entityId) [NotNull] string entityId)
{ {
//TODO: ... var userReactions = await UserReactionRepository
throw new NotImplementedException(); .GetListForUserAsync(
userId,
entityType,
entityId
);
var reactionDtos = new List<ReactionDefinition>();
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<UserReaction> CreateAsync( public virtual async Task<UserReaction> CreateAsync(
@ -87,11 +139,4 @@ namespace Volo.CmsKit.Reactions
return true; return true;
} }
} }
public class ReactionSummary
{
public ReactionDefinition Reaction { get; set; }
public int Count { get; set; }
}
} }

9
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; }
}
}

9
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; }
}
}

32
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<ICmsKitDbContext, UserReaction, Guid>, IUserReactionRepository
{
public EfCoreUserReactionRepository(IDbContextProvider<ICmsKitDbContext> dbContextProvider)
: base(dbContextProvider)
{
}
public Task<UserReaction> FindAsync(Guid userId, string entityType, string entityId, string reactionName)
{
throw new NotImplementedException();
}
public Task<List<UserReaction>> GetListForUserAsync(Guid userId, string entityType, string entityId)
{
throw new NotImplementedException();
}
public Task<List<ReactionSummaryQueryResultItem>> GetSummariesAsync(string inputEntityType, string inputEntityId)
{
throw new NotImplementedException();
}
}
}

9
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; }
}
}

9
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; }
}
}

9
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; }
}
}

14
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.Dtos;
using Volo.Abp.Application.Services; using Volo.Abp.Application.Services;
@ -9,5 +11,15 @@ namespace Volo.CmsKit.Reactions
Task<ListResultDto<ReactionDto>> GetAvailableReactions( Task<ListResultDto<ReactionDto>> GetAvailableReactions(
GetAvailableReactionsDto input GetAvailableReactionsDto input
); );
Task<ListResultDto<ReactionSummaryDto>> GetReactionSummariesAsync(
GetReactionSummariesDto input
);
Task<ListResultDto<ReactionDto>> GetMyReactions(
GetMyReactionsDto input
);
Task<ListResultDto<ReactionWithSelectionDto>> GetForSelectionAsync(GetForSelectionInput input);
} }
} }

9
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; }
}
}

11
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; }
}
}

91
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 System.Threading.Tasks;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Users;
namespace Volo.CmsKit.Reactions namespace Volo.CmsKit.Reactions
{ {
//TODO: Authorization
public class ReactionPublicAppService : CmsKitPublicAppService, IReactionPublicAppService public class ReactionPublicAppService : CmsKitPublicAppService, IReactionPublicAppService
{ {
protected IReactionDefinitionStore ReactionDefinitionStore { get; } 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; ReactionDefinitionStore = reactionDefinitionStore;
UserReactionRepository = userReactionRepository;
ReactionManager = reactionManager;
} }
public virtual async Task<ListResultDto<ReactionDto>> GetAvailableReactions( public virtual async Task<ListResultDto<ReactionDto>> GetAvailableReactions(
GetAvailableReactionsDto input) GetAvailableReactionsDto input)
{ {
var reactionDefinitions = await ReactionDefinitionStore.GetAvailableReactionsAsync(input.EntityType, CurrentUser.Id); var reactionDefinitions = await ReactionManager
.GetAvailableReactionsAsync(
input.EntityType
);
var reactionDtos = reactionDefinitions var reactionDtos = reactionDefinitions
.Select(reactionDefinition => new ReactionDto .Select(ConvertToReactionDto)
.ToList();
return new ListResultDto<ReactionDto>(reactionDtos);
}
public async Task<ListResultDto<ReactionSummaryDto>> GetReactionSummariesAsync(GetReactionSummariesDto input)
{
var summaries = await ReactionManager.GetSummariesAsync(input.EntityType, input.EntityId);
var summaryDtos = summaries
.Select(summary => new ReactionSummaryDto
{ {
Name = reactionDefinition.Name, Count = summary.Count,
DisplayName = reactionDefinition.DisplayName?.Localize(StringLocalizerFactory) Reaction = ConvertToReactionDto(summary.Reaction)
}).ToList(); })
.ToList();
return new ListResultDto<ReactionSummaryDto>(summaryDtos);
}
public async Task<ListResultDto<ReactionDto>> GetMyReactions(GetMyReactionsDto input)
{
var userReactions = await ReactionManager.GetUserReactionsAsync(
CurrentUser.GetId(),
input.EntityType,
input.EntityId
);
var reactionDtos = userReactions
.Select(ConvertToReactionDto)
.ToList();
return new ListResultDto<ReactionDto>(reactionDtos); return new ListResultDto<ReactionDto>(reactionDtos);
} }
public async Task<ListResultDto<ReactionWithSelectionDto>> GetForSelectionAsync(GetForSelectionInput input)
{
var reactionDefinitions = await ReactionManager
.GetAvailableReactionsAsync(
input.EntityType
);
//var summaries = await ReactionManager.GetSummariesAsync(input.EntityType, input.EntityId);
var reactionDtos = new List<ReactionWithSelectionDto>();
foreach (var reactionDefinition in reactionDefinitions)
{
reactionDtos.Add(
new ReactionWithSelectionDto
{
Reaction = ConvertToReactionDto(reactionDefinition),
Count = 0,
IsSelectedByCurrentUser = false
}
);
}
return new ListResultDto<ReactionWithSelectionDto>(reactionDtos);
}
private ReactionDto ConvertToReactionDto(ReactionDefinition reactionDefinition)
{
return new ReactionDto
{
Name = reactionDefinition.Name,
DisplayName = reactionDefinition.DisplayName?.Localize(StringLocalizerFactory)
};
}
} }
} }

14
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 @model Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.ReactionSelection.ReactionSelectionViewModel
<span class="cms-reaction-selection"> <span class="cms-reaction-selection">
<a class="cms-reaction-selection-button"> <div class="cms-reaction-selection-available-reactions">
<i class="far fa-smile"></i> Pick a reaction:
</a>
<div class="cms-reaction-selection-area" style="display: none">
@foreach (var reaction in Model.Reactions) @foreach (var reaction in Model.Reactions)
{ {
<cms-icon name="@reaction.Icon"/> <cms-icon name="@reaction.Icon" highlight="@reaction.IsSelectedByCurrentUser"/>
}
</div>
<div class="cms-reaction-selection-reactions">
@foreach (var reaction in Model.Reactions.Where(r => r.Count > 0))
{
<cms-icon name="@reaction.Icon" highlight="@reaction.IsSelectedByCurrentUser"/><span> - @reaction.Count |</span>
} }
</div> </div>
</span> </span>

24
modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/ReactionSelection/ReactionSelectionViewComponent.cs

@ -26,29 +26,33 @@ namespace Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.ReactionSelection
} }
public virtual async Task<IViewComponentResult> InvokeAsync( public virtual async Task<IViewComponentResult> InvokeAsync(
string entityType = null) string entityType,
string entityId)
{ {
var result = await ReactionPublicAppService.GetAvailableReactions( var result = await ReactionPublicAppService.GetForSelectionAsync(
new GetAvailableReactionsDto new GetForSelectionInput
{ {
EntityType = entityType EntityType = entityType,
} EntityId = entityId
); });
var viewModel = new ReactionSelectionViewModel var viewModel = new ReactionSelectionViewModel
{ {
EntityType = entityType, EntityType = entityType,
EntityId = entityId,
Reactions = new List<ReactionViewModel>() Reactions = new List<ReactionViewModel>()
}; };
foreach (var reactionDto in result.Items) foreach (var reactionDto in result.Items)
{ {
viewModel.Reactions.Add( viewModel.Reactions.Add(
new ReactionViewModel new ReactionViewModel //TODO: AutoMap
{ {
Name = reactionDto.Name, Name = reactionDto.Reaction.Name,
DisplayName = reactionDto.DisplayName, DisplayName = reactionDto.Reaction.DisplayName,
Icon = Options.ReactionIcons.GetLocalizedIcon(reactionDto.Name) Icon = Options.ReactionIcons.GetLocalizedIcon(reactionDto.Reaction.Name),
Count = reactionDto.Count,
IsSelectedByCurrentUser = reactionDto.IsSelectedByCurrentUser
}); });
} }

2
modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/ReactionSelection/ReactionSelectionViewModel.cs

@ -6,6 +6,8 @@ namespace Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.ReactionSelection
{ {
public string EntityType { get; set; } public string EntityType { get; set; }
public string EntityId { get; set; }
public List<ReactionViewModel> Reactions { get; set; } public List<ReactionViewModel> Reactions { get; set; }
} }
} }

5
modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/ReactionSelection/ReactionViewModel.cs

@ -12,5 +12,10 @@ namespace Volo.CmsKit.Web.Pages.CmsKit.Shared.Components.ReactionSelection
[NotNull] [NotNull]
public string Icon { get; set; } public string Icon { get; set; }
public int Count { get; set; }
public bool IsSelectedByCurrentUser { get; set; }
} }
} }

15
modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/ReactionSelection/default.js

@ -1,16 +1,13 @@
(function () { (function () {
$(document).ready(function () { $(document).ready(function () {
$('.cms-reaction-selection').each(function () { function initReactionSelection(){
var $this = $(this); var $this = $(this);
var $selectionButton = $this.find('.cms-reaction-selection-button'); var $availableReactions = $this.find('.cms-reaction-selection-available-reactions');
var $selectionArea = $this.find('.cms-reaction-selection-area');
}
$('.cms-reaction-selection').each(initReactionSelection)
$selectionButton.popover({
html: true,
placement: 'right',
content: $selectionArea.html()
});
})
}); });
})(); })();

Loading…
Cancel
Save