Class: Decidim::Toggle::SettingsTabs

Inherits:
Object
  • Object
show all
Defined in:
lib/decidim/toggle/settings_tabs.rb

Overview

Builds a list of settings tabs from registered configurations (same pattern as Decidim::Menu).

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ SettingsTabs

Returns a new instance of SettingsTabs.



9
10
11
12
13
# File 'lib/decidim/toggle/settings_tabs.rb', line 9

def initialize(name)
  @name = name
  @items = []
  @removed_items = []
end

Instance Method Details

#add_tab(identifier, label, form:, **options) ⇒ Object

Tab with form + command: common layout renders form.all_fields and submits to generic controller.

Parameters:

  • identifier (Symbol)

    Tab id

  • label (String)

    Tab button label

  • form (Class)

    Decidim::Form subclass (must respond to .from_model(organization))

  • command (Class)

    Decidim::Command that receives (organization, form)

  • options (Hash)

    :position, :if, :open, :form_layout_partial (optional full tab layout partial)



31
32
33
34
35
36
37
38
# File 'lib/decidim/toggle/settings_tabs.rb', line 31

def add_tab(identifier, label, form:, **options)
  command = options.fetch(:command)
  options = { position: (1 + @items.length) }.merge(options)

  module_name = options[:module_name]
  registry.register_form_tab(identifier, form, command, module_name:)
  @items << SettingsTabItem.new(identifier, label, options.merge(form_class: form, command_class: command))
end

#build_for(context, **options) ⇒ Object



15
16
17
18
19
20
21
22
# File 'lib/decidim/toggle/settings_tabs.rb', line 15

def build_for(context, **options)
  raise "Settings tabs #{@name} is not registered" if registry.blank?

  registry.configurations.each do |configuration|
    context.instance_exec(self, **options, &configuration)
  end
  registry.mark_configurations_applied!
end

#itemsObject



44
45
46
47
# File 'lib/decidim/toggle/settings_tabs.rb', line 44

def items
  @items.reject! { |item| @removed_items.include?(item.identifier) }
  @items.select(&:visible?).sort_by(&:position)
end

#remove_tab(identifier) ⇒ Object



40
41
42
# File 'lib/decidim/toggle/settings_tabs.rb', line 40

def remove_tab(identifier)
  @removed_items << identifier
end