mirror of
https://github.com/wekan/wekan.git
synced 2025-12-16 23:40:13 +01:00
Add / remove team members as board members when adding / removing team to a board
This commit is contained in:
parent
0a9e10b21e
commit
c19723ae27
3 changed files with 138 additions and 8 deletions
|
|
@ -43,6 +43,13 @@ BlazeComponent.extendComponent({
|
||||||
this.calculateNextPeak();
|
this.calculateNextPeak();
|
||||||
|
|
||||||
Meteor.subscribe('unsaved-edits');
|
Meteor.subscribe('unsaved-edits');
|
||||||
|
|
||||||
|
// this.findUsersOptions = new ReactiveVar({});
|
||||||
|
// this.page = new ReactiveVar(1);
|
||||||
|
// this.autorun(() => {
|
||||||
|
// const limitUsers = this.page.get() * Number.MAX_SAFE_INTEGER;
|
||||||
|
// this.subscribe('people', this.findUsersOptions.get(), limitUsers, () => {});
|
||||||
|
// });
|
||||||
},
|
},
|
||||||
|
|
||||||
isWatching() {
|
isWatching() {
|
||||||
|
|
@ -668,7 +675,19 @@ Template.editCardTitleForm.onRendered(function () {
|
||||||
});
|
});
|
||||||
|
|
||||||
Template.cardMembersPopup.onCreated(function () {
|
Template.cardMembersPopup.onCreated(function () {
|
||||||
const members = Boards.findOne(Session.get('currentBoard')).activeMembers();
|
let currBoard = Boards.findOne(Session.get('currentBoard'));
|
||||||
|
let members = currBoard.activeMembers();
|
||||||
|
|
||||||
|
// let query = {
|
||||||
|
// "teams.teamId": { $in: currBoard.teams.map(t => t.teamId) },
|
||||||
|
// };
|
||||||
|
|
||||||
|
// let boardTeamUsers = Users.find(query, {
|
||||||
|
// sort: { sort: 1 },
|
||||||
|
// });
|
||||||
|
|
||||||
|
// members = currBoard.activeMembers2(members, boardTeamUsers);
|
||||||
|
|
||||||
this.members = new ReactiveVar(members);
|
this.members = new ReactiveVar(members);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -686,7 +705,18 @@ Template.cardMembersPopup.helpers({
|
||||||
});
|
});
|
||||||
|
|
||||||
const filterMembers = (filterTerm) => {
|
const filterMembers = (filterTerm) => {
|
||||||
let members = Boards.findOne(Session.get('currentBoard')).activeMembers();
|
let currBoard = Boards.findOne(Session.get('currentBoard'));
|
||||||
|
let members = currBoard.activeMembers();
|
||||||
|
|
||||||
|
// let query = {
|
||||||
|
// "teams.teamId": { $in: currBoard.teams.map(t => t.teamId) },
|
||||||
|
// };
|
||||||
|
|
||||||
|
// let boardTeamUsers = Users.find(query, {
|
||||||
|
// sort: { sort: 1 },
|
||||||
|
// });
|
||||||
|
|
||||||
|
// members = currBoard.activeMembers2(members, boardTeamUsers);
|
||||||
|
|
||||||
if (filterTerm) {
|
if (filterTerm) {
|
||||||
members = members
|
members = members
|
||||||
|
|
@ -695,7 +725,8 @@ const filterMembers = (filterTerm) => {
|
||||||
user: Users.findOne(member.userId)
|
user: Users.findOne(member.userId)
|
||||||
}))
|
}))
|
||||||
.filter(({ user }) =>
|
.filter(({ user }) =>
|
||||||
user.profile.fullname.toLowerCase().indexOf(filterTerm.toLowerCase()) !== -1)
|
(user.profile.fullname !== undefined && user.profile.fullname.toLowerCase().indexOf(filterTerm.toLowerCase()) !== -1)
|
||||||
|
|| user.profile.fullname === undefined && user.profile.username !== undefined && user.profile.username.toLowerCase().indexOf(filterTerm.toLowerCase()) !== -1)
|
||||||
.map(({ member }) => member);
|
.map(({ member }) => member);
|
||||||
}
|
}
|
||||||
return members;
|
return members;
|
||||||
|
|
@ -1623,7 +1654,19 @@ EscapeActions.register(
|
||||||
);
|
);
|
||||||
|
|
||||||
Template.cardAssigneesPopup.onCreated(function () {
|
Template.cardAssigneesPopup.onCreated(function () {
|
||||||
const members = Boards.findOne(Session.get('currentBoard')).activeMembers();
|
let currBoard = Boards.findOne(Session.get('currentBoard'));
|
||||||
|
let members = currBoard.activeMembers();
|
||||||
|
|
||||||
|
// let query = {
|
||||||
|
// "teams.teamId": { $in: currBoard.teams.map(t => t.teamId) },
|
||||||
|
// };
|
||||||
|
|
||||||
|
// let boardTeamUsers = Users.find(query, {
|
||||||
|
// sort: { sort: 1 },
|
||||||
|
// });
|
||||||
|
|
||||||
|
// members = currBoard.activeMembers2(members, boardTeamUsers);
|
||||||
|
|
||||||
this.members = new ReactiveVar(members);
|
this.members = new ReactiveVar(members);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1392,6 +1392,13 @@ BlazeComponent.extendComponent({
|
||||||
const limitTeams = this.page.get() * Number.MAX_SAFE_INTEGER;
|
const limitTeams = this.page.get() * Number.MAX_SAFE_INTEGER;
|
||||||
this.subscribe('team', this.findOrgsOptions.get(), limitTeams, () => {});
|
this.subscribe('team', this.findOrgsOptions.get(), limitTeams, () => {});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.findUsersOptions = new ReactiveVar({});
|
||||||
|
this.userPage = new ReactiveVar(1);
|
||||||
|
this.autorun(() => {
|
||||||
|
const limitUsers = this.userPage.get() * Number.MAX_SAFE_INTEGER;
|
||||||
|
this.subscribe('people', this.findUsersOptions.get(), limitUsers, () => {});
|
||||||
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
onRendered() {
|
onRendered() {
|
||||||
|
|
@ -1436,7 +1443,35 @@ BlazeComponent.extendComponent({
|
||||||
})
|
})
|
||||||
|
|
||||||
if (selectedTeamId != "-1") {
|
if (selectedTeamId != "-1") {
|
||||||
Meteor.call('setBoardTeams', boardTeams, currentBoard._id);
|
let members = currentBoard.members;
|
||||||
|
|
||||||
|
let query = {
|
||||||
|
"teams.teamId": { $in: boardTeams.map(t => t.teamId) },
|
||||||
|
};
|
||||||
|
|
||||||
|
const boardTeamUsers = Users.find(query, {
|
||||||
|
sort: { sort: 1 },
|
||||||
|
});
|
||||||
|
|
||||||
|
if(boardTeams !== undefined && boardTeams.length > 0){
|
||||||
|
let index;
|
||||||
|
if(boardTeamUsers && boardTeamUsers.count() > 0){
|
||||||
|
boardTeamUsers.forEach((u) => {
|
||||||
|
index = members.findIndex(function(m){ return m.userId == u._id});
|
||||||
|
if(index == -1){
|
||||||
|
members.push({
|
||||||
|
"isActive": true,
|
||||||
|
"isAdmin": u.isAdmin !== undefined ? u.isAdmin : false,
|
||||||
|
"isCommentOnly" : false,
|
||||||
|
"isNoComments" : false,
|
||||||
|
"userId": u._id,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Meteor.call('setBoardTeams', boardTeams, members, currentBoard._id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1465,6 +1500,13 @@ BlazeComponent.extendComponent({
|
||||||
const limitTeams = this.page.get() * Number.MAX_SAFE_INTEGER;
|
const limitTeams = this.page.get() * Number.MAX_SAFE_INTEGER;
|
||||||
this.subscribe('team', this.findOrgsOptions.get(), limitTeams, () => {});
|
this.subscribe('team', this.findOrgsOptions.get(), limitTeams, () => {});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.findUsersOptions = new ReactiveVar({});
|
||||||
|
this.userPage = new ReactiveVar(1);
|
||||||
|
this.autorun(() => {
|
||||||
|
const limitUsers = this.userPage.get() * Number.MAX_SAFE_INTEGER;
|
||||||
|
this.subscribe('people', this.findUsersOptions.get(), limitUsers, () => {});
|
||||||
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
onRendered() {
|
onRendered() {
|
||||||
|
|
@ -1501,7 +1543,28 @@ BlazeComponent.extendComponent({
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Meteor.call('setBoardTeams', boardTeams, currentBoard._id);
|
let members = currentBoard.members;
|
||||||
|
let query = {
|
||||||
|
"teams.teamId": stringTeamId
|
||||||
|
};
|
||||||
|
|
||||||
|
const boardTeamUsers = Users.find(query, {
|
||||||
|
sort: { sort: 1 },
|
||||||
|
});
|
||||||
|
|
||||||
|
if(currentBoard.teams !== undefined && currentBoard.teams.length > 0){
|
||||||
|
let index;
|
||||||
|
if(boardTeamUsers && boardTeamUsers.count() > 0){
|
||||||
|
boardTeamUsers.forEach((u) => {
|
||||||
|
index = members.findIndex(function(m){ return m.userId == u._id});
|
||||||
|
if(index !== -1 && (u.isAdmin === undefined || u.isAdmin == false)){
|
||||||
|
members.splice(index, 1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Meteor.call('setBoardTeams', boardTeams, members, currentBoard._id);
|
||||||
|
|
||||||
Popup.close();
|
Popup.close();
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -749,10 +749,32 @@ Boards.helpers({
|
||||||
return Activities.find({ boardId: this._id }, { sort: { createdAt: -1 } });
|
return Activities.find({ boardId: this._id }, { sort: { createdAt: -1 } });
|
||||||
},
|
},
|
||||||
|
|
||||||
activeMembers() {
|
activeMembers(){
|
||||||
return _.where(this.members, { isActive: true });
|
return _.where(this.members, { isActive: true });
|
||||||
},
|
},
|
||||||
|
|
||||||
|
activeMembers2(members, boardTeamUsers) {
|
||||||
|
let allMembers = members;
|
||||||
|
if(this.teams !== undefined && this.teams.length > 0){
|
||||||
|
let index;
|
||||||
|
if(boardTeamUsers && boardTeamUsers.count() > 0){
|
||||||
|
boardTeamUsers.forEach((u) => {
|
||||||
|
index = allMembers.findIndex(function(m){ return m.userId == u._id});
|
||||||
|
if(index == -1){
|
||||||
|
allMembers.push({
|
||||||
|
"isActive": true,
|
||||||
|
"isAdmin": u.isAdmin !== undefined ? u.isAdmin : false,
|
||||||
|
"isCommentOnly" : false,
|
||||||
|
"isNoComments" : false,
|
||||||
|
"userId": u._id,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return allMembers;
|
||||||
|
},
|
||||||
|
|
||||||
activeOrgs() {
|
activeOrgs() {
|
||||||
return _.where(this.orgs, { isActive: true });
|
return _.where(this.orgs, { isActive: true });
|
||||||
|
|
@ -1567,11 +1589,13 @@ if (Meteor.isServer) {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
setBoardTeams(boardTeamsArray, currBoardId){
|
setBoardTeams(boardTeamsArray, membersArray, currBoardId){
|
||||||
check(boardTeamsArray, Array);
|
check(boardTeamsArray, Array);
|
||||||
|
check(membersArray, Array);
|
||||||
check(currBoardId, String);
|
check(currBoardId, String);
|
||||||
Boards.update(currBoardId, {
|
Boards.update(currBoardId, {
|
||||||
$set: {
|
$set: {
|
||||||
|
members: membersArray,
|
||||||
teams: boardTeamsArray,
|
teams: boardTeamsArray,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue