user-membership.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  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. $scope.users.push(data.user)
  57. }
  58. return ($scope.inputs.addMembers.content = '')
  59. })
  60. .catch(function(response) {
  61. $scope.inputs.addMembers.inflightCount -= 1
  62. const { data } = response
  63. $scope.inputs.addMembers.error = true
  64. return ($scope.inputs.addMembers.errorMessage =
  65. data.error != null ? data.error.message : undefined)
  66. })
  67. })
  68. }
  69. $scope.removeMembers = function() {
  70. $scope.inputs.removeMembers.error = false
  71. $scope.inputs.removeMembers.errorMessage = null
  72. for (let user of Array.from($scope.selectedUsers)) {
  73. ;(function(user) {
  74. let url
  75. if (window.paths.removeInvite && user.invite && user._id == null) {
  76. url = `${window.paths.removeInvite}/${encodeURIComponent(user.email)}`
  77. } else if (window.paths.removeMember && user._id != null) {
  78. url = `${window.paths.removeMember}/${user._id}`
  79. } else {
  80. return
  81. }
  82. return queuedHttp({
  83. method: 'DELETE',
  84. url,
  85. headers: {
  86. 'X-Csrf-Token': window.csrfToken
  87. }
  88. })
  89. .then(function() {
  90. const index = $scope.users.indexOf(user)
  91. if (index === -1) {
  92. return
  93. }
  94. return $scope.users.splice(index, 1)
  95. })
  96. .catch(function(response) {
  97. const { data } = response
  98. $scope.inputs.removeMembers.error = true
  99. return ($scope.inputs.removeMembers.errorMessage =
  100. data.error != null ? data.error.message : undefined)
  101. })
  102. })(user)
  103. }
  104. return $scope.updateSelectedUsers
  105. }
  106. return ($scope.updateSelectedUsers = () =>
  107. ($scope.selectedUsers = $scope.users.filter(user => user.selected)))
  108. })
  109. export default App.controller('UserMembershipListItemController', $scope =>
  110. $scope.$watch('user.selected', function(value) {
  111. if (value != null) {
  112. return $scope.updateSelectedUsers()
  113. }
  114. })
  115. )