Sometimes the user list was incomplete when multiple requests were
created to fetch next pages. If the responses did not arrive in the
same order as the requests then only the last response was parsed.
This is a follow up commit to a0f4c7fe88.
86 lines
1.9 KiB
JavaScript
86 lines
1.9 KiB
JavaScript
import discourseComputed, { observes } from "discourse-common/utils/decorators";
|
|
import AdminUser from "admin/models/admin-user";
|
|
import CanCheckEmails from "discourse/mixins/can-check-emails";
|
|
import Controller from "@ember/controller";
|
|
import I18n from "I18n";
|
|
import { INPUT_DELAY } from "discourse-common/config/environment";
|
|
import discourseDebounce from "discourse-common/lib/debounce";
|
|
import { i18n } from "discourse/lib/computed";
|
|
|
|
export default Controller.extend(CanCheckEmails, {
|
|
model: null,
|
|
query: null,
|
|
order: null,
|
|
asc: null,
|
|
showEmails: false,
|
|
refreshing: false,
|
|
listFilter: null,
|
|
selectAll: false,
|
|
searchHint: i18n("search_hint"),
|
|
|
|
init() {
|
|
this._super(...arguments);
|
|
|
|
this._page = 1;
|
|
this._results = [];
|
|
this._canLoadMore = true;
|
|
},
|
|
|
|
@discourseComputed("query")
|
|
title(query) {
|
|
return I18n.t("admin.users.titles." + query);
|
|
},
|
|
|
|
@observes("listFilter")
|
|
_filterUsers() {
|
|
discourseDebounce(this, this.resetFilters, INPUT_DELAY);
|
|
},
|
|
|
|
resetFilters() {
|
|
this._page = 1;
|
|
this._results = [];
|
|
this._canLoadMore = true;
|
|
this._refreshUsers();
|
|
},
|
|
|
|
_refreshUsers() {
|
|
if (!this._canLoadMore) {
|
|
return;
|
|
}
|
|
|
|
const page = this._page;
|
|
this.set("refreshing", true);
|
|
|
|
AdminUser.findAll(this.query, {
|
|
filter: this.listFilter,
|
|
show_emails: this.showEmails,
|
|
order: this.order,
|
|
asc: this.asc,
|
|
page,
|
|
})
|
|
.then((result) => {
|
|
if (result && result.length > 0) {
|
|
this._results[page] = result;
|
|
this.set("model", this._results.flat());
|
|
} else {
|
|
this._canLoadMore = false;
|
|
}
|
|
})
|
|
.finally(() => {
|
|
this.set("refreshing", false);
|
|
});
|
|
},
|
|
|
|
actions: {
|
|
loadMore() {
|
|
this._page += 1;
|
|
this._refreshUsers();
|
|
},
|
|
|
|
toggleEmailVisibility() {
|
|
this.toggleProperty("showEmails");
|
|
this.resetFilters();
|
|
},
|
|
},
|
|
});
|