app/components/avo/actions_component.rb in avo-3.12.0 vs app/components/avo/actions_component.rb in avo-3.13.0

- old
+ new

@@ -7,27 +7,37 @@ prop :as_row_control, _Boolean, default: false prop :icon, _Nilable(String) prop :size, Avo::ButtonComponent::SIZE, default: :md prop :title, _Nilable(String) - prop :color, Symbol, default: :primary + prop :color, _Nilable(Symbol) do |value| + value || :primary + end prop :include, _Nilable(ACTION_FILTER), default: [].freeze do |include| Array(include).to_set end - prop :label, String do |label| - label || I18n.t("avo.actions") + prop :custom_list, _Boolean, default: false + prop :label, _Nilable(String) do |label| + if @custom_list + label + else + label || I18n.t("avo.actions") + end end prop :style, Avo::ButtonComponent::STYLE, default: :outline - prop :actions, _Array(Avo::BaseAction), default: [].freeze + prop :actions, _Array(_Any), default: [].freeze prop :exclude, _Nilable(ACTION_FILTER), default: [].freeze do |exclude| Array(exclude).to_set end prop :resource, _Nilable(Avo::BaseResource) prop :view, _Nilable(Avo::ViewInquirer) + prop :host_component, _Nilable(_Any) + delegate_missing_to :@host_component + def after_initialize - filter_actions + filter_actions unless @custom_list end def render? @actions.present? end @@ -59,42 +69,50 @@ def on_index_page? !on_record_page? end - def icon(action) - svg action.icon, class: "h-5 shrink-0 mr-1 inline pointer-events-none" + def icon(icon) + svg icon, class: "h-5 shrink-0 mr-1 inline pointer-events-none" end def render_item(action) case action when Avo::Divider render_divider(action) when Avo::BaseAction render_action_link(action) + when defined?(Avo::Advanced::Resources::Controls::Action) && Avo::Advanced::Resources::Controls::Action + render_action_link(action.action, icon: action.icon) + when defined?(Avo::Advanced::Resources::Controls::LinkTo) && Avo::Advanced::Resources::Controls::LinkTo + link_to action.args[:path], + class: action.args.delete(:class) || "flex items-center px-4 py-3 w-full text-black font-semibold text-sm hover:bg-primary-100", + **action.args.except(:path, :label, :icon) do + raw("#{icon(action.args[:icon])} #{action.args[:label]}") + end end end private def render_divider(action) label = action.label.is_a?(Hash) ? action.label[:label] : nil render Avo::DividerComponent.new(label) end - def render_action_link(action) + def render_action_link(action, icon: nil) link_to action.link_arguments(resource: @resource, arguments: action.arguments).first, data: action_data_attributes(action), title: action.action_name, class: action_css_class(action) do - raw("#{icon(action)} #{action.action_name}") + raw("#{icon(icon || action.icon)} #{action.action_name}") end end def action_data_attributes(action) { action_name: action.action_name, - "turbo-frame": Avo::ACTIONS_TURBO_FRAME_ID, + "turbo-frame": Avo::MODAL_FRAME_ID, action: "click->actions-picker#visitAction", "actions-picker-target": action.standalone ? "standaloneAction" : "resourceAction", disabled: is_disabled?(action), turbo_prefetch: false, }