mirror of
https://github.com/sudoxnym/habitica.git
synced 2026-07-21 19:24:15 +00:00
challenges: fixed joining / leaving groups. Back to the old method of Group.query({type:'public'}), etc - since ngResource can only work with top-level objects. This approach is bad performance (two calls), I'll fix when I can think of a better way of organizing groups requested at GET /groups
This commit is contained in:
parent
da7ab9f1c3
commit
28cdeb0ac6
4 changed files with 39 additions and 22 deletions
|
|
@ -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(){
|
||||
|
|
|
|||
|
|
@ -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(){
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
})
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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)')
|
||||
|
|
|
|||
Loading…
Reference in a new issue