From 92dc59fba926569afed64b9905ca1901fbc47357 Mon Sep 17 00:00:00 2001 From: Robin Ward <robin.ward@gmail.com> Date: Tue, 28 May 2013 21:15:30 -0400 Subject: [PATCH] Properly assign draft keys to Categories List view. --- .../discourse/controllers/list_controller.js | 30 ++++++++++++------- .../discourse/models/category_list.js | 11 ++++--- .../discourse/routes/list_categories_route.js | 1 + app/controllers/categories_controller.rb | 5 ++++ app/models/category_list.rb | 7 ++++- app/serializers/category_list_serializer.rb | 6 +++- 6 files changed, 44 insertions(+), 16 deletions(-) diff --git a/app/assets/javascripts/discourse/controllers/list_controller.js b/app/assets/javascripts/discourse/controllers/list_controller.js index 6eacd7f59..aa22cb6c8 100644 --- a/app/assets/javascripts/discourse/controllers/list_controller.js +++ b/app/assets/javascripts/discourse/controllers/list_controller.js @@ -38,9 +38,14 @@ Discourse.ListController = Discourse.Controller.extend({ if (filterMode === 'categories') { return Discourse.CategoryList.list(filterMode).then(function(items) { - listController.set('loading', false); - listController.set('filterMode', filterMode); - listController.set('categoryMode', true); + listController.setProperties({ + loading: false, + filterMode: filterMode, + categoryMode: true, + draft: items.draft, + draft_key: items.draft_key, + draft_sequence: items.draft_sequence + }); return items; }); } @@ -49,10 +54,16 @@ Discourse.ListController = Discourse.Controller.extend({ if (!current) { current = Discourse.NavItem.create({ name: filterMode }); } + return Discourse.TopicList.list(current).then(function(items) { - listController.set('filterSummary', items.filter_summary); - listController.set('filterMode', filterMode); - listController.set('loading', false); + listController.setProperties({ + loading: false, + filterSummary: items.filter_summary, + filterMode: filterMode, + draft: items.draft, + draft_key: items.draft_key, + draft_sequence: items.draft_sequence + }) return items; }); }, @@ -72,13 +83,12 @@ Discourse.ListController = Discourse.Controller.extend({ // Create topic button createTopic: function() { - var topicList = this.get('controllers.listTopics.content'); - if (!topicList) return; this.get('controllers.composer').open({ categoryName: this.get('category.name'), action: Discourse.Composer.CREATE_TOPIC, - draftKey: topicList.get('draft_key'), - draftSequence: topicList.get('draft_sequence') + draft: this.get('draft'), + draftKey: this.get('draft_key'), + draftSequence: this.get('draft_sequence') }); }, diff --git a/app/assets/javascripts/discourse/models/category_list.js b/app/assets/javascripts/discourse/models/category_list.js index 7329c5592..f90df5e9d 100644 --- a/app/assets/javascripts/discourse/models/category_list.js +++ b/app/assets/javascripts/discourse/models/category_list.js @@ -57,10 +57,13 @@ Discourse.CategoryList.reopenClass({ return finder.then(function(result) { var categoryList = Discourse.TopicList.create(); - categoryList.set('can_create_category', result.category_list.can_create_category); - categoryList.set('can_create_topic', result.category_list.can_create_topic); - categoryList.set('categories', route.categoriesFrom(result)); - categoryList.set('loaded', true); + categoryList.setProperties({ + can_create_category: result.category_list.can_create_category, + can_create_topic: result.category_list.can_create_topic, + categories: route.categoriesFrom(result), + draft_key: result.category_list.draft_key, + draft_sequence: result.category_list.draft_sequence + }) return categoryList; }); } diff --git a/app/assets/javascripts/discourse/routes/list_categories_route.js b/app/assets/javascripts/discourse/routes/list_categories_route.js index 8774774ac..69522799b 100644 --- a/app/assets/javascripts/discourse/routes/list_categories_route.js +++ b/app/assets/javascripts/discourse/routes/list_categories_route.js @@ -22,6 +22,7 @@ Discourse.ListCategoriesRoute = Discourse.Route.extend({ setupController: function(controller, categoryList) { this.render('listCategories', { into: 'list', outlet: 'listView' }); + this.controllerFor('list').setProperties({ canCreateCategory: categoryList.get('can_create_category'), canCreateTopic: categoryList.get('can_create_topic'), diff --git a/app/controllers/categories_controller.rb b/app/controllers/categories_controller.rb index 227cf647d..9790b02db 100644 --- a/app/controllers/categories_controller.rb +++ b/app/controllers/categories_controller.rb @@ -8,6 +8,11 @@ class CategoriesController < ApplicationController def index @list = CategoryList.new(guardian) + + @list.draft_key = Draft::NEW_TOPIC + @list.draft_sequence = DraftSequence.current(current_user, Draft::NEW_TOPIC) + @list.draft = Draft.get(current_user, @list.draft_key, @list.draft_sequence) if current_user + discourse_expires_in 1.minute store_preloaded("categories_list", MultiJson.dump(CategoryListSerializer.new(@list, scope: guardian))) diff --git a/app/models/category_list.rb b/app/models/category_list.rb index ed3678f7f..6b2047342 100644 --- a/app/models/category_list.rb +++ b/app/models/category_list.rb @@ -1,7 +1,12 @@ class CategoryList include ActiveModel::Serialization - attr_accessor :categories, :topic_users, :uncategorized + attr_accessor :categories, + :topic_users, + :uncategorized, + :draft, + :draft_key, + :draft_sequence def initialize(guardian=nil) @guardian = guardian || Guardian.new diff --git a/app/serializers/category_list_serializer.rb b/app/serializers/category_list_serializer.rb index 4e423e886..d7b3296a8 100644 --- a/app/serializers/category_list_serializer.rb +++ b/app/serializers/category_list_serializer.rb @@ -1,6 +1,10 @@ class CategoryListSerializer < ApplicationSerializer - attributes :can_create_category, :can_create_topic + attributes :can_create_category, + :can_create_topic, + :draft, + :draft_key, + :draft_sequence has_many :categories, serializer: CategoryDetailedSerializer, embed: :objects