react-share-project-modal-controller.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import App from '../../../base'
  2. import { react2angular } from 'react2angular'
  3. import cloneDeep from 'lodash/cloneDeep'
  4. import ShareProjectModal from '../components/share-project-modal'
  5. import { listProjectInvites, listProjectMembers } from '../utils/api'
  6. App.component('shareProjectModal', react2angular(ShareProjectModal))
  7. export default App.controller('ReactShareProjectModalController', function(
  8. $scope,
  9. eventTracking,
  10. ide
  11. ) {
  12. $scope.isAdmin = false
  13. $scope.show = false
  14. let deregisterProjectWatch
  15. // deep watch $scope.project for changes
  16. function registerProjectWatch() {
  17. deregisterProjectWatch = $scope.$watch(
  18. 'project',
  19. project => {
  20. $scope.clonedProject = cloneDeep(project)
  21. },
  22. true
  23. )
  24. }
  25. $scope.handleHide = () => {
  26. $scope.$applyAsync(() => {
  27. $scope.show = false
  28. if (deregisterProjectWatch) {
  29. deregisterProjectWatch()
  30. }
  31. })
  32. }
  33. $scope.openShareProjectModal = isAdmin => {
  34. eventTracking.sendMBOnce('ide-open-share-modal-once')
  35. $scope.$applyAsync(() => {
  36. registerProjectWatch()
  37. $scope.isAdmin = isAdmin
  38. $scope.show = true
  39. })
  40. }
  41. // update $scope.project with new data
  42. $scope.updateProject = data => {
  43. if (!$scope.project) {
  44. return
  45. }
  46. $scope.$applyAsync(() => {
  47. Object.assign($scope.project, data)
  48. })
  49. }
  50. /* tokens */
  51. ide.socket.on('project:tokens:changed', data => {
  52. if (data.tokens != null) {
  53. ide.$scope.project.tokens = data.tokens
  54. $scope.$digest()
  55. }
  56. })
  57. ide.socket.on('project:membership:changed', data => {
  58. if (data.members) {
  59. listProjectMembers($scope.project)
  60. .then(({ members }) => {
  61. if (members) {
  62. $scope.$applyAsync(() => {
  63. $scope.project.members = members
  64. })
  65. }
  66. })
  67. .catch(() => {
  68. console.error('Error fetching members for project')
  69. })
  70. }
  71. if (data.invites) {
  72. listProjectInvites($scope.project)
  73. .then(({ invites }) => {
  74. if (invites) {
  75. $scope.$applyAsync(() => {
  76. $scope.project.invites = invites
  77. })
  78. }
  79. })
  80. .catch(() => {
  81. console.error('Error fetching invites for project')
  82. })
  83. }
  84. })
  85. })