Noviembre 2023 - refactorización de rutas de Discovery: ¿cómo afectará a mi tema/plugin?

Como parte de nuestro proyecto para actualizar Discourse a la última versión de Ember, hemos estado trabajando en una refactorización significativa de las rutas de Discovery (también conocidas como la ‘lista de temas’).

Este tema está dirigido a desarrolladores de temas/plugins y tiene como objetivo enumerar los tipos de actividades de temas/plugins que pueden verse afectadas por la refactorización.

Antecedentes

Esta refactorización es necesaria porque el Ember moderno ya no admite ‘outlets nombrados’ como {{outlet \"topics\"}}, que utilizábamos ampliamente en estas rutas. Esencialmente, todos los controladores/plantillas que se renderizaban previamente en outlets nombrados se han convertido en Componentes.

Aprovechamos la oportunidad para modernizar y consolidar el código relevante (por ejemplo, todos los tipos de rutas de discovery ahora comparten el mismo controlador y plantilla).

La implementación del cambio en el núcleo aún no está finalizada, pero se puede encontrar un trabajo en progreso en esta rama. No tenemos una fecha específica para la fusión, pero esperamos que sea dentro de las próximas semanas. Si tiene alguna pregunta o inquietud, ¡háganoslo saber!

¿Qué actividades de temas/plugins se ven afectadas?

Esta refactorización afecta predominantemente la capa del ‘controlador’. Las rutas apenas cambian, y todo, desde el componente <TopicList /> hacia abajo, tampoco se ve afectado.

Esperamos que el único impacto sea en temas/plugins que acceden profundamente al código central (por ejemplo, a través de modifyClass y anulaciones de plantillas). Las API y los outlets definidos no se ven afectados.

Anulaciones de plantillas

:shushing_face: Estas plantillas se han refactorizado en componentes. Cualquier anulación existente dejará de funcionar silenciosamente.

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

:boom: Estas plantillas han sido refactorizadas en gran medida. Cualquier anulación de plantilla existente probablemente causará errores catastróficos en el sitio.

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

Técnicamente, es posible anular las nuevas plantillas introducidas por este cambio. Sin embargo, las anulaciones de plantillas no se recomiendan y están en desuso.

Por lo tanto, todas las anulaciones de plantillas deben eliminarse y reemplazarse con API de extensión más robustas (por ejemplo, outlets de plugins). Si hay algo que esté haciendo y que no parezca posible con los puntos de extensión existentes de Discourse, ¡háganoslo saber!

Llamadas a modifyClass y lookup()

:wastebasket: Estas clases ya no existen. modifyClass dejará de funcionar silenciosamente. Las búsquedas devolverán nulo (y, por lo tanto, podrían generar errores). En los casos más populares, hemos introducidoshims para compatibilidad con versiones anteriores (ver notas a pie de página).

  • 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 clases han sido refactorizadas significativamente. Las llamadas a modifyClass y lookup pueden requerir refactorización:

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

Rutas

:motorway: Los nombres de las rutas (es decir, router.currentRouteName) no cambian.

:clipboard: Los hooks model() de la ruta Discovery (es decir, router.currentRoute.attributes) en su mayoría no cambian.

Outlets de Plugins

:electric_plug: Todos los outlets de plugins y sus argumentos no cambian.

HTML / CSS

:art: La estructura HTML y las clases se ven en gran medida sin afectar.


  1. Se ha agregado un shim para el acceso de solo lectura a la propiedad ‘model’ con un aviso de deprecación. ↩︎

  2. Se ha agregado un shim para el acceso de solo lectura a la propiedad ‘category’ con un aviso de deprecación. ↩︎

  3. Se ha agregado un shim para el acceso de solo lectura a la propiedad ‘tag’ con un aviso de deprecación. ↩︎

16 Me gusta

Estaremos expandiendo las pruebas de este cambio en nuestro hosting esta semana, con el objetivo de fusionarlo en main/tests-passed a principios de la próxima semana (6 de noviembre).

6 Me gusta

Este cambio ya está activo en main/tests-passed

3 Me gusta