Ocultar certas configurações de grupo se o nome do grupo incluir um nome específico

Criei um plugin personalizado para incluir alguns campos extras para grupos. Mas eles só se aplicam a grupos com o nome “chapter” incluído. Portanto, não faz sentido tê-los em grupos para outros fins. Existe alguma maneira de criar uma condição que verifique, por exemplo, if chapter in group.name; then chapter = true?

Eu tenho o seguinte:

Quero ocultar o grupo de controle no topo se o nome do grupo não tiver a palavra chapter nele. Eu pareço já usar algumas coisas do Jinja2 do exemplo que usei. Se isso for parecido com outros Jinja2, então certamente posso criar tal condição lá. Mas então preciso saber algumas coisas.

  • Se o Jinja2 estiver (totalmente) disponível, como posso acessar a variável do nome do grupo para criar a condição?
  • Se o Jinja2 não estiver (totalmente) disponível, como posso criar essa condição então? Provavelmente algum outro JavaScript deveria definir um booleano, suponho. Mas a estrutura dessas variáveis de grupo e a lógica JavaScript não são conhecidas por mim, quaisquer exemplos seriam ótimos!

Ah, espere… Agora vejo alguns métodos para testar. Se Jinja2 funcionar aqui, então de fato em g.json o nome do grupo é visível e pode ser usado para uma condição…

E não, isso não funciona. E não é Jinja2, são coisas específicas do Handlebars (mas suponho que contains não seja uma função 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}}

Mas isso não funciona, recebo um monte de erros. Provavelmente não estou usando a consulta de variável correta. Embora substituir group.name por simplesmente "chapter_netherlands" também falhe.

Ocorreu um erro:

- Durante a renderização:
  -nível superior
    aplicativo
      discourse-root
        grupo
          grupo.gerenciar
            grupo.gerenciar.perfil
              campos-de-perfil-formulário-grupos
                saída-de-plugin
                  conector-de-plugin

Erro não capturado: Tentativa de resolver `contains`, que era esperado ser um componente, mas nada foi encontrado.

Alguém pode me dar uma direção, por favor? :nerd_face:

Entendo e aceito que preciso criar essas funções, não é como o Jinja2 com coisas úteis integradas para fazer isso.

Mas onde devo criar essas funções do handlebars no meu plugin? Vejo vários exemplos aqui: Repository search results · GitHub

Mas não vejo realmente um padrão nesta estrutura de pastas. Criei minha própria função em discourse-group-custom-fields/assets/javascripts/discourse/app/helpers/contains.js, mas quando tento usá-la em discourse-group-custom-fields/assets/javascripts/discourse/connectors/group-edit/field-container.hbs recebo o erro Uncaught Error: Attempted to resolve "contains", which was expected to be a component, but nothing was found.. Então, obviamente, este não é um caminho onde o Discourse está procurando, ou estou fazendo algo errado.

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);
});

O tópico abaixo sugere que pode estar no diretório de inicializadores e ter a extensão es6.

Então movi meu contains.js para esse diretório e adicionei .e6 como extensão e recebi o mesmo erro. Alguma ajuda ou documentação seria ótima :slight_smile: