diff --git a/app/assets/javascripts/discourse/app/components/composer-messages.js b/app/assets/javascripts/discourse/app/components/composer-messages.js index a888c2829ca..ad323bcb55b 100644 --- a/app/assets/javascripts/discourse/app/components/composer-messages.js +++ b/app/assets/javascripts/discourse/app/components/composer-messages.js @@ -76,7 +76,7 @@ export default Component.extend({ shareModal() { const { topic } = this.composer; - const controller = showModal("share-topic"); + const controller = showModal("share-topic", { model: topic.category }); controller.setProperties({ allowInvites: topic.details.can_invite_to && diff --git a/app/assets/javascripts/discourse/app/controllers/share-topic.js b/app/assets/javascripts/discourse/app/controllers/share-topic.js index 7f8d3e2a85f..d1c3657be02 100644 --- a/app/assets/javascripts/discourse/app/controllers/share-topic.js +++ b/app/assets/javascripts/discourse/app/controllers/share-topic.js @@ -9,13 +9,29 @@ import showModal from "discourse/lib/show-modal"; import { bufferedProperty } from "discourse/mixins/buffered-content"; import ModalFunctionality from "discourse/mixins/modal-functionality"; import I18n from "I18n"; +import Category from "discourse/models/category"; export default Controller.extend( ModalFunctionality, bufferedProperty("invite"), { + topic: null, + restrictedGroups: null, + onShow() { this.set("showNotifyUsers", false); + + if (this.model && this.model.read_restricted) { + Category.reloadBySlugPath(this.model.slug).then((result) => { + this.setProperties({ + restrictedGroups: result.category.group_permissions.map( + (g) => g.group_name + ), + }); + }); + } else { + this.setProperties({ restrictedGroups: null }); + } }, @discourseComputed("topic.shareUrl") @@ -39,6 +55,21 @@ export default Controller.extend( ); }, + @discourseComputed("restrictedGroups") + hasRestrictedGroups(groups) { + return !!groups; + }, + + @discourseComputed("restrictedGroups") + restrictedGroupsCount(groups) { + return groups.length; + }, + + @discourseComputed("restrictedGroups") + restrictedGroupsDisplayText(groups) { + return groups.join(", "); + }, + @action onChangeUsers(usernames) { this.set("users", usernames.uniq()); diff --git a/app/assets/javascripts/discourse/app/initializers/topic-footer-buttons.js b/app/assets/javascripts/discourse/app/initializers/topic-footer-buttons.js index a8aa789b9c5..a5a52277718 100644 --- a/app/assets/javascripts/discourse/app/initializers/topic-footer-buttons.js +++ b/app/assets/javascripts/discourse/app/initializers/topic-footer-buttons.js @@ -23,7 +23,9 @@ export default { }, title: "topic.share.help", action() { - const controller = showModal("share-topic"); + const controller = showModal("share-topic", { + model: this.topic.category, + }); controller.setProperties({ allowInvites: this.canInviteTo && !this.inviteDisabled, topic: this.topic, diff --git a/app/assets/javascripts/discourse/app/templates/modal/share-topic.hbs b/app/assets/javascripts/discourse/app/templates/modal/share-topic.hbs index cbdac5666a3..ff2de507144 100644 --- a/app/assets/javascripts/discourse/app/templates/modal/share-topic.hbs +++ b/app/assets/javascripts/discourse/app/templates/modal/share-topic.hbs @@ -12,6 +12,13 @@ {{copy-button selector="input.invite-link"}} + + {{#if hasRestrictedGroups}} +
+ {{/if}}