Merge pull request #2178 from vikhyat/badge-system
Don't display granted badges in the badge grant combobox
This commit is contained in:
commit
ae98bc91a1
|
@ -13,6 +13,36 @@ Discourse.AdminUserBadgesController = Ember.ArrayController.extend({
|
|||
sortProperties: ['granted_at'],
|
||||
sortAscending: false,
|
||||
|
||||
/**
|
||||
Array of badges that have not been granted to this user.
|
||||
|
||||
@property grantableBadges
|
||||
@type {Boolean}
|
||||
**/
|
||||
grantableBadges: function() {
|
||||
var granted = {};
|
||||
this.get('model').forEach(function(userBadge) {
|
||||
granted[userBadge.get('badge_id')] = true;
|
||||
});
|
||||
|
||||
var badges = [];
|
||||
this.get('badges').forEach(function(badge) {
|
||||
if (!granted[badge.get('id')]) {
|
||||
badges.push(badge);
|
||||
}
|
||||
});
|
||||
|
||||
return badges;
|
||||
}.property('badges.@each', 'model.@each'),
|
||||
|
||||
/**
|
||||
Whether there are any badges that can be granted.
|
||||
|
||||
@property noBadges
|
||||
@type {Boolean}
|
||||
**/
|
||||
noBadges: Em.computed.empty('grantableBadges'),
|
||||
|
||||
actions: {
|
||||
|
||||
/**
|
||||
|
@ -25,6 +55,10 @@ Discourse.AdminUserBadgesController = Ember.ArrayController.extend({
|
|||
var self = this;
|
||||
Discourse.UserBadge.grant(badgeId, this.get('user.username')).then(function(userBadge) {
|
||||
self.pushObject(userBadge);
|
||||
Ember.run.next(function() {
|
||||
// Update the selected badge ID after the combobox has re-rendered.
|
||||
self.set('selectedBadgeId', self.get('grantableBadges')[0].get('id'));
|
||||
});
|
||||
}, function() {
|
||||
// Failure
|
||||
bootbox.alert(I18n.t('generic_error'));
|
||||
|
|
|
@ -19,9 +19,10 @@ Discourse.AdminUserBadgesRoute = Discourse.Route.extend({
|
|||
Discourse.Badge.findAll().then(function(badges) {
|
||||
controller.set('badges', badges);
|
||||
if (badges.length > 0) {
|
||||
controller.set('selectedBadgeId', badges[0].get('id'));
|
||||
} else {
|
||||
controller.set('noBadges', true);
|
||||
var grantableBadges = controller.get('grantableBadges');
|
||||
if (grantableBadges.length > 0) {
|
||||
controller.set('selectedBadgeId', grantableBadges[0].get('id'));
|
||||
}
|
||||
}
|
||||
controller.set('loading', false);
|
||||
});
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<p>{{i18n admin.badges.no_badges}}</p>
|
||||
{{else}}
|
||||
<br>
|
||||
{{combobox valueAttribute="id" value=controller.selectedBadgeId content=controller.badges}}
|
||||
{{combobox valueAttribute="id" value=controller.selectedBadgeId content=controller.grantableBadges}}
|
||||
<button class='btn btn-primary' {{action grantBadge controller.selectedBadgeId}}>{{i18n admin.badges.grant}}</button>
|
||||
{{/if}}
|
||||
|
||||
|
|
|
@ -58,6 +58,10 @@ Discourse.ComboboxView = Discourse.View.extend({
|
|||
$combo.trigger("liszt:updated");
|
||||
}.observes('value'),
|
||||
|
||||
contentChanged: function() {
|
||||
this.rerender();
|
||||
}.observes('content.@each'),
|
||||
|
||||
didInsertElement: function() {
|
||||
var $elem = this.$(),
|
||||
self = this;
|
||||
|
@ -80,6 +84,11 @@ Discourse.ComboboxView = Discourse.View.extend({
|
|||
$elem.chosen().change(function(e) {
|
||||
self.set('value', $(e.target).val());
|
||||
});
|
||||
},
|
||||
|
||||
willClearRender: function() {
|
||||
var chosenId = this.$().attr('id') + "_chzn";
|
||||
Ember.$("#" + chosenId).remove();
|
||||
}
|
||||
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue