Modificar comportamento padrão do botão \"Novo Tópico\"

Olá a todos,

Estou tentando modificar o comportamento padrão do botão “Novo Tópico” no Discourse 2.6.1. Tenho um plugin personalizado que altera as ações padrão do Ember para executar minha função. Funcionava corretamente ao usar uma versão anterior do Discourse (1.8.0), mas não consigo encontrar como obter o mesmo resultado na nova versão. O código é o seguinte:

const NavigationDefaultController = require('discourse/controllers/navigation/default').default;
const SearchResultsDefaultController = require('discourse/controllers/full-page-search').default;
...

function myFunction() {
    CÓDIGO AQUI
}
...
NavigationDefaultController.reopen({
  actions: {
    createTopic: myFunction,
  },
});

SearchResultsDefaultController.reopen({
  actions: {
    createTopic: myFunction,
  },
});

O primeiro controlador definido gerencia as ações do site principal (o que não funciona na nova versão) e o segundo define as ações a serem executadas ao realizar uma busca no aplicativo (e funciona na nova versão também).

Percebi que os botões “Novo Tópico” são criados usando as ações “createTopic” e “clickCreateTopicButton”, mas nenhuma delas funciona no site principal. Preciso modificar outra ação ou devemos usar um controlador diferente?

Obrigado

1 curtida

Alguém pode me ajudar?

1 curtida

Entendo sua dor.

Como adicionar um campo personalizado a um tópico é minha melhor sugestão. Embora esteja um pouco distante do seu problema, está bem documentado.

1 curtida

Olá @pfaffman,

Obrigado pela sugestão. No entanto, se não me engano, esse plugin permite adicionar um novo campo personalizado a um tópico, mas o que eu quero fazer é executar meu próprio código JavaScript ao clicar no botão “Novo Tópico”. Acredito que meu problema esteja relacionado ao controlador do Discourse a ser utilizado, ao nome da função que é executada e a como sobrescrever essa função. Poderia me esclarecer isso?

Obrigado

Bom, merda. Desculpe. Eu estava pensando que havia algum código JavaScript nele (por exemplo, em discourse-topic-custom-fields/assets/javascripts/discourse) que poderia ser útil para ver como conectar essas coisas. Ainda não sou muito bom com as coisas do front-end, então receio que essa tenha sido a minha melhor resposta gratuita. :man_shrugging:

Obrigado pela sua ajuda, @pfaffman. Finalmente encontrei o controlador e a ação que precisava modificar, e o plugin está funcionando novamente no Discourse 2.6.x

const NavigationDefaultController = require('discourse/components/d-navigation').default;
const SearchResultsDefaultController = require('discourse/controllers/full-page-search').default;
...

function myFunction() {
    CÓDIGO AQUI
}
...
NavigationDefaultController.reopen({
  actions: {
    clickCreateTopicButton: myFunction,
  },
});

SearchResultsDefaultController.reopen({
  actions: {
    createTopic: myFunction,
  },
});

Nota: Este é o código do plugin dentro de yourPlugin/assets/javascripts/discourse/initializers

Assim que clico no botão “Novo Tópico”, meu código JavaScript é executado e os usuários recebem o menu que criei para o fórum.

3 curtidas

Ótimo! Fico muito feliz que você conseguiu! Ainda é um mistério para mim onde as coisas vão e como nomeá-las, mas estou melhorando.