Class: ActiveAdmin::Views::PrismSidebar

Inherits:
Component
  • Object
show all
Defined in:
lib/active_admin/views/prism_sidebar.rb

Overview

Renders ActiveAdmin's existing Menu/MenuItem data (built by the standard menu do |m| ... end DSL in app/admin/*.rb, untouched) as a collapsible left sidebar instead of the default top nav bar.

This is a drop-in replacement for ActiveAdmin::Views::Header: its #build(namespace, menu) signature matches Header#build exactly, so it can be swapped in via the supported extension point

ActiveAdmin::ViewFactory.register(header: ActiveAdmin::Views::PrismSidebar)

(see ActiveAdminPrism.enable!) without touching Pages::Base or any layout template.

It does not reuse ActiveAdmin::Views::Menu/MenuItem's Arbre builder verbs (menu/menu_item) because those are shared globally with ActiveAdmin::Views::TabbedNavigation; walking the ActiveAdmin::Menu data structure directly here keeps this theme fully isolated from anything else that might rely on the stock nav rendering.

Constant Summary collapse

DEFAULT_ITEM_ICONS =

Fallback icons for ActiveAdmin's own default utility-nav items (id: "current_user" / id: "logout", added by Namespace#build_default_utility_nav) when the host hasn't set one explicitly via html_options: { icon: ... }.

{ "current_user" => :users, "logout" => :logout }.freeze

Instance Method Summary collapse

Instance Method Details

#build(namespace, menu) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/active_admin/views/prism_sidebar.rb', line 30

def build(namespace, menu)
  super(id: "header", class: "prism-sidebar")

  @namespace = namespace
  @menu = menu
  @utility_menu = namespace.fetch_menu(:utility_navigation)
  @current_tab = assigns[:current_tab]

  span(class: "prism-sidebar-mobile-toggle", data: { "prism-toggle-sidebar": true }) do
    text_node ActiveAdminPrism::Icons.svg(:menu, css_class: "prism-nav-icon").html_safe
  end

  div class: "prism-sidebar-inner" do
    div(class: "prism-sidebar-brand") { site_title @namespace }
    render_language_switcher if ActiveAdminPrism.configuration.language_switcher
    render_search_box if ActiveAdminPrism.configuration.menu_search
    div(class: "prism-sidebar-scroll") do
      div "Pages", class: "prism-nav-section-label"
      render_menu @menu, class: "prism-nav"
      div("No matching menu items", class: "prism-nav-empty")
    end
    if @utility_menu.items.any?
      div(class: "prism-sidebar-utility") do
        render_menu @utility_menu, class: "prism-nav prism-nav-utility"
      end
    end
    if ActiveAdminPrism.configuration.sidebar_footer
      div(class: "prism-sidebar-footer") { text_node footer_message }
    end
  end
end