Quando você adiciona um nível de aninhamento adicional, todas as categorias, incluindo categorias filhas, são exibidas na página de categorias

O que você está procurando é determinado por uma propriedade chamada isGrandParent no modelo aqui.

discourse/app/assets/javascripts/discourse/app/templates/components/parent-category-row.hbs at 1472e47aae5bfdfb6fd9abfe89beb186c751f514 · discourse/discourse · GitHub

Quando uma categoria tem netos, renderizamos o markup relevante para as categorias de netos. Caso contrário, renderizamos as categorias filhas.

A maneira mais fácil de contornar isso é sobrescrever essa propriedade no componente Ember parent-category-row.

Você pode fazer isso com o método da API de plugin modifyClass.

Developing Discourse Themes & Theme Components

O modifyClass permite que você reabra a classe do componente Ember parent-category-row e adicione novos métodos.

Para garantir que esses métodos sejam executados e os dados estejam disponíveis, você precisará conectá-los ao hook didReceiveAttrs.

Para fazer isso, você pode usar o decorador embutido @on.

Depois de ter tudo pronto, você pode simplesmente sobrescrever isGrandParent para todas as categorias renderizadas via o modelo desse componente e defini-las como false.

Aqui está tudo isso reunido:

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

  api.modifyClass("component:parent-category-row", {
    @on("didReceiveAttrs")
    removeGrandchildCategories() {
      this.category?.set("isGrandParent", false);
    }
  });
</script>

Você adiciona isso à aba header do seu tema sob common.

Isso fará com que o modelo renderize apenas as categorias filhas e ignore as categorias de netos.

Você pode usar o mesmo padrão para modificar qualquer propriedade em qualquer componente.

2 curtidas