ShareProjectModalController.coffee 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. define [
  2. "base"
  3. ], (App) ->
  4. App.controller "ShareProjectModalController", ($scope, $modalInstance, $timeout, projectMembers, $modal, $http) ->
  5. $scope.inputs = {
  6. privileges: "readAndWrite"
  7. email: ""
  8. }
  9. $scope.state = {
  10. error: null
  11. inflight: false
  12. startedFreeTrial: false
  13. }
  14. $modalInstance.opened.then () ->
  15. $timeout () ->
  16. $scope.$broadcast "open"
  17. , 200
  18. INFINITE_COLLABORATORS = -1
  19. $scope.$watch "project.members.length", (noOfMembers) ->
  20. allowedNoOfMembers = $scope.project.features.collaborators
  21. $scope.canAddCollaborators = noOfMembers < allowedNoOfMembers or allowedNoOfMembers == INFINITE_COLLABORATORS
  22. $scope.$watchCollection "inputs.contacts", (value) ->
  23. console.log "EMAILS", value
  24. $scope.autocompleteContacts = []
  25. do loadAutocompleteUsers = () ->
  26. $http.get "/user/contacts"
  27. .success (data) ->
  28. console.log "Got contacts", data
  29. $scope.autocompleteContacts = data.contacts or []
  30. $scope.filterAutocompleteUsers = ($query) ->
  31. return $scope.autocompleteContacts.filter (user) ->
  32. for text in [user.name, user.email]
  33. if text?.toLowerCase().indexOf($query.toLowerCase()) > -1
  34. return true
  35. return false
  36. $scope.addMembers = () ->
  37. $timeout -> # Give email list a chance to update
  38. return if $scope.inputs.contacts.length == 0
  39. emails = $scope.inputs.contacts.map (contact) -> contact.email
  40. $scope.inputs.contacts = []
  41. $scope.state.error = null
  42. $scope.state.inflight = true
  43. console.log "Adding emails", emails
  44. do addNextMember = () ->
  45. if emails.length == 0 or !$scope.canAddCollaborators
  46. $scope.state.inflight = false
  47. $scope.$apply()
  48. return
  49. email = emails.shift()
  50. projectMembers
  51. .addMember(email, $scope.inputs.privileges)
  52. .success (data) ->
  53. if data?.user # data.user is false if collaborator limit is hit.
  54. $scope.project.members.push data.user
  55. setTimeout () ->
  56. # Give $scope a chance to update $scope.canAddCollaborators
  57. # with new collaborator information.
  58. addNextMember()
  59. , 0
  60. .error () ->
  61. $scope.state.inflight = false
  62. $scope.state.error = "Sorry, something went wrong :("
  63. $scope.removeMember = (member) ->
  64. $scope.state.error = null
  65. $scope.state.inflight = true
  66. projectMembers
  67. .removeMember(member)
  68. .success () ->
  69. $scope.state.inflight = false
  70. index = $scope.project.members.indexOf(member)
  71. return if index == -1
  72. $scope.project.members.splice(index, 1)
  73. .error () ->
  74. $scope.state.inflight = false
  75. $scope.state.error = "Sorry, something went wrong :("
  76. $scope.openMakePublicModal = () ->
  77. $modal.open {
  78. templateUrl: "makePublicModalTemplate"
  79. controller: "MakePublicModalController"
  80. scope: $scope
  81. }
  82. $scope.openMakePrivateModal = () ->
  83. $modal.open {
  84. templateUrl: "makePrivateModalTemplate"
  85. controller: "MakePrivateModalController"
  86. scope: $scope
  87. }
  88. $scope.done = () ->
  89. $modalInstance.close()
  90. $scope.cancel = () ->
  91. $modalInstance.dismiss()
  92. App.controller "MakePublicModalController", ["$scope", "$modalInstance", "settings", ($scope, $modalInstance, settings) ->
  93. $scope.inputs = {
  94. privileges: "readAndWrite"
  95. }
  96. $scope.makePublic = () ->
  97. $scope.project.publicAccesLevel = $scope.inputs.privileges
  98. settings.saveProjectSettings({publicAccessLevel: $scope.inputs.privileges})
  99. $modalInstance.close()
  100. $scope.cancel = () ->
  101. $modalInstance.dismiss()
  102. ]
  103. App.controller "MakePrivateModalController", ["$scope", "$modalInstance", "settings", ($scope, $modalInstance, settings) ->
  104. $scope.makePrivate = () ->
  105. $scope.project.publicAccesLevel = "private"
  106. settings.saveProjectSettings({publicAccessLevel: "private"})
  107. $modalInstance.close()
  108. $scope.cancel = () ->
  109. $modalInstance.dismiss()
  110. ]