From 672c21bfe043c557c059086561113a6a1dfefb42 Mon Sep 17 00:00:00 2001 From: floatinghotpot Date: Tue, 8 Dec 2015 16:03:31 +0800 Subject: bugfix: only care active members, also optimize some code --- models/boards.js | 59 ++++++++++++++++++++++++++------------------------------ models/users.js | 8 ++------ 2 files changed, 29 insertions(+), 38 deletions(-) (limited to 'models') diff --git a/models/boards.js b/models/boards.js index 6aba0b1e..9c792674 100644 --- a/models/boards.js +++ b/models/boards.js @@ -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) { diff --git a/models/users.js b/models/users.js index 2c9ae380..cf4c4193 100644 --- a/models/users.js +++ b/models/users.js @@ -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); }, }); } -- cgit v1.2.3-1-g7c22