mirror of
https://github.com/discourse/discourse.git
synced 2025-03-24 19:17:56 +08:00
FEATURE: allow plugins to preload data in topic list
This commit is contained in:
parent
21e21b9882
commit
89d5e8ab4b
@ -6,6 +6,25 @@ class TopicList
|
|||||||
cattr_accessor :preloaded_custom_fields
|
cattr_accessor :preloaded_custom_fields
|
||||||
self.preloaded_custom_fields = Set.new
|
self.preloaded_custom_fields = Set.new
|
||||||
|
|
||||||
|
def self.on_preload(blk)
|
||||||
|
(@preload ||= Set.new) << blk
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.cancel_preload(blk)
|
||||||
|
if @preload
|
||||||
|
@preload.delete blk
|
||||||
|
if @preload.length == 0
|
||||||
|
@preload = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.preload(topics)
|
||||||
|
if @preload
|
||||||
|
@preload.each{|preload| preload.call(topics)}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
attr_accessor :more_topics_url,
|
attr_accessor :more_topics_url,
|
||||||
:prev_topics_url,
|
:prev_topics_url,
|
||||||
:draft,
|
:draft,
|
||||||
@ -97,6 +116,8 @@ class TopicList
|
|||||||
Topic.preload_custom_fields(@topics, preloaded_custom_fields)
|
Topic.preload_custom_fields(@topics, preloaded_custom_fields)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
TopicList.preload(@topics)
|
||||||
|
|
||||||
@topics
|
@topics
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1,7 +1,12 @@
|
|||||||
require 'rails_helper'
|
require 'rails_helper'
|
||||||
|
|
||||||
describe TopicList do
|
describe TopicList do
|
||||||
let!(:topic) { Fabricate(:topic) }
|
let!(:topic) {
|
||||||
|
t = Fabricate(:topic)
|
||||||
|
t.allowed_user_ids = [t.user.id]
|
||||||
|
t
|
||||||
|
}
|
||||||
|
|
||||||
let(:user) { topic.user }
|
let(:user) { topic.user }
|
||||||
let(:topic_list) { TopicList.new("liked", user, [topic]) }
|
let(:topic_list) { TopicList.new("liked", user, [topic]) }
|
||||||
|
|
||||||
@ -23,6 +28,23 @@ describe TopicList do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "preload" do
|
||||||
|
it "allows preloading of data" do
|
||||||
|
preloaded_topic = false
|
||||||
|
preloader = lambda do |topics|
|
||||||
|
expect(topics.length).to eq(1)
|
||||||
|
preloaded_topic = true
|
||||||
|
end
|
||||||
|
|
||||||
|
TopicList.on_preload(preloader)
|
||||||
|
|
||||||
|
topic_list.topics
|
||||||
|
expect(preloaded_topic).to eq(true)
|
||||||
|
|
||||||
|
TopicList.cancel_preload(preloader)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context "DiscourseTagging enabled" do
|
context "DiscourseTagging enabled" do
|
||||||
before do
|
before do
|
||||||
SiteSetting.tagging_enabled = true
|
SiteSetting.tagging_enabled = true
|
||||||
|
Loading…
x
Reference in New Issue
Block a user