From 41dfcd2774d4e4d14b02cef07679e9c898193ca8 Mon Sep 17 00:00:00 2001 From: Robin Ward Date: Thu, 14 Nov 2013 12:35:18 -0500 Subject: [PATCH] FIX: Pagination while sorting on column headers --- .../controllers/user_topics_list_controller.js | 4 ---- .../javascripts/discourse/models/topic_list.js | 18 ++++++++---------- app/controllers/list_controller.rb | 17 ++++++++++------- 3 files changed, 18 insertions(+), 21 deletions(-) diff --git a/app/assets/javascripts/discourse/controllers/user_topics_list_controller.js b/app/assets/javascripts/discourse/controllers/user_topics_list_controller.js index b5a304e6d2a..2e13d91fd29 100644 --- a/app/assets/javascripts/discourse/controllers/user_topics_list_controller.js +++ b/app/assets/javascripts/discourse/controllers/user_topics_list_controller.js @@ -11,10 +11,6 @@ Discourse.UserTopicsListController = Discourse.ObjectController.extend({ actions: { loadMore: function() { this.get('model').loadMore(); - }, - - changeSort: function() { - console.log('sort changed!'); } } diff --git a/app/assets/javascripts/discourse/models/topic_list.js b/app/assets/javascripts/discourse/models/topic_list.js index 13458955fc6..4844842c44b 100644 --- a/app/assets/javascripts/discourse/models/topic_list.js +++ b/app/assets/javascripts/discourse/models/topic_list.js @@ -71,7 +71,7 @@ Discourse.TopicList = Discourse.Model.extend({ topics.clear(); topics.pushObjects(newTopics); - self.set('loaded', true); + self.setProperties({ loaded: true, more_topics_url: result.topic_list.more_topics_url }); }); }.observes('sortOrder.order', 'sortOrder.descending'), @@ -82,26 +82,24 @@ Discourse.TopicList = Discourse.Model.extend({ var moreUrl = this.get('more_topics_url'); if (moreUrl) { - var topicList = this; + var self = this; this.set('loadingMore', true); return Discourse.ajax({url: moreUrl}).then(function (result) { var topicsAdded = 0; if (result) { // the new topics loaded from the server - var newTopics = Discourse.TopicList.topicsFrom(result); - var topics = topicList.get("topics"); + var newTopics = Discourse.TopicList.topicsFrom(result), + topics = self.get("topics"); - topicList.forEachNew(newTopics, function(t) { + self.forEachNew(newTopics, function(t) { t.set('highlight', topicsAdded++ === 0); topics.pushObject(t); }); - topicList.set('more_topics_url', result.topic_list.more_topics_url); - Discourse.Session.currentProp('topicList', topicList); - topicList.set('loadingMore', false); - - return result.topic_list.more_topics_url; + self.setProperties({ loadingMore: false, more_topics_url: result.topic_list.more_topics_url }); + Discourse.Session.currentProp('topicList', self); + return self.get('more_topics_url'); } }); } else { diff --git a/app/controllers/list_controller.rb b/app/controllers/list_controller.rb index b95b689b804..5d1eb39745b 100644 --- a/app/controllers/list_controller.rb +++ b/app/controllers/list_controller.rb @@ -58,9 +58,9 @@ class ListController < ApplicationController @description = @category.description if params[:parent_category].present? - list.more_topics_url = url_for(category_list_parent_path(params[:parent_category], params[:category], page: next_page, format: "json")) + list.more_topics_url = url_for(category_list_parent_path(params[:parent_category], params[:category], next_page_params)) else - list.more_topics_url = url_for(category_list_path(params[:category], page: next_page, format: "json")) + list.more_topics_url = url_for(category_list_path(params[:category], next_page_params)) end respond(list) @@ -108,8 +108,12 @@ class ListController < ApplicationController end end - def next_page - params[:page].to_i + 1 + def next_page_params(opts=nil) + opts = opts || {} + route_params = { format: 'json', page: params[:page].to_i + 1 } + route_params[:sort_order] = opts[:sort_order] if opts[:sort_order].present? + route_params[:sort_descending] = opts[:sort_descending] if opts[:sort_descending].present? + route_params end private @@ -155,12 +159,11 @@ class ListController < ApplicationController end def generate_list_for(action, target_user, opts) - list = TopicQuery.new(current_user, opts) - list = list.send("list_#{action}", target_user) + TopicQuery.new(current_user, opts).send("list_#{action}", target_user) end def construct_url_with(action, opts, url_prefix=nil) method = url_prefix.blank? ? "#{action}_path" : "#{url_prefix}_#{action}_path" - public_send(method, opts.merge(format: 'json', page: next_page)) + public_send(method, opts.merge(next_page_params(opts))) end end