Source: directives/mensageria-filter/mensageria-filter.service.js

/**
 * @ngdoc directives
 * @name MensageriaFilterService
 * @module s4c.directives.MensageriaFilter.mensageriafilterService
 *
 * @description
 * `MensageriaFilterService` Componente para acesso ao api do backend e/ou comunicação entre controllers
 * 
 * 
 */
(function () {
    angular.module('s4c.components.mensageria-filter')
        .factory('MensageriaFilter', MensageriaFilter);

    MensageriaFilter.$inject = [
        'MensageriaService',
        'localize'
    ];

    function MensageriaFilter() {
        var service = {
            _filtros: {},
            getInstance: getInstance
        };

        function getInstance(id) {
            if (!service._filtros[id]) {
                service._filtros[id] = new Service()
            }

            return service._filtros[id];
        }

        function Service() {
            var self = this;

            angular.extend(self, {
                on: on,
                filters: {},
                trigger: trigger,
                filtrar: filtrar,
                events: {
                    'filterChanged': []
                }
            });

            function on(eventName, callback) {
                self.events[eventName].push(callback);
            }

            function trigger(eventName) {
                _.each(self.events[eventName], function (callback) {
                    callback();
                });
            }

            /**
             * @method filtrar
             * @param {*} usuario 
             */
            function filtrar(usuario) {
                if (self.filters.departamento > -1) {
                    if (usuario.DepartamentoId !== self.filters.departamento) {
                        return false
                    }
                }

                if (self.filters.perfil > -1) {
                    if (!_.includes(usuario.perfis, self.filters.perfil)) {
                        return false;
                    }
                }

                if (self.filters.status > -1) {
                    if (usuario.online != self.filters.status) {
                        return false;
                    }
                }

                return true;
            }
        }

        return service;
    }
}());