From fbedaea5ed5a6ccb6e506c6991ffd899a5ebe8dd Mon Sep 17 00:00:00 2001 From: Joffrey JAFFEUX Date: Tue, 26 Feb 2019 17:53:52 +0100 Subject: [PATCH] FIX: prevents double network calls and other quirks on admin emails (#7074) --- .../controllers/admin-email-bounced.js.es6 | 5 +-- .../controllers/admin-email-incomings.js.es6 | 25 ----------- .../admin/controllers/admin-email-logs.js.es6 | 41 ++++++++++++------- .../controllers/admin-email-received.js.es6 | 16 +++++--- .../controllers/admin-email-rejected.js.es6 | 16 +++++--- .../admin/controllers/admin-email-sent.js.es6 | 5 +-- .../controllers/admin-email-skipped.js.es6 | 5 +-- .../admin/routes/admin-email-logs.js.es6 | 14 +++---- .../admin/templates/email-bounced.hbs | 4 +- .../admin/templates/email-sent.hbs | 4 +- .../admin/templates/email-skipped.hbs | 4 +- 11 files changed, 66 insertions(+), 73 deletions(-) delete mode 100644 app/assets/javascripts/admin/controllers/admin-email-incomings.js.es6 diff --git a/app/assets/javascripts/admin/controllers/admin-email-bounced.js.es6 b/app/assets/javascripts/admin/controllers/admin-email-bounced.js.es6 index c2ec582af2..535fa4bca1 100644 --- a/app/assets/javascripts/admin/controllers/admin-email-bounced.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-email-bounced.js.es6 @@ -1,9 +1,8 @@ import AdminEmailLogsController from "admin/controllers/admin-email-logs"; import debounce from "discourse/lib/debounce"; -import EmailLog from "admin/models/email-log"; export default AdminEmailLogsController.extend({ filterEmailLogs: debounce(function() { - EmailLog.findAll(this.get("filter")).then(logs => this.set("model", logs)); - }, 250).observes("filter.{user,address,type}") + this.loadLogs(); + }, 250).observes("filter.{status,user,address,type}") }); diff --git a/app/assets/javascripts/admin/controllers/admin-email-incomings.js.es6 b/app/assets/javascripts/admin/controllers/admin-email-incomings.js.es6 deleted file mode 100644 index 9dc59589fb..0000000000 --- a/app/assets/javascripts/admin/controllers/admin-email-incomings.js.es6 +++ /dev/null @@ -1,25 +0,0 @@ -import IncomingEmail from "admin/models/incoming-email"; - -export default Ember.Controller.extend({ - loading: false, - - actions: { - loadMore() { - if (this.get("loading") || this.get("model.allLoaded")) { - return; - } - this.set("loading", true); - - IncomingEmail.findAll(this.get("filter"), this.get("model.length")) - .then(incoming => { - if (incoming.length < 50) { - this.get("model").set("allLoaded", true); - } - this.get("model").addObjects(incoming); - }) - .finally(() => { - this.set("loading", false); - }); - } - } -}); diff --git a/app/assets/javascripts/admin/controllers/admin-email-logs.js.es6 b/app/assets/javascripts/admin/controllers/admin-email-logs.js.es6 index a86ae42111..b08a5115bd 100644 --- a/app/assets/javascripts/admin/controllers/admin-email-logs.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-email-logs.js.es6 @@ -3,23 +3,34 @@ import EmailLog from "admin/models/email-log"; export default Ember.Controller.extend({ loading: false, + loadLogs(sourceModel, loadMore) { + if ((loadMore && this.get("loading")) || this.get("model.allLoaded")) { + return; + } + + this.set("loading", true); + + sourceModel = sourceModel || EmailLog; + + return sourceModel + .findAll(this.get("filter"), loadMore ? this.get("model.length") : null) + .then(logs => { + if (this.get("model") && loadMore && logs.length < 50) { + this.get("model").set("allLoaded", true); + } + + if (this.get("model") && loadMore) { + this.get("model").addObjects(logs); + } else { + this.set("model", logs); + } + }) + .finally(() => this.set("loading", false)); + }, + actions: { loadMore() { - if (this.get("loading") || this.get("model.allLoaded")) { - return; - } - - this.set("loading", true); - return EmailLog.findAll(this.get("filter"), this.get("model.length")) - .then(logs => { - if (logs.length < 50) { - this.get("model").set("allLoaded", true); - } - this.get("model").addObjects(logs); - }) - .finally(() => { - this.set("loading", false); - }); + this.loadLogs(EmailLog, true); } } }); diff --git a/app/assets/javascripts/admin/controllers/admin-email-received.js.es6 b/app/assets/javascripts/admin/controllers/admin-email-received.js.es6 index a5f240fdbf..7659e61edd 100644 --- a/app/assets/javascripts/admin/controllers/admin-email-received.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-email-received.js.es6 @@ -1,11 +1,15 @@ -import AdminEmailIncomingsController from "admin/controllers/admin-email-incomings"; +import AdminEmailLogsController from "admin/controllers/admin-email-logs"; import debounce from "discourse/lib/debounce"; import IncomingEmail from "admin/models/incoming-email"; -export default AdminEmailIncomingsController.extend({ +export default AdminEmailLogsController.extend({ filterIncomingEmails: debounce(function() { - IncomingEmail.findAll(this.get("filter")).then(incomings => - this.set("model", incomings) - ); - }, 250).observes("filter.{from,to,subject}") + this.loadLogs(IncomingEmail); + }, 250).observes("filter.{status,from,to,subject}"), + + actions: { + loadMore() { + this.loadLogs(IncomingEmail, true); + } + } }); diff --git a/app/assets/javascripts/admin/controllers/admin-email-rejected.js.es6 b/app/assets/javascripts/admin/controllers/admin-email-rejected.js.es6 index b9341dd7e3..602bb052ce 100644 --- a/app/assets/javascripts/admin/controllers/admin-email-rejected.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-email-rejected.js.es6 @@ -1,11 +1,15 @@ -import AdminEmailIncomingsController from "admin/controllers/admin-email-incomings"; +import AdminEmailLogsController from "admin/controllers/admin-email-logs"; import debounce from "discourse/lib/debounce"; import IncomingEmail from "admin/models/incoming-email"; -export default AdminEmailIncomingsController.extend({ +export default AdminEmailLogsController.extend({ filterIncomingEmails: debounce(function() { - IncomingEmail.findAll(this.get("filter")).then(incomings => - this.set("model", incomings) - ); - }, 250).observes("filter.{from,to,subject,error}") + this.loadLogs(IncomingEmail); + }, 250).observes("filter.{status,from,to,subject,error}"), + + actions: { + loadMore() { + this.loadLogs(IncomingEmail, true); + } + } }); diff --git a/app/assets/javascripts/admin/controllers/admin-email-sent.js.es6 b/app/assets/javascripts/admin/controllers/admin-email-sent.js.es6 index 691b017c6f..83f52d3510 100644 --- a/app/assets/javascripts/admin/controllers/admin-email-sent.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-email-sent.js.es6 @@ -1,9 +1,8 @@ import AdminEmailLogsController from "admin/controllers/admin-email-logs"; import debounce from "discourse/lib/debounce"; -import EmailLog from "admin/models/email-log"; export default AdminEmailLogsController.extend({ filterEmailLogs: debounce(function() { - EmailLog.findAll(this.get("filter")).then(logs => this.set("model", logs)); - }, 250).observes("filter.{user,address,type,reply_key}") + this.loadLogs(); + }, 250).observes("filter.{status,user,address,type,reply_key}") }); diff --git a/app/assets/javascripts/admin/controllers/admin-email-skipped.js.es6 b/app/assets/javascripts/admin/controllers/admin-email-skipped.js.es6 index c2ec582af2..535fa4bca1 100644 --- a/app/assets/javascripts/admin/controllers/admin-email-skipped.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-email-skipped.js.es6 @@ -1,9 +1,8 @@ import AdminEmailLogsController from "admin/controllers/admin-email-logs"; import debounce from "discourse/lib/debounce"; -import EmailLog from "admin/models/email-log"; export default AdminEmailLogsController.extend({ filterEmailLogs: debounce(function() { - EmailLog.findAll(this.get("filter")).then(logs => this.set("model", logs)); - }, 250).observes("filter.{user,address,type}") + this.loadLogs(); + }, 250).observes("filter.{status,user,address,type}") }); diff --git a/app/assets/javascripts/admin/routes/admin-email-logs.js.es6 b/app/assets/javascripts/admin/routes/admin-email-logs.js.es6 index b61b63088c..35d2c51e8a 100644 --- a/app/assets/javascripts/admin/routes/admin-email-logs.js.es6 +++ b/app/assets/javascripts/admin/routes/admin-email-logs.js.es6 @@ -1,12 +1,8 @@ -import EmailLog from "admin/models/email-log"; - export default Discourse.Route.extend({ - model() { - return EmailLog.findAll({ status: this.get("status") }); - }, - - setupController(controller, model) { - controller.set("model", model); - controller.set("filter", { status: this.get("status") }); + setupController(controller) { + controller.setProperties({ + loading: true, + filter: { status: this.get("status") } + }); } }); diff --git a/app/assets/javascripts/admin/templates/email-bounced.hbs b/app/assets/javascripts/admin/templates/email-bounced.hbs index dc9c2e2b7f..bbb812b07f 100644 --- a/app/assets/javascripts/admin/templates/email-bounced.hbs +++ b/app/assets/javascripts/admin/templates/email-bounced.hbs @@ -31,7 +31,9 @@ {{l.email_type}} {{else}} - {{i18n 'admin.email.logs.none'}} + {{#unless loading}} + {{i18n 'admin.email.logs.none'}} + {{/unless}} {{/each}} diff --git a/app/assets/javascripts/admin/templates/email-sent.hbs b/app/assets/javascripts/admin/templates/email-sent.hbs index 83bb5b56d8..fe3712b986 100644 --- a/app/assets/javascripts/admin/templates/email-sent.hbs +++ b/app/assets/javascripts/admin/templates/email-sent.hbs @@ -44,7 +44,9 @@ {{else}} - {{i18n 'admin.email.logs.none'}} + {{#unless loading}} + {{i18n 'admin.email.logs.none'}} + {{/unless}} {{/each}} diff --git a/app/assets/javascripts/admin/templates/email-skipped.hbs b/app/assets/javascripts/admin/templates/email-skipped.hbs index 0ca7fed0a7..ee80534382 100644 --- a/app/assets/javascripts/admin/templates/email-skipped.hbs +++ b/app/assets/javascripts/admin/templates/email-skipped.hbs @@ -40,7 +40,9 @@ {{else}} - {{i18n 'admin.email.logs.none'}} + {{#unless loading}} + {{i18n 'admin.email.logs.none'}} + {{/unless}} {{/each}}