Class: Panda::Core::NavigationRegistry::SectionContext

Inherits:
Object
  • Object
show all
Defined in:
lib/panda/core/navigation_registry.rb

Overview

Collects items added inside a section block.

Examples:

NavigationRegistry.section("Members", icon: "fa-solid fa-users") do |s|
  s.item "Onboarding", path: "members/onboarding"
  s.item "Directory", path: "members/directory"
end

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeSectionContext

Returns a new instance of SectionContext.



94
95
96
# File 'lib/panda/core/navigation_registry.rb', line 94

def initialize
  @items = []
end

Instance Attribute Details

#itemsObject (readonly)

Returns the value of attribute items.



92
93
94
# File 'lib/panda/core/navigation_registry.rb', line 92

def items
  @items
end

Instance Method Details

#item(label, path: nil, url: nil, target: nil, visible: nil, permission: nil, method: nil, button_options: {}, path_helper: nil, badge: nil, badge_color: nil) ⇒ Object

Register an item within this section. rubocop:disable Metrics/ParameterLists

Parameters:

  • label (String)

    Display label

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

    Relative path (auto-prefixed with admin_path at build time)

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

    Absolute URL (used as-is)

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

    HTML target attribute (e.g. "_blank")

  • visible (Proc, nil) (defaults to: nil)

    Lambda receiving user, hides item when false

  • permission (Symbol, nil) (defaults to: nil)

    Permission key — item hidden unless user is authorized. Checked via config.authorization_policy. Overridden by visible: if both given.

  • method (Symbol, nil) (defaults to: nil)

    HTTP method (e.g. :delete for logout buttons)

  • button_options (Hash) (defaults to: {})

    Extra options for button_to rendering

  • path_helper (Symbol, nil) (defaults to: nil)

    Route helper name, resolved at build time via helpers



110
111
112
113
114
115
116
117
118
# File 'lib/panda/core/navigation_registry.rb', line 110

def item(label, path: nil, url: nil, target: nil, visible: nil, permission: nil,
  method: nil, button_options: {}, path_helper: nil, badge: nil, badge_color: nil)
  effective_visible = visible || permission_to_visible(permission)
  @items << {
    label: label, path: path, url: url, target: target,
    visible: effective_visible, method: method, button_options: button_options,
    path_helper: path_helper, badge: badge, badge_color: badge_color
  }
end