mirror of
https://github.com/wekan/wekan.git
synced 2025-12-16 23:40:13 +01:00
bugfix: only care active members, also optimize some code
This commit is contained in:
parent
b719968df5
commit
672c21bfe0
9 changed files with 62 additions and 78 deletions
|
|
@ -94,7 +94,7 @@ template(name="moveCardPopup")
|
||||||
|
|
||||||
template(name="cardMembersPopup")
|
template(name="cardMembersPopup")
|
||||||
ul.pop-over-list.js-card-member-list
|
ul.pop-over-list.js-card-member-list
|
||||||
each board.members
|
each board.activeMembers
|
||||||
li.item(class="{{#if isCardMember}}active{{/if}}")
|
li.item(class="{{#if isCardMember}}active{{/if}}")
|
||||||
a.name.js-select-member(href="#")
|
a.name.js-select-member(href="#")
|
||||||
+userAvatar(userId=user._id)
|
+userAvatar(userId=user._id)
|
||||||
|
|
|
||||||
|
|
@ -186,7 +186,7 @@ BlazeComponent.extendComponent({
|
||||||
match: /\B@(\w*)$/,
|
match: /\B@(\w*)$/,
|
||||||
search(term, callback) {
|
search(term, callback) {
|
||||||
const currentBoard = Boards.findOne(Session.get('currentBoard'));
|
const currentBoard = Boards.findOne(Session.get('currentBoard'));
|
||||||
callback($.map(currentBoard.members, (member) => {
|
callback($.map(currentBoard.activeMembers(), (member) => {
|
||||||
const user = Users.findOne(member.userId);
|
const user = Users.findOne(member.userId);
|
||||||
return user.username.indexOf(term) === 0 ? user : null;
|
return user.username.indexOf(term) === 0 ? user : null;
|
||||||
}));
|
}));
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ Template.editor.onRendered(() => {
|
||||||
match: /\B@(\w*)$/,
|
match: /\B@(\w*)$/,
|
||||||
search(term, callback) {
|
search(term, callback) {
|
||||||
const currentBoard = Boards.findOne(Session.get('currentBoard'));
|
const currentBoard = Boards.findOne(Session.get('currentBoard'));
|
||||||
callback(currentBoard.members.map((member) => {
|
callback(currentBoard.activeMembers().map((member) => {
|
||||||
const username = Users.findOne(member.userId).username;
|
const username = Users.findOne(member.userId).username;
|
||||||
return username.includes(term) ? username : null;
|
return username.includes(term) ? username : null;
|
||||||
}));
|
}));
|
||||||
|
|
|
||||||
|
|
@ -279,7 +279,7 @@ BlazeComponent.extendComponent({
|
||||||
'click .js-select-member'() {
|
'click .js-select-member'() {
|
||||||
const userId = this.currentData()._id;
|
const userId = this.currentData()._id;
|
||||||
const currentBoard = Boards.findOne(Session.get('currentBoard'));
|
const currentBoard = Boards.findOne(Session.get('currentBoard'));
|
||||||
if (currentBoard.memberIndex(userId)<0) {
|
if (!currentBoard.hasMember(userId)) {
|
||||||
this.inviteUser(userId);
|
this.inviteUser(userId);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -305,16 +305,12 @@ Template.changePermissionsPopup.events({
|
||||||
|
|
||||||
Template.changePermissionsPopup.helpers({
|
Template.changePermissionsPopup.helpers({
|
||||||
isAdmin() {
|
isAdmin() {
|
||||||
const user = Users.findOne(this.userId);
|
const currentBoard = Boards.findOne(Session.get('currentBoard'));
|
||||||
return user.isBoardAdmin();
|
return currentBoard.hasAdmin(this.userId);
|
||||||
},
|
},
|
||||||
|
|
||||||
isLastAdmin() {
|
isLastAdmin() {
|
||||||
const user = Users.findOne(this.userId);
|
|
||||||
if (!user.isBoardAdmin())
|
|
||||||
return false;
|
|
||||||
const currentBoard = Boards.findOne(Session.get('currentBoard'));
|
const currentBoard = Boards.findOne(Session.get('currentBoard'));
|
||||||
const nbAdmins = _.where(currentBoard.members, { isAdmin: true }).length;
|
return currentBoard.hasAdmin(this.userId) && (currentBoard.activeAdmins() === 1);
|
||||||
return nbAdmins === 1;
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -18,17 +18,16 @@ template(name="filterSidebar")
|
||||||
i.fa.fa-check
|
i.fa.fa-check
|
||||||
hr
|
hr
|
||||||
ul.sidebar-list
|
ul.sidebar-list
|
||||||
each currentBoard.members
|
each currentBoard.activeMembers
|
||||||
if isActive
|
with getUser userId
|
||||||
with getUser userId
|
li(class="{{#if Filter.members.isSelected _id}}active{{/if}}")
|
||||||
li(class="{{#if Filter.members.isSelected _id}}active{{/if}}")
|
a.name.js-toggle-member-filter
|
||||||
a.name.js-toggle-member-filter
|
+userAvatar(userId=this._id)
|
||||||
+userAvatar(userId=this._id)
|
span.sidebar-list-item-description
|
||||||
span.sidebar-list-item-description
|
= profile.fullname
|
||||||
= profile.fullname
|
| (<span class="username">{{ username }}</span>)
|
||||||
| (<span class="username">{{ username }}</span>)
|
if Filter.members.isSelected _id
|
||||||
if Filter.members.isSelected _id
|
i.fa.fa-check
|
||||||
i.fa.fa-check
|
|
||||||
if Filter.isActive
|
if Filter.isActive
|
||||||
hr
|
hr
|
||||||
a.sidebar-btn.js-clear-all
|
a.sidebar-btn.js-clear-all
|
||||||
|
|
@ -55,19 +54,18 @@ template(name="multiselectionSidebar")
|
||||||
i.fa.fa-ellipsis-h
|
i.fa.fa-ellipsis-h
|
||||||
hr
|
hr
|
||||||
ul.sidebar-list
|
ul.sidebar-list
|
||||||
each currentBoard.members
|
each currentBoard.activeMembers
|
||||||
if isActive
|
with getUser userId
|
||||||
with getUser userId
|
li(class="{{#if Filter.members.isSelected _id}}active{{/if}}")
|
||||||
li(class="{{#if Filter.members.isSelected _id}}active{{/if}}")
|
a.name.js-toggle-member-multiselection
|
||||||
a.name.js-toggle-member-multiselection
|
+userAvatar(userId=this._id)
|
||||||
+userAvatar(userId=this._id)
|
span.sidebar-list-item-description
|
||||||
span.sidebar-list-item-description
|
= profile.fullname
|
||||||
= profile.fullname
|
| (<span class="username">{{ username }}</span>)
|
||||||
| (<span class="username">{{ username }}</span>)
|
if allSelectedElementHave 'member' _id
|
||||||
if allSelectedElementHave 'member' _id
|
i.fa.fa-check
|
||||||
i.fa.fa-check
|
else if someSelectedElementHave 'member' _id
|
||||||
else if someSelectedElementHave 'member' _id
|
i.fa.fa-ellipsis-h
|
||||||
i.fa.fa-ellipsis-h
|
|
||||||
hr
|
hr
|
||||||
a.sidebar-btn.js-archive-selection
|
a.sidebar-btn.js-archive-selection
|
||||||
i.fa.fa-archive
|
i.fa.fa-archive
|
||||||
|
|
|
||||||
|
|
@ -115,6 +115,14 @@ Boards.helpers({
|
||||||
return _.pluck(this.members, 'userId').indexOf(memberId);
|
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() {
|
absoluteUrl() {
|
||||||
return FlowRouter.path('board', { id: this._id, slug: this.slug });
|
return FlowRouter.path('board', { id: this._id, slug: this.slug });
|
||||||
},
|
},
|
||||||
|
|
@ -186,34 +194,23 @@ Boards.mutations({
|
||||||
|
|
||||||
addMember(memberId) {
|
addMember(memberId) {
|
||||||
const memberIndex = this.memberIndex(memberId);
|
const memberIndex = this.memberIndex(memberId);
|
||||||
if (memberIndex === -1) {
|
if (memberIndex >= 0) {
|
||||||
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 {
|
|
||||||
return {
|
return {
|
||||||
$set: {
|
$set: {
|
||||||
[`members.${memberIndex}.isActive`]: true,
|
[`members.${memberIndex}.isActive`]: true,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
$push: {
|
||||||
|
members: {
|
||||||
|
userId: memberId,
|
||||||
|
isAdmin: false,
|
||||||
|
isActive: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
removeMember(memberId) {
|
removeMember(memberId) {
|
||||||
|
|
@ -221,22 +218,20 @@ Boards.mutations({
|
||||||
|
|
||||||
// we do not allow the only one admin to be removed
|
// we do not allow the only one admin to be removed
|
||||||
const allowRemove = (!this.members[memberIndex].isAdmin) || (this.activeAdmins().length > 1);
|
const allowRemove = (!this.members[memberIndex].isAdmin) || (this.activeAdmins().length > 1);
|
||||||
|
if (!allowRemove) {
|
||||||
if (allowRemove) {
|
|
||||||
return {
|
|
||||||
$set: {
|
|
||||||
[`members.${memberIndex}.userId`]: 'x',
|
|
||||||
[`members.${memberIndex}.isActive`]: false,
|
|
||||||
[`members.${memberIndex}.isAdmin`]: false,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
return {
|
return {
|
||||||
$set: {
|
$set: {
|
||||||
[`members.${memberIndex}.isActive`]: true,
|
[`members.${memberIndex}.isActive`]: true,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
$set: {
|
||||||
|
[`members.${memberIndex}.isActive`]: false,
|
||||||
|
[`members.${memberIndex}.isAdmin`]: false,
|
||||||
|
},
|
||||||
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
setMemberPermission(memberId, isAdmin) {
|
setMemberPermission(memberId, isAdmin) {
|
||||||
|
|
|
||||||
|
|
@ -12,16 +12,12 @@ if (Meteor.isClient) {
|
||||||
Users.helpers({
|
Users.helpers({
|
||||||
isBoardMember() {
|
isBoardMember() {
|
||||||
const board = Boards.findOne(Session.get('currentBoard'));
|
const board = Boards.findOne(Session.get('currentBoard'));
|
||||||
return board &&
|
return board && board.hasMember(this._id);
|
||||||
_.contains(_.pluck(board.members, 'userId'), this._id) &&
|
|
||||||
_.where(board.members, {userId: this._id})[0].isActive;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
isBoardAdmin() {
|
isBoardAdmin() {
|
||||||
const board = Boards.findOne(Session.get('currentBoard'));
|
const board = Boards.findOne(Session.get('currentBoard'));
|
||||||
return board &&
|
return board && board.hasAdmin(this._id);
|
||||||
this.isBoardMember(board) &&
|
|
||||||
_.where(board.members, {userId: this._id})[0].isAdmin;
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,7 @@
|
||||||
allowIsBoardAdmin = function(userId, board) {
|
allowIsBoardAdmin = function(userId, board) {
|
||||||
const admins = _.pluck(_.where(board.members, {isAdmin: true}), 'userId');
|
return board && board.hasAdmin(userId);
|
||||||
return _.contains(admins, userId);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
allowIsBoardMember = function(userId, board) {
|
allowIsBoardMember = function(userId, board) {
|
||||||
return _.contains(_.pluck(board.members, 'userId'), userId);
|
return board && board.hasMember(userId);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ Meteor.publish('boards', function() {
|
||||||
return Boards.find({
|
return Boards.find({
|
||||||
archived: false,
|
archived: false,
|
||||||
$or: [
|
$or: [
|
||||||
{ 'members.userId': this.userId },
|
{ members: { $elemMatch: { userId: this.userId, isActive: true }}},
|
||||||
{ _id: { $in: starredBoards } },
|
{ _id: { $in: starredBoards } },
|
||||||
],
|
],
|
||||||
}, {
|
}, {
|
||||||
|
|
@ -66,7 +66,7 @@ Meteor.publishComposite('board', function(boardId) {
|
||||||
// it.
|
// it.
|
||||||
$or: [
|
$or: [
|
||||||
{ permission: 'public' },
|
{ permission: 'public' },
|
||||||
{ 'members.userId': this.userId },
|
{ members: { $elemMatch: { userId: this.userId, isActive: true }}},
|
||||||
],
|
],
|
||||||
}, { limit: 1 });
|
}, { limit: 1 });
|
||||||
},
|
},
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue