discourse/app/assets/javascripts/admin/controllers/admin-user-badges.js.es6

99 lines
2.6 KiB
Plaintext
Raw Normal View History

import GrantBadgeController from "discourse/mixins/grant-badge-controller";
2015-08-18 21:24:09 -04:00
export default Ember.Controller.extend(GrantBadgeController, {
adminUser: Ember.inject.controller(),
2018-06-15 11:03:24 -04:00
user: Ember.computed.alias("adminUser.model"),
userBadges: Ember.computed.alias("model"),
allBadges: Ember.computed.alias("badges"),
2018-06-15 11:03:24 -04:00
sortedBadges: Ember.computed.sort("model", "badgeSortOrder"),
badgeSortOrder: ["granted_at:desc"],
2018-06-15 11:03:24 -04:00
groupedBadges: function() {
const allBadges = this.get("model");
2015-08-13 15:14:08 -04:00
var grouped = _.groupBy(allBadges, badge => badge.badge_id);
var expanded = [];
2018-06-15 11:03:24 -04:00
const expandedBadges = allBadges.get("expandedBadges");
2018-06-15 11:03:24 -04:00
_(grouped).each(function(badges) {
var lastGranted = badges[0].granted_at;
_.each(badges, function(badge) {
2018-06-15 11:03:24 -04:00
lastGranted =
lastGranted < badge.granted_at ? badge.granted_at : lastGranted;
});
2018-06-15 11:03:24 -04:00
if (
badges.length === 1 ||
_.include(expandedBadges, badges[0].badge.id)
) {
_.each(badges, badge => expanded.push(badge));
return;
}
var result = {
badge: badges[0].badge,
granted_at: lastGranted,
badges: badges,
count: badges.length,
grouped: true
};
expanded.push(result);
});
2018-06-15 11:03:24 -04:00
return _(expanded)
.sortBy(group => group.granted_at)
.reverse()
.value();
}.property("model", "model.[]", "model.expandedBadges.[]"),
actions: {
2018-06-15 11:03:24 -04:00
expandGroup: function(userBadge) {
const model = this.get("model");
model.set("expandedBadges", model.get("expandedBadges") || []);
model.get("expandedBadges").pushObject(userBadge.badge.id);
},
grantBadge() {
2018-06-15 11:03:24 -04:00
this.grantBadge(
this.get("selectedBadgeId"),
this.get("user.username"),
this.get("badgeReason")
).then(
() => {
this.set("badgeReason", "");
Ember.run.next(() => {
// Update the selected badge ID after the combobox has re-rendered.
2018-06-15 11:03:24 -04:00
const newSelectedBadge = this.get("grantableBadges")[0];
if (newSelectedBadge) {
2018-06-15 11:03:24 -04:00
this.set("selectedBadgeId", newSelectedBadge.get("id"));
}
});
2018-06-15 11:03:24 -04:00
},
function() {
// Failure
2018-06-15 11:03:24 -04:00
bootbox.alert(I18n.t("generic_error"));
}
);
},
revokeBadge(userBadge) {
2018-06-15 11:03:24 -04:00
return bootbox.confirm(
I18n.t("admin.badges.revoke_confirm"),
I18n.t("no_value"),
I18n.t("yes_value"),
result => {
if (result) {
userBadge.revoke().then(() => {
this.get("model").removeObject(userBadge);
});
}
}
2018-06-15 11:03:24 -04:00
);
}
}
});