mirror of
https://github.com/discourse/discourse.git
synced 2025-04-29 00:04:38 +08:00
FIX: Do not async already loaded categories (#25607)
Use sync findByIds to return the category list if all of them have been previously loaded.
This commit is contained in:
parent
6bd26e81c1
commit
95555b9a97
app/assets/javascripts/discourse
@ -123,7 +123,7 @@ export default class Category extends RestModel {
|
|||||||
static async asyncFindByIds(ids = []) {
|
static async asyncFindByIds(ids = []) {
|
||||||
ids = ids.map((x) => parseInt(x, 10));
|
ids = ids.map((x) => parseInt(x, 10));
|
||||||
|
|
||||||
if (!Site.current().lazy_load_categories) {
|
if (!Site.current().lazy_load_categories || this.hasAsyncFoundAll(ids)) {
|
||||||
return this.findByIds(ids);
|
return this.findByIds(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@ import { setupTest } from "ember-qunit";
|
|||||||
import { module, test } from "qunit";
|
import { module, test } from "qunit";
|
||||||
import sinon from "sinon";
|
import sinon from "sinon";
|
||||||
import Category from "discourse/models/category";
|
import Category from "discourse/models/category";
|
||||||
|
import pretender, { response } from "discourse/tests/helpers/create-pretender";
|
||||||
|
|
||||||
module("Unit | Model | category", function (hooks) {
|
module("Unit | Model | category", function (hooks) {
|
||||||
setupTest(hooks);
|
setupTest(hooks);
|
||||||
@ -447,4 +448,27 @@ module("Unit | Model | category", function (hooks) {
|
|||||||
"Test2 Sub Sub",
|
"Test2 Sub Sub",
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("asyncFindByIds - do not request categories that have been loaded already", async function (assert) {
|
||||||
|
const requestedIds = [];
|
||||||
|
pretender.get("/categories/find", (request) => {
|
||||||
|
const ids = request.queryParams.ids.map((id) => parseInt(id, 10));
|
||||||
|
requestedIds.push(ids);
|
||||||
|
return response({
|
||||||
|
categories: ids.map((id) => ({ id, slug: `category-${id}` })),
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const site = this.owner.lookup("service:site");
|
||||||
|
site.set("lazy_load_categories", true);
|
||||||
|
|
||||||
|
await Category.asyncFindByIds([12345, 12346]);
|
||||||
|
assert.deepEqual(requestedIds, [[12345, 12346]]);
|
||||||
|
|
||||||
|
await Category.asyncFindByIds([12345, 12346, 12347]);
|
||||||
|
assert.deepEqual(requestedIds, [[12345, 12346], [12347]]);
|
||||||
|
|
||||||
|
await Category.asyncFindByIds([12345]);
|
||||||
|
assert.deepEqual(requestedIds, [[12345, 12346], [12347]]);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user