Masquer les sous-catégories sans masquer leurs sujets dans la liste des sujets ?

En général, évitez de remplacer complètement les modèles, car cela nécessite une maintenance : vous devez effectuer un diff et vérifier les modifications si une mise à jour de Discourse casse votre thème.

Ce que vous pouvez faire, c’est faire un pas en arrière et modifier les données transmises au modèle à la place.

Le composant topic-list-item est un composant Ember, vous pouvez donc utiliser api.modifyClass pour apporter les modifications souhaitées.

Par exemple, voici un extrait de code qui affiche le badge de la catégorie parente dans les sujets des sous-catégories, sous le titre. Si le sujet se trouve dans la catégorie principale, ce code n’aura aucun effet.

<script type="text/discourse-plugin" version="0.8">
  const { on } = require("discourse-common/utils/decorators");

  // identifiants des catégories parentes
  const targetCategoryIds = [9, 15, 50];

  const useParentCategory = function () {
    const parentCategory = this.attrs.topic.category.parentCategory;
    const switchToParent = parentCategory && targetCategoryIds.includes(parentCategory.id)

    if (switchToParent) {
      this.attrs.topic.set("category", parentCategory);
    }
  };

  api.modifyClass("component:topic-list-item", {
    @on("didReceiveAttrs")
    setCategory() {
      useParentCategory.call(this);
    }
  });

  api.modifyClass("component:latest-topic-list-item", {
    @on("didReceiveAttrs")
    setCategory() {
      useParentCategory.call(this);
    }
  });
</script>