The `use_helpers` method was added in ViewComponent 3.8.0, and it's included by default in all components since version 3.11.0. Note we sometimes delegated the `can?` method to the controller instead of the helpers, for no particularly reason. We're unifying that code as well.
58 lines
1.6 KiB
Ruby
58 lines
1.6 KiB
Ruby
class Budgets::Investments::BallotComponent < ApplicationComponent
|
|
attr_reader :investment, :investment_ids, :ballot
|
|
use_helpers :current_user, :heading_link, :link_to_verify_account
|
|
|
|
def initialize(investment:, investment_ids:, ballot:)
|
|
@investment = investment
|
|
@investment_ids = investment_ids
|
|
@ballot = ballot
|
|
end
|
|
|
|
private
|
|
|
|
def budget
|
|
ballot.budget
|
|
end
|
|
|
|
def voted?
|
|
ballot.has_investment?(investment)
|
|
end
|
|
|
|
def reason
|
|
@reason ||= investment.reason_for_not_being_ballotable_by(current_user, ballot)
|
|
end
|
|
|
|
def vote_aria_label
|
|
t("budgets.investments.investment.add_label", investment: investment.title)
|
|
end
|
|
|
|
def remove_vote_aria_label
|
|
t("budgets.ballots.show.remove_label", investment: investment.title)
|
|
end
|
|
|
|
def link_to_my_heading
|
|
link_to(investment.heading.name,
|
|
budget_investments_path(budget_id: investment.budget_id,
|
|
heading_id: investment.heading_id))
|
|
end
|
|
|
|
def link_to_change_ballot
|
|
link_to(t("budgets.ballots.reasons_for_not_balloting.change_ballot"),
|
|
budget_ballot_path(budget))
|
|
end
|
|
|
|
def assigned_heading
|
|
ballot.heading_for_group(investment.group)
|
|
end
|
|
|
|
def cannot_vote_text
|
|
if reason.present? && !voted?
|
|
t("budgets.ballots.reasons_for_not_balloting.#{reason}",
|
|
verify_account: link_to_verify_account,
|
|
my_heading: link_to_my_heading,
|
|
change_ballot: link_to_change_ballot,
|
|
heading_link: heading_link(assigned_heading, budget))
|
|
end
|
|
end
|
|
end
|