Développement de plugins - Meilleure façon de récupérer des données pour un modèle et de réafficher un widget ?

Salut à tous !

Je suis en train de développer un plugin qui tente de charger les pages qui sont liées par des wikilinks comme références liées.

J’ai une implémentation de base qui fonctionne, mais je n’aime pas l’aspect du design actuel et je voulais voir s’il existait des API que j’aurais manquées et qui pourraient aider à rendre cela plus fluide.

Voici mon approche actuelle : discourse-wikilinks/assets/javascripts/initializers/wikilinks-init.js at main · dvargas92495/discourse-wikilinks · GitHub

En bref :

  • utiliser api.reopenWidget sur le widget post-links pour remplacer la méthode html.
  • lors du premier rendu du widget, récupérer le titre du sujet, puis rechercher les sujets qui ont [[titre]] dans leur titre.
  • après la récupération, planifier un nouveau rendu avec les données de réponse, en utilisant un drapeau pour s’assurer que nous ne faisons pas de récupération infinie lors du prochain rendu.

Cette approche est sous-optimale car :

  • Il y a un délai entre le rendu initial et le rendu des autres données.
  • Le drapeau empêchant la récupération infinie semble sujet aux erreurs à l’avenir.
  • Je dois effectuer deux appels API, un pour récupérer le titre du sujet (qui devrait être disponible plus haut dans l’arborescence des widgets) et un autre pour les liens.
  • Je dois copier-coller la méthode de widget html originale dans le code de mon plugin, ce qui le rend vulnérable à être forké.

Des idées pour atténuer ces problèmes ? Idéalement, j’aimerais modifier l’appel original loadTopicView pour inclure les wikilinks.

Est-ce que Discourse ou quelqu’un de la communauté propose des appels de conseil ? J’aimerais payer pour un appel avec un expert afin d’obtenir une présentation approfondie de l’architecture de Discourse et des plugins disponibles. J’ai déjà parcouru la plupart des documents de développement et j’ai pas mal navigué dans le code source.