user-membership.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. import _ from 'lodash'
  2. /* eslint-disable
  3. max-len,
  4. no-return-assign,
  5. */
  6. // TODO: This file was created by bulk-decaffeinate.
  7. // Fix any style issues and re-enable lint.
  8. /*
  9. * decaffeinate suggestions:
  10. * DS101: Remove unnecessary use of Array.from
  11. * DS102: Remove unnecessary code created because of implicit returns
  12. * DS207: Consider shorter variations of null checks
  13. * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  14. */
  15. import App from '../base'
  16. App.controller('UserMembershipController', function ($scope, queuedHttp) {
  17. $scope.users = window.users
  18. $scope.groupSize = window.groupSize
  19. $scope.paths = window.paths
  20. $scope.selectedUsers = []
  21. $scope.inputs = {
  22. addMembers: {
  23. content: '',
  24. error: false,
  25. errorMessage: null,
  26. inflightCount: 0,
  27. },
  28. removeMembers: {
  29. error: false,
  30. errorMessage: null,
  31. },
  32. }
  33. const parseEmails = function (emailsString) {
  34. const regexBySpaceOrComma = /[\s,]+/
  35. let emails = emailsString.split(regexBySpaceOrComma)
  36. emails = _.map(emails, email => (email = email.trim()))
  37. emails = _.filter(emails, email => email.indexOf('@') !== -1)
  38. return emails
  39. }
  40. $scope.addMembers = function () {
  41. $scope.inputs.addMembers.error = false
  42. $scope.inputs.addMembers.errorMessage = null
  43. $scope.inputs.addMembers.inflightCount = 0
  44. const emails = parseEmails($scope.inputs.addMembers.content)
  45. return Array.from(emails).map(email => {
  46. $scope.inputs.addMembers.inflightCount += 1
  47. return queuedHttp
  48. .post(window.paths.addMember, {
  49. email,
  50. _csrf: window.csrfToken,
  51. })
  52. .then(function (response) {
  53. $scope.inputs.addMembers.inflightCount -= 1
  54. const { data } = response
  55. if (data.user != null) {
  56. const alreadyListed = $scope.users.find(
  57. scopeUser => scopeUser.email === data.user.email
  58. )
  59. if (!alreadyListed) {
  60. $scope.users.push(data.user)
  61. }
  62. }
  63. return ($scope.inputs.addMembers.content = '')
  64. })
  65. .catch(function (response) {
  66. $scope.inputs.addMembers.inflightCount -= 1
  67. const { data } = response
  68. $scope.inputs.addMembers.error = true
  69. return ($scope.inputs.addMembers.errorMessage =
  70. data.error != null ? data.error.message : undefined)
  71. })
  72. })
  73. }
  74. $scope.removeMembers = function () {
  75. $scope.inputs.removeMembers.error = false
  76. $scope.inputs.removeMembers.errorMessage = null
  77. for (const user of Array.from($scope.selectedUsers)) {
  78. ;(function (user) {
  79. let url
  80. if (window.paths.removeInvite && user.invite && user._id == null) {
  81. url = `${window.paths.removeInvite}/${encodeURIComponent(user.email)}`
  82. } else if (window.paths.removeMember && user._id != null) {
  83. url = `${window.paths.removeMember}/${user._id}`
  84. } else {
  85. return
  86. }
  87. return queuedHttp({
  88. method: 'DELETE',
  89. url,
  90. headers: {
  91. 'X-Csrf-Token': window.csrfToken,
  92. },
  93. })
  94. .then(function () {
  95. const index = $scope.users.indexOf(user)
  96. if (index === -1) {
  97. return
  98. }
  99. return $scope.users.splice(index, 1)
  100. })
  101. .catch(function (response) {
  102. const { data } = response
  103. $scope.inputs.removeMembers.error = true
  104. return ($scope.inputs.removeMembers.errorMessage =
  105. data.error != null ? data.error.message : undefined)
  106. })
  107. })(user)
  108. }
  109. return $scope.updateSelectedUsers
  110. }
  111. return ($scope.updateSelectedUsers = () =>
  112. ($scope.selectedUsers = $scope.users.filter(user => user.selected)))
  113. })
  114. export default App.controller('UserMembershipListItemController', $scope =>
  115. $scope.$watch('user.selected', function (value) {
  116. if (value != null) {
  117. return $scope.updateSelectedUsers()
  118. }
  119. })
  120. )