diff --git a/app/assets/javascripts/discourse/controllers/discovery_topics_controller.js b/app/assets/javascripts/discourse/controllers/discovery_topics_controller.js index 7cd2577ca3d..3f9e8b5001f 100644 --- a/app/assets/javascripts/discourse/controllers/discovery_topics_controller.js +++ b/app/assets/javascripts/discourse/controllers/discovery_topics_controller.js @@ -43,6 +43,15 @@ Discourse.DiscoveryTopicsController = Discourse.DiscoveryController.extend({ this.get('selected').clear(); }, + resetNew: function() { + var self = this; + + Discourse.TopicTrackingState.current().resetNew(); + Discourse.Topic.resetNew().then(function() { + self.send('refresh'); + }); + }, + dismissRead: function() { var self = this, selected = this.get('selected'), @@ -68,6 +77,10 @@ Discourse.DiscoveryTopicsController = Discourse.DiscoveryController.extend({ return this.get('filter') === 'unread' && this.get('topics.length') > 0; }.property('filter', 'topics.length'), + showResetNew: function() { + return this.get('filter') === 'new' && this.get('topics.length') > 0; + }.property('filter', 'topics.length'), + canBulkSelect: Em.computed.alias('currentUser.staff'), hasTopics: Em.computed.gt('topics.length', 0), showTable: Em.computed.or('hasTopics', 'topicTrackingState.hasIncoming'), diff --git a/app/assets/javascripts/discourse/models/topic.js b/app/assets/javascripts/discourse/models/topic.js index badaca103c6..b55c6e3d97e 100644 --- a/app/assets/javascripts/discourse/models/topic.js +++ b/app/assets/javascripts/discourse/models/topic.js @@ -428,8 +428,13 @@ Discourse.Topic.reopenClass({ type: 'PUT', data: { filter: filter, operation: operation } }); + }, + + resetNew: function() { + return Discourse.ajax("/topics/reset-new", {type: 'PUT'}); } + }); diff --git a/app/assets/javascripts/discourse/models/topic_tracking_state.js b/app/assets/javascripts/discourse/models/topic_tracking_state.js index 5e01c92a80a..f1283bba9fb 100644 --- a/app/assets/javascripts/discourse/models/topic_tracking_state.js +++ b/app/assets/javascripts/discourse/models/topic_tracking_state.js @@ -145,6 +145,15 @@ Discourse.TopicTrackingState = Discourse.Model.extend({ .length; }, + resetNew: function() { + var self = this; + Object.keys(this.states).forEach(function (id) { + if (self.states[id].last_read_post_number === null) { + delete self.states[id]; + } + }); + }, + countUnread: function(category_name){ return _.chain(this.states) .where(function(topic){ diff --git a/app/assets/javascripts/discourse/templates/discovery/topics.js.handlebars b/app/assets/javascripts/discourse/templates/discovery/topics.js.handlebars index 03f59009a79..6ad8a8a1603 100644 --- a/app/assets/javascripts/discourse/templates/discovery/topics.js.handlebars +++ b/app/assets/javascripts/discourse/templates/discovery/topics.js.handlebars @@ -68,6 +68,9 @@ {{#if showDismissRead}} {{/if}} + {{#if showResetNew}} + + {{/if}}