mirror of
https://github.com/diaspora/diaspora.git
synced 2026-01-08 22:58:08 -05:00
Dont send all likes with list of comments
Due to historic reasons with a comment the list of all likes was sent to the frontend. This is needed just to detect if one of the likes is current users like. So if sending just the own like, the frontend can do it's job. When the frontend is refactured in any way, post and comment like handling should be improved.
This commit is contained in:
committed by
Benjamin Neff
parent
c2a2fb63b0
commit
9c0f8cdf11
@@ -37,16 +37,17 @@
|
||||
{{{text}}}
|
||||
</div>
|
||||
|
||||
<div class="info">
|
||||
<a href="#" class="like" rel='nofollow'>
|
||||
{{~#if userLike~}}
|
||||
{{~t "stream.unlike"~}}
|
||||
{{~else~}}
|
||||
{{~t "stream.like"~}}
|
||||
{{~/if~}}
|
||||
</a>
|
||||
</div>
|
||||
|
||||
{{#if loggedIn}}
|
||||
<div class="info">
|
||||
<a href="#" class="like" rel='nofollow'>
|
||||
{{~#if userLike~}}
|
||||
{{~t "stream.unlike"~}}
|
||||
{{~else~}}
|
||||
{{~t "stream.like"~}}
|
||||
{{~/if~}}
|
||||
</a>
|
||||
</div>
|
||||
{{/if}}
|
||||
<div class="likes likes-on-comment"> </div>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user