Before, users needed to navigate to the list of groups in order to add, edit or delete a group. Also, they need to navigate to the list of groups first, and then to the list of headings for that group in order to add, edit or delete a heading. Now, it's possible to do all these actions for any group or heading from the participatory budget view to bring simplicity and to reduce the number of clicks from a user perspective. Co-Authored-By: Javi Martín <javim@elretirao.net>
83 lines
2.0 KiB
Ruby
83 lines
2.0 KiB
Ruby
class Admin::ActionComponent < ApplicationComponent
|
|
include Admin::Namespace
|
|
attr_reader :action, :record, :options
|
|
|
|
def initialize(action, record, **options)
|
|
@action = action
|
|
@record = record
|
|
@options = options
|
|
end
|
|
|
|
private
|
|
|
|
def button?
|
|
options[:method] && options[:method] != :get
|
|
end
|
|
|
|
def text
|
|
action_key = if action == :destroy
|
|
:delete
|
|
else
|
|
action
|
|
end
|
|
|
|
options[:text] || t("admin.actions.#{action_key}")
|
|
end
|
|
|
|
def path
|
|
options[:path] || default_path
|
|
end
|
|
|
|
def html_options
|
|
{
|
|
class: html_class,
|
|
id: (dom_id(record, action) if record.respond_to?(:to_key)),
|
|
"aria-label": label,
|
|
data: {
|
|
confirm: confirmation_text,
|
|
disable_with: (text if button?)
|
|
}
|
|
}.merge(options.except(:"aria-label", :class, :confirm, :path, :text))
|
|
end
|
|
|
|
def html_class
|
|
"admin-action #{options[:class] || "#{action.to_s.gsub("_", "-")}-link"}".strip
|
|
end
|
|
|
|
def label
|
|
if options[:"aria-label"] == true
|
|
t("admin.actions.label", action: text, name: record_name)
|
|
else
|
|
options[:"aria-label"]
|
|
end
|
|
end
|
|
|
|
def confirmation_text
|
|
if options[:confirm] == true
|
|
if action == :destroy
|
|
t("admin.actions.confirm_delete", name: record_name)
|
|
else
|
|
t("admin.actions.confirm_action", action: text, name: record_name)
|
|
end
|
|
else
|
|
options[:confirm]
|
|
end
|
|
end
|
|
|
|
def record_name
|
|
if record.respond_to?(:human_name)
|
|
record.human_name
|
|
else
|
|
record.to_s.humanize
|
|
end
|
|
end
|
|
|
|
def default_path
|
|
if %i[answers configure destroy preview show].include?(action.to_sym)
|
|
namespaced_polymorphic_path(namespace, record)
|
|
else
|
|
namespaced_polymorphic_path(namespace, record, { action: action }.merge(request.query_parameters))
|
|
end
|
|
end
|
|
end
|