Desenvolvimento de Plugin - Maneira melhor de buscar dados para um modelo e re-renderizar widget?

Olá a todos!

Estou desenvolvendo um plugin que tenta carregar páginas que são wikilink’d como referências vinculadas.

Tenho uma implementação básica funcionando, mas não gosto de como o design está atualmente e queria ver se há APIs que estou perdendo que ajudariam a tornar isso mais suave.

Aqui está minha abordagem atual: discourse-wikilinks/assets/javascripts/initializers/wikilinks-init.js at main · dvargas92495/discourse-wikilinks · GitHub

Tl;dr:

  • usar api.reopenWidget no widget post-links para substituir o método html.
  • na primeira renderização do widget, buscar o título do tópico e, em seguida, pesquisar tópicos que tenham [[título]] em seu título.
  • Após a busca, agendar uma nova renderização com os dados da resposta, usando uma flag para garantir que não busquemos infinitamente na próxima renderização.

Essa abordagem é subótima porque:

  • Há um atraso entre a renderização inicial e quando o restante dos dados é renderizado.
  • A flag que impede a busca infinita parece propensa a erros no futuro.
  • Preciso fazer duas chamadas de API, uma para buscar o título do tópico (que deve estar disponível mais acima na árvore de widgets) e outra para os links.
  • Tenho que copiar e colar o método original do widget html no código do meu plugin, o que o deixa vulnerável a ser forkado.

Alguma ideia de como mitigar esses problemas? Idealmente, eu gostaria de editar a chamada original loadTopicView para incluir os wikilinks.

Além disso, o Discourse ou alguém da comunidade oferece chamadas de consultoria? Eu adoraria pagar por uma chamada com um especialista para me dar um mergulho profundo em tudo o que há para saber sobre como o Discourse é arquitetado e quais plugins estão disponíveis. Já passei pela maioria dos documentos de desenvolvimento e explorei bastante o código-fonte.