Module: RubyUIAdmin::Views::StructureRenderer
- 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
-
#render_structure(items, wrap_bare: true) ⇒ Object
wrap_bare:controls whether loose top-level fields get their own card.
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 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 |