mirror of
https://github.com/wekan/wekan.git
synced 2025-12-18 00:10:13 +01:00
156 lines
4.5 KiB
JavaScript
156 lines
4.5 KiB
JavaScript
const usersPerPage = 25;
|
|
|
|
BlazeComponent.extendComponent({
|
|
mixins() {
|
|
return [Mixins.InfiniteScrolling];
|
|
},
|
|
onCreated() {
|
|
this.error = new ReactiveVar('');
|
|
this.loading = new ReactiveVar(false);
|
|
this.people = new ReactiveVar(true);
|
|
|
|
this.page = new ReactiveVar(1);
|
|
this.loadNextPageLocked = false;
|
|
this.callFirstWith(null, 'resetNextPeak');
|
|
this.autorun(() => {
|
|
const limit = this.page.get() * usersPerPage;
|
|
|
|
this.subscribe('people', limit, () => {
|
|
this.loadNextPageLocked = false;
|
|
const nextPeakBefore = this.callFirstWith(null, 'getNextPeak');
|
|
this.calculateNextPeak();
|
|
const nextPeakAfter = this.callFirstWith(null, 'getNextPeak');
|
|
if (nextPeakBefore === nextPeakAfter) {
|
|
this.callFirstWith(null, 'resetNextPeak');
|
|
}
|
|
});
|
|
});
|
|
},
|
|
loadNextPage() {
|
|
if (this.loadNextPageLocked === false) {
|
|
this.page.set(this.page.get() + 1);
|
|
this.loadNextPageLocked = true;
|
|
}
|
|
},
|
|
calculateNextPeak() {
|
|
const element = this.find('.main-body');
|
|
if (element) {
|
|
const altitude = element.scrollHeight;
|
|
this.callFirstWith(this, 'setNextPeak', altitude);
|
|
}
|
|
},
|
|
reachNextPeak() {
|
|
this.loadNextPage();
|
|
},
|
|
setError(error) {
|
|
this.error.set(error);
|
|
},
|
|
setLoading(w) {
|
|
this.loading.set(w);
|
|
},
|
|
peopleList() {
|
|
return Users.find({}, {
|
|
fields: {_id: true},
|
|
});
|
|
},
|
|
}).register('people');
|
|
|
|
Template.peopleRow.helpers({
|
|
userData() {
|
|
const userCollection = this.esSearch ? ESSearchResults : Users;
|
|
return userCollection.findOne(this.userId);
|
|
},
|
|
});
|
|
|
|
Template.editUserPopup.helpers({
|
|
user() {
|
|
return Users.findOne(this.userId);
|
|
},
|
|
});
|
|
|
|
BlazeComponent.extendComponent({
|
|
onCreated() {
|
|
},
|
|
user() {
|
|
return Users.findOne(this.userId);
|
|
},
|
|
events() {
|
|
return [{
|
|
'click a.edit-user': Popup.open('editUser'),
|
|
}];
|
|
},
|
|
}).register('peopleRow');
|
|
|
|
Template.editUserPopup.events({
|
|
submit(evt, tpl) {
|
|
evt.preventDefault();
|
|
const user = Users.findOne(this.userId);
|
|
const fullname = tpl.find('.js-profile-fullname').value.trim();
|
|
const username = tpl.find('.js-profile-username').value.trim();
|
|
const initials = tpl.find('.js-profile-initials').value.trim();
|
|
const isAdmin = tpl.find('.js-profile-isadmin').value.trim();
|
|
const isActive = tpl.find('.js-profile-isactive').value.trim();
|
|
const email = tpl.find('.js-profile-email').value.trim();
|
|
let isChangeUserName = false;
|
|
let isChangeEmail = false;
|
|
|
|
Users.update(this.userId, {
|
|
$set: {
|
|
'profile.fullname': fullname,
|
|
'profile.initials': initials,
|
|
'isAdmin': isAdmin === 'true',
|
|
'loginDisabled': isActive === 'true',
|
|
},
|
|
});
|
|
|
|
isChangeUserName = username !== user.username;
|
|
isChangeEmail = email.toLowerCase() !== user.emails[0].address.toLowerCase();
|
|
|
|
if (isChangeUserName && isChangeEmail) {
|
|
Meteor.call('setUsernameAndEmail', username, email.toLowerCase(), this.userId, function (error) {
|
|
const usernameMessageElement = tpl.$('.username-taken');
|
|
const emailMessageElement = tpl.$('.email-taken');
|
|
if (error) {
|
|
const errorElement = error.error;
|
|
if (errorElement === 'username-already-taken') {
|
|
usernameMessageElement.show();
|
|
emailMessageElement.hide();
|
|
} else if (errorElement === 'email-already-taken') {
|
|
usernameMessageElement.hide();
|
|
emailMessageElement.show();
|
|
}
|
|
} else {
|
|
usernameMessageElement.hide();
|
|
emailMessageElement.hide();
|
|
Popup.close();
|
|
}
|
|
});
|
|
} else if (isChangeUserName) {
|
|
Meteor.call('setUsername', username, this.userId, function (error) {
|
|
const usernameMessageElement = tpl.$('.username-taken');
|
|
if (error) {
|
|
const errorElement = error.error;
|
|
if (errorElement === 'username-already-taken') {
|
|
usernameMessageElement.show();
|
|
}
|
|
} else {
|
|
usernameMessageElement.hide();
|
|
Popup.close();
|
|
}
|
|
});
|
|
} else if (isChangeEmail) {
|
|
Meteor.call('setEmail', email.toLowerCase(), this.userId, function (error) {
|
|
const emailMessageElement = tpl.$('.email-taken');
|
|
if (error) {
|
|
const errorElement = error.error;
|
|
if (errorElement === 'email-already-taken') {
|
|
emailMessageElement.show();
|
|
}
|
|
} else {
|
|
emailMessageElement.hide();
|
|
Popup.close();
|
|
}
|
|
});
|
|
} else Popup.close();
|
|
},
|
|
});
|