Acho que precisamos de uma maneira geral de fazer isso, que seja específica e agnóstica em relação ao Theme Component - como temos agora.
Tenho outro Theme Component que usa essa técnica:
Então, são pelo menos dois do meu lado, e pode haver mais.
Acho que precisamos de uma maneira geral de fazer isso, que seja específica e agnóstica em relação ao Theme Component - como temos agora.
Tenho outro Theme Component que usa essa técnica:
Então, são pelo menos dois do meu lado, e pode haver mais.
Concordo. Criei uma coleção de componentes de blocos, cada um autônomo, em vez de empacotados em um único pacote: Blocks · GitLab.
No momento, posso colocar esses blocos em uma página inicial dedicada com meu componente Homepage Blocks, assim como posso usá-los com Right Sidebar Blocks ou em Bars.
Recentemente, fiz uma experiência com o tema Central, onde precisei de um layout de barra lateral personalizado. Eu poderia facilmente criar um framework de blocos para uma barra lateral personalizada e colocar componentes de blocos nela: https://central.kostka.studio (assim como colocar o componente Powered-by-discourse na barra lateral, apenas referenciando-o pelo nome).
Componentes de blocos autônomos são realmente a ferramenta mais útil que tenho no momento para construir personalizações de clientes de forma flexível e sustentável. Seria ótimo ter um caminho geral para apoiar isso.
Gostaria de reabrir este tópico, pois estou tentando descobrir a melhor maneira de lidar com meus componentes. Atualmente, vejo duas opções que têm desvantagens significativas: eu poderia criar um registro por componente de tema que renderiza blocos, mas isso meio que anula todo o propósito modular. Ou adicionar um globalmente através de um plugin, mas então meus componentes se tornam dependentes da instalação desse plugin.
Portanto, parece que ter uma API de registro de blocos global no core realmente ajudaria. Algo que os componentes de tema poderiam usar para invocar a renderização de blocos e também para registrar novos blocos.
Eu adoro trabalhar com a abordagem de blocos porque me permite dividir as preocupações entre o layout do aplicativo e o conteúdo do componente. O componente de bloco apenas lida com a renderização de seu conteúdo, e então é renderizado por outro componente no aplicativo. Posso remover toda a lógica de rota e outlet do componente de bloco, e posso facilmente reutilizar o mesmo bloco várias vezes em um layout e até mesmo em todo o aplicativo.
Eu acho que isso torna tudo mais enxuto e reutilizável, e é uma abordagem elegante no geral. Ter um suporte sólido para esse padrão no Discourse seria ótimo.