diff --git a/app/assets/javascripts/discourse/app/instance-initializers/category-badge-css-generator.js b/app/assets/javascripts/discourse/app/instance-initializers/category-badge-css-generator.js index 66d233f63c5..4e5a5ead633 100644 --- a/app/assets/javascripts/discourse/app/instance-initializers/category-badge-css-generator.js +++ b/app/assets/javascripts/discourse/app/instance-initializers/category-badge-css-generator.js @@ -9,7 +9,7 @@ export default { this.site = owner.lookup("service:site"); // If the site is login_required and the user is anon there will be no categories preloaded. - if (!this.site.categories) { + if (!this.site.categories?.length) { return; } diff --git a/app/assets/javascripts/discourse/app/instance-initializers/category-color-css-generator.js b/app/assets/javascripts/discourse/app/instance-initializers/category-color-css-generator.js index a7242832f3d..18e1d7f08ab 100644 --- a/app/assets/javascripts/discourse/app/instance-initializers/category-color-css-generator.js +++ b/app/assets/javascripts/discourse/app/instance-initializers/category-color-css-generator.js @@ -12,7 +12,7 @@ export default { this.site = owner.lookup("service:site"); // If the site is login_required and the user is anon there will be no categories preloaded. - if (!this.site.categories) { + if (!this.site.categories?.length) { return; } diff --git a/app/assets/javascripts/discourse/app/instance-initializers/hashtag-css-generator.js b/app/assets/javascripts/discourse/app/instance-initializers/hashtag-css-generator.js index 286f8eaa8f5..a5b584ce961 100644 --- a/app/assets/javascripts/discourse/app/instance-initializers/hashtag-css-generator.js +++ b/app/assets/javascripts/discourse/app/instance-initializers/hashtag-css-generator.js @@ -18,7 +18,7 @@ export default { // If the site is login_required and the user is anon there will be no categories // preloaded, so there will be no category color CSS variables generated by // the category-color-css-generator initializer. - if (!this.site.categories) { + if (!this.site.categories?.length) { return; } diff --git a/app/assets/javascripts/discourse/app/models/site.js b/app/assets/javascripts/discourse/app/models/site.js index fadcda4541f..5b2c525269e 100644 --- a/app/assets/javascripts/discourse/app/models/site.js +++ b/app/assets/javascripts/discourse/app/models/site.js @@ -20,6 +20,7 @@ const Site = RestModel.extend({ this._super(...arguments); this.topicCountDesc = ["topic_count:desc"]; + this.categories = this.categories || []; }, @discourseComputed("notification_types") diff --git a/app/models/site.rb b/app/models/site.rb index 6cc00e7cdb6..2c467001703 100644 --- a/app/models/site.rb +++ b/app/models/site.rb @@ -4,9 +4,6 @@ class Site include ActiveModel::Serialization - # Number of categories preloaded when lazy_load_categories is enabled - LAZY_LOAD_CATEGORIES_LIMIT = 10 - cattr_accessor :preloaded_category_custom_fields def self.reset_preloaded_category_custom_fields @@ -157,11 +154,7 @@ class Site self.class.categories_callbacks.each { |callback| callback.call(categories, @guardian) } - if SiteSetting.lazy_load_categories - categories[0...Site::LAZY_LOAD_CATEGORIES_LIMIT] - else - categories - end + categories end end diff --git a/app/serializers/site_serializer.rb b/app/serializers/site_serializer.rb index 3b7c576f2d5..ae488d98109 100644 --- a/app/serializers/site_serializer.rb +++ b/app/serializers/site_serializer.rb @@ -238,6 +238,10 @@ class SiteSerializer < ApplicationSerializer object.categories.map { |c| c.to_h } end + def include_categories? + !SiteSetting.lazy_load_categories + end + def markdown_additional_options Site.markdown_additional_options end diff --git a/spec/models/site_spec.rb b/spec/models/site_spec.rb index 3bd05173fbf..ff49ad5c5c9 100644 --- a/spec/models/site_spec.rb +++ b/spec/models/site_spec.rb @@ -183,17 +183,6 @@ RSpec.describe Site do DiscoursePluginRegistry.clear_modifiers! end end - - context "when lazy_load_categories" do - before { SiteSetting.lazy_load_categories = true } - - it "limits the number of categories" do - stub_const(Site, "LAZY_LOAD_CATEGORIES_LIMIT", 1) do - categories = Site.new(Guardian.new).categories - expect(categories.size).to eq(1) - end - end - end end it "omits groups user can not see" do diff --git a/spec/serializers/site_serializer_spec.rb b/spec/serializers/site_serializer_spec.rb index 86ac0081fc1..5b48749bd1a 100644 --- a/spec/serializers/site_serializer_spec.rb +++ b/spec/serializers/site_serializer_spec.rb @@ -131,6 +131,14 @@ RSpec.describe SiteSerializer do expect(serialized[:shared_drafts_category_id]).to eq(nil) end + it "does not include categories if lazy_load_categories" do + SiteSetting.lazy_load_categories = true + + serialized = described_class.new(Site.new(guardian), scope: guardian, root: false).as_json + + expect(serialized[:categories]).to eq(nil) + end + describe "#anonymous_default_navigation_menu_tags" do fab!(:user) fab!(:tag) { Fabricate(:tag, name: "dev", description: "some description") }