/**
* @ngdoc directives
* @name legendaCalendarioOlimpico
* @module s4c.directives.legendaCalendarioOlimpico.legendaCalendarioOlimpicoService
*
* @description
* `LegendaIncidenteFilter` exibe informações sobre a Legenda do Calendário Olímpico
*
*
*/
(function () {
angular.module('s4c.components.legenda-calendario-olimpico')
.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;
}
}());