Module: Spree::Admin::DrawerHelper

Defined in:
app/helpers/spree/admin/drawer_helper.rb

Instance Method Summary collapse

Instance Method Details

#drawer(id: nil, controller_name: 'drawer', **html_options) { ... } ⇒ String

Renders a drawer container element (slide-out panel)

Examples:

Basic usage

<%= drawer do %>
  <%= drawer_header("Edit Product") %>
  <div class="drawer-body">Form fields here...</div>
  <div class="drawer-footer">
    <%= drawer_discard_button %>
    <%= button_tag "Save", class: "btn btn-primary" %>
  </div>
<% end %>

With custom id and controller

<%= drawer(id: 'filters-drawer', controller_name: 'dialog') do %>
  ...
<% end %>

Parameters:

  • id (String, nil) (defaults to: nil)

    the id of the drawer element

  • controller_name (String) (defaults to: 'drawer')

    the Stimulus controller name (default: ‘drawer’)

  • html_options (Hash)

    additional HTML attributes

Yields:

  • the content to render inside the drawer

Returns:

  • (String)

    the drawer HTML



25
26
27
28
29
30
31
32
# File 'app/helpers/spree/admin/drawer_helper.rb', line 25

def drawer(id: nil, controller_name: 'drawer', **html_options, &block)
  html_options[:class] = "drawer #{html_options[:class]}".strip
  html_options[:data] ||= {}
  html_options[:data]["#{controller_name}-target".to_sym] = 'dialog'
  html_options[:id] = id if id.present?

  (:dialog, html_options, &block)
end

#drawer_close_button(controller_name = 'drawer') ⇒ Object



40
41
42
# File 'app/helpers/spree/admin/drawer_helper.rb', line 40

def drawer_close_button(controller_name = 'drawer')
  button_tag('', type: 'button', class: 'btn-close', data: { action: "#{controller_name}#close", dismiss: controller_name, aria_label: Spree.t(:close) }).html_safe
end

#drawer_discard_button(controller_name = 'drawer') ⇒ Object



44
45
46
47
48
# File 'app/helpers/spree/admin/drawer_helper.rb', line 44

def drawer_discard_button(controller_name = 'drawer')
  button_tag(type: 'button', class: 'btn btn-light', data: { action: "#{controller_name}#close", dismiss: controller_name }) do
    Spree.t('actions.discard')
  end.html_safe
end

#drawer_header(title, controller_name = 'drawer') ⇒ Object



34
35
36
37
38
# File 'app/helpers/spree/admin/drawer_helper.rb', line 34

def drawer_header(title, controller_name = 'drawer')
  (:div, class: 'drawer-header') do
    (:h5, title, class: 'drawer-title') + drawer_close_button(controller_name)
  end.html_safe
end