Sono d’accordo. Ho creato una raccolta di componenti a blocchi, ognuno autonomo, anziché raggruppato in un unico pacchetto: Blocks · GitLab.
Al momento posso inserire questi blocchi su una homepage dedicata con il mio componente Homepage Blocks, così come posso usarli con Right Sidebar Blocks, o su Bars.
Recentemente ho fatto una prova sul tema Central in cui avevo bisogno di un layout di barra laterale personalizzato. Potrei facilmente costruire un framework di blocchi per una barra laterale personalizzata e inserirci componenti a blocchi: https://central.kostka.studio (oltre a inserire il componente Powered-by-discourse nella barra laterale, semplicemente facendovi riferimento per nome)
I componenti a blocchi autonomi sono davvero lo strumento più utile che ho al momento per creare personalizzazioni per i clienti in un approccio flessibile e manutenibile. Sarebbe fantastico avere un percorso generale per supportare questo.
Vorrei sollecitare questo punto perché sto cercando di capire il modo migliore per gestire i miei componenti. Al momento vedo due opzioni che hanno entrambe notevoli svantaggi: potrei creare un registro per ogni componente del tema che renderizza blocchi, ma ciò vanifica in parte lo scopo modulare. Oppure aggiungerne uno globalmente tramite un plugin, ma poi i miei componenti diventano dipendenti dall’installazione di quel plugin.
Quindi sembra che avere un’API di registrazione globale dei blocchi nel core aiuterebbe molto. Qualcosa che i componenti del tema potrebbero usare per invocare il rendering dei blocchi e anche per registrare nuovi blocchi.
Mi piace lavorare con l’approccio a blocchi perché mi permette di separare le preoccupazioni tra il layout dell’app e il contenuto del componente. Il componente blocco gestisce semplicemente il rendering del suo contenuto, quindi viene renderizzato da un altro componente nell’app. Posso eliminare tutta la logica di route e outlet dal componente blocco e posso facilmente riutilizzare lo stesso blocco più volte in un layout e persino in tutta l’app.
Trovo che renda tutto più snello e riutilizzabile ed è un approccio elegante nel complesso. Avere un solido supporto per questo pattern in Discourse sarebbe fantastico.