É possível passar parâmetros para a API que cria Links da Comunidade?

p. ex.

       api.addCommunitySectionLink({
         name: "intersection-navigator",
         route:"tags.intersection",
         title: I18n.t("tag_intersection_navigator.link.title"),
         text: I18n.t("tag_intersection_navigator.link.text")
       })

… irá falhar porque essa rota requer um tag_id.

Eu tentei adicionar:

        params: { tag_id:  siteSettings.discourse_tag_intersection_navigator_all_word },
        model: { tag_id: siteSettings.discourse_tag_intersection_navigator_all_word },

… mas eu suspeito fortemente que isto não seja processado como necessário pela api …

4 curtidas

Ah, fiz progresso!

Isso envolve isto:

3 curtidas

Especificamente, acho que está aqui: discourse/app/assets/javascripts/discourse/app/lib/sidebar/custom-community-section-links.js at d0c3f3b8fe6905e7e33ae4944cdf44c11ccc0df6 · discourse/discourse · GitHub

se adicionarmos isso, deve funcionar:

get models() {
 return args.models;
}
3 curtidas

Ah, obrigado por abrir!

1 curtida

Ah, e como existe uma condição typeof args === "function", você poderia fazer algo assim imediatamente:

api.addCommunitySectionLink((Base) =">
  class CustomLink extends Base {
    get name() {
      return "intersection-navigator";
    }

    get route() {
      return "tag.show";
    }

    get models() {
      return ["tagid"];
    }

    get title() {
      return I18n.t("tag_intersection_navigator.link.title");
    }

    get text() {
      return I18n.t("tag_intersection_navigator.link.text");
    }

  }
);
1 curtida

sim, é o que já estou fazendo… mas tem algo engraçado mais adiante no processo

1 curtida

Por alguma razão, isso não está funcionando e estou recebendo uma reclamação sobre a falta de postStream ao clicar:

api.addCommunitySectionLink((baseSectionLink) => {
        return class CustomSectionLink extends baseSectionLink {
          get name() {
            return "intersection-navigator";
          }

          get route() {
            return "tags.intersection";
          }

          get models() {
            return [{tag_id: siteSettings.discourse_tag_intersection_navigator_all_word}];
          }

          get title() {
            return I18n.t("tag_intersection_navigator.link.title")
          }

          get text() {
            return I18n.t("tag_intersection_navigator.link.text");
          }
        };
      });

É quase como se você precisasse incluir o modelo para a rota atual, o que é estranho!

1 curtida

qual é a saída dessa configuração? parece funcionar bem quando eu faço manualmente:

get models() {
  return ["featured", "tv"];
}
2 curtidas

Sim, isso funciona, isso é realmente útil, obrigado!

A configuração é apenas uma string. Acho que estava pensando demais.

O nome “models” para os parâmetros da consulta não é 100% intuitivo, no entanto?

Seu PR deixará isso muito mais organizado, obrigado!

2 curtidas

sim, também não ficou claro para mim no início, mas é porque no final ele usa o componente LinkTo do Ember, que espera um argumento de modelo…

1 curtida

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.