FIX: prevents double network calls and other quirks on admin emails (#7074)

This commit is contained in:
Joffrey JAFFEUX 2019-02-26 17:53:52 +01:00 committed by GitHub
parent 75aaae5d5c
commit fbedaea5ed
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 66 additions and 73 deletions

View File

@ -1,9 +1,8 @@
import AdminEmailLogsController from "admin/controllers/admin-email-logs"; import AdminEmailLogsController from "admin/controllers/admin-email-logs";
import debounce from "discourse/lib/debounce"; import debounce from "discourse/lib/debounce";
import EmailLog from "admin/models/email-log";
export default AdminEmailLogsController.extend({ export default AdminEmailLogsController.extend({
filterEmailLogs: debounce(function() { filterEmailLogs: debounce(function() {
EmailLog.findAll(this.get("filter")).then(logs => this.set("model", logs)); this.loadLogs();
}, 250).observes("filter.{user,address,type}") }, 250).observes("filter.{status,user,address,type}")
}); });

View File

@ -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);
});
}
}
});

View File

@ -3,23 +3,34 @@ import EmailLog from "admin/models/email-log";
export default Ember.Controller.extend({ export default Ember.Controller.extend({
loading: false, 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: { actions: {
loadMore() { loadMore() {
if (this.get("loading") || this.get("model.allLoaded")) { this.loadLogs(EmailLog, true);
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);
});
} }
} }
}); });

View File

@ -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 debounce from "discourse/lib/debounce";
import IncomingEmail from "admin/models/incoming-email"; import IncomingEmail from "admin/models/incoming-email";
export default AdminEmailIncomingsController.extend({ export default AdminEmailLogsController.extend({
filterIncomingEmails: debounce(function() { filterIncomingEmails: debounce(function() {
IncomingEmail.findAll(this.get("filter")).then(incomings => this.loadLogs(IncomingEmail);
this.set("model", incomings) }, 250).observes("filter.{status,from,to,subject}"),
);
}, 250).observes("filter.{from,to,subject}") actions: {
loadMore() {
this.loadLogs(IncomingEmail, true);
}
}
}); });

View File

@ -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 debounce from "discourse/lib/debounce";
import IncomingEmail from "admin/models/incoming-email"; import IncomingEmail from "admin/models/incoming-email";
export default AdminEmailIncomingsController.extend({ export default AdminEmailLogsController.extend({
filterIncomingEmails: debounce(function() { filterIncomingEmails: debounce(function() {
IncomingEmail.findAll(this.get("filter")).then(incomings => this.loadLogs(IncomingEmail);
this.set("model", incomings) }, 250).observes("filter.{status,from,to,subject,error}"),
);
}, 250).observes("filter.{from,to,subject,error}") actions: {
loadMore() {
this.loadLogs(IncomingEmail, true);
}
}
}); });

View File

@ -1,9 +1,8 @@
import AdminEmailLogsController from "admin/controllers/admin-email-logs"; import AdminEmailLogsController from "admin/controllers/admin-email-logs";
import debounce from "discourse/lib/debounce"; import debounce from "discourse/lib/debounce";
import EmailLog from "admin/models/email-log";
export default AdminEmailLogsController.extend({ export default AdminEmailLogsController.extend({
filterEmailLogs: debounce(function() { filterEmailLogs: debounce(function() {
EmailLog.findAll(this.get("filter")).then(logs => this.set("model", logs)); this.loadLogs();
}, 250).observes("filter.{user,address,type,reply_key}") }, 250).observes("filter.{status,user,address,type,reply_key}")
}); });

View File

@ -1,9 +1,8 @@
import AdminEmailLogsController from "admin/controllers/admin-email-logs"; import AdminEmailLogsController from "admin/controllers/admin-email-logs";
import debounce from "discourse/lib/debounce"; import debounce from "discourse/lib/debounce";
import EmailLog from "admin/models/email-log";
export default AdminEmailLogsController.extend({ export default AdminEmailLogsController.extend({
filterEmailLogs: debounce(function() { filterEmailLogs: debounce(function() {
EmailLog.findAll(this.get("filter")).then(logs => this.set("model", logs)); this.loadLogs();
}, 250).observes("filter.{user,address,type}") }, 250).observes("filter.{status,user,address,type}")
}); });

View File

@ -1,12 +1,8 @@
import EmailLog from "admin/models/email-log";
export default Discourse.Route.extend({ export default Discourse.Route.extend({
model() { setupController(controller) {
return EmailLog.findAll({ status: this.get("status") }); controller.setProperties({
}, loading: true,
filter: { status: this.get("status") }
setupController(controller, model) { });
controller.set("model", model);
controller.set("filter", { status: this.get("status") });
} }
}); });

View File

@ -31,7 +31,9 @@
<td><a {{action "showIncomingEmail" l.id}}>{{l.email_type}}</a></td> <td><a {{action "showIncomingEmail" l.id}}>{{l.email_type}}</a></td>
</tr> </tr>
{{else}} {{else}}
<tr><td colspan="4">{{i18n 'admin.email.logs.none'}}</td></tr> {{#unless loading}}
<tr><td colspan="4">{{i18n 'admin.email.logs.none'}}</td></tr>
{{/unless}}
{{/each}} {{/each}}
</table> </table>

View File

@ -44,7 +44,9 @@
</td> </td>
</tr> </tr>
{{else}} {{else}}
<tr><td colspan="5">{{i18n 'admin.email.logs.none'}}</td></tr> {{#unless loading}}
<tr><td colspan="5">{{i18n 'admin.email.logs.none'}}</td></tr>
{{/unless}}
{{/each}} {{/each}}
</table> </table>

View File

@ -40,7 +40,9 @@
</td> </td>
</tr> </tr>
{{else}} {{else}}
<tr><td colspan="5">{{i18n 'admin.email.logs.none'}}</td></tr> {{#unless loading}}
<tr><td colspan="5">{{i18n 'admin.email.logs.none'}}</td></tr>
{{/unless}}
{{/each}} {{/each}}
</table> </table>