토픽 목록에서 하위 카테고리를 숨기되, 해당 카테고리의 토픽은 숨기지 않는 방법?

일반적으로 템플릿 전체를 오버라이드하는 것은 유지보수가 필요하기 때문에 피해야 합니다. Discourse 업데이트가 테마를 깨뜨리면 diff를 실행하여 무엇이 변경되었는지 확인해야 하므로, 대신 템플릿에 전달되는 데이터를 수정하는 방식으로 접근하는 것이 좋습니다.

topic-list-item은 Ember 컴포넌트이므로, 원하는 변경 사항을 적용하기 위해 api.modifyClass를 사용할 수 있습니다.

예를 들어, 아래 스니펫은 서브카테고리 토픽의 제목 아래에 상위 카테고리 배지를 표시합니다. 토픽이 메인 카테고리에 있는 경우 이 코드는 아무 효과도 없습니다.

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

  // parent category ids
  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>