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");
|
||
|
}
|
||
|
});
|
||
|
},
|
||
|
});
|