Configurações de Plugins Dependentes são ... INCRÍVEIS!

Existe documentação, mas atualmente está, quanto eu sei, fragmentada em vez de ser apresentada como um guia de desenvolvedor independente.

As principais referências autoritativas são:

  • Documentação do esquema em config/site_settings.yml:52, abrangendo depends_on, depends_on_values, depends_behavior e dependent_setting_display.

  • Orientações e exemplos mais detalhados em .skills/discourse-site-settings/SKILL.md:203.

  • Especificações de comportamento do backend em spec/lib/site_setting_extension_spec.rb:706.

  • Resolução de dependências do frontend em frontend/discourse/admin/services/admin-site-setting-store.js:41.

  • Exemplos de interface em frontend/discourse/tests/acceptance/admin-site-settings-test.js:142.

A sintaxe básica é:

child_setting:
  default: ""
  depends_on:
     - parent_setting
  depends_behavior: "hidden"

Para pais do tipo enum ou string:

 child_setting:
    default: ""
    depends_on:
      - parent_setting
    depends_on_values:
      parent_setting:
        - enabled_mode
        - another_mode
    depends_behavior: "hidden"
    dependent_setting_display: "inline"

Uma limitação importante: as dependências podem conter vários pais diretos, mas a resolução de dependências não é transitiva. Uma cadeia aninhada como A → B → C não faz com que C considere automaticamente se B está oculto por A; C apenas avalia o valor armazenado de B.

4 Curtiram