¡La configuración de complementos dependientes es ... INCREÍBLE!

Vaya… esto es realmente :chefs_kiss:

Permíteme ilustrarlo.

Aquí hay un selector en la última versión de Chatbot, fíjate que está en estado “desactivado”:

Ahora cambiemos esa selección:

y aparecen como por arte de :sparkles: configuraciones que solo deben considerarse cuando se selecciona ese valor.

Esta es una forma fantástica de reducir el desorden innecesario en la configuración de los complementos y hacer que la configuración sea más sencilla con menos carga cognitiva :tada:

Daniel Labelle's Fast Cleaning Challenge

12 Me gusta

se cae la mandíbula He estado esperando algo así durante un tiempo realmenteee largo. se apresura a revisar el repositorio ¿Hay alguna documentación al respecto?

1 me gusta

No dudes en usar Chatbot como un ejemplo útil de su uso:

y estoy seguro de que ya hay un montón de usos en el núcleo …

2 Me gusta

Existe documentación, pero actualmente está, por lo que yo sé, fragmentada en lugar de presentarse como una guía independiente para desarrolladores.

Las referencias autoritativas principales son:

  • Documentación del esquema en config/site_settings.yml:52, que cubre depends_on, depends_on_values, depends_behavior y dependent_setting_display.

  • Orientación y ejemplos más detallados en .skills/discourse-site-settings/SKILL.md:203.

  • Especificaciones de comportamiento del backend en spec/lib/site_setting_extension_spec.rb:706.

  • Resolución de dependencias del frontend en frontend/discourse/admin/services/admin-site-setting-store.js:41.

  • Ejemplos de interfaz de usuario en frontend/discourse/tests/acceptance/admin-site-settings-test.js:142.

La sintaxis básica es:

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

Para padres de tipo enum o string:

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

Una limitación importante: las dependencias pueden contener múltiples padres directos, pero la resolución de dependencias no es transitiva. Una cadena anidada como A → B → C no hace que C tenga en cuenta automáticamente si B está oculto por A; C solo evalúa el valor almacenado de B.

4 Me gusta