diff --git a/app/assets/javascripts/discourse/models/topic-list.js.es6 b/app/assets/javascripts/discourse/models/topic-list.js.es6 index 782cb9fd066..cf65eb212ac 100644 --- a/app/assets/javascripts/discourse/models/topic-list.js.es6 +++ b/app/assets/javascripts/discourse/models/topic-list.js.es6 @@ -163,10 +163,9 @@ TopicList.reopenClass({ return this.find(filter); }, - // Sets `hideCategory` if all topics in the last have a particular category + // hide the category when it has no children hideUniformCategory(list, category) { - const hideCategory = !list.get('topics').any(function (t) { return t.get('category') !== category; }); - list.set('hideCategory', hideCategory); + list.set('hideCategory', !category.get("has_children")); } }); diff --git a/app/models/category.rb b/app/models/category.rb index 1f6424d71ab..311f3fad506 100644 --- a/app/models/category.rb +++ b/app/models/category.rb @@ -79,7 +79,7 @@ class Category < ActiveRecord::Base # permission is just used by serialization # we may consider wrapping this in another spot - attr_accessor :displayable_topics, :permission, :subcategory_ids, :notification_level + attr_accessor :displayable_topics, :permission, :subcategory_ids, :notification_level, :has_children def self.last_updated_at order('updated_at desc').limit(1).pluck(:updated_at).first.to_i diff --git a/app/models/site.rb b/app/models/site.rb index 719cf1d7123..c2fcfeb4a45 100644 --- a/app/models/site.rb +++ b/app/models/site.rb @@ -30,7 +30,7 @@ class Site end def groups - @groups ||= Group.order(:name).map { |g| {:id => g.id, :name => g.name}} + @groups ||= Group.order(:name).map { |g| { id: g.id, name: g.name } } end def user_fields @@ -41,7 +41,7 @@ class Site @categories ||= begin categories = Category .secured(@guardian) - .includes(:topic_only_relative_url) + .includes(:topic_only_relative_url, :subcategories) .order(:position) unless SiteSetting.allow_uncategorized_topics @@ -62,10 +62,11 @@ class Site categories.each do |category| category.notification_level = category_user[category.id] category.permission = CategoryGroup.permission_types[:full] if allowed_topic_create.include?(category.id) + category.has_children = category.subcategories.present? by_id[category.id] = category end - categories.reject! {|c| c.parent_category_id && !by_id[c.parent_category_id]} + categories.reject! { |c| c.parent_category_id && !by_id[c.parent_category_id] } categories end end diff --git a/app/serializers/basic_category_serializer.rb b/app/serializers/basic_category_serializer.rb index 45b8243297f..96b0268cfae 100644 --- a/app/serializers/basic_category_serializer.rb +++ b/app/serializers/basic_category_serializer.rb @@ -17,7 +17,8 @@ class BasicCategorySerializer < ApplicationSerializer :logo_url, :background_url, :can_edit, - :topic_template + :topic_template, + :has_children def include_parent_category_id? parent_category_id