Sviluppo Plugin - Modo migliore per recuperare dati per un modello e re renderizzare un widget?

Ciao a tutti!

Sto sviluppando un plugin che tenta di caricare pagine che sono wikilink’d come riferimenti collegati.

Ho un’implementazione di base funzionante, ma non mi piace come appare attualmente il design e volevo vedere se ci sono API che mi mancano che aiuterebbero a rendere questo processo più agevole.

Ecco il mio approccio attuale: discourse-wikilinks/assets/javascripts/initializers/wikilinks-init.js at main · dvargas92495/discourse-wikilinks · GitHub

Tl;dr:

  • utilizzare api.reopenWidget sul widget post-links per sovrascrivere il metodo html.
  • alla prima renderizzazione del widget, recuperare il titolo dell’argomento e quindi cercare gli argomenti che hanno [[titolo]] nel loro titolo.
  • Dopo il recupero, pianificare una ri-renderizzazione con i dati della risposta, utilizzando un flag per assicurarci di non recuperare all’infinito alla renderizzazione successiva.

Questo approccio è subottimale perché:

  • C’è un ritardo tra la renderizzazione iniziale e quando vengono renderizzati i dati rimanenti.
  • Il flag che impedisce il recupero infinito sembra incline all’errore in futuro.
  • Devo effettuare due chiamate API, una per recuperare il titolo dell’argomento (che dovrebbe essere disponibile più in alto nell’albero dei widget) e poi una per i link.
  • Devo copiare e incollare il metodo del widget html originale nel codice del mio plugin, il che lo rende vulnerabile a essere forkato.

Qualche idea su come mitigare questi problemi? Idealmente vorrei modificare la chiamata originale loadTopicView per includere i wikilinks.

Inoltre, Discourse o qualcuno della community offre chiamate di consulenza? Mi piacerebbe pagare per una chiamata con un esperto per avere un’immersione approfondita su tutto ciò che c’è da sapere su come è architettato Discourse e quali plugin sono disponibili. Ho già esaminato la maggior parte della documentazione di sviluppo e ho navigato un po’ nel codebase.