peopleBody.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. Meteor.subscribe('people');
  2. BlazeComponent.extendComponent({
  3. onCreated() {
  4. this.error = new ReactiveVar('');
  5. this.loading = new ReactiveVar(false);
  6. this.people = new ReactiveVar(true);
  7. },
  8. setError(error) {
  9. this.error.set(error);
  10. },
  11. setLoading(w) {
  12. this.loading.set(w);
  13. },
  14. peopleList() {
  15. return Users.find({}, {
  16. fields: {_id: true},
  17. });
  18. },
  19. }).register('people');
  20. Template.peopleRow.helpers({
  21. userData() {
  22. const userCollection = this.esSearch ? ESSearchResults : Users;
  23. return userCollection.findOne(this.userId);
  24. },
  25. });
  26. Template.editUserPopup.helpers({
  27. user() {
  28. return Users.findOne(this.userId);
  29. },
  30. });
  31. BlazeComponent.extendComponent({
  32. onCreated() {
  33. },
  34. user() {
  35. return Users.findOne(this.userId);
  36. },
  37. events() {
  38. return [{
  39. 'click a.edit-user': Popup.open('editUser'),
  40. }];
  41. },
  42. }).register('peopleRow');
  43. Template.editUserPopup.events({
  44. submit(evt, tpl) {
  45. evt.preventDefault();
  46. const user = Users.findOne(this.userId);
  47. const fullname = tpl.find('.js-profile-fullname').value.trim();
  48. const username = tpl.find('.js-profile-username').value.trim();
  49. const initials = tpl.find('.js-profile-initials').value.trim();
  50. const isAdmin = tpl.find('.js-profile-isadmin').value.trim();
  51. const email = tpl.find('.js-profile-email').value.trim();
  52. console.log('isAdmin', isAdmin);
  53. let isChangeUserName = false;
  54. let isChangeEmail = false;
  55. Users.update(this.userId, {
  56. $set: {
  57. 'profile.fullname': fullname,
  58. 'profile.initials': initials,
  59. 'isAdmin': true,
  60. },
  61. });
  62. isChangeUserName = username !== user.username;
  63. isChangeEmail = email.toLowerCase() !== user.emails[0].address.toLowerCase();
  64. if (isChangeUserName && isChangeEmail) {
  65. Meteor.call('setUsernameAndEmail', username, email.toLowerCase(), function (error) {
  66. const usernameMessageElement = tpl.$('.username-taken');
  67. const emailMessageElement = tpl.$('.email-taken');
  68. if (error) {
  69. const errorElement = error.error;
  70. if (errorElement === 'username-already-taken') {
  71. usernameMessageElement.show();
  72. emailMessageElement.hide();
  73. } else if (errorElement === 'email-already-taken') {
  74. usernameMessageElement.hide();
  75. emailMessageElement.show();
  76. }
  77. } else {
  78. usernameMessageElement.hide();
  79. emailMessageElement.hide();
  80. Popup.back();
  81. }
  82. });
  83. } else if (isChangeUserName) {
  84. Meteor.call('setUsername', username, function (error) {
  85. const messageElement = tpl.$('.username-taken');
  86. if (error) {
  87. messageElement.show();
  88. } else {
  89. messageElement.hide();
  90. Popup.back();
  91. }
  92. });
  93. } else if (isChangeEmail) {
  94. Meteor.call('setEmail', email.toLowerCase(), function (error) {
  95. const messageElement = tpl.$('.email-taken');
  96. if (error) {
  97. messageElement.show();
  98. } else {
  99. messageElement.hide();
  100. Popup.back();
  101. }
  102. });
  103. } else Popup.back();
  104. },
  105. });