How do I customise the styling of "solved topics" in the main list?

TL;DR

Cela ajoutera une classe topic-solution aux messages marqués comme réponse.

api.addPostClassesCallback((attrs) => {
  if (attrs.accepted_answer) return ["topic-solution"];
});

Les classes attribuées à un message sont déterminées ici.

Le hook que vous recherchez existe déjà à la toute fin de ce fichier… comme ceci.

L’API des plugins propose une méthode qui vous permet d’ajouter des classes à un message en fonction d’une condition.

https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/lib/plugin-api.js#L819-L829

Son fonctionnement consiste à appliquer un callback donné et à retourner une classe à ajouter si la condition est remplie.

Lorsque le callback est déclenché, Discourse lui transmet les attributs du message. Vous pouvez donc, par exemple, faire quelque chose comme ceci.

api.addPostClassesCallback((attrs) => {
  console.log(attrs);
});

Si vous vérifiez la console, vous verrez qu’elle affiche les attributs de chaque message.

Ce ne sont là que des exemples ; il y en a davantage.

Heureusement pour vous, lorsqu’un message est marqué comme solution, Discourse en garde une trace et l’ajoute aux attributs du message. La propriété s’appelle accepted_answer.

Il vous suffit donc de vérifier si cela est vrai et d’ajouter votre classe personnalisée si c’est le cas. Comme ceci :

api.addPostClassesCallback((attrs) => {
  if (attrs.accepted_answer) return ["topic-solution"];
});

Cela devrait suffire à basculer la classe, même si l’auteur du sujet (OP) change d’avis et choisit une autre solution. La classe sera retirée de l’ancienne réponse et ajoutée à la nouvelle.