Olá a todos! Como etapa final do nosso esforço para abandonar o sistema de renderização legado de “widgets”, estamos descontinuando o uso de widgets no Discourse e em breve o desativaremos completamente.
Cronograma
Estes são estimativas e sujeitos a alterações
Julho de 2025:
Adicionar avisos de descontinuação no núcleo e uma configuração de site experimental para desativá-los
Publicar anúncio no Meta
Agosto de 2025
Atualizar os plugins e componentes de tema oficiais para usar Componentes Glimmer.
Executar o Meta com os widgets desativados.
Habilitar mensagens de descontinuação com um banner de aviso para administradores.
Terceiro Trimestre de 2025:
Plugins e temas de terceiros precisam ser atualizados.
Quarto Trimestre de 2025:
O sistema de renderização de widgets será desativado por padrão usando deactivate_widgets_rendering: true. Haverá um curto período de tempo em que ele poderá ser reativado manualmente.
Remover o código legado e desativar o sistema de renderização de widgets
Plugins e temas não compatíveis deixarão de funcionar corretamente após isso.
O que isso significa para você?
Se algum dos seus plugins ou temas usar APIs de ‘widget’, você precisará atualizá-los para usar APIs mais novas ou Componentes Glimmer antes do prazo do quarto trimestre de 2025.
Eu tenho plugins ou temas personalizados instalados. Preciso atualizá-los?
Você precisará atualizar seus plugins ou temas se eles usarem algum dos seguintes:
createWidget
decorateWidget, changeWidgetSetting, reopenWidget, ou attachWidgetAction
O componente MountWidget
Dica Pro: Se você tiver extensões que usam alguma dessas personalizações, verá um aviso no console identificando qual plugin ou componente precisa ser atualizado.
Importante: Se você usa mais de um tema na sua instância, certifique-se de verificar todos eles, pois os avisos só aparecerão para plugins ativos e temas e componentes de tema atualmente em uso.
O ID de descontinuação é: discourse.widgets-end-of-life
Como isso se relaciona com a recente modernização do post-stream?
O post-stream foi a última parte importante do Discourse a ainda usar o sistema de renderização de widgets. Com sua modernização, agora podemos avançar com a aposentadoria completa do sistema de widgets. Dê uma olhada no guia de atualização para mais detalhes sobre essas mudanças.
Como eu atualizo?
Se você usa um plugin ou tema de terceiros: Verifique se o autor lançou uma versão atualizada que seja compatível com o novo sistema.
Se você é um autor de plugin/tema:
Substitua seus widgets personalizados por Componentes Glimmer
Use conectores de plugin-outlet para inseri-los na UI
Consulte nossos Guias do Desenvolvedor para mais informações sobre como fazer essas atualizações.
Quando você atualizar sua instalação do Discourse na próxima vez, o sistema de renderização de widgets será desativado e qualquer personalização baseada em widgets não será mais renderizada.
Por enquanto, em sites incompatíveis, o administrador pode reativar o comportamento antigo modificando os valores da seguinte configuração:
deactivate_widgets_rendering
Esta é a fase final antes da remoção do código antigo da base de código do Discourse, o que está previsto para acontecer em cerca de um mês. Subsequentemente, não será mais possível reativar os widgets.
Talvez uma pergunta boba, mas você acha que seria possível o Discourse oferecer um arquivo .md com um guia/ajudas que se pudesse fornecer à ferramenta de linha de comando (CLI) de sua escolha para auxiliar na migração de um componente de plugin?
Tentamos fornecer instruções de migração para os padrões de personalização mais comuns, como aqueles que modificaram o fluxo de posts.
É mais difícil escrever um guia mais abrangente porque praticamente tudo poderia ser feito usando widgets, então as necessidades de personalização restantes precisam ser convertidas em componentes caso a caso.
Estou monitorando esses tópicos e tentaremos responder às perguntas postadas aqui para ajudar aqueles que ainda precisam migrar.
Eu dei uma olhada rápida no código que parece estar acionando a descontinuação no seu fórum usando o console do navegador, e parece ser a seguinte linha:
const { iconNode } = require("discourse-common/lib/icon-library");
let iconsjira = iconNode('icons-jira');
iconNode era usado apenas por widgets, e agora é uma função noop (sem operação). No seu código, não parece que esta variável esteja sendo usada, então deve ser seguro simplesmente remover essas linhas.