mirror of
https://github.com/Retrospring/retrospring.git
synced 2025-03-31 04:52:12 +02:00
Replace usages of smiles with reaction appendables
This commit is contained in:
parent
ac6798877d
commit
0cfe5ee964
10 changed files with 44 additions and 60 deletions
|
@ -47,7 +47,7 @@ class Ajax::SmileController < AjaxController
|
||||||
comment = Comment.find(params[:id])
|
comment = Comment.find(params[:id])
|
||||||
|
|
||||||
begin
|
begin
|
||||||
current_user.smile_comment comment
|
current_user.smile comment
|
||||||
rescue Errors::Base => e
|
rescue Errors::Base => e
|
||||||
@response[:status] = e.code
|
@response[:status] = e.code
|
||||||
@response[:message] = I18n.t(e.locale_tag)
|
@response[:message] = I18n.t(e.locale_tag)
|
||||||
|
@ -70,7 +70,7 @@ class Ajax::SmileController < AjaxController
|
||||||
comment = Comment.find(params[:id])
|
comment = Comment.find(params[:id])
|
||||||
|
|
||||||
begin
|
begin
|
||||||
current_user.unsmile_comment comment
|
current_user.unsmile comment
|
||||||
rescue => e
|
rescue => e
|
||||||
Sentry.capture_exception(e)
|
Sentry.capture_exception(e)
|
||||||
@response[:status] = :fail
|
@response[:status] = :fail
|
||||||
|
|
|
@ -1,4 +1,19 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class Appendable::Reaction < Appendable
|
class Appendable::Reaction < Appendable
|
||||||
|
after_create do
|
||||||
|
Notification.notify parent.user, self unless parent.user == user
|
||||||
|
user.increment! :smiled_count
|
||||||
|
parent.increment! :smile_count
|
||||||
|
end
|
||||||
|
|
||||||
|
before_destroy do
|
||||||
|
Notification.denotify parent.user, self unless parent.user == user
|
||||||
|
user.decrement! :smiled_count
|
||||||
|
answer.decrement! :smile_count
|
||||||
|
end
|
||||||
|
|
||||||
|
def notification_type(*_args)
|
||||||
|
Notifications::Smiled
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,7 +3,7 @@ class Comment < ApplicationRecord
|
||||||
belongs_to :answer
|
belongs_to :answer
|
||||||
validates :user_id, presence: true
|
validates :user_id, presence: true
|
||||||
validates :answer_id, presence: true
|
validates :answer_id, presence: true
|
||||||
has_many :smiles, class_name: "CommentSmile", foreign_key: :comment_id, dependent: :destroy
|
has_many :smiles, class_name: "Appendable::Reaction", foreign_key: :parent_id, dependent: :destroy
|
||||||
|
|
||||||
validates :content, length: { maximum: 160 }
|
validates :content, length: { maximum: 160 }
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,7 @@ class Notification < ApplicationRecord
|
||||||
|
|
||||||
def make_notification(recipient, target, notification_type)
|
def make_notification(recipient, target, notification_type)
|
||||||
n = notification_type.new(target: target,
|
n = notification_type.new(target: target,
|
||||||
|
target_type: target.type, # To ensure we don't get a type of 'Appenddable'
|
||||||
recipient: recipient,
|
recipient: recipient,
|
||||||
new: true)
|
new: true)
|
||||||
n.save!
|
n.save!
|
||||||
|
|
|
@ -127,27 +127,6 @@ class User < ApplicationRecord
|
||||||
question.answers.pluck(:user_id).include? self.id
|
question.answers.pluck(:user_id).include? self.id
|
||||||
end
|
end
|
||||||
|
|
||||||
# smiles a comment
|
|
||||||
# @param comment [Comment] the comment to smile
|
|
||||||
def smile_comment(comment)
|
|
||||||
# rubocop:disable Style/RedundantSelf
|
|
||||||
raise Errors::ReactingSelfBlockedOther if self.blocking?(comment.user)
|
|
||||||
raise Errors::ReactingOtherBlockedSelf if comment.user.blocking?(self)
|
|
||||||
# rubocop:enable Style/RedundantSelf
|
|
||||||
|
|
||||||
CommentSmile.create!(user: self, comment: comment)
|
|
||||||
end
|
|
||||||
|
|
||||||
# unsmile an comment
|
|
||||||
# @param comment [Comment] the comment to unsmile
|
|
||||||
def unsmile_comment(comment)
|
|
||||||
CommentSmile.find_by(user: self, comment: comment).destroy
|
|
||||||
end
|
|
||||||
|
|
||||||
def smiled_comment?(comment)
|
|
||||||
comment.smiles.pluck(:user_id).include? self.id
|
|
||||||
end
|
|
||||||
|
|
||||||
def comment(answer, content)
|
def comment(answer, content)
|
||||||
# rubocop:disable Style/RedundantSelf
|
# rubocop:disable Style/RedundantSelf
|
||||||
raise Errors::CommentingSelfBlockedOther if self.blocking?(answer.user)
|
raise Errors::CommentingSelfBlockedOther if self.blocking?(answer.user)
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
%i.fa.fa-fw.fa-smile-o
|
%i.fa.fa-fw.fa-smile-o
|
||||||
%span{ id: "ab-comment-smile-count-#{comment.id}" }= comment.smile_count
|
%span{ id: "ab-comment-smile-count-#{comment.id}" }= comment.smile_count
|
||||||
- if user_signed_in?
|
- if user_signed_in?
|
||||||
- if current_user.smiled_comment? comment
|
- if current_user.smiled? comment
|
||||||
%button.btn.btn-link.answerbox__action{ type: :button, name: "ab-smile-comment", data: { c_id: comment.id, action: :unsmile } }
|
%button.btn.btn-link.answerbox__action{ type: :button, name: "ab-smile-comment", data: { c_id: comment.id, action: :unsmile } }
|
||||||
%i.fa.fa-fw.fa-frown-o
|
%i.fa.fa-fw.fa-frown-o
|
||||||
%span{ id: "ab-comment-smile-count-#{comment.id}" }= comment.smile_count
|
%span{ id: "ab-comment-smile-count-#{comment.id}" }= comment.smile_count
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
- else
|
- else
|
||||||
- notifications.each do |notification|
|
- notifications.each do |notification|
|
||||||
.dropdown-item
|
.dropdown-item
|
||||||
= render "notifications/type/#{notification.target_type.downcase}", notification: notification
|
= render "notifications/type/#{notification.target_type.downcase.split('::').last}", notification: notification
|
||||||
|
|
||||||
%a.dropdown-item.text-center{ href: notifications_path }
|
%a.dropdown-item.text-center{ href: notifications_path }
|
||||||
%i.fa.fa-fw.fa-chevron-right
|
%i.fa.fa-fw.fa-chevron-right
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
.media.notification
|
|
||||||
.notification__icon
|
|
||||||
%i.fa.fa-2x.fa-fw.fa-smile-o
|
|
||||||
.media-body
|
|
||||||
.notification__heading
|
|
||||||
%img.avatar-xs{ src: notification.target.user.profile_picture.url(:small) }
|
|
||||||
= user_screen_name notification.target.user
|
|
||||||
smiled
|
|
||||||
= link_to 'your comment', show_user_answer_path(username: notification.target.user.screen_name, id: notification.target.comment.answer.id)
|
|
||||||
= time_tooltip(notification.target)
|
|
||||||
ago
|
|
||||||
.list-group
|
|
||||||
.list-group-item
|
|
||||||
.media.question-media
|
|
||||||
.media-body
|
|
||||||
%h6.notification__list-heading comment
|
|
||||||
= markdown notification.target.comment.content[0..60] + (notification.target.comment.content.length > 60 ? '[...]' : '')
|
|
23
app/views/notifications/type/_reaction.haml
Normal file
23
app/views/notifications/type/_reaction.haml
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
.media.notification
|
||||||
|
.notification__icon
|
||||||
|
%i.fa.fa-2x.fa-fw.fa-smile-o
|
||||||
|
.media-body
|
||||||
|
.notification__heading
|
||||||
|
%img.avatar-xs{ src: notification.target.user.profile_picture.url(:small) }
|
||||||
|
= user_screen_name notification.target.user
|
||||||
|
smiled
|
||||||
|
- if notification.target.parent_type == 'Answer'
|
||||||
|
= link_to 'your answer', show_user_answer_path(username: notification.target.user.screen_name, id: notification.target.parent.id)
|
||||||
|
- elsif notification.target.parent_type == 'Comment'
|
||||||
|
= link_to 'your comment', show_user_answer_path(username: notification.target.user.screen_name, id: notification.target.parent.answer.id)
|
||||||
|
= time_tooltip(notification.target)
|
||||||
|
ago
|
||||||
|
.list-group
|
||||||
|
.list-group-item
|
||||||
|
.media.question-media
|
||||||
|
.media-body
|
||||||
|
- if notification.target.parent_type == 'Answer'
|
||||||
|
%h6.notification__list-heading answer
|
||||||
|
- elsif notification.target.parent_type == 'Comment'
|
||||||
|
%h6.notification__list-heading comment
|
||||||
|
= markdown notification.target.parent.content[0..60] + (notification.target.parent.content.length > 60 ? '[...]' : '')
|
|
@ -1,17 +0,0 @@
|
||||||
.media.notification
|
|
||||||
.notification__icon
|
|
||||||
%i.fa.fa-2x.fa-fw.fa-smile-o
|
|
||||||
.media-body
|
|
||||||
.notification__heading
|
|
||||||
%img.avatar-xs{ src: notification.target.user.profile_picture.url(:small) }
|
|
||||||
= user_screen_name notification.target.user
|
|
||||||
smiled
|
|
||||||
= link_to 'your answer', show_user_answer_path(username: notification.target.user.screen_name, id: notification.target.answer.id)
|
|
||||||
= time_tooltip(notification.target)
|
|
||||||
ago
|
|
||||||
.list-group
|
|
||||||
.list-group-item
|
|
||||||
.media.question-media
|
|
||||||
.media-body
|
|
||||||
%h6.notification__list-heading answer
|
|
||||||
= markdown notification.target.answer.content[0..60] + (notification.target.answer.content.length > 60 ? '[...]' : '')
|
|
Loading…
Reference in a new issue