app/components/management/menu_component.rb
class Management::MenuComponent < ApplicationComponent
use_helpers :managed_user, :link_list
def links
[
user_links,
(print_investments_link if Setting["process.budgets"]),
print_proposals_link,
user_invites_link
]
end
private
def user_links
section(t("management.menu.users"), active: true, class: "users-link") do
link_list(
select_user_link,
(reset_password_email_link if managed_user.email),
reset_password_manually_link,
create_proposal_link,
support_proposals_link,
(create_budget_investment_link if Setting["process.budgets"]),
(support_budget_investments_link if Setting["process.budgets"])
)
end
end
def select_user_link
[
t("management.menu.select_user"),
management_document_verifications_path,
users?
]
end
def reset_password_email_link
[
t("management.account.menu.reset_password_email"),
edit_password_email_management_account_path,
edit_password_email?
]
end
def reset_password_manually_link
[
t("management.account.menu.reset_password_manually"),
edit_password_manually_management_account_path,
edit_password_manually?
]
end
def create_proposal_link
[
t("management.menu.create_proposal"),
new_management_proposal_path,
create_proposal?
]
end
def support_proposals_link
[
t("management.menu.support_proposals"),
management_proposals_path,
support_proposal?
]
end
def create_budget_investment_link
[
t("management.menu.create_budget_investment"),
create_investments_management_budgets_path,
create_investments?
]
end
def support_budget_investments_link
[
t("management.menu.support_budget_investments"),
support_investments_management_budgets_path,
support_investments?
]
end
def print_investments_link
[
t("management.menu.print_budget_investments"),
print_investments_management_budgets_path,
print_investments?,
class: "print-investments-link"
]
end
def print_proposals_link
[
t("management.menu.print_proposals"),
print_management_proposals_path,
print_proposals?,
class: "print-proposals-link"
]
end
def user_invites_link
[
t("management.menu.user_invites"),
new_management_user_invite_path,
user_invites?,
class: "invitations-link"
]
end
def users?
["users", "email_verifications", "document_verifications"].include?(controller_name)
end
def edit_password_email?
controller_name == "account" && action_name == "edit_password_email"
end
def edit_password_manually?
controller_name == "account" && action_name == "edit_password_manually"
end
def create_proposal?
controller_name == "proposals" && action_name == "new"
end
def support_proposal?
controller_name == "proposals" && action_name == "index"
end
def print_proposals?
controller_name == "proposals" && action_name == "print"
end
def create_investments?
(controller_name == "budget_investments" && action_name == "new") ||
(controller_name == "budgets" && action_name == "create_investments")
end
def support_investments?
(controller_name == "budget_investments" && action_name == "index") ||
(controller_name == "budgets" && action_name == "support_investments")
end
def print_investments?
(controller_name == "budget_investments" && action_name == "print") ||
(controller_name == "budgets" && action_name == "print_investments")
end
def user_invites?
controller_name == "user_invites"
end
def section(title, **, &content)
section_opener(title, **) + content.call
end
def section_opener(title, active:, **options)
button_tag(title, { type: "button", disabled: "disabled", "aria-expanded": active }.merge(options))
end
end