diff --git a/app/assets/javascripts/admin/controllers/admin-user-index.js.es6 b/app/assets/javascripts/admin/controllers/admin-user-index.js.es6 index c594f1db672..69c2bca9b86 100644 --- a/app/assets/javascripts/admin/controllers/admin-user-index.js.es6 +++ b/app/assets/javascripts/admin/controllers/admin-user-index.js.es6 @@ -58,7 +58,6 @@ export default Ember.Controller.extend(CanCheckEmails, { saveTrustLevel() { return this.get("model").saveTrustLevel(); }, restoreTrustLevel() { return this.get("model").restoreTrustLevel(); }, lockTrustLevel(locked) { return this.get("model").lockTrustLevel(locked); }, - unsuspend() { return this.get("model").unsuspend(); }, unblock() { return this.get("model").unblock(); }, block() { return this.get("model").block(); }, deleteAllPosts() { return this.get("model").deleteAllPosts(); }, @@ -68,6 +67,9 @@ export default Ember.Controller.extend(CanCheckEmails, { showSuspendModal() { this.get('adminTools').showSuspendModal(this.get('model')); }, + unsuspend() { + this.get("model").unsuspend().catch(popupAjaxError); + }, toggleUsernameEdit() { diff --git a/app/assets/javascripts/admin/controllers/modals/admin-suspend-user.js.es6 b/app/assets/javascripts/admin/controllers/modals/admin-suspend-user.js.es6 index d3e19de5694..4c3f2a91990 100644 --- a/app/assets/javascripts/admin/controllers/modals/admin-suspend-user.js.es6 +++ b/app/assets/javascripts/admin/controllers/modals/admin-suspend-user.js.es6 @@ -1,24 +1,41 @@ import ModalFunctionality from 'discourse/mixins/modal-functionality'; +import computed from 'ember-addons/ember-computed-decorators'; +import { popupAjaxError } from 'discourse/lib/ajax-error'; export default Ember.Controller.extend(ModalFunctionality, { + duration: null, + reason: null, + message: null, + loading: false, - submitDisabled: function() { - return (!this.get('reason') || this.get('reason').length < 1); - }.property('reason'), + onShow() { + this.setProperties({ + duration: null, + reason: null, + message: null, + loading: false + }); + }, + + @computed('reason', 'loading') + submitDisabled(reason, loading) { + return (loading || !reason || reason.length < 1); + }, actions: { - suspend: function() { - if (this.get('submitDisabled')) return; - var duration = parseInt(this.get('duration'), 10); + suspend() { + if (this.get('submitDisabled')) { return; } + + let duration = parseInt(this.get('duration'), 10); if (duration > 0) { - var self = this; - this.send('hideModal'); - this.get('model').suspend(duration, this.get('reason')).then(function() { - window.location.reload(); - }, function(e) { - var error = I18n.t('admin.user.suspend_failed', { error: "http: " + e.status + " - " + e.body }); - bootbox.alert(error, function() { self.send('reopenModal'); }); - }); + this.set('loading', true); + this.get('model').suspend({ + duration, + reason: this.get('reason'), + message: this.get('message') + }).then(() => { + this.send('closeModal'); + }).catch(popupAjaxError).finally(() => this.set('loading', false)); } } } diff --git a/app/assets/javascripts/admin/models/admin-user.js.es6 b/app/assets/javascripts/admin/models/admin-user.js.es6 index 1677d3add40..59c3c3ee1d3 100644 --- a/app/assets/javascripts/admin/models/admin-user.js.es6 +++ b/app/assets/javascripts/admin/models/admin-user.js.es6 @@ -240,21 +240,20 @@ const AdminUser = Discourse.User.extend({ return suspended_at.format('L') + " - " + suspended_till.format('L'); }.property('suspended_till', 'suspended_at'), - suspend(duration, reason) { - return ajax("/admin/users/" + this.id + "/suspend", { + suspend(data) { + return ajax(`/admin/users/${this.id}/suspend`, { type: 'PUT', - data: { duration: duration, reason: reason } + data + }).then(result => { + this.setProperties(result.suspension); }); }, unsuspend() { - return ajax("/admin/users/" + this.id + "/unsuspend", { + return ajax(`/admin/users/${this.id}/unsuspend`, { type: 'PUT' - }).then(function() { - window.location.reload(); - }).catch(function(e) { - var error = I18n.t('admin.user.unsuspend_failed', { error: "http: " + e.status + " - " + e.body }); - bootbox.alert(error); + }).then(result => { + this.setProperties(result.suspension); }); }, diff --git a/app/assets/javascripts/admin/services/admin-tools.js.es6 b/app/assets/javascripts/admin/services/admin-tools.js.es6 index ce7a6e3b793..a65b3bdde1c 100644 --- a/app/assets/javascripts/admin/services/admin-tools.js.es6 +++ b/app/assets/javascripts/admin/services/admin-tools.js.es6 @@ -22,7 +22,7 @@ export default Ember.Service.extend({ showSuspendModal(user) { showModal('admin-suspend-user', { - user, + model: user, admin: true, modalClass: 'suspend-user-modal' }); diff --git a/app/assets/javascripts/admin/templates/modal/admin-suspend-user.hbs b/app/assets/javascripts/admin/templates/modal/admin-suspend-user.hbs index 8f7ca5b8c12..2810a0ed387 100644 --- a/app/assets/javascripts/admin/templates/modal/admin-suspend-user.hbs +++ b/app/assets/javascripts/admin/templates/modal/admin-suspend-user.hbs @@ -44,4 +44,5 @@ icon="ban" label="admin.user.suspend"}} {{d-modal-cancel close=(action "closeModal")}} + {{conditional-loading-spinner condition=loading size="small"}} diff --git a/app/assets/javascripts/admin/templates/user-index.hbs b/app/assets/javascripts/admin/templates/user-index.hbs index 1ea3703741c..7b40e0469b4 100644 --- a/app/assets/javascripts/admin/templates/user-index.hbs +++ b/app/assets/javascripts/admin/templates/user-index.hbs @@ -296,29 +296,33 @@ -