Source: directives/legenda-incidente/legenda-incidente.service.js

/**
 * @ngdoc directives
 * @name LegendaIncidente
 * @module s4c.directives.legendaincidente.legendaincidenteService
 *
 * @description
 * `LegendaIncidenteFilter` exibe informações sobre a Legenda de Incidentes
 *
 *
 *
 */
(function () {
    angular.module('s4c.components.legenda-incidente')
        .factory('LegendaIncidenteFilter', LegendaIncidenteFilter);

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

        /**
         * Obtem uma instância do Service
         * 
         * @method getInstance
         * 
         * @param id {String}
         *
         */         
        function getInstance(id) {
            if (!service._filtros[id]) {
                service._filtros[id] = new Service()
            }

            return service._filtros[id];
        }

        /**
         * Limpa os filtros
         * 
         * @method limparFiltros
         *
         *
         */           
        function limparFiltros() {
            _.each(service.filtros, function (filtro) {
                filtro.statuses = [];
            });
        }

        function Service() {
            var self = this;

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

            /**
             * Listener de eventos
             * 
             * @method on
             *
             * @param eventName {String}
             * @param callback {Function} 
             *
             */              
            function on(eventName, callback) {
                self.events[eventName].push(callback);
            }

            /**
             * Dispara um evento
             * 
             * @method trigger
             *
             * @param eventName {String}
             * @param args {String} 
             *
             */              
            function trigger(eventName, args) {
                _.each(self.events[eventName], function (callback) {
                    callback(args);
                });
            }

            /**
             * Realiza o filtro de Incidentes
             * 
             * @method filtrarIncidente
             *
             * @param incidente {Object} 
             *
             */             
            function filtrarIncidente(incidente) {
                if (!incidente.status) {
                    return false;
                }

                return _.includes(self.statuses, incidente.status);
            }
        }


        return service;
    }
}());