Novembre 2023 - refactorisation des routes Discovery : comment cela va-t-il affecter mon thème/plug-in ?

Dans le cadre de notre projet de mise à niveau de Discourse vers la dernière version d’Ember, nous avons travaillé sur une refonte importante des routes de découverte (également appelées « liste de sujets »).

Ce sujet s’adresse aux développeurs de thèmes/plugins et vise à répertorier les types d’activités de thèmes/plugins qui pourraient être affectés par la refonte.

Contexte

Cette refonte est nécessaire car Ember moderne ne prend plus en charge les « outlets nommés » comme {{outlet \"topics\"}}, que nous utilisions intensivement sur ces routes. Essentiellement, tous les contrôleurs/modèles qui étaient précédemment rendus dans des outlets nommés ont été convertis en Composants.

Au passage, nous avons profité de l’occasion pour moderniser et consolider le code pertinent (par exemple, tous les types de routes de découverte partagent désormais le même contrôleur et le même modèle).

L’implémentation du changement dans le cœur n’est pas encore finalisée, mais un travail en cours peut être trouvé sur cette branche. Nous n’avons pas de date précise pour la fusion, mais nous nous attendons à ce qu’elle ait lieu dans les prochaines semaines. Si vous avez des questions ou des préoccupations, n’hésitez pas à nous le faire savoir !

Quelles activités de thèmes/plugins sont affectées ?

Cette refonte affecte principalement la couche « contrôleur ». Les routes sont largement inchangées, et tout ce qui concerne le composant <TopicList /> et en dessous n’est pas affecté.

Nous nous attendons à ce que le seul impact concerne les thèmes/plugins qui accèdent en profondeur au code du cœur (par exemple, via modifyClass et les remplacements de modèles). Les API et les outlets définis ne sont pas affectés.

Remplacements de modèles

:shushing_face: Ces modèles ont été refactorisés en composants. Tout remplacement existant cessera de fonctionner silencieusement.

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

:boom: Ces modèles ont été fortement refactorisés. Tout remplacement de modèle existant risque de provoquer des erreurs catastrophiques sur le site.

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

Techniquement, il est possible de remplacer les nouveaux modèles introduits par ce changement. Cependant, les remplacements de modèles ne sont pas recommandés et sont en voie de disparition.

Par conséquent, tous les remplacements de modèles doivent être supprimés et remplacés par des API d’extension plus robustes (par exemple, des outlets de plugins). S’il y a quelque chose que vous faites qui ne semble pas possible avec les points d’extension existants de Discourse, veuillez nous en informer !

Appels modifyClass et lookup()

:wastebasket: Ces classes n’existent plus. modifyClass cessera de fonctionner silencieusement. Les recherches retourneront null (et pourraient donc entraîner des erreurs). Dans les cas les plus courants, nous avons introduit des shims pour la rétrocompatibilité (voir les notes de bas de page).

  • controller:discovery
  • controller:discovery/topics[^dis-top-shim]
  • controller:discovery-sortable (-> controller:discovery/list)
  • controller:discovery-filter (-> controller:discovery/filter)
  • controller:navigation/categories
  • controller:navigation/category [^nav-cat-shim]
  • controller:navigation/default
  • controller:tag/show [^tag-show-shim]
  • controller:discovery.* (-> controller:discovery/list)

[^dis-top-shim] : L’accès en lecture seule à la propriété ‘model’ a été shimé avec un avis de dépréciation.
[^nav-cat-shim] : L’accès en lecture seule à la propriété ‘category’ a été shimé avec un avis de dépréciation.
[^tag-show-shim] : L’accès en lecture seule à la propriété ‘tag’ a été shimé avec un avis de dépréciation.

:technologist: Ces classes ont subi une refonte importante. Les appels modifyClass et lookup peuvent nécessiter une refonte :

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

Routes

:motorway: Les noms de routes (c’est-à-dire router.currentRouteName) sont inchangés.

:clipboard: Les hooks model() des routes de découverte (c’est-à-dire router.currentRoute.attributes) sont en grande partie inchangés.

Outlets de plugins

:electric_plug: Tous les outlets de plugins et leurs arguments sont inchangés.

HTML / CSS

:art: La structure HTML et les classes sont largement inchangées.

16 « J'aime »

Nous étendrons les tests de cette modification à l’ensemble de notre hébergement cette semaine, dans le but de fusionner dans main/tests-passed au début de la semaine prochaine (6 novembre).

6 « J'aime »

Ce changement est maintenant en ligne dans main/tests-passed

3 « J'aime »