Compare commits
1 Commits
main
...
asyncify-p
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a0899625d5 |
@ -5,24 +5,24 @@ import Route from "@ember/routing/route";
|
|||||||
export default Route.extend({
|
export default Route.extend({
|
||||||
// since the logs are pushed via the message bus
|
// since the logs are pushed via the message bus
|
||||||
// we only want to preload them (hence the beforeModel hook)
|
// we only want to preload them (hence the beforeModel hook)
|
||||||
beforeModel() {
|
async beforeModel() {
|
||||||
const logs = this.controllerFor("adminBackupsLogs").get("logs");
|
const logs = this.controllerFor("adminBackupsLogs").get("logs");
|
||||||
|
|
||||||
// preload the logs if any
|
// preload the logs if any
|
||||||
PreloadStore.getAndRemove("logs").then(function (preloadedLogs) {
|
const preloadedLogs = await PreloadStore.getAndRemove("logs");
|
||||||
if (preloadedLogs && preloadedLogs.length) {
|
if (preloadedLogs?.length) {
|
||||||
// we need to filter out message like: "[SUCCESS]"
|
// we need to filter out message like: "[SUCCESS]"
|
||||||
// and convert POJOs to Ember Objects
|
// and convert POJOs to Ember Objects
|
||||||
const newLogs = preloadedLogs
|
const newLogs = preloadedLogs
|
||||||
.filter((log) => {
|
.filter((log) => {
|
||||||
return log.message.length > 0 && log.message[0] !== "[";
|
return log.message.length > 0 && log.message[0] !== "[";
|
||||||
})
|
})
|
||||||
.map((log) => EmberObject.create(log));
|
.map((log) => EmberObject.create(log));
|
||||||
logs.pushObjects(newLogs);
|
logs.pushObjects(newLogs);
|
||||||
}
|
}
|
||||||
});
|
|
||||||
},
|
},
|
||||||
|
|
||||||
setupController() {
|
setupController() {
|
||||||
/* prevent default behavior */
|
// prevent default behavior
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@ -52,16 +52,16 @@ export default DiscourseRoute.extend({
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
model() {
|
async model() {
|
||||||
return PreloadStore.getAndRemove("operations_status", () =>
|
const status = await PreloadStore.getAndRemove("operations_status", () =>
|
||||||
ajax("/admin/backups/status.json")
|
ajax("/admin/backups/status.json")
|
||||||
).then((status) =>
|
|
||||||
BackupStatus.create({
|
|
||||||
isOperationRunning: status.is_operation_running,
|
|
||||||
canRollback: status.can_rollback,
|
|
||||||
allowRestore: status.allow_restore,
|
|
||||||
})
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
return BackupStatus.create({
|
||||||
|
isOperationRunning: status.is_operation_running,
|
||||||
|
canRollback: status.can_rollback,
|
||||||
|
allowRestore: status.allow_restore,
|
||||||
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
deactivate() {
|
deactivate() {
|
||||||
|
|||||||
@ -27,17 +27,16 @@ export function finderFor(filter, params) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export default RestAdapter.extend({
|
export default RestAdapter.extend({
|
||||||
find(store, type, findArgs) {
|
async find(store, type, findArgs) {
|
||||||
const filter = findArgs.filter;
|
const { filter, params } = findArgs;
|
||||||
const params = findArgs.params;
|
|
||||||
|
|
||||||
return PreloadStore.getAndRemove(
|
const result = await PreloadStore.getAndRemove(
|
||||||
"topic_list",
|
"topic_list",
|
||||||
finderFor(filter, params)
|
finderFor(filter, params)
|
||||||
).then(function (result) {
|
);
|
||||||
result.filter = filter;
|
|
||||||
result.params = params;
|
result.filter = filter;
|
||||||
return result;
|
result.params = params;
|
||||||
});
|
return result;
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
// We can insert data into the PreloadStore when the document is loaded.
|
// We can insert data into the PreloadStore when the document is loaded.
|
||||||
// The data can be accessed once by a key, after which it is removed
|
// The data can be accessed once by a key, after which it is removed
|
||||||
import { Promise } from "rsvp";
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data: new Map(),
|
data: new Map(),
|
||||||
@ -15,29 +14,18 @@ export default {
|
|||||||
from the store.
|
from the store.
|
||||||
So, for example, you can't load a preloaded topic more than once.
|
So, for example, you can't load a preloaded topic more than once.
|
||||||
**/
|
**/
|
||||||
getAndRemove(key, finder) {
|
async getAndRemove(key, finder) {
|
||||||
if (this.data.has(key)) {
|
if (this.data.has(key)) {
|
||||||
let promise = Promise.resolve(this.data.get(key));
|
const result = this.data.get(key);
|
||||||
this.data.delete(key);
|
this.data.delete(key);
|
||||||
return promise;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (finder) {
|
if (finder) {
|
||||||
return new Promise(function (resolve, reject) {
|
return await finder();
|
||||||
let result = finder();
|
|
||||||
|
|
||||||
// If the finder returns a promise, we support that too
|
|
||||||
if (result && result.then) {
|
|
||||||
result
|
|
||||||
.then((toResolve) => resolve(toResolve))
|
|
||||||
.catch((toReject) => reject(toReject));
|
|
||||||
} else {
|
|
||||||
resolve(result);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return Promise.resolve(null);
|
return null;
|
||||||
},
|
},
|
||||||
|
|
||||||
get(key) {
|
get(key) {
|
||||||
|
|||||||
@ -110,17 +110,16 @@ CategoryList.reopenClass({
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
list(store) {
|
async list(store) {
|
||||||
const getCategories = () => ajax("/categories.json");
|
const result = await PreloadStore.getAndRemove("categories_list", () =>
|
||||||
return PreloadStore.getAndRemove("categories_list", getCategories).then(
|
ajax("/categories.json")
|
||||||
(result) => {
|
|
||||||
return CategoryList.create({
|
|
||||||
categories: this.categoriesFrom(store, result),
|
|
||||||
can_create_category: result.category_list.can_create_category,
|
|
||||||
can_create_topic: result.category_list.can_create_topic,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
return CategoryList.create({
|
||||||
|
categories: this.categoriesFrom(store, result),
|
||||||
|
can_create_category: result.category_list.can_create_category,
|
||||||
|
can_create_topic: result.category_list.can_create_topic,
|
||||||
|
});
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -665,70 +665,73 @@ const User = RestModel.extend({
|
|||||||
return this.stats.rejectBy("isPM");
|
return this.stats.rejectBy("isPM");
|
||||||
},
|
},
|
||||||
|
|
||||||
findDetails(options) {
|
async findDetails(options) {
|
||||||
const user = this;
|
const user = this;
|
||||||
|
|
||||||
return PreloadStore.getAndRemove(`user_${user.get("username")}`, () => {
|
const json = await PreloadStore.getAndRemove(
|
||||||
if (options && options.existingRequest) {
|
`user_${user.get("username")}`,
|
||||||
// Existing ajax request has been passed, use it
|
() => {
|
||||||
return options.existingRequest;
|
if (options?.existingRequest) {
|
||||||
}
|
// Existing ajax request has been passed, use it
|
||||||
|
return options.existingRequest;
|
||||||
const useCardRoute = options && options.forCard;
|
|
||||||
if (options) {
|
|
||||||
delete options.forCard;
|
|
||||||
}
|
|
||||||
|
|
||||||
const path = useCardRoute
|
|
||||||
? `${user.get("username")}/card.json`
|
|
||||||
: `${user.get("username")}.json`;
|
|
||||||
|
|
||||||
return ajax(userPath(path), { data: options });
|
|
||||||
}).then((json) => {
|
|
||||||
if (!isEmpty(json.user.stats)) {
|
|
||||||
json.user.stats = User.groupStats(
|
|
||||||
json.user.stats.map((s) => {
|
|
||||||
if (s.count) {
|
|
||||||
s.count = parseInt(s.count, 10);
|
|
||||||
}
|
|
||||||
return UserActionStat.create(s);
|
|
||||||
})
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isEmpty(json.user.groups) && !isEmpty(json.user.group_users)) {
|
|
||||||
const groups = [];
|
|
||||||
|
|
||||||
for (let i = 0; i < json.user.groups.length; i++) {
|
|
||||||
const group = Group.create(json.user.groups[i]);
|
|
||||||
group.group_user = json.user.group_users[i];
|
|
||||||
groups.push(group);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
json.user.groups = groups;
|
const useCardRoute = options?.forCard;
|
||||||
|
if (options) {
|
||||||
|
delete options.forCard;
|
||||||
|
}
|
||||||
|
|
||||||
|
const path = useCardRoute
|
||||||
|
? `${user.get("username")}/card.json`
|
||||||
|
: `${user.get("username")}.json`;
|
||||||
|
|
||||||
|
return ajax(userPath(path), { data: options });
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!isEmpty(json.user.stats)) {
|
||||||
|
json.user.stats = User.groupStats(
|
||||||
|
json.user.stats.map((s) => {
|
||||||
|
if (s.count) {
|
||||||
|
s.count = parseInt(s.count, 10);
|
||||||
|
}
|
||||||
|
return UserActionStat.create(s);
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isEmpty(json.user.groups) && !isEmpty(json.user.group_users)) {
|
||||||
|
const groups = [];
|
||||||
|
|
||||||
|
for (let i = 0; i < json.user.groups.length; i++) {
|
||||||
|
const group = Group.create(json.user.groups[i]);
|
||||||
|
group.group_user = json.user.group_users[i];
|
||||||
|
groups.push(group);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (json.user.invited_by) {
|
json.user.groups = groups;
|
||||||
json.user.invited_by = User.create(json.user.invited_by);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (!isEmpty(json.user.featured_user_badge_ids)) {
|
if (json.user.invited_by) {
|
||||||
const userBadgesMap = {};
|
json.user.invited_by = User.create(json.user.invited_by);
|
||||||
UserBadge.createFromJson(json).forEach((userBadge) => {
|
}
|
||||||
userBadgesMap[userBadge.get("id")] = userBadge;
|
|
||||||
});
|
|
||||||
json.user.featured_user_badges = json.user.featured_user_badge_ids.map(
|
|
||||||
(id) => userBadgesMap[id]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (json.user.card_badge) {
|
if (!isEmpty(json.user.featured_user_badge_ids)) {
|
||||||
json.user.card_badge = Badge.create(json.user.card_badge);
|
const userBadgesMap = {};
|
||||||
}
|
UserBadge.createFromJson(json).forEach((userBadge) => {
|
||||||
|
userBadgesMap[userBadge.get("id")] = userBadge;
|
||||||
|
});
|
||||||
|
json.user.featured_user_badges = json.user.featured_user_badge_ids.map(
|
||||||
|
(id) => userBadgesMap[id]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
user.setProperties(json.user);
|
if (json.user.card_badge) {
|
||||||
return user;
|
json.user.card_badge = Badge.create(json.user.card_badge);
|
||||||
});
|
}
|
||||||
|
|
||||||
|
user.setProperties(json.user);
|
||||||
|
return user;
|
||||||
},
|
},
|
||||||
|
|
||||||
findStaffInfo() {
|
findStaffInfo() {
|
||||||
|
|||||||
@ -6,13 +6,12 @@ import { scrollTop } from "discourse/mixins/scroll-top";
|
|||||||
import { action } from "@ember/object";
|
import { action } from "@ember/object";
|
||||||
|
|
||||||
export default DiscourseRoute.extend({
|
export default DiscourseRoute.extend({
|
||||||
model() {
|
async model() {
|
||||||
if (PreloadStore.get("badges")) {
|
if (PreloadStore.get("badges")) {
|
||||||
return PreloadStore.getAndRemove("badges").then((json) =>
|
const json = await PreloadStore.getAndRemove("badges");
|
||||||
Badge.createFromJson(json)
|
return Badge.createFromJson(json);
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
return Badge.findAll({ onlyListable: true });
|
return await Badge.findAll({ onlyListable: true });
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@ -29,7 +29,7 @@ export default DiscourseRoute.extend({
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
model(params) {
|
async model(params) {
|
||||||
const cached = getTransient("lastSearch");
|
const cached = getTransient("lastSearch");
|
||||||
let args = { q: params.q };
|
let args = { q: params.q };
|
||||||
if (params.context_id && !args.skip_context) {
|
if (params.context_id && !args.skip_context) {
|
||||||
@ -47,22 +47,21 @@ export default DiscourseRoute.extend({
|
|||||||
return cached.data.model;
|
return cached.data.model;
|
||||||
}
|
}
|
||||||
|
|
||||||
return PreloadStore.getAndRemove("search", () => {
|
const results = await PreloadStore.getAndRemove("search", () => {
|
||||||
if (isValidSearchTerm(params.q, this.siteSettings)) {
|
if (isValidSearchTerm(params.q, this.siteSettings)) {
|
||||||
return ajax("/search", { data: args });
|
return ajax("/search", { data: args });
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}).then(async (results) => {
|
|
||||||
const grouped_search_result = results
|
|
||||||
? results.grouped_search_result
|
|
||||||
: {};
|
|
||||||
const model = (results && (await translateResults(results))) || {
|
|
||||||
grouped_search_result,
|
|
||||||
};
|
|
||||||
setTransient("lastSearch", { searchKey, model }, 5);
|
|
||||||
return model;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const grouped_search_result = results ? results.grouped_search_result : {};
|
||||||
|
|
||||||
|
let model = results && (await translateResults(results));
|
||||||
|
model ||= { grouped_search_result };
|
||||||
|
|
||||||
|
setTransient("lastSearch", { searchKey, model }, 5);
|
||||||
|
return model;
|
||||||
},
|
},
|
||||||
|
|
||||||
@action
|
@action
|
||||||
|
|||||||
@ -8,11 +8,10 @@ export default DiscourseRoute.extend({
|
|||||||
return I18n.t("invites.accept_title");
|
return I18n.t("invites.accept_title");
|
||||||
},
|
},
|
||||||
|
|
||||||
model(params) {
|
async model(params) {
|
||||||
if (PreloadStore.get("invite_info")) {
|
if (PreloadStore.get("invite_info")) {
|
||||||
return PreloadStore.getAndRemove("invite_info").then((json) =>
|
const json = await PreloadStore.getAndRemove("invite_info");
|
||||||
deepMerge(params, json)
|
return deepMerge(params, json);
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,11 +10,10 @@ export default DiscourseRoute.extend({
|
|||||||
return I18n.t("login.reset_password");
|
return I18n.t("login.reset_password");
|
||||||
},
|
},
|
||||||
|
|
||||||
model(params) {
|
async model(params) {
|
||||||
if (PreloadStore.get("password_reset")) {
|
if (PreloadStore.get("password_reset")) {
|
||||||
return PreloadStore.getAndRemove("password_reset").then((json) =>
|
const json = await PreloadStore.getAndRemove("password_reset");
|
||||||
deepMerge(params, json)
|
return deepMerge(params, json);
|
||||||
);
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user