Skip to main content

Add a settings tab

Register a form and command, then verify persistence.

1. Form

# app/forms/my_module/admin_config_form.rb
module MyModule
class AdminConfigForm < Decidim::Form
include Decidim::Toggle::ModuleConfigForm

self.module_config_name = Decidim::MyModule::MODULE_NAME

mimic :organization

attribute :enabled, :boolean
end
end

2. Register tab

In your module engine, after decidim_toggle.organization_settings_tabs:

# lib/decidim/my_module/engine.rb
initializer "decidim_my_module.organization_settings_tab", after: "decidim_toggle.organization_settings_tabs" do
Decidim::Toggle.settings_tabs :organization_settings do |tabs|
tabs.add_tab :my_module,
I18n.t("decidim_toggle.system.#{Decidim::MyModule::MODULE_NAME}.tab"),
form: MyModule::AdminConfigForm,
command: Decidim::Toggle::UpdateModuleConfigCommand,
module_name: Decidim::MyModule::MODULE_NAME,
position: 10
end
end
OptionRole
module_name:JSON row key; must match module_config_name on the form
position:Tab order (default: append)
open:Open this panel by default
if:Hide tab when false
form_layout_partial:Custom tab layout — Customize views

3. Verify

  1. Boot the host app.
  2. System → Organizations → Edit → open My module.
  3. Toggle enabled, save.
  4. Console: Decidim::Toggle.config_for(organization, :my_module)[:enabled]

Read / write config

Decidim::Toggle.config_for(organization, :my_module)
Decidim::Toggle.save_config!(organization, :my_module, { "enabled" => true })

Organization columns

When settings live on Decidim::Organization (SMTP, host, locales, …), use a custom Decidim::Form + custom Decidim::Command with the same add_tab contract. See built-in tabs in lib/decidim/toggle/organization_settings_tabs.rb.

See also