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

Ah… isso é realmente :chefs_kiss:

Deixe-me ilustrar.

Aqui está um seletor na versão mais recente do Chatbot, note que está no estado “desligado”:

Agora, vamos alterar essa seleção:

e ele revela, como por :sparkles:, configurações que só precisam ser consideradas quando esse valor está selecionado.

Esta é uma maneira fantástica de reduzir a desordem desnecessária nas configurações do plugin e tornar as coisas mais simples de configurar, com menos carga cognitiva :tada:

Daniel Labelle's Fast Cleaning Challenge

12 curtidas

queixo cai Eu estava esperando por algo assim há um tempo muiiiito longo. corre para verificar o repositório Existe alguma documentação sobre isso?

1 curtida

Sinta-se à vontade para usar o Chatbot como um exemplo útil de como utilizá-lo:

e tenho certeza de que já há vários usos no núcleo por aí…

2 curtidas

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 curtidas