mirror of
https://github.com/wekan/wekan.git
synced 2026-02-07 17:04:22 +01:00
add: invite user via email, invited user can accept or decline, allow member to quit
This commit is contained in:
parent
d4c5310d65
commit
011f53ad08
11 changed files with 367 additions and 61 deletions
|
|
@ -117,6 +117,9 @@ Template.memberPopup.helpers({
|
|||
const type = Users.findOne(this.userId).isBoardAdmin() ? 'admin' : 'normal';
|
||||
return TAPi18n.__(type).toLowerCase();
|
||||
},
|
||||
isInvited() {
|
||||
return Users.findOne(this.userId).isInvitedTo(Session.get('currentBoard'));
|
||||
},
|
||||
});
|
||||
|
||||
Template.memberPopup.events({
|
||||
|
|
@ -132,8 +135,13 @@ Template.memberPopup.events({
|
|||
Popup.close();
|
||||
}),
|
||||
'click .js-leave-member'() {
|
||||
// XXX Not implemented
|
||||
Popup.close();
|
||||
const currentBoard = Boards.findOne(Session.get('currentBoard'));
|
||||
Meteor.call('quitBoard', currentBoard, (err, ret) => {
|
||||
if (!ret && ret) {
|
||||
Popup.close();
|
||||
FlowRouter.go('home');
|
||||
}
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
|
|
@ -146,9 +154,29 @@ Template.removeMemberPopup.helpers({
|
|||
},
|
||||
});
|
||||
|
||||
Template.membersWidget.helpers({
|
||||
isInvited() {
|
||||
const user = Meteor.user();
|
||||
return user && user.isInvitedTo(Session.get('currentBoard'));
|
||||
},
|
||||
});
|
||||
|
||||
Template.membersWidget.events({
|
||||
'click .js-member': Popup.open('member'),
|
||||
'click .js-manage-board-members': Popup.open('addMember'),
|
||||
'click .js-member-invite-accept'() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
Meteor.user().removeInvite(boardId);
|
||||
},
|
||||
'click .js-member-invite-decline'() {
|
||||
const boardId = Session.get('currentBoard');
|
||||
Meteor.call('quitBoard', boardId, (err, ret) => {
|
||||
if (!err && ret) {
|
||||
Meteor.user().removeInvite(boardId);
|
||||
FlowRouter.go('home');
|
||||
}
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
Template.labelsWidget.events({
|
||||
|
|
@ -194,25 +222,76 @@ function draggableMembersLabelsWidgets() {
|
|||
Template.membersWidget.onRendered(draggableMembersLabelsWidgets);
|
||||
Template.labelsWidget.onRendered(draggableMembersLabelsWidgets);
|
||||
|
||||
Template.addMemberPopup.helpers({
|
||||
BlazeComponent.extendComponent({
|
||||
template() {
|
||||
return 'addMemberPopup';
|
||||
},
|
||||
|
||||
onCreated() {
|
||||
this.error = new ReactiveVar('');
|
||||
this.loading = new ReactiveVar(false);
|
||||
},
|
||||
|
||||
onRendered() {
|
||||
this.find('.js-search-member input').focus();
|
||||
this.setLoading(false);
|
||||
},
|
||||
|
||||
isBoardMember() {
|
||||
const user = Users.findOne(this._id);
|
||||
const userId = this.currentData()._id;
|
||||
const user = Users.findOne(userId);
|
||||
return user && user.isBoardMember();
|
||||
},
|
||||
});
|
||||
|
||||
Template.addMemberPopup.events({
|
||||
'click .js-select-member'() {
|
||||
const userId = this._id;
|
||||
const currentBoard = Boards.findOne(Session.get('currentBoard'));
|
||||
currentBoard.addMember(userId);
|
||||
Popup.close();
|
||||
isValidEmail(email) {
|
||||
return SimpleSchema.RegEx.Email.test(email);
|
||||
},
|
||||
});
|
||||
|
||||
Template.addMemberPopup.onRendered(function() {
|
||||
this.find('.js-search-member input').focus();
|
||||
});
|
||||
setError(error) {
|
||||
this.error.set(error);
|
||||
},
|
||||
|
||||
setLoading(w) {
|
||||
this.loading.set(w);
|
||||
},
|
||||
|
||||
isLoading() {
|
||||
return this.loading.get();
|
||||
},
|
||||
|
||||
inviteUser(idNameEmail) {
|
||||
const boardId = Session.get('currentBoard');
|
||||
this.setLoading(true);
|
||||
const self = this;
|
||||
Meteor.call('inviteUserToBoard', idNameEmail, boardId, (err, ret) => {
|
||||
self.setLoading(false);
|
||||
if (err) self.setError(err.error);
|
||||
else if (ret.email) self.setError('email-sent');
|
||||
else Popup.close();
|
||||
});
|
||||
},
|
||||
|
||||
events() {
|
||||
return [{
|
||||
'keyup input'() {
|
||||
this.setError('');
|
||||
},
|
||||
'click .js-select-member'() {
|
||||
const userId = this.currentData()._id;
|
||||
const currentBoard = Boards.findOne(Session.get('currentBoard'));
|
||||
if (currentBoard.memberIndex(userId)<0) {
|
||||
this.inviteUser(userId);
|
||||
}
|
||||
},
|
||||
'click .js-email-invite'() {
|
||||
const idNameEmail = $('.js-search-member input').val();
|
||||
if (idNameEmail.indexOf('@')<0 || this.isValidEmail(idNameEmail)) {
|
||||
this.inviteUser(idNameEmail);
|
||||
} else this.setError('email-invalid');
|
||||
},
|
||||
}];
|
||||
},
|
||||
}).register('addMemberPopup');
|
||||
|
||||
Template.changePermissionsPopup.events({
|
||||
'click .js-set-admin, click .js-set-normal'(event) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue