UNPKG

linagora-rse

Version:
85 lines (71 loc) 2.62 kB
(function() { 'use strict'; angular.module('esn.collaboration') .controller('ESNCollaborationMembersListController', ESNCollaborationMembersListController); function ESNCollaborationMembersListController( _, $scope, $q, $rootScope, esnCollaborationClientService, esnCollaborationMemberPaginationProvider, infiniteScrollHelper, PageAggregatorService, ESN_COLLABORATION_MEMBER_EVENTS, ESN_COLLABORATION_MEMBERSHIP_EVENTS, ELEMENTS_PER_PAGE ) { var self = this; var aggregator; var results_per_page = self.elementsPerPage || ELEMENTS_PER_PAGE; var options = { offset: 0, limit: results_per_page, objectTypeFilter: self.objectTypeFilter }; self.$onInit = $onInit; self.$onDestroy = $onDestroy; self.updateMembers = updateMembers; function $onInit() { self.collaborationJoinRemover = $rootScope.$on(ESN_COLLABORATION_MEMBERSHIP_EVENTS.JOIN, updateMembers); self.collaborationLeaveRemover = $rootScope.$on(ESN_COLLABORATION_MEMBERSHIP_EVENTS.LEAVE, updateMembers); self.requestAccepted = $rootScope.$on(ESN_COLLABORATION_MEMBER_EVENTS.ACCEPTED, updateMembers); self.memberRemoved = $scope.$on(ESN_COLLABORATION_MEMBER_EVENTS.REMOVED, onMemberRemoved); } function $onDestroy() { self.collaborationJoinRemover(); self.collaborationLeaveRemover(); self.memberRemoved(); self.requestAccepted(); } function onMemberRemoved(event, removed) { self.elements = self.elements.filter(function(member) { return member.id !== removed.id; }); } self.loadMoreElements = infiniteScrollHelper(self, function() { if (aggregator) { return load(); } var provider = new esnCollaborationMemberPaginationProvider({ id: self.collaboration.id || self.collaboration._id, objectType: self.collaboration.objectType }, options); aggregator = new PageAggregatorService('CollaborationMembersAggregator', [provider], { compare: function(a, b) { return b.metadata.timestamps.creation - a.metadata.timestamps.creation; }, results_per_page: results_per_page }); return load(); }); function load() { return aggregator.loadNextItems().then(_.property('data'), _.constant([])); } function updateMembers() { esnCollaborationClientService.getMembers(self.collaboration.objectType, self.collaboration._id).then(function(result) { self.elements = result.data; }, function() { self.error = true; }); } } })();