in src/views/issue/activity/issue-activity__comment-actions.ts [327:374]
onReactionSelect: function (
issueId: string,
comment: IssueComment,
reaction: Reaction,
activities: ActivityGroup[],
onReactionUpdate: (activities: Activity[], error?: AnyError) => void
): ReduxAction {
return async (_: ReduxThunkDispatch, getState: ReduxStateGetter, getApi: ReduxAPIGetter) => {
const issueApi: IssueAPI = getApi().issue;
const currentUser: User = getState().app.user!;
usage.trackEvent(ANALYTICS_ISSUE_PAGE, 'Reaction select');
const reactionName: string = reaction.reaction;
const existReaction: Reaction = (comment.reactions || []).filter(
it => it.reaction === reactionName && it.author.id === currentUser.id
)[0];
const [error, commentReaction] = await until(
existReaction
? issueApi.removeCommentReaction(issueId, comment.id, existReaction.id)
: issueApi.addCommentReaction(issueId, comment.id, reactionName)
);
if (error) {
onReactionUpdate(activities, error);
notifyError(error);
return;
}
const targetActivityData: ActivityPositionData | null | undefined = findActivityInGroupedActivities(
activities,
comment.id
);
if (targetActivityData) {
const _comment = updateActivityCommentReactions({
comment,
currentUser,
reaction: existReaction ? reaction : commentReaction,
});
const newActivities: ActivityGroup[] = activities.slice(0);
const targetActivity: ActivityGroup | undefined = newActivities[targetActivityData.index];
if (targetActivity?.comment?.added) {
targetActivity.comment.added = [_comment];
onReactionUpdate(newActivities);
}
}
};
},