From 8f9933d1dd6597687c6d7b6ec95290e75d3cfed5 Mon Sep 17 00:00:00 2001 From: Bianca Nenciu Date: Wed, 21 Dec 2022 14:47:47 +0200 Subject: [PATCH] DEV: Add default results option to user-chooser (#19521) defaultSearchResults search option can be used to show a list of results by default, before any search ran, when the filter is empty. --- .../components/select-kit/user-chooser-test.js | 14 ++++++++++++++ .../select-kit/addon/components/user-chooser.js | 3 +++ 2 files changed, 17 insertions(+) diff --git a/app/assets/javascripts/discourse/tests/integration/components/select-kit/user-chooser-test.js b/app/assets/javascripts/discourse/tests/integration/components/select-kit/user-chooser-test.js index f33b528b776..041b0a600fd 100644 --- a/app/assets/javascripts/discourse/tests/integration/components/select-kit/user-chooser-test.js +++ b/app/assets/javascripts/discourse/tests/integration/components/select-kit/user-chooser-test.js @@ -28,4 +28,18 @@ module("Integration | Component | select-kit/user-chooser", function (hooks) { await this.subject.deselectItemByValue("bob"); assert.strictEqual(this.subject.header().name(), "martin"); }); + + test("can display default search results", async function (assert) { + this.set("options", { + customSearchOptions: { + defaultSearchResults: [{ username: "foo" }, { username: "bar" }], + }, + }); + + await render(hbs``); + + await this.subject.expand(); + assert.strictEqual(this.subject.rowByIndex(0).value(), "foo"); + assert.strictEqual(this.subject.rowByIndex(1).value(), "bar"); + }); }); diff --git a/app/assets/javascripts/select-kit/addon/components/user-chooser.js b/app/assets/javascripts/select-kit/addon/components/user-chooser.js index b8651248ed1..be1deb7c7f1 100644 --- a/app/assets/javascripts/select-kit/addon/components/user-chooser.js +++ b/app/assets/javascripts/select-kit/addon/components/user-chooser.js @@ -57,6 +57,9 @@ export default MultiSelectComponent.extend({ filter = filter || ""; filter = filter.replace(/^@/, ""); const options = this.selectKit.options; + if (filter === "" && options?.customSearchOptions?.defaultSearchResults) { + return Promise.resolve(options.customSearchOptions.defaultSearchResults); + } // prevents doing ajax request for nothing const skippedSearch = skipSearch(filter, options.allowEmails);