diff --git a/app/assets/javascripts/discourse/app/controllers/create-invite.js b/app/assets/javascripts/discourse/app/controllers/create-invite.js index 553ffaf42d9..e4dc979f0ed 100644 --- a/app/assets/javascripts/discourse/app/controllers/create-invite.js +++ b/app/assets/javascripts/discourse/app/controllers/create-invite.js @@ -18,6 +18,7 @@ export default Controller.extend( bufferedProperty("invite"), { allGroups: null, + topics: null, flashText: null, flashClass: null, @@ -48,6 +49,7 @@ export default Controller.extend( }); this.setProperties({ + topics: [], flashText: null, flashClass: null, flashLink: false, @@ -72,7 +74,7 @@ export default Controller.extend( }, setInvite(invite) { - this.set("invite", invite); + this.setProperties({ invite, topics: invite.topics }); }, save(opts) { @@ -201,5 +203,11 @@ export default Controller.extend( this.set("buffered.email", result[0].email[0]); }); }, + + @action + onChangeTopic(topicId, topic) { + this.set("topics", [topic]); + this.set("buffered.topicId", topicId); + }, } ); diff --git a/app/assets/javascripts/discourse/app/templates/modal/create-invite.hbs b/app/assets/javascripts/discourse/app/templates/modal/create-invite.hbs index c5a854dd01e..f0813af4283 100644 --- a/app/assets/javascripts/discourse/app/templates/modal/create-invite.hbs +++ b/app/assets/javascripts/discourse/app/templates/modal/create-invite.hbs @@ -85,12 +85,14 @@ {{#if currentUser.staff}}
- {{choose-topic - selectedTopicId=buffered.topicId - topicTitle=buffered.topicTitle - additionalFilters="status:public" - labelIcon="hand-point-right" - label="user.invited.invite.invite_to_topic" + + {{topic-chooser + value=buffered.topicId + content=topics + onChange=(action "onChangeTopic") + options=(hash + additionalFilters="status:public" + ) }}
{{else if buffered.topicTitle}} diff --git a/app/assets/javascripts/select-kit/addon/components/topic-chooser.js b/app/assets/javascripts/select-kit/addon/components/topic-chooser.js new file mode 100644 index 00000000000..59cf6d1ffbe --- /dev/null +++ b/app/assets/javascripts/select-kit/addon/components/topic-chooser.js @@ -0,0 +1,45 @@ +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"); + } + }); + }, +}); diff --git a/app/assets/javascripts/select-kit/addon/components/topic-row.js b/app/assets/javascripts/select-kit/addon/components/topic-row.js new file mode 100644 index 00000000000..284f9baa281 --- /dev/null +++ b/app/assets/javascripts/select-kit/addon/components/topic-row.js @@ -0,0 +1,7 @@ +import SelectKitRowComponent from "select-kit/components/select-kit/select-kit-row"; +import layout from "select-kit/templates/components/topic-row"; + +export default SelectKitRowComponent.extend({ + layout, + classNames: ["topic-row"], +}); diff --git a/app/assets/javascripts/select-kit/addon/templates/components/topic-row.hbs b/app/assets/javascripts/select-kit/addon/templates/components/topic-row.hbs new file mode 100644 index 00000000000..3e143e0cbdb --- /dev/null +++ b/app/assets/javascripts/select-kit/addon/templates/components/topic-row.hbs @@ -0,0 +1,9 @@ +{{topic-status topic=item disableActions=true}} +
{{replace-emoji item.fancy_title}}
+
+ {{bound-category-link item.category + recursive=true + hideParent=true + link=false + }} +
diff --git a/app/assets/stylesheets/common/base/share_link.scss b/app/assets/stylesheets/common/base/share_link.scss index 9a830ea371b..561e7b4181e 100644 --- a/app/assets/stylesheets/common/base/share_link.scss +++ b/app/assets/stylesheets/common/base/share_link.scss @@ -187,6 +187,7 @@ textarea#invite-message, &.invite-to-topic input[type="text"], .group-chooser, + .topic-chooser, .user-chooser, .future-date-input-selector, .future-date-input-date-picker, diff --git a/app/assets/stylesheets/common/select-kit/_index.scss b/app/assets/stylesheets/common/select-kit/_index.scss index 2b1b4b3cc9c..f4aa90dd3bd 100644 --- a/app/assets/stylesheets/common/select-kit/_index.scss +++ b/app/assets/stylesheets/common/select-kit/_index.scss @@ -23,5 +23,6 @@ @import "tag-chooser"; @import "tag-drop"; @import "toolbar-popup-menu-options"; +@import "topic-chooser"; @import "topic-notifications-button"; @import "user-row"; diff --git a/app/assets/stylesheets/common/select-kit/topic-chooser.scss b/app/assets/stylesheets/common/select-kit/topic-chooser.scss new file mode 100644 index 00000000000..873e9b80618 --- /dev/null +++ b/app/assets/stylesheets/common/select-kit/topic-chooser.scss @@ -0,0 +1,9 @@ +.select-kit { + &.combo-box { + &.topic-chooser { + .select-kit-row { + display: initial; + } + } + } +}