Refresh members and invites in client when status changes

This commit is contained in:
Shane Kilkelly 2016-08-05 14:01:08 +01:00
parent 8f7603c324
commit eafd61a90e
6 changed files with 42 additions and 8 deletions

View file

@ -37,6 +37,7 @@ module.exports = CollaboratorsController =
user_id = req.params.user_id user_id = req.params.user_id
CollaboratorsController._removeUserIdFromProject project_id, user_id, (error) -> CollaboratorsController._removeUserIdFromProject project_id, user_id, (error) ->
return next(error) if error? return next(error) if error?
EditorRealTimeController.emitToRoom project_id, 'project:membership:changed', {members: true}
res.sendStatus 204 res.sendStatus 204
removeSelfFromProject: (req, res, next = (error) ->) -> removeSelfFromProject: (req, res, next = (error) ->) ->

View file

@ -5,6 +5,7 @@ CollaboratorsHandler = require('./CollaboratorsHandler')
CollaboratorsInviteHandler = require('./CollaboratorsInviteHandler') CollaboratorsInviteHandler = require('./CollaboratorsInviteHandler')
logger = require('logger-sharelatex') logger = require('logger-sharelatex')
EmailHelper = require "../Helpers/EmailHelper" EmailHelper = require "../Helpers/EmailHelper"
EditorRealTimeController = require("../Editor/EditorRealTimeController")
module.exports = CollaboratorsInviteController = module.exports = CollaboratorsInviteController =
@ -38,6 +39,7 @@ module.exports = CollaboratorsInviteController =
logger.err {projectId, email, sendingUserId}, "error creating project invite" logger.err {projectId, email, sendingUserId}, "error creating project invite"
return next(err) return next(err)
logger.log {projectId, email, sendingUserId}, "invite created" logger.log {projectId, email, sendingUserId}, "invite created"
EditorRealTimeController.emitToRoom projectId, 'project:membership:changed', {invites: true}
return res.json {invite: invite} return res.json {invite: invite}
revokeInvite: (req, res, next) -> revokeInvite: (req, res, next) ->
@ -48,6 +50,7 @@ module.exports = CollaboratorsInviteController =
if err? if err?
logger.err {projectId, inviteId}, "error revoking invite" logger.err {projectId, inviteId}, "error revoking invite"
return next(err) return next(err)
EditorRealTimeController.emitToRoom projectId, 'project:membership:changed', {invites: true}
res.sendStatus(201) res.sendStatus(201)
resendInvite: (req, res, next) -> resendInvite: (req, res, next) ->
@ -113,4 +116,5 @@ module.exports = CollaboratorsInviteController =
if err? if err?
logger.err {projectId, inviteId}, "error accepting invite by token" logger.err {projectId, inviteId}, "error accepting invite by token"
return next(err) return next(err)
EditorRealTimeController.emitToRoom projectId, 'project:membership:changed', {invites: true, members: true}
res.redirect "/project/#{projectId}" res.redirect "/project/#{projectId}"

View file

@ -1,13 +1,24 @@
define [ define [
"base" "base"
], (App) -> ], (App) ->
App.controller "ShareController", ["$scope", "$modal", "event_tracking", ($scope, $modal, event_tracking) -> App.controller "ShareController", ["$scope", "$modal", "ide", "projectInvites", "projectMembers", "event_tracking",
$scope.openShareProjectModal = () -> ($scope, $modal, ide, projectInvites, projectMembers, event_tracking) ->
event_tracking.sendCountlyOnce "ide-open-share-modal-once" $scope.openShareProjectModal = () ->
event_tracking.sendCountlyOnce "ide-open-share-modal-once"
$modal.open( $modal.open(
templateUrl: "shareProjectModalTemplate" templateUrl: "shareProjectModalTemplate"
controller: "ShareProjectModalController" controller: "ShareProjectModalController"
scope: $scope scope: $scope
) )
ide.socket.on 'project:membership:changed', (data) =>
if data.members
projectMembers.getMembers().success (responseData) =>
if responseData.members
$scope.project.members = responseData.members
if data.invites
projectInvites.getInvites().success (responseData) =>
if responseData.invites
$scope.project.invites = responseData.invites
] ]

View file

@ -23,6 +23,8 @@ define [
allowedNoOfMembers = $scope.project.features.collaborators allowedNoOfMembers = $scope.project.features.collaborators
$scope.canAddCollaborators = noOfMembers < allowedNoOfMembers or allowedNoOfMembers == INFINITE_COLLABORATORS $scope.canAddCollaborators = noOfMembers < allowedNoOfMembers or allowedNoOfMembers == INFINITE_COLLABORATORS
window._m = projectMembers
$scope.autocompleteContacts = [] $scope.autocompleteContacts = []
do loadAutocompleteUsers = () -> do loadAutocompleteUsers = () ->
$http.get "/user/contacts" $http.get "/user/contacts"

View file

@ -128,6 +128,9 @@ describe "CollaboratorsController", ->
it "should send the back a success response", -> it "should send the back a success response", ->
@res.sendStatus.calledWith(204).should.equal true @res.sendStatus.calledWith(204).should.equal true
it 'should have called emitToRoom', ->
@EditorRealTimeController.emitToRoom.calledWith(@project_id, 'project:membership:changed').should.equal true
describe "removeSelfFromProject", -> describe "removeSelfFromProject", ->
beforeEach -> beforeEach ->
@req.session = @req.session =

View file

@ -22,6 +22,7 @@ describe "CollaboratorsInviteController", ->
"./CollaboratorsHandler": @CollaboratorsHandler = {} "./CollaboratorsHandler": @CollaboratorsHandler = {}
"./CollaboratorsInviteHandler": @CollaboratorsInviteHandler = {} "./CollaboratorsInviteHandler": @CollaboratorsInviteHandler = {}
'logger-sharelatex': @logger = {err: sinon.stub(), error: sinon.stub(), log: sinon.stub()} 'logger-sharelatex': @logger = {err: sinon.stub(), error: sinon.stub(), log: sinon.stub()}
"../Editor/EditorRealTimeController": @EditorRealTimeController = {emitToRoom: sinon.stub()}
@res = new MockResponse() @res = new MockResponse()
@req = new MockRequest() @req = new MockRequest()
@ -112,6 +113,10 @@ describe "CollaboratorsInviteController", ->
@CollaboratorsInviteHandler.inviteToProject.callCount.should.equal 1 @CollaboratorsInviteHandler.inviteToProject.callCount.should.equal 1
@CollaboratorsInviteHandler.inviteToProject.calledWith(@project_id,@current_user_id,@targetEmail,@privileges).should.equal true @CollaboratorsInviteHandler.inviteToProject.calledWith(@project_id,@current_user_id,@targetEmail,@privileges).should.equal true
it 'should have called emitToRoom', ->
@EditorRealTimeController.emitToRoom.callCount.should.equal 1
@EditorRealTimeController.emitToRoom.calledWith(@project_id, 'project:membership:changed').should.equal true
describe 'when the user is not allowed to add more collaborators', -> describe 'when the user is not allowed to add more collaborators', ->
beforeEach -> beforeEach ->
@ -499,6 +504,10 @@ describe "CollaboratorsInviteController", ->
it 'should have called revokeInvite', -> it 'should have called revokeInvite', ->
@CollaboratorsInviteHandler.revokeInvite.callCount.should.equal 1 @CollaboratorsInviteHandler.revokeInvite.callCount.should.equal 1
it 'should have called emitToRoom', ->
@EditorRealTimeController.emitToRoom.callCount.should.equal 1
@EditorRealTimeController.emitToRoom.calledWith(@project_id, 'project:membership:changed').should.equal true
describe 'when revokeInvite produces an error', -> describe 'when revokeInvite produces an error', ->
beforeEach -> beforeEach ->
@ -544,6 +553,10 @@ describe "CollaboratorsInviteController", ->
it 'should have called acceptInvite', -> it 'should have called acceptInvite', ->
@CollaboratorsInviteHandler.acceptInvite.callCount.should.equal 1 @CollaboratorsInviteHandler.acceptInvite.callCount.should.equal 1
it 'should have called emitToRoom', ->
@EditorRealTimeController.emitToRoom.callCount.should.equal 1
@EditorRealTimeController.emitToRoom.calledWith(@project_id, 'project:membership:changed').should.equal true
describe 'when revokeInvite produces an error', -> describe 'when revokeInvite produces an error', ->
beforeEach -> beforeEach ->