Class: UI::AccordionItemComponent

Inherits:
ViewComponent::Base
  • Object
show all
Includes:
AccordionItemBehavior
Defined in:
app/view_components/ui/accordion_item_component.rb

Overview

Accordion Item component (ViewComponent) Individual collapsible item within an accordion

Examples:

Basic usage

<%= render UI::AccordionItemComponent.new(value: "item-1") do %>
  <%= render UI::AccordionTriggerComponent.new { "Trigger text" } %>
  <%= render UI::AccordionContentComponent.new { "Content text" } %>
<% end %>

Start open

<%= render UI::AccordionItemComponent.new(value: "item-1", initial_open: true) do %>
  <!-- Item will be open by default -->
<% end %>

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from AccordionItemBehavior

#item_base_classes, #item_classes, #item_data_attributes, #item_html_attributes, #item_state, #merged_item_data_attributes

Constructor Details

#initialize(value: "", initial_open: false, classes: "", attributes: {}) ⇒ AccordionItemComponent

Returns a new instance of AccordionItemComponent.

Parameters:

  • value (String) (defaults to: "")

    unique identifier for this item

  • initial_open (Boolean) (defaults to: false)

    whether this item starts open

  • classes (String) (defaults to: "")

    additional CSS classes

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

    additional HTML attributes



26
27
28
29
30
31
# File 'app/view_components/ui/accordion_item_component.rb', line 26

def initialize(value: "", initial_open: false, classes: "", attributes: {})
  @value = value
  @initial_open = initial_open
  @classes = classes
  @attributes = attributes
end

Instance Attribute Details

#initial_openObject (readonly)

Expose item_value and initial_open to child components via content_tag_options



20
21
22
# File 'app/view_components/ui/accordion_item_component.rb', line 20

def initial_open
  @initial_open
end

#valueObject (readonly)

Expose item_value and initial_open to child components via content_tag_options



20
21
22
# File 'app/view_components/ui/accordion_item_component.rb', line 20

def value
  @value
end

Instance Method Details

#callObject



33
34
35
36
37
# File 'app/view_components/ui/accordion_item_component.rb', line 33

def call
  # Store context for child components (trigger and content)
  # ViewComponent renders slots in parent context, so we use helpers method
   :div, content, **item_html_attributes
end

#item_contextObject

Helper method to expose item context to child components



40
41
42
# File 'app/view_components/ui/accordion_item_component.rb', line 40

def item_context
  {item_value: @value, initial_open: @initial_open}
end