From 2c9d76e5105314b1b25c5e7e496c0081910d7b9d Mon Sep 17 00:00:00 2001 From: Bianca Nenciu Date: Thu, 26 Jan 2023 16:17:15 +0200 Subject: [PATCH] FIX: Use specified limit option in user search (#20020) --- .../discourse/app/lib/user-search.js | 39 +++++++++---------- .../tests/unit/lib/user-search-test.js | 5 +++ 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/app/assets/javascripts/discourse/app/lib/user-search.js b/app/assets/javascripts/discourse/app/lib/user-search.js index e24770fead3..5c60c54e178 100644 --- a/app/assets/javascripts/discourse/app/lib/user-search.js +++ b/app/assets/javascripts/discourse/app/lib/user-search.js @@ -150,41 +150,38 @@ function organizeResults(r, options) { return r; } - let exclude = options.exclude || [], - limit = options.limit || 5, + const exclude = options.exclude || []; + + const results = [], users = [], emails = [], - groups = [], - results = []; + groups = []; if (r.users) { - r.users.every(function (u) { - if (!exclude.includes(u.username)) { - users.push(u); - results.push(u); + r.users.forEach((user) => { + if (results.length < options.limit && !exclude.includes(user.username)) { + results.push(user); + users.push(user); } - return results.length <= limit; }); } if (options.allowEmails && emailValid(options.term)) { - let e = { username: options.term }; - emails = [e]; - results.push(e); + const result = { username: options.term }; + results.push(result); + emails.push(result); } if (r.groups) { - r.groups.every(function (g) { + r.groups.forEach((group) => { if ( - options.term.toLowerCase() === g.name.toLowerCase() || - results.length < limit + (options.term.toLowerCase() === group.name.toLowerCase() || + results.length < options.limit) && + !exclude.includes(group.name) ) { - if (!exclude.includes(g.name)) { - groups.push(g); - results.push(g); - } + results.push(group); + groups.push(group); } - return true; }); } @@ -277,7 +274,7 @@ export default function userSearch(options) { limit, function (r) { cancel(clearPromise); - resolve(organizeResults(r, options)); + resolve(organizeResults(r, { ...options, limit })); } ); }); diff --git a/app/assets/javascripts/discourse/tests/unit/lib/user-search-test.js b/app/assets/javascripts/discourse/tests/unit/lib/user-search-test.js index 3310fa988a8..8f541b661a7 100644 --- a/app/assets/javascripts/discourse/tests/unit/lib/user-search-test.js +++ b/app/assets/javascripts/discourse/tests/unit/lib/user-search-test.js @@ -174,4 +174,9 @@ module("Unit | Utility | user-search", function (hooks) { }); assert.strictEqual(results.length, 1); }); + + test("it uses limit option", async function (assert) { + const results = await userSearch({ term: "te", limit: 2 }); + assert.strictEqual(results.length, 2); + }); });