diff --git a/app/assets/javascripts/discourse/controllers/user_invited_controller.js b/app/assets/javascripts/discourse/controllers/user_invited_controller.js index 4548bdb56d7..877871bfb49 100644 --- a/app/assets/javascripts/discourse/controllers/user_invited_controller.js +++ b/app/assets/javascripts/discourse/controllers/user_invited_controller.js @@ -2,11 +2,31 @@ This controller handles actions related to a user's invitations @class UserInvitedController - @extends Discourse.ObjectController + @extends Ember.ArrayController @namespace Discourse @module Discourse **/ -Discourse.UserInvitedController = Discourse.ObjectController.extend({ +Discourse.UserInvitedController = Ember.ArrayController.extend({ + + _searchTermChanged: Discourse.debounce(function() { + var self = this; + Discourse.Invite.findInvitedBy(self.get('user'), this.get('searchTerm')).then(function (invites) { + self.set('model', invites); + }); + }, 250).observes('searchTerm'), + + maxInvites: function() { + return Discourse.SiteSettings.invites_shown; + }.property(), + + showSearch: function() { + if (Em.isNone(this.get('searchTerm')) && this.get('model.length') === 0) { return false; } + return true; + }.property('searchTerm', 'model.length'), + + truncated: function() { + return this.get('model.length') === Discourse.SiteSettings.invites_shown; + }.property('model.length'), actions: { rescind: function(invite) { diff --git a/app/assets/javascripts/discourse/models/invite.js b/app/assets/javascripts/discourse/models/invite.js index 503fc58df10..00b5a35b6b3 100644 --- a/app/assets/javascripts/discourse/models/invite.js +++ b/app/assets/javascripts/discourse/models/invite.js @@ -27,6 +27,19 @@ Discourse.Invite.reopenClass({ result.user = Discourse.User.create(result.user); } return result; + }, + + findInvitedBy: function(user, filter) { + if (!user) { return Ember.RSVP.resolve(); } + + var data = {}; + if (!Em.isNone(filter)) { data.filter = filter; } + + return Discourse.ajax("/users/" + user.get('username_lower') + "/invited.json", {data: data}).then(function (result) { + return result.map(function (i) { + return Discourse.Invite.create(i); + }); + }); } }); diff --git a/app/assets/javascripts/discourse/models/invite_list.js b/app/assets/javascripts/discourse/models/invite_list.js deleted file mode 100644 index 43376f998a8..00000000000 --- a/app/assets/javascripts/discourse/models/invite_list.js +++ /dev/null @@ -1,37 +0,0 @@ -/** - A data model representing a list of Invites - - @class InviteList - @extends Discourse.Model - @namespace Discourse - @module Discourse -**/ -Discourse.InviteList = Discourse.Model.extend({ - empty: (function() { - return this.blank('pending') && this.blank('redeemed'); - }).property('pending.@each', 'redeemed.@each') -}); - -Discourse.InviteList.reopenClass({ - - findInvitedBy: function(user) { - return Discourse.ajax("/users/" + (user.get('username_lower')) + "/invited.json").then(function (result) { - var invitedList = result.invited_list; - if (invitedList.pending) { - invitedList.pending = invitedList.pending.map(function(i) { - return Discourse.Invite.create(i); - }); - } - if (invitedList.redeemed) { - invitedList.redeemed = invitedList.redeemed.map(function(i) { - return Discourse.Invite.create(i); - }); - } - invitedList.user = user; - return Discourse.InviteList.create(invitedList); - }); - } - -}); - - diff --git a/app/assets/javascripts/discourse/models/nav_item.js b/app/assets/javascripts/discourse/models/nav_item.js index fcba5f39aac..2c947886df0 100644 --- a/app/assets/javascripts/discourse/models/nav_item.js +++ b/app/assets/javascripts/discourse/models/nav_item.js @@ -1,7 +1,7 @@ /** A data model representing a navigation item on the list views - @class InviteList + @class NavItem @extends Discourse.Model @namespace Discourse @module Discourse diff --git a/app/assets/javascripts/discourse/routes/user_invited_route.js b/app/assets/javascripts/discourse/routes/user_invited_route.js index 420b730edfc..2c72df220ea 100644 --- a/app/assets/javascripts/discourse/routes/user_invited_route.js +++ b/app/assets/javascripts/discourse/routes/user_invited_route.js @@ -12,11 +12,15 @@ Discourse.UserInvitedRoute = Discourse.Route.extend({ }, model: function() { - return Discourse.InviteList.findInvitedBy(this.modelFor('user')); + return Discourse.Invite.findInvitedBy(this.modelFor('user')); }, setupController: function(controller, model) { - controller.set('model', model); + controller.setProperties({ + model: model, + user: this.controllerFor('user').get('model'), + searchTerm: '' + }); this.controllerFor('user').set('indexStream', false); } diff --git a/app/assets/javascripts/discourse/templates/user/email.js.handlebars b/app/assets/javascripts/discourse/templates/user/email.js.handlebars index 978e42a8fa0..bb3e812d7d4 100644 --- a/app/assets/javascripts/discourse/templates/user/email.js.handlebars +++ b/app/assets/javascripts/discourse/templates/user/email.js.handlebars @@ -1,46 +1,48 @@ -