Source: directives/rotas-unificadas-filter/rotas-unificadas-filter.service.js

/**
 * @ngdoc directives
 * @name RotasUnificadasFilterService
 * @module s4c.directives.rotasunificadasFilter.RotasUnificadasFilterService
 *
 * @description
 * `RotasUnificadasFilterService` Componente para acesso a api do backend e/ou comunicação entre controllers
 * 
 * 
 */
(function () {
    angular.module('s4c.components.rotas-unificadas')
        .factory('RotasUnificadasFilter', [RotasUnificadasFilter]);

    function RotasUnificadasFilter() {

        var service = {
            _filtros: {},
            getInstance: getInstance,
            limparFiltros: limparFiltros
        };

        /**
         * @method getInstance
         * @param {*} id 
         */
        function getInstance(id) {
            if (!service._filtros[id]) {
                service._filtros[id] = new Service()
            }

            return service._filtros[id];
        }

        /**
         * @method limparFiltros
         */
        function limparFiltros() {
            _.each(service._filtros, function (filtro) {
                _.each(filtro.categorias, function (categoria) {
                    categoria.ativo = false;
                });
            });
        }

        function Service() {
            var self = this;

            angular.extend(self, {
                on: on,
                trigger: trigger,
                events: {
                    'filterChanged': [],
                    'rotaUnificadasRemoved': [],
                    'tempoRotaAtualiazado': [],
                    'rotas': []
                }
            });

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

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

        return service;
    }
}());