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

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({
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);
}
}
});

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

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

View File

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

View File

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

View File

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

View File

@ -31,7 +31,9 @@
<td><a {{action "showIncomingEmail" l.id}}>{{l.email_type}}</a></td>
</tr>
{{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}}
</table>

View File

@ -44,7 +44,9 @@
</td>
</tr>
{{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}}
</table>

View File

@ -40,7 +40,9 @@
</td>
</tr>
{{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}}
</table>