Ocultar ciertas configuraciones de grupo si el nombre del grupo incluye un nombre específico

He creado un plugin personalizado para incluir campos adicionales para grupos. Pero solo se aplican a grupos con el nombre “chapter” en él. Por lo tanto, no tiene sentido tenerlos en grupos para otros propósitos. ¿Hay alguna forma de crear una condición que verifique, por ejemplo, if chapter in group.name; then chapter = true?

Tengo lo siguiente:

Quiero ocultar el grupo de control en la parte superior si el nombre del grupo no contiene la palabra chapter. Parece que ya uso algo de Jinja2 del ejemplo que utilicé. Si eso es similar a otros Jinja2, entonces ciertamente puedo crear una condición allí. Pero entonces necesito saber algunas cosas.

  • Si Jinja2 está (completamente) disponible, ¿cómo puedo acceder a la variable del nombre del grupo para crear la condición?
  • Si Jinja2 no está (completamente) disponible, ¿cómo puedo crear esta condición entonces? Probablemente algún otro JavaScript debería establecer un booleano, supongo. Pero no conozco la estructura de estas variables de grupo y la lógica de JavaScript, ¡cualquier ejemplo sería genial!

Oh espera… ahora veo de repente algunos métodos para probar. Si Jinja2 funciona aquí, entonces efectivamente en g.json el nombre del grupo es visible y se puede usar para una condición…

Y no, eso no funciona. Y no es Jinja2, son cosas específicas de Handlebars (¿pero supongo que contains no es una función nativa?).

{{#contains "chapter" group.name}}
<div class='control-group'>
    <label class="control-label">{{i18n 'admin.groups.my_map.map_title'}}</label>
    {{input type="checkbox" checked=group.custom_fields.show_map}}
    <span>{{i18n 'admin.groups.my_map.map_switch'}}</span>
</div>
{{/contains}}

Pero eso no funciona, obtengo un montón de errores. Probablemente no estoy usando la búsqueda de variables correcta. Aunque reemplazar group.name con simplemente "chapter_netherlands" también falla.

Error occurred:

- While rendering:
  -top-level
    application
      discourse-root
        group
          group.manage
            group.manage.profile
              groups-form-profile-fields
                plugin-outlet
                  plugin-connector

Uncaught Error: Attempted to resolve `contains`, which was expected to be a component, but nothing was found.

¿Alguien puede indicarme la dirección correcta, por favor? :nerd_face:

Entiendo y acepto que tengo que crear estas funciones yo mismo, no es como Jinja2 con cosas útiles integradas para hacer esto.

Pero, ¿dónde creo estas funciones de handlebars en mi plugin? Veo bastantes ejemplos aquí: Repository search results · GitHub

Pero realmente no veo un patrón en la estructura de esta carpeta. He creado mi propia función en discourse-group-custom-fields/assets/javascripts/discourse/app/helpers/contains.js, pero cuando intento usarla en discourse-group-custom-fields/assets/javascripts/discourse/connectors/group-edit/field-container.hbs obtengo el error Uncaught Error: Attempted to resolve "contains", which was expected to be a component, but nothing was found.. Así que, obviamente, esta no es una ruta donde Discourse esté buscando, o estoy haciendo algo mal.

import RawHandlebars from "discourse-common/lib/raw-handlebars";
import { htmlSafe } from "@ember/template";
import { rawConnectorsFor } from "discourse/lib/plugin-connectors";

//RawHandlebars.registerHelper("contains", function (args) {
//  const connectors = rawConnectorsFor(args.hash.name);
//  if (connectors.length) {
//    const output = connectors.map((c) => c.template({ context: this }));
//    return htmlSafe(output.join(""));
//  }
//});


Handlebars.registerHelper('contains', function(needle, haystack, options) {
     needle = Handlebars.escapeExpression(needle);
     haystack = Handlebars.escapeExpression(haystack);
     return (haystack.indexOf(needle) > -1) ? options.fn(this) : options.inverse(this);
});

El tema a continuación sugiere que podría estar en el directorio de inicializadores y tener la extensión es6.

Así que moví mi contains.js a ese directorio y agregué .e6 como extensión y obtuve el mismo error. Alguna ayuda o documentación sería genial :slight_smile: