diff --git a/app/assets/templates/comment_tpl.jst.hbs b/app/assets/templates/comment_tpl.jst.hbs index 4d58f45e4..f515e0c45 100644 --- a/app/assets/templates/comment_tpl.jst.hbs +++ b/app/assets/templates/comment_tpl.jst.hbs @@ -37,16 +37,17 @@ {{{text}}} -
- - {{~#if userLike~}} - {{~t "stream.unlike"~}} - {{~else~}} - {{~t "stream.like"~}} - {{~/if~}} - -
- + {{#if loggedIn}} +
+ + {{~#if userLike~}} + {{~t "stream.unlike"~}} + {{~else~}} + {{~t "stream.like"~}} + {{~/if~}} + +
+ {{/if}}
diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb index 647d42e35..9f98dce2c 100644 --- a/app/controllers/comments_controller.rb +++ b/app/controllers/comments_controller.rb @@ -49,7 +49,7 @@ class CommentsController < ApplicationController def index comments = comment_service.find_for_post(params[:post_id]) respond_with do |format| - format.json { render json: CommentPresenter.as_collection(comments), status: 200 } + format.json { render json: CommentPresenter.as_collection(comments, :as_json, current_user), status: 200 } format.mobile { render layout: false, locals: {comments: comments} } end end diff --git a/app/presenters/comment_presenter.rb b/app/presenters/comment_presenter.rb index ae118a9d4..1dc078e2e 100644 --- a/app/presenters/comment_presenter.rb +++ b/app/presenters/comment_presenter.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class CommentPresenter < BasePresenter - def as_json(opts={}) + def as_json(_opts={}) { id: id, guid: guid, @@ -27,14 +27,14 @@ class CommentPresenter < BasePresenter def build_interaction_state { - liked: current_user.present? && likes.where(author: current_user.person).exists?, - likes_count: likes_count + liked: current_user.present? && likes.exists?(author: current_user.person), + likes_count: likes_count } end def build_interactions_json { - likes: as_api(likes), + likes: as_api(own_likes(likes)), likes_count: likes_count } end @@ -43,6 +43,18 @@ class CommentPresenter < BasePresenter mentioned_people.map {|m| PersonPresenter.new(m).as_api_json } end + # TODO: Only send the own_like boolean. + # Frontend uses the same methods for post-likes as for comment-likes + # Whenever the frontend will be refactored, just send the own_like boolean, instead of a full list of likes + # The list of likes is already send when API requests the full list. + def own_likes(likes) + if current_user + likes.where(author: current_user.person) + else + likes.none + end + end + def as_api(collection) collection.includes(author: :profile).map {|element| element.as_api_response(:backbone) diff --git a/app/presenters/last_three_comments_decorator.rb b/app/presenters/last_three_comments_decorator.rb index 9812d11d5..ad098f5e3 100644 --- a/app/presenters/last_three_comments_decorator.rb +++ b/app/presenters/last_three_comments_decorator.rb @@ -5,9 +5,14 @@ class LastThreeCommentsDecorator @presenter = presenter end - def as_json(options={}) + def as_json(_options={}) + current_user = @presenter.current_user @presenter.as_json.tap do |post| - post[:interactions].merge!(:comments => CommentPresenter.as_collection(@presenter.post.last_three_comments)) + post[:interactions].merge!(comments: CommentPresenter.as_collection( + @presenter.post.last_three_comments, + :as_json, + current_user + )) end end -end \ No newline at end of file +end