diff --git a/app/assets/javascripts/discourse/controllers/discovery/topics.js.es6 b/app/assets/javascripts/discourse/controllers/discovery/topics.js.es6 index eb1f7afc2..650eb1c83 100644 --- a/app/assets/javascripts/discourse/controllers/discovery/topics.js.es6 +++ b/app/assets/javascripts/discourse/controllers/discovery/topics.js.es6 @@ -85,7 +85,7 @@ var controllerOpts = { if (selected.length > 0) { promise = Discourse.Topic.bulkOperation(selected, operation); } else { - promise = Discourse.Topic.bulkOperationByFilter(this.get('filter'), operation); + promise = Discourse.Topic.bulkOperationByFilter('unread', operation, this.get('category.id')); } promise.then(function(result) { if (result && result.topic_ids) { @@ -105,8 +105,12 @@ var controllerOpts = { return Discourse.TopicTrackingState.current(); }.property(), + isFilterPage: function(filter, filterType) { + return filter.match(new RegExp(filterType + '$', 'gi')) ? true : false; + }, + showDismissRead: function() { - return this.get('filter') === 'unread' && this.get('topics.length') > 0; + return this.isFilterPage(this.get('filter'), 'unread') && this.get('topics.length') > 0; }.property('filter', 'topics.length'), showResetNew: function() { @@ -114,8 +118,8 @@ var controllerOpts = { }.property('filter', 'topics.length'), showDismissAtTop: function() { - return (this.get('filter') === 'new' || - this.get('filter') === 'unread') && + return (this.isFilterPage(this.get('filter'), 'new') || + this.isFilterPage(this.get('filter'), 'unread')) && this.get('topics.length') >= 30; }.property('filter', 'topics.length'), diff --git a/app/assets/javascripts/discourse/models/topic.js b/app/assets/javascripts/discourse/models/topic.js index f748e2b33..08f669aa4 100644 --- a/app/assets/javascripts/discourse/models/topic.js +++ b/app/assets/javascripts/discourse/models/topic.js @@ -471,10 +471,12 @@ Discourse.Topic.reopenClass({ }); }, - bulkOperationByFilter: function(filter, operation) { + bulkOperationByFilter: function(filter, operation, categoryId) { + var data = { filter: filter, operation: operation }; + if (categoryId) data['category_id'] = categoryId; return Discourse.ajax("/topics/bulk", { type: 'PUT', - data: { filter: filter, operation: operation } + data: data }); }, diff --git a/app/controllers/topics_controller.rb b/app/controllers/topics_controller.rb index a52708635..ade19cbd5 100644 --- a/app/controllers/topics_controller.rb +++ b/app/controllers/topics_controller.rb @@ -364,7 +364,9 @@ class TopicsController < ApplicationController topic_ids = params[:topic_ids].map {|t| t.to_i} elsif params[:filter] == 'unread' tq = TopicQuery.new(current_user) - topic_ids = TopicQuery.unread_filter(tq.joined_topic_user).listable_topics.pluck(:id) + topics = TopicQuery.unread_filter(tq.joined_topic_user).listable_topics + topics = topics.where('category_id = ?', params[:category_id]) if params[:category_id] + topic_ids = topics.pluck(:id) else raise ActionController::ParameterMissing.new(:topic_ids) end