diff --git a/public/js/controllers/groupsCtrl.js b/public/js/controllers/groupsCtrl.js index c3833e882c..eca7319076 100644 --- a/public/js/controllers/groupsCtrl.js +++ b/public/js/controllers/groupsCtrl.js @@ -1,7 +1,7 @@ "use strict"; -habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Groups', '$http', 'API_URL', '$q', 'User', 'Members', '$location', '$state', - function($scope, $rootScope, Groups, $http, API_URL, $q, User, Members, $location, $state) { +habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Groups', '$http', 'API_URL', '$q', 'User', 'Members', '$state', + function($scope, $rootScope, Groups, $http, API_URL, $q, User, Members, $state) { $scope.isMember = function(user, group){ return ~(group.members.indexOf(user._id)); @@ -126,8 +126,8 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Groups', '$http', 'A }]) - .controller("GuildsCtrl", ['$scope', 'Groups', 'User', '$rootScope', - function($scope, Groups, User, $rootScope) { + .controller("GuildsCtrl", ['$scope', 'Groups', 'User', '$rootScope', '$state', '$location', + function($scope, Groups, User, $rootScope, $state, $location) { Groups.fetchGuilds(); $scope.type = 'guild'; $scope.text = 'Guild'; @@ -137,8 +137,8 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Groups', '$http', 'A if (User.user.balance < 1) return $rootScope.modals.buyGems = true; if (confirm("Create Guild for 4 Gems?")) { - group.$save(function(){ - location.reload(); + group.$save(function(saved){ + location.href = '/#/options/groups/guilds/' + saved._id; }); } } @@ -151,9 +151,9 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Groups', '$http', 'A group = new Groups.Group({_id:group.id}); } - group.$join(function(saved){ - //$scope.groups.guilds.push(saved); - alert('Joined guild, refresh page to see changes') + group.$join(function(){ + // use https://github.com/angular-ui/ui-router/issues/76 when it's available + location.reload(); }) } @@ -161,10 +161,10 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Groups', '$http', 'A if (confirm("Are you sure you want to leave this guild?") !== true) { return; } - group.$leave(); -// var i = _.find($scope.groups.guilds, {_id:group._id}); -// if (~i) $scope.groups.guilds.splice(i, 1); - alert('Left guild, refresh page to see changes') + group.$leave(function(){ + // use https://github.com/angular-ui/ui-router/issues/76 when it's available + location.reload(); + }); } $scope.reject = function(guild){ @@ -201,7 +201,8 @@ habitrpg.controller("GroupsCtrl", ['$scope', '$rootScope', 'Groups', '$http', 'A return; } group.$leave(function(){ - Groups.groups.party = new Groups.Group(); + //Groups.groups.party = new Groups.Group(); + location.reload(); }); } $scope.reject = function(){ diff --git a/public/js/services/groupServices.js b/public/js/services/groupServices.js index 849be47b44..ca820d7e5b 100644 --- a/public/js/services/groupServices.js +++ b/public/js/services/groupServices.js @@ -10,7 +10,7 @@ angular.module('groupServices', ['ngResource']). var Group = $resource(API_URL + '/api/v1/groups/:gid', {gid:'@_id', messageId: '@_messageId'}, { - query: {method: "GET", isArray:false}, + //query: {method: "GET", isArray:false}, postChat: {method: "POST", url: API_URL + '/api/v1/groups/:gid/chat'}, deleteChatMessage: {method: "DELETE", url: API_URL + '/api/v1/groups/:gid/chat/:messageId'}, join: {method: "POST", url: API_URL + '/api/v1/groups/:gid/join'}, @@ -39,14 +39,17 @@ angular.module('groupServices', ['ngResource']). }) return { + // Note the _.once() to make sure it can never be called again fetchGuilds: _.once(function(){ - Group.query(function(_groups){ - guildsQ.resolve(_groups.guilds); - Members.populate(_groups.guilds); - publicQ.resolve(_groups['public']); - Members.populate(_groups['public']); - }) + Group.query({type:'guilds'}, function(_groups){ + guildsQ.resolve(_groups); + Members.populate(_groups); + }); + Group.query({type:'public'}, function(_groups){ + publicQ.resolve(_groups); + Members.populate(_groups); + }); }), fetchTavern: _.once(function(){ diff --git a/src/controllers/groups.js b/src/controllers/groups.js index 7989f8a6e1..bc4e5311de 100644 --- a/src/controllers/groups.js +++ b/src/controllers/groups.js @@ -41,11 +41,13 @@ api.list = function(req, res) { var user = res.locals.user; var groupFields = 'name description memberCount'; var sort = '-memberCount'; + var type = (req.query.type || 'party,guilds,public,tavern').split(','); async.parallel({ // unecessary given our ui-router setup party: function(cb){ + if (!~type.indexOf('party')) return cb(null, {}); Group.findOne({type: 'party', members: {'$in': [user._id]}}) .select(groupFields).exec(function(err, party){ if (err) return cb(err); @@ -54,11 +56,13 @@ api.list = function(req, res) { }, guilds: function(cb) { + if (!~type.indexOf('guilds')) return cb(null, []); Group.find({members: {'$in': [user._id]}, type:'guild'}) .select(groupFields).sort(sort).exec(cb); }, 'public': function(cb) { + if (!~type.indexOf('public')) return cb(null, []); Group.find({privacy: 'public'}) .select(groupFields + ' members') .sort(sort) @@ -75,6 +79,7 @@ api.list = function(req, res) { // unecessary given our ui-router setup tavern: function(cb) { + if (!~type.indexOf('tavern')) return cb(null, {}); Group.findById('habitrpg').select(groupFields).exec(function(err, tavern){ if (err) return cb(err); cb(null, [tavern]); // return as an array for consistent ngResource use @@ -83,6 +88,14 @@ api.list = function(req, res) { }, function(err, results){ if (err) return res.json(500, {err: err}); + + // If they're requesting a specific type, let's return it as an array so that $ngResource + // can utilize it properly + if (req.query.type) { + results = _.reduce(type, function(m,t){ + return m.concat(_.isArray(results[t]) ? results[t] : [results[t]]); + }, []); + } res.json(results); }) }; diff --git a/views/options/groups/index.jade b/views/options/groups/index.jade index e1541bc448..491bc289eb 100644 --- a/views/options/groups/index.jade +++ b/views/options/groups/index.jade @@ -38,7 +38,7 @@ script(type='text/ng-template', id='partials/options.groups.guilds.public.html') li {{group.memberCount}} member(s) li // join / leave - a.btn.btn-small.btn-danger(ng-show='group_.isMember', ng-click='leave(group)') + a.btn.btn-small.btn-danger(ng-show='group._isMember', ng-click='leave(group)') i.icon-ban-circle | Leave a.btn.btn-small.btn-success(ng-hide='group._isMember', ng-click='join(group)')