Opção para ocultar categorias de 3º nível na página inicial de categorias sem perder o layout

Utilizamos uma estrutura de categorias profunda, com dois níveis (todas as bibliotecas públicas da nossa cidade com suas respectivas filiais, mais uma biblioteca central com suas próprias categorias de nível superior). Recentemente, precisamos introduzir um terceiro nível de aninhamento em alguns ramos de categorias.

Assim que qualquer categoria na árvore possui uma categoria neta, a página inicial de categorias altera seu modo de renderização: em vez da grade compacta de caixas (categoria pai com seus filhos diretos listados dentro), todas as categorias são renderizadas como uma lista longa e de coluna única. Isso torna a página inicial extremamente longa e difícil de ser navegada por nossos ~1.200 usuários da equipe.

Parece que isso é governado pela propriedade isGrandParent, descrita neste tópico relacionado: When you add an additional nesting level, all categories, including child categories, are displayed on the categories page

O que gostaríamos

Nossa opção preferida: uma maneira de manter o layout padrão de “caixas” na página inicial, mesmo quando uma categoria possui um terceiro nível de aninhamento — por exemplo, simplesmente não exibindo as categorias netas na página inicial (elas ainda seriam acessíveis via página da categoria pai).

Alternativamente, uma visão nativa expansível/recolhível para categorias com netas diretamente na página inicial de categorias, para que os usuários possam expandir apenas os ramos de que precisam, em vez de tudo ser listado de forma plana.

Por que estamos solicitando uma solução nativa/oficial

Estamos cientes de que existem soluções alternativas usando componentes de tema/CSS ou JS (por exemplo, sobrescrevendo isGrandParent via modifyClass) discutidas no tópico antigo vinculado acima. Preferiríamos não seguir esse caminho: não temos profunda expertise em front-end internamente e estamos preocupados com efeitos colaterais inesperados ou quebras em futuras atualizações do Discourse se sobrescrevermos a lógica de renderização central por conta própria. Uma configuração suportada ou opção oficial seria muito mais segura para mantermos a longo prazo.

Estamos cientes de que o Discourse não recomenda oficialmente aninhamento profundo, mas para nossa estrutura organizacional (múltiplas instituições, cada uma com vários locais físicos, cada um precisando de seu próprio espaço) isso não é opcional para nós.

Uma maneira suportada de controlar a exibição da página inicial nesses casos ajudaria muito e temos certeza de que, desde 2021, outras organizações também podem ter a necessidade de um terceiro nível oculto?

Capturas de tela anexadas: nosso layout atual de página inicial de dois níveis

e como ele se quebra atualmente assim que um terceiro nível é introduzido.

5 curtidas

Não tenho certeza, mas este Customization > Theme component pode ser capaz de fazer o que você está procurando, ou talvez com algumas modificações. O DeV também pode estar aberto a adicionar esse recurso.

1 curtida

Esse é um pedido razoável; pode ser difícil equilibrar o layout da página /categories quando há apenas algumas categorias com múltiplos níveis de subcategorias.

Realmente não queremos mais que as pessoas usem modifyClass, porque, como você mencionou, manter esse tipo de sobrescrita pode exigir algum esforço de desenvolvimento.

Agora temos alguns métodos mais novos de personalização com os quais podemos trabalhar e que são mais fáceis de manter estáveis. Neste caso, um transformador de valores pode ajudar. Acabei de adicionar um aqui que estará disponível nas atualizações em breve: DEV: Add a category-list-subcategories value transformer - Pull Request #42804 - discourse/discourse - GitHub

A demonstração simples é algo como isso:

api.registerValueTransformer(
  "category-list-subcategories",
  ({ value, context }) =>
  context.page === "categories" && context.category.level >= 1 ? [] : value
);

Isso exibirá apenas um nível de subcategorias. Existem outras opções disponíveis usando o transformador agora, por isso criei um componente de tema que podemos manter para suportá-las.

Então, assim que o Discourse for atualizado, você pode instalar isso para controlar quantas subcategorias são exibidas em /categories e em algumas outras listas de categorias:

Defina Categories page depth para 2 para ocultar todas as categorias netas.

2 curtidas

Ei, muito obrigado!

Você consegue prever como as categorias de Nível 2 vão se comportar? Tipo, se elas voltarão para a ordem original, uma ao lado da outra?

1 curtida

Sim, a ordem permanecerá a mesma… isso é essencialmente uma maneira suportada de sobrescrever isGrandParent

Aqui está um antes/depois do meu site de testes

3 curtidas