Class: UI::ResizablePanelComponent

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

Overview

ResizablePanel component (ViewComponent) Individual resizable panel within a panel group

Examples:

Basic usage

<%= render UI::PanelComponent.new(default_size: 50) do %>
  Panel content
<% end %>

With constraints

<%= render UI::PanelComponent.new(default_size: 50, min_size: 20, max_size: 80) do %>
  Constrained panel
<% end %>

Instance Method Summary collapse

Methods included from ResizablePanelBehavior

#merged_panel_data_attributes, #panel_base_classes, #panel_data_attributes, #panel_html_attributes

Constructor Details

#initialize(default_size: nil, min_size: nil, max_size: nil, classes: "", attributes: {}) ⇒ ResizablePanelComponent

Returns a new instance of ResizablePanelComponent.

Parameters:

  • default_size (Integer, Float) (defaults to: nil)

    initial size as percentage (0-100)

  • min_size (Integer, Float, nil) (defaults to: nil)

    minimum size as percentage

  • max_size (Integer, Float, nil) (defaults to: nil)

    maximum size as percentage

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

    additional CSS classes

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

    additional HTML attributes



23
24
25
26
27
28
29
# File 'app/view_components/ui/resizable_panel_component.rb', line 23

def initialize(default_size: nil, min_size: nil, max_size: nil, classes: "", attributes: {})
  @default_size = default_size
  @min_size = min_size
  @max_size = max_size
  @classes = classes
  @attributes = attributes
end

Instance Method Details

#callObject



31
32
33
34
35
36
37
38
# File 'app/view_components/ui/resizable_panel_component.rb', line 31

def call
  attrs = panel_html_attributes
  attrs[:data] = attrs[:data].merge(@attributes.fetch(:data, {}))

   :div, **attrs.merge(@attributes.except(:data)) do
    content
  end
end