mirror of
https://github.com/discourse/discourse.git
synced 2024-12-12 09:03:41 +08:00
efb584e32f
The old choose-topic component did not have the same style as the rest of the create invite modal and was not very suitable to use in the modal because it introduced the search results in modal's body. The new topic-chooser is built using select-kit and provides a more polished user experience.
46 lines
1.1 KiB
JavaScript
46 lines
1.1 KiB
JavaScript
import { isEmpty } from "@ember/utils";
|
|
import { searchForTerm } from "discourse/lib/search";
|
|
import ComboBoxComponent from "select-kit/components/combo-box";
|
|
|
|
export default ComboBoxComponent.extend({
|
|
pluginApiIdentifiers: ["topic-chooser"],
|
|
classNames: ["topic-chooser"],
|
|
|
|
nameProperty: "fancy_title",
|
|
labelProperty: "title",
|
|
titleProperty: "title",
|
|
|
|
selectKitOptions: {
|
|
clearable: true,
|
|
filterable: true,
|
|
filterPlaceholder: "choose_topic.title.placeholder",
|
|
additionalFilters: "",
|
|
},
|
|
|
|
modifyComponentForRow() {
|
|
return "topic-row";
|
|
},
|
|
|
|
search(filter) {
|
|
if (isEmpty(filter) && isEmpty(this.selectKit.options.additionalFilters)) {
|
|
return [];
|
|
}
|
|
|
|
const searchParams = {};
|
|
if (!isEmpty(filter)) {
|
|
searchParams.typeFilter = "topic";
|
|
searchParams.restrictToArchetype = "regular";
|
|
searchParams.searchForId = true;
|
|
}
|
|
|
|
return searchForTerm(
|
|
`${filter} ${this.selectKit.options.additionalFilters}`,
|
|
searchParams
|
|
).then((results) => {
|
|
if (results?.posts?.length > 0) {
|
|
return results.posts.mapBy("topic");
|
|
}
|
|
});
|
|
},
|
|
});
|