From c19723ae27c0b651f2353cc351659e7ac27fe95d Mon Sep 17 00:00:00 2001 From: Emile NDAGIJIMANA Date: Thu, 9 Sep 2021 16:51:37 +0200 Subject: [PATCH 1/2] Add / remove team members as board members when adding / removing team to a board --- client/components/cards/cardDetails.js | 51 ++++++++++++++++++-- client/components/sidebar/sidebar.js | 67 +++++++++++++++++++++++++- models/boards.js | 28 ++++++++++- 3 files changed, 138 insertions(+), 8 deletions(-) diff --git a/client/components/cards/cardDetails.js b/client/components/cards/cardDetails.js index de7455137..a3a2b1794 100644 --- a/client/components/cards/cardDetails.js +++ b/client/components/cards/cardDetails.js @@ -43,6 +43,13 @@ BlazeComponent.extendComponent({ this.calculateNextPeak(); 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() { @@ -668,7 +675,19 @@ Template.editCardTitleForm.onRendered(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); }); @@ -686,7 +705,18 @@ Template.cardMembersPopup.helpers({ }); 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) { members = members @@ -695,7 +725,8 @@ const filterMembers = (filterTerm) => { user: Users.findOne(member.userId) })) .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); } return members; @@ -1623,7 +1654,19 @@ EscapeActions.register( ); 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); }); diff --git a/client/components/sidebar/sidebar.js b/client/components/sidebar/sidebar.js index ee705f146..19b36ccf9 100644 --- a/client/components/sidebar/sidebar.js +++ b/client/components/sidebar/sidebar.js @@ -1392,6 +1392,13 @@ BlazeComponent.extendComponent({ const limitTeams = this.page.get() * Number.MAX_SAFE_INTEGER; 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() { @@ -1436,7 +1443,35 @@ BlazeComponent.extendComponent({ }) 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; 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() { @@ -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(); }, diff --git a/models/boards.js b/models/boards.js index 4e17c6bf6..a504ca1da 100644 --- a/models/boards.js +++ b/models/boards.js @@ -749,10 +749,32 @@ Boards.helpers({ return Activities.find({ boardId: this._id }, { sort: { createdAt: -1 } }); }, - activeMembers() { + activeMembers(){ 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() { return _.where(this.orgs, { isActive: true }); @@ -1567,11 +1589,13 @@ if (Meteor.isServer) { }, }); }, - setBoardTeams(boardTeamsArray, currBoardId){ + setBoardTeams(boardTeamsArray, membersArray, currBoardId){ check(boardTeamsArray, Array); + check(membersArray, Array); check(currBoardId, String); Boards.update(currBoardId, { $set: { + members: membersArray, teams: boardTeamsArray, }, }); From 0c121a5894ca830c17311d592d9a72b1eb6d48d8 Mon Sep 17 00:00:00 2001 From: Emile NDAGIJIMANA Date: Thu, 9 Sep 2021 17:53:10 +0200 Subject: [PATCH 2/2] update package-lock.json --- package-lock.json | 5 ----- 1 file changed, 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index e53b6be1a..dbba74f66 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,7 @@ { "name": "wekan", -<<<<<<< HEAD "version": "v5.58.0", "lockfileVersion": 1, -======= - "version": "v5.57.0", - "lockfileVersion": 2, ->>>>>>> 2baca605... [Admin panel / People] possibility of adding a team to all selected Users "requires": true, "packages": { "": {