Novembro de 2023 - refatorando rotas Discovery: como isso afetará meu tema/plugin?

Como parte do nosso projeto para atualizar o Discourse para a versão mais recente do Ember, trabalhamos em uma refatoração significativa das rotas de Descoberta (também conhecidas como ‘lista de tópicos’).

Este tópico é direcionado a desenvolvedores de temas/plugins e visa listar os tipos de atividades de temas/plugins que podem ser afetadas pela refatoração.

Contexto

Esta refatoração é necessária porque o Ember moderno não suporta mais ‘outlets nomeados’ como {{outlet \"topics\"}}, que usávamos extensivamente nessas rotas. Essencialmente, todos os controllers/templates que anteriormente eram renderizados em outlets nomeados foram convertidos em Componentes.

Ao longo do processo, aproveitamos a oportunidade para modernizar e consolidar o código relevante (por exemplo, todos os tipos de rotas de descoberta agora compartilham o mesmo controller e template).

A implementação da mudança no core ainda não está finalizada, mas um trabalho em andamento pode ser encontrado neste branch. Não temos uma data específica para a fusão, mas esperamos que ocorra nas próximas semanas. Se você tiver alguma dúvida ou preocupação, por favor, nos avise!

Quais atividades de temas/plugins são afetadas?

Esta refatoração afeta predominantemente a camada de ‘controller’. As rotas permanecem em grande parte inalteradas, e tudo a partir do componente <TopicList /> para baixo também não é afetado.

Esperamos que o único impacto seja em temas/plugins que acessam profundamente o código do core (por exemplo, via modifyClass e substituições de template). APIs e outlets definidos não são afetados.

Substituições de Template

:shushing_face: Estes templates foram refatorados em componentes. Quaisquer substituições existentes deixarão de funcionar silenciosamente

  • navigation/categories
  • navigation/category
  • navigation/default
  • navigation/filter
  • discovery/topics

:boom: Estes templates foram extensivamente refatorados. Quaisquer substituições de template existentes provavelmente causarão erros catastróficos no site.

  • discovery
  • tag/show
  • user-topics-list
  • user/messages
  • discovery/categories
  • components/basic-topic-list
  • components/d-navigation

Tecnicamente, é possível substituir os novos templates introduzidos por esta mudança. No entanto, substituições de template não são recomendadas e estão sendo descontinuadas.

Portanto, todas as substituições de template devem ser removidas e substituídas por APIs de extensão mais robustas (por exemplo, plugin outlets). Se houver algo que você esteja fazendo que não pareça possível com os pontos de extensão existentes do Discourse, por favor, nos avise!

Chamadas modifyClass e lookup()

:wastebasket: Estas classes não existem mais. modifyClass deixará de funcionar silenciosamente. Lookups retornarão null (e, portanto, podem levar a erros). Nos casos mais populares, introduzimos shims para retrocompatibilidade (veja notas de rodapé)

  • controller:discovery
  • controller:discovery/topics[1]
  • controller:discovery-sortable (-> controller:discovery/list)
  • controller:discovery-filter (-> controller:discovery/filter)
  • controller:navigation/categories
  • controller:navigation/category [2]
  • controller:navigation/default
  • controller:tag/show [3]
  • controller:discovery.* (-> controller:discovery/list)

:technologist: Estas classes passaram por uma refatoração significativa. Chamadas modifyClass e lookup podem exigir refatoração:

  • route/discovery
  • route/discovery.*
  • route/tag-show

Rotas

:motorway: Nomes de rotas (ou seja, router.currentRouteName) não foram alterados

:clipboard: Hooks model() da rota de descoberta (ou seja, router.currentRoute.attributes) permanecem em grande parte inalterados

Plugin Outlets

:electric_plug: Todos os plugin outlets e seus argumentos não foram alterados.

HTML / CSS

:art: A estrutura HTML e as classes são em grande parte inalteradas


  1. O acesso somente leitura à propriedade ‘model’ foi shimmed com um aviso de depreciação ↩︎

  2. O acesso somente leitura à propriedade ‘category’ foi shimmed com um aviso de depreciação ↩︎

  3. O acesso somente leitura à propriedade ‘tag’ foi shimmed com um aviso de depreciação ↩︎

16 curtidas

Expandiremos os testes desta alteração em nossa hospedagem esta semana, com o objetivo de mesclar em main/tests-passed no início da próxima semana (6 de novembro).

6 curtidas

Esta alteração já está ativa em main/tests-passed

3 curtidas