From e805dd7000a2952b66cb433a043dc723a84ac198 Mon Sep 17 00:00:00 2001 From: Sam Date: Mon, 4 Jul 2016 18:55:25 +1000 Subject: [PATCH] UX: improve handling of PM drafts - Show PM draft if it exists on any of the your user tabs - If a draft is already open when visiting user profile suppress loading of draft --- .../discourse/controllers/composer.js.es6 | 8 +++++-- .../routes/user-private-messages.js.es6 | 21 ------------------- .../javascripts/discourse/routes/user.js.es6 | 17 +++++++++++++++ 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/app/assets/javascripts/discourse/controllers/composer.js.es6 b/app/assets/javascripts/discourse/controllers/composer.js.es6 index 4e2ddb29b6c..80618505dba 100644 --- a/app/assets/javascripts/discourse/controllers/composer.js.es6 +++ b/app/assets/javascripts/discourse/controllers/composer.js.es6 @@ -473,6 +473,12 @@ export default Ember.Controller.extend({ alert("composer was opened without a draft key"); throw "composer opened without a proper draft key"; } + const self = this; + let composerModel = this.get('model'); + + if (opts.ignoreIfChanged && composerModel && composerModel.composeState !== Composer.CLOSED) { + return; + } // If we show the subcategory list, scope the categories drop down to // the category we opened the composer with. @@ -480,8 +486,6 @@ export default Ember.Controller.extend({ this.set('scopedCategoryId', opts.categoryId); } - const self = this; - let composerModel = this.get('model'); this.setProperties({ showEditReason: false, editReason: null }); diff --git a/app/assets/javascripts/discourse/routes/user-private-messages.js.es6 b/app/assets/javascripts/discourse/routes/user-private-messages.js.es6 index b1074f80ae1..dcc205906a3 100644 --- a/app/assets/javascripts/discourse/routes/user-private-messages.js.es6 +++ b/app/assets/javascripts/discourse/routes/user-private-messages.js.es6 @@ -1,5 +1,3 @@ -import Draft from 'discourse/models/draft'; - export default Discourse.Route.extend({ renderTemplate() { @@ -11,25 +9,6 @@ export default Discourse.Route.extend({ return this.modelFor("user"); }, - setupController(controller, user) { - this._super(); - // Bring up a draft - const composerController = this.controllerFor("composer"); - controller.set("model", user); - if (this.currentUser) { - Draft.get("new_private_message").then(function(data) { - if (data.draft) { - composerController.open({ - draft: data.draft, - draftKey: "new_private_message", - ignoreIfChanged: true, - draftSequence: data.draft_sequence - }); - } - }); - } - }, - actions: { willTransition: function() { this._super(); diff --git a/app/assets/javascripts/discourse/routes/user.js.es6 b/app/assets/javascripts/discourse/routes/user.js.es6 index 271dfad4790..fdfb99854da 100644 --- a/app/assets/javascripts/discourse/routes/user.js.es6 +++ b/app/assets/javascripts/discourse/routes/user.js.es6 @@ -1,5 +1,7 @@ const INDEX_STREAM_ROUTES = ["user.deletedPosts", "user.flaggedPosts", "userActivity.index"]; +import Draft from 'discourse/models/draft'; + export default Discourse.Route.extend({ titleToken() { @@ -55,6 +57,21 @@ export default Discourse.Route.extend({ setupController(controller, user) { controller.set('model', user); this.searchService.set('searchContext', user.get('searchContext')); + + const composerController = this.controllerFor("composer"); + controller.set("model", user); + if (this.currentUser) { + Draft.get("new_private_message").then(function(data) { + if (data.draft) { + composerController.open({ + draft: data.draft, + draftKey: "new_private_message", + ignoreIfChanged: true, + draftSequence: data.draft_sequence + }); + } + }); + } }, activate() {