import MultiSelectComponent from "select-kit/components/multi-select"; import { isEmpty } from "@ember/utils"; import { searchForTerm } from "discourse/lib/search"; import { makeArray } from "discourse-common/lib/helpers"; export default MultiSelectComponent.extend({ classNames: ["topic-selector", "wizard-topic-selector"], topics: null, value: [], content: [], nameProperty: "fancy_title", labelProperty: "title", titleProperty: "title", selectKitOptions: { clearable: true, filterable: true, filterPlaceholder: "choose_topic.title.placeholder", allowAny: false, }, didReceiveAttrs() { if (this.topics && !this.selectKit.hasSelection) { const values = makeArray(this.topics.map((t) => t.id)); const content = makeArray(this.topics); this.selectKit.change(values, content); } this._super(...arguments); }, modifyComponentForRow() { return "topic-row"; }, search(filter) { if (isEmpty(filter)) { return []; } const searchParams = {}; searchParams.typeFilter = "topic"; searchParams.restrictToArchetype = "regular"; searchParams.searchForId = true; if (this.category) { searchParams.searchContext = { type: "category", id: this.category, }; } return searchForTerm(filter, searchParams).then((results) => { if (results?.posts?.length > 0) { return results.posts.mapBy("topic"); } }); }, actions: { onChange(value, items) { const content = items.map((t) => { return { id: t.id, title: t.title, fancy_title: t.fancy_title, url: t.url, }; }); this.setProperties({ value, content }); this.onChange(value, content); }, }, });