Sha256: ef4fa3002b799f738e081ae5b70413c821735984f5cb2ebee4d37d3cdcf23750

Contents?: true

Size: 1.78 KB

Versions: 18

Compression:

Stored size: 1.78 KB

Contents

class Avo::Resources::Items::TabGroup
  prepend Avo::Concerns::IsResourceItem

  include Avo::Concerns::HasItems
  include Avo::Concerns::HasItemType
  include Avo::Concerns::IsVisible
  include Avo::Concerns::VisibleInDifferentViews

  attr_accessor :index
  attr_accessor :style

  def initialize(index: 0, view: nil, style: nil, **args)
    @index = index
    @items_holder = Avo::Resources::Items::Holder.new
    @view = Avo::ViewInquirer.new view
    @style = style
    @args = args

    post_initialize if respond_to?(:post_initialize)
  end

  def turbo_frame_id
    "#{Avo::Resources::Items::TabGroup.to_s.parameterize} #{index}".parameterize
  end

  class Builder
    class << self
      def parse_block(**args, &block)
        Docile.dsl_eval(new(**args), &block).build
      end
    end

    attr_reader :items_holder

    delegate :tab, to: :items_holder

    def initialize(style: nil)
      @group = Avo::Resources::Items::TabGroup.new(style: style)
      @items_holder = Avo::Resources::Items::Holder.new
    end

    def field(field_name, **args, &block)
      parsed = Avo::Dsl::FieldParser.new(id: field_name, order_index: @items_index, **args, &block).parse
      field_instance = parsed.instance

      name = field_instance.name
      tab = Avo::Resources::Items::Tab.new name: name

      if field_instance.has_own_panel?
        tab.items_holder.add_item parsed.instance
      else
        # If the field is not in a panel, create one and add it
        panel = Avo::Resources::Items::Panel.new name: name
        panel.items_holder.add_item parsed.instance
        # Add that panel to the items_holder
        tab.items_holder.add_item panel
      end

      @items_holder.tabs tab
    end

    # Fetch the tab
    def build
      @group.items_holder = @items_holder
      @group
    end
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
avo-3.0.1.beta23 lib/avo/resources/items/tab_group.rb
avo-3.0.1.beta20 lib/avo/resources/items/tab_group.rb
avo-3.0.1.beta21 lib/avo/resources/items/tab_group.rb
avo-3.0.1.beta17 lib/avo/resources/items/tab_group.rb
avo-3.0.1.beta22 lib/avo/resources/items/tab_group.rb
avo-3.0.1.beta18 lib/avo/resources/items/tab_group.rb
avo-3.0.1.beta19 lib/avo/resources/items/tab_group.rb
avo-3.0.1.beta24 lib/avo/resources/items/tab_group.rb
avo-3.0.1.beta15 lib/avo/resources/items/tab_group.rb
avo-3.0.1.beta16 lib/avo/resources/items/tab_group.rb
avo-3.0.1.beta14 lib/avo/resources/items/tab_group.rb
avo-3.0.1.beta12 lib/avo/resources/items/tab_group.rb
avo-3.0.1.beta13 lib/avo/resources/items/tab_group.rb
avo-3.0.1.beta10 lib/avo/resources/items/tab_group.rb
avo-3.0.1.beta11 lib/avo/resources/items/tab_group.rb
avo-3.0.0.pre19 lib/avo/resources/items/tab_group.rb
avo-3.0.1.beta8 lib/avo/resources/items/tab_group.rb
avo-3.0.1.beta9 lib/avo/resources/items/tab_group.rb