164 lines
4.0 KiB
JavaScript
164 lines
4.0 KiB
JavaScript
import EmberObject from "@ember/object";
|
|
import Controller, { inject as controller } from "@ember/controller";
|
|
import discourseComputed from "discourse-common/utils/decorators";
|
|
import { inject as service } from "@ember/service";
|
|
import { readOnly } from "@ember/object/computed";
|
|
|
|
const Tab = EmberObject.extend({
|
|
init() {
|
|
this._super(...arguments);
|
|
let name = this.name;
|
|
this.set("route", this.route || `group.` + name);
|
|
this.set("message", I18n.t(`groups.${this.i18nKey || name}`));
|
|
}
|
|
});
|
|
|
|
export default Controller.extend({
|
|
application: controller(),
|
|
counts: null,
|
|
showing: "members",
|
|
destroying: null,
|
|
router: service(),
|
|
currentPath: readOnly("router._router.currentPath"),
|
|
|
|
@discourseComputed(
|
|
"showMessages",
|
|
"model.user_count",
|
|
"model.request_count",
|
|
"canManageGroup",
|
|
"model.allow_membership_requests"
|
|
)
|
|
tabs(
|
|
showMessages,
|
|
userCount,
|
|
requestCount,
|
|
canManageGroup,
|
|
allowMembershipRequests
|
|
) {
|
|
const membersTab = Tab.create({
|
|
name: "members",
|
|
route: "group.index",
|
|
icon: "users",
|
|
i18nKey: "members.title"
|
|
});
|
|
|
|
membersTab.set("count", userCount);
|
|
|
|
const defaultTabs = [membersTab, Tab.create({ name: "activity" })];
|
|
|
|
if (canManageGroup && allowMembershipRequests) {
|
|
defaultTabs.push(
|
|
Tab.create({
|
|
name: "requests",
|
|
i18nKey: "requests.title",
|
|
icon: "user-plus",
|
|
count: requestCount
|
|
})
|
|
);
|
|
}
|
|
|
|
if (showMessages) {
|
|
defaultTabs.push(
|
|
Tab.create({
|
|
name: "messages",
|
|
i18nKey: "messages"
|
|
})
|
|
);
|
|
}
|
|
|
|
if (canManageGroup) {
|
|
defaultTabs.push(
|
|
Tab.create({
|
|
name: "manage",
|
|
i18nKey: "manage.title",
|
|
icon: "wrench"
|
|
})
|
|
);
|
|
}
|
|
|
|
return defaultTabs;
|
|
},
|
|
|
|
@discourseComputed("model.is_group_user")
|
|
showMessages(isGroupUser) {
|
|
if (!this.siteSettings.enable_personal_messages) {
|
|
return false;
|
|
}
|
|
|
|
return isGroupUser || (this.currentUser && this.currentUser.admin);
|
|
},
|
|
|
|
@discourseComputed("model.is_group_owner", "model.automatic")
|
|
canEditGroup(isGroupOwner, automatic) {
|
|
return !automatic && isGroupOwner;
|
|
},
|
|
|
|
@discourseComputed("model.displayName", "model.full_name")
|
|
groupName(displayName, fullName) {
|
|
return (fullName || displayName).capitalize();
|
|
},
|
|
|
|
@discourseComputed(
|
|
"model.name",
|
|
"model.flair_url",
|
|
"model.flair_bg_color",
|
|
"model.flair_color"
|
|
)
|
|
avatarFlairAttributes(groupName, flairURL, flairBgColor, flairColor) {
|
|
return {
|
|
primary_group_flair_url: flairURL,
|
|
primary_group_flair_bg_color: flairBgColor,
|
|
primary_group_flair_color: flairColor,
|
|
primary_group_name: groupName
|
|
};
|
|
},
|
|
|
|
@discourseComputed("model.messageable")
|
|
displayGroupMessageButton(messageable) {
|
|
return this.currentUser && messageable;
|
|
},
|
|
|
|
@discourseComputed("model", "model.automatic")
|
|
canManageGroup(model, automatic) {
|
|
return (
|
|
this.currentUser &&
|
|
(this.currentUser.canManageGroup(model) ||
|
|
(this.currentUser.admin && automatic))
|
|
);
|
|
},
|
|
|
|
actions: {
|
|
messageGroup() {
|
|
this.send("createNewMessageViaParams", this.get("model.name"));
|
|
},
|
|
|
|
destroy() {
|
|
const group = this.model;
|
|
this.set("destroying", true);
|
|
|
|
bootbox.confirm(
|
|
I18n.t("admin.groups.delete_confirm"),
|
|
I18n.t("no_value"),
|
|
I18n.t("yes_value"),
|
|
confirmed => {
|
|
if (confirmed) {
|
|
group
|
|
.destroy()
|
|
.then(() => {
|
|
this.transitionToRoute("groups.index");
|
|
})
|
|
.catch(error => {
|
|
// eslint-disable-next-line no-console
|
|
console.error(error);
|
|
bootbox.alert(I18n.t("admin.groups.delete_failed"));
|
|
})
|
|
.finally(() => this.set("destroying", false));
|
|
} else {
|
|
this.set("destroying", false);
|
|
}
|
|
}
|
|
);
|
|
}
|
|
}
|
|
});
|