Add component in order to reduce duplicated code

Co-authored-by: Javi Martín <javim@elretirao.net>
This commit is contained in:
taitus
2023-06-28 10:26:44 +02:00
parent 718fcba6d8
commit 00ff47e7e6
6 changed files with 66 additions and 97 deletions

View File

@@ -0,0 +1,48 @@
class Shared::VoteButtonComponent < ApplicationComponent
attr_reader :votable, :value, :options
delegate :current_user, :can?, to: :helpers
def initialize(votable, value:, **options)
@votable = votable
@value = value
@options = options
end
private
def path
if already_voted?
polymorphic_path(vote)
else
polymorphic_path(vote, value: value)
end
end
def default_options
if already_voted?
{
"aria-pressed": true,
method: :delete,
remote: can?(:destroy, vote)
}
else
{
"aria-pressed": false,
method: :post,
remote: can?(:create, vote)
}
end
end
def vote
@vote ||= Vote.find_or_initialize_by(votable: votable, voter: current_user, vote_flag: parsed_value)
end
def already_voted?
vote.persisted?
end
def parsed_value
value == "yes"
end
end