Module: RubyUIAdmin::Views::StructureRenderer

Included in:
Form, Show, ShowTab
Defined in:
app/components/ruby_ui_admin/views/structure_renderer.rb

Overview

Walks a resource's field structure (fields + panels + tabs) and renders it. The includer defines render_field(field) to render a single field row/input. Bare top-level fields are grouped into a default card.

Instance Method Summary collapse

Instance Method Details

#render_structure(items, wrap_bare: true) ⇒ Object

wrap_bare: controls whether loose top-level fields get their own card. It's true at the top level (so naked fields aren't unframed) and false inside a panel/tab — which already provide a card — to avoid a redundant nested card layer.



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'app/components/ruby_ui_admin/views/structure_renderer.rb', line 12

def render_structure(items, wrap_bare: true)
  buffer = []

  flush = lambda do
    next if buffer.empty?

    group = buffer.dup
    buffer.clear
    if wrap_bare
      render RubyUI::Card.new do
        render RubyUI::CardContent.new(class: "pt-6 space-y-4") do
          group.each { |field| render_field(field) }
        end
      end
    else
      group.each { |field| render_field(field) }
    end
  end

  items.each do |item|
    if item.is_a?(RubyUIAdmin::Fields::BaseField)
      buffer << item
    elsif item.is_a?(RubyUIAdmin::Structure::Panel)
      flush.call
      render_panel(item)
    elsif item.is_a?(RubyUIAdmin::Structure::TabGroup)
      flush.call
      render_tab_group(item)
    end
  end

  flush.call
end