bugfix: only care active members, also optimize some code

This commit is contained in:
floatinghotpot 2015-12-08 16:03:31 +08:00
parent b719968df5
commit 672c21bfe0
9 changed files with 62 additions and 78 deletions

View file

@ -115,6 +115,14 @@ Boards.helpers({
return _.pluck(this.members, 'userId').indexOf(memberId);
},
hasMember(memberId) {
return !!_.findWhere(this.members, {userId: memberId, isActive: true});
},
hasAdmin(memberId) {
return !!_.findWhere(this.members, {userId: memberId, isActive: true, isAdmin: true});
},
absoluteUrl() {
return FlowRouter.path('board', { id: this._id, slug: this.slug });
},
@ -186,34 +194,23 @@ Boards.mutations({
addMember(memberId) {
const memberIndex = this.memberIndex(memberId);
if (memberIndex === -1) {
const xIndex = this.memberIndex('x');
if (xIndex === -1) {
return {
$push: {
members: {
userId: memberId,
isAdmin: false,
isActive: true,
},
},
};
} else {
return {
$set: {
[`members.${xIndex}.userId`]: memberId,
[`members.${xIndex}.isActive`]: true,
[`members.${xIndex}.isAdmin`]: false,
},
};
}
} else {
if (memberIndex >= 0) {
return {
$set: {
[`members.${memberIndex}.isActive`]: true,
},
};
}
return {
$push: {
members: {
userId: memberId,
isAdmin: false,
isActive: true,
},
},
};
},
removeMember(memberId) {
@ -221,22 +218,20 @@ Boards.mutations({
// we do not allow the only one admin to be removed
const allowRemove = (!this.members[memberIndex].isAdmin) || (this.activeAdmins().length > 1);
if (allowRemove) {
return {
$set: {
[`members.${memberIndex}.userId`]: 'x',
[`members.${memberIndex}.isActive`]: false,
[`members.${memberIndex}.isAdmin`]: false,
},
};
} else {
if (!allowRemove) {
return {
$set: {
[`members.${memberIndex}.isActive`]: true,
},
};
}
return {
$set: {
[`members.${memberIndex}.isActive`]: false,
[`members.${memberIndex}.isAdmin`]: false,
},
};
},
setMemberPermission(memberId, isAdmin) {

View file

@ -12,16 +12,12 @@ if (Meteor.isClient) {
Users.helpers({
isBoardMember() {
const board = Boards.findOne(Session.get('currentBoard'));
return board &&
_.contains(_.pluck(board.members, 'userId'), this._id) &&
_.where(board.members, {userId: this._id})[0].isActive;
return board && board.hasMember(this._id);
},
isBoardAdmin() {
const board = Boards.findOne(Session.get('currentBoard'));
return board &&
this.isBoardMember(board) &&
_.where(board.members, {userId: this._id})[0].isAdmin;
return board && board.hasAdmin(this._id);
},
});
}