adds card comment reactions feature

This commit is contained in:
Kai Lehmann 2021-08-13 20:47:55 +02:00
parent d8e8512d66
commit 2977120129
8 changed files with 239 additions and 10 deletions

View file

@ -21,6 +21,22 @@ template(name="editOrDeleteComment")
= ' - '
a.js-delete-comment {{_ "delete"}}
template(name="commentReactions")
.reactions
each reaction in reactions
span.reaction(class="{{#if isSelected reaction.userIds}}selected{{/if}}" data-codepoint="#{reaction.reactionCodepoint}" title="{{userNames reaction.userIds}}")
span.reaction-codepoint !{reaction.reactionCodepoint}
span.reaction-count #{reaction.userIds.length}
if (currentUser.isBoardMember)
a.open-comment-reaction-popup(title="{{_ 'addReactionPopup-title'}}")
i.fa.fa-smile-o
i.fa.fa-plus
template(name="addReactionPopup")
.reactions-popup
each codepoint in codepoints
span.add-comment-reaction(data-codepoint="#{codepoint}") !{codepoint}
template(name="activity")
.activity
+userAvatar(userId=activity.user._id)
@ -124,6 +140,7 @@ template(name="activity")
.activity-comment
+viewer
= activity.comment.text
+commentReactions(reactions=activity.comment.reactions commentId=activity.comment._id)
span(title=activity.createdAt).activity-meta {{ moment activity.createdAt }}
if($eq currentUser._id activity.comment.userId)
+editOrDeleteComment
@ -150,20 +167,20 @@ template(name="activity")
if($eq activity.activityType 'a-startAt')
| {{{_ 'activity-startDate' (sanitize startDate) cardLink}}}.
if($eq activity.activityType 'a-dueAt')
| {{{_ 'activity-dueDate' (sanitize dueDate) cardLink}}}.
if($eq activity.activityType 'a-endAt')
| {{{_ 'activity-endDate' (sanitize endDate) cardLink}}}.
if($eq mode 'board')
if($eq activity.activityType 'a-receivedAt')
| {{{_ 'activity-receivedDate' (sanitize receivedDate) cardLink}}}.
if($eq activity.activityType 'a-startAt')
| {{{_ 'activity-startDate' (sanitize startDate) cardLink}}}.
if($eq activity.activityType 'a-dueAt')
| {{{_ 'activity-dueDate' (sanitize dueDate) cardLink}}}.

View file

@ -240,6 +240,59 @@ Template.activity.helpers({
},
});
Template.commentReactions.events({
'click .reaction'(event) {
if (Meteor.user().isBoardMember()) {
const codepoint = event.currentTarget.dataset['codepoint'];
const commentId = Template.instance().data.commentId;
const cardComment = CardComments.findOne({_id: commentId});
cardComment.toggleReaction(codepoint);
}
},
'click .open-comment-reaction-popup': Popup.open('addReaction'),
})
Template.addReactionPopup.events({
'click .add-comment-reaction'(event) {
if (Meteor.user().isBoardMember()) {
const codepoint = event.currentTarget.dataset['codepoint'];
const commentId = Template.instance().data.commentId;
const cardComment = CardComments.findOne({_id: commentId});
cardComment.toggleReaction(codepoint);
}
Popup.close();
},
})
Template.addReactionPopup.helpers({
codepoints() {
return [
'👍',
'👎',
'👀',
'✅',
'❌',
'🙏',
'👏',
'🎉',
'🚀',
'😊',
'🤔',
'😔'];
}
})
Template.commentReactions.helpers({
isSelected(userIds) {
return userIds.includes(Meteor.user()._id);
},
userNames(userIds) {
return Users.find({_id: {$in: userIds}})
.map(user => user.profile.fullname)
.join(', ');
}
})
function createCardLink(card) {
if (!card) return '';
return (

View file

@ -5,6 +5,20 @@
display: flex
justify-content:space-between
.reactions-popup
.add-comment-reaction
display: inline-block
cursor: pointer
border-radius: 5px
font-size: 22px
text-align: center
line-height: 30px
width: 40px
&:hover {
background-color: #b0c4de
}
.activities
clear: both
@ -18,7 +32,7 @@
height: @width
.activity-member
font-weight: 700
font-weight: 700
.activity-desc
word-wrap: break-word
@ -39,6 +53,45 @@
margin-top: 5px
padding: 5px
.reactions
display: flex
margin-top: 5px
gap: 5px
.open-comment-reaction-popup
display: flex
align-items: center
text-decoration: none
height: 24px;
i.fa.fa-smile-o
font-size: 17px
font-weight: 500
margin-left: 2px
i.fa.fa-plus
font-size: 8px;
margin-top: -7px;
margin-left: 1px;
.reaction
cursor: pointer
border: 1px solid grey
border-radius: 15px
display: flex
padding: 2px 5px
&.selected {
background-color: #b0c4de
}
&:hover {
background-color: #b0c4de
}
.reaction-count
font-size: 12px
.activity-checklist
display: block
border-radius: 3px