linagora/openpaas-esn

View on GitHub
frontend/js/modules/collaboration/members/collaboration-members-widget.directive.js

Summary

Maintainability
A
2 hrs
Test Coverage
(function() {
  'use strict';

  angular.module('esn.collaboration')
    .directive('esnCollaborationMembersWidget', esnCollaborationMembersWidget);

  function esnCollaborationMembersWidget($rootScope, esnCollaborationClientService, ESN_COLLABORATION_MEMBER_EVENTS, ESN_COLLABORATION_MEMBERSHIP_EVENTS) {
    return {
      scope: {
        collaboration: '=',
        objectType: '@',
        objectTypeFilter: '@'
      },
      link: link,
      templateUrl: '/views/modules/collaboration/members/collaboration-members-widget.html'
    };

    function link(scope, element, attrs) {
      scope.updateMembers = updateMembers;
      scope.inSlicesOf = attrs.inSlicesOf && angular.isNumber(parseInt(attrs.inSlicesOf, 10)) ?
        parseInt(attrs.inSlicesOf, 10) : 3;
      scope.error = false;
      var query = { limit: 8 };

      if (scope.objectTypeFilter) {
        query.objectTypeFilter = scope.objectTypeFilter;
      }

      var collaborationJoinRemover = $rootScope.$on(ESN_COLLABORATION_MEMBERSHIP_EVENTS.JOIN, scope.updateMembers);
      var collaborationLeaveRemover = $rootScope.$on(ESN_COLLABORATION_MEMBERSHIP_EVENTS.LEAVE, scope.updateMembers);
      var requestAccepted = $rootScope.$on(ESN_COLLABORATION_MEMBER_EVENTS.ACCEPTED, scope.updateMembers);
      var memberRemoved = $rootScope.$on(ESN_COLLABORATION_MEMBER_EVENTS.REMOVED, scope.updateMembers);

      element.on('$destroy', function() {
        collaborationJoinRemover();
        collaborationLeaveRemover();
        requestAccepted();
        memberRemoved();
      });

      scope.updateMembers();

      function updateMembers() {
        esnCollaborationClientService.getMembers(scope.objectType, scope.collaboration._id, query).then(function(result) {
          var members = result.data;

          scope.more = parseInt(result.headers('X-ESN-Items-Count'), 10) - members.length;
          scope.members = members;
        }, function() {
          scope.error = true;
        });
      }
    }
  }
})();