UX: Publish topic changes when topic is published.

This commit is contained in:
Guo Xiang Tan 2017-04-07 15:05:03 +08:00
parent 48a9860f07
commit 690d2f4bd3
4 changed files with 33 additions and 23 deletions

View File

@ -868,7 +868,7 @@ export default Ember.Controller.extend(SelectedPostsCount, BufferedContent, {
const refresh = (args) => this.appEvents.trigger('post-stream:refresh', args); const refresh = (args) => this.appEvents.trigger('post-stream:refresh', args);
this.messageBus.subscribe("/topic/" + this.get('model.id'), data => { this.messageBus.subscribe(`/topic/${this.get('model.id')}`, data => {
const topic = this.get('model'); const topic = this.get('model');
if (data.notification_level_change) { if (data.notification_level_change) {
@ -878,6 +878,17 @@ export default Ember.Controller.extend(SelectedPostsCount, BufferedContent, {
} }
const postStream = this.get('model.postStream'); const postStream = this.get('model.postStream');
if (data.reload_topic) {
topic.reload().then(() => {
this.send('postChangedRoute', topic.get('post_number') || 1);
this.appEvents.trigger('header:update-topic', topic);
if (data.refresh_stream) postStream.refresh();
});
return;
}
switch (data.type) { switch (data.type) {
case "acted": case "acted":
postStream.triggerChangedPost(data.id, data.updated_at).then(() => refresh({ id: data.id, refreshLikes: true })); postStream.triggerChangedPost(data.id, data.updated_at).then(() => refresh({ id: data.id, refreshLikes: true }));
@ -915,27 +926,20 @@ export default Ember.Controller.extend(SelectedPostsCount, BufferedContent, {
} }
} }
if (data.reload_topic) { if (topic.get('isPrivateMessage') &&
topic.reload().then(() => { this.currentUser &&
this.send('postChangedRoute', topic.get('post_number') || 1); this.currentUser.get('id') !== data.user_id &&
this.appEvents.trigger('header:update-topic', topic); data.type === 'created') {
});
} else {
if (topic.get('isPrivateMessage') &&
this.currentUser &&
this.currentUser.get('id') !== data.user_id &&
data.type === 'created') {
const postNumber = data.post_number; const postNumber = data.post_number;
const notInPostStream = topic.get('highest_post_number') <= postNumber; const notInPostStream = topic.get('highest_post_number') <= postNumber;
const postNumberDifference = postNumber - topic.get('currentPost'); const postNumberDifference = postNumber - topic.get('currentPost');
if (notInPostStream && if (notInPostStream &&
postNumberDifference > 0 && postNumberDifference > 0 &&
postNumberDifference < 7) { postNumberDifference < 7) {
this._scrollToPost(data.post_number); this._scrollToPost(data.post_number);
}
} }
} }
}); });

View File

@ -376,9 +376,8 @@ const Topic = RestModel.extend({
}, },
reload() { reload() {
const self = this; return ajax(`/t/${this.get('id')}`, { type: 'GET' }).then(topic_json => {
return ajax('/t/' + this.get('id'), { type: 'GET' }).then(function(topic_json) { this.updateFromJson(topic_json);
self.updateFromJson(topic_json);
}); });
}, },

View File

@ -11,6 +11,8 @@ module Jobs
topic.change_category_to_id(topic_status_update.category_id) topic.change_category_to_id(topic_status_update.category_id)
topic.update_columns(visible: true) topic.update_columns(visible: true)
end end
MessageBus.publish("/topic/#{topic.id}", reload_topic: true, refresh_stream: true)
end end
end end
end end

View File

@ -40,7 +40,9 @@ RSpec.describe Jobs::PublishTopicToCategory do
it 'should publish the topic to the new category correctly' do it 'should publish the topic to the new category correctly' do
Timecop.travel(1.hour.ago) { topic.update!(visible: false) } Timecop.travel(1.hour.ago) { topic.update!(visible: false) }
described_class.new.execute(topic_status_update_id: topic.topic_status_update.id) message = MessageBus.track_publish do
described_class.new.execute(topic_status_update_id: topic.topic_status_update.id)
end.first
topic.reload topic.reload
expect(topic.category).to eq(another_category) expect(topic.category).to eq(another_category)
@ -49,5 +51,8 @@ RSpec.describe Jobs::PublishTopicToCategory do
%w{created_at bumped_at updated_at last_posted_at}.each do |attribute| %w{created_at bumped_at updated_at last_posted_at}.each do |attribute|
expect(topic.public_send(attribute)).to be_within(1.second).of(Time.zone.now) expect(topic.public_send(attribute)).to be_within(1.second).of(Time.zone.now)
end end
expect(message.data[:reload_topic]).to be_present
expect(message.data[:refresh_stream]).to be_present
end end
end end