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

/**
 * @ngdoc directives
 * @name MensageriaFilter
 * @module s4c.directives.MensageriaFilter.mensageriaFilter
 *
 * @description
 * `MensageriaFilter` Gerenciamento do filtro do módulo de mensageria 
 * 
 */
(function () {
    angular.module('s4c.components.mensageria-filter', [])
        .directive('mensageriaFilter', MensageriaFilter);

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

    function MensageriaFilter(MensageriaFilter, MensageriaService, Departamento) {
        return {
            restrict: 'E',
            templateUrl: 'app/directives/mensageria-filter/mensageria-filter.html',
            replace: true,
            scope: {},
            link: function ($scope, $elem, $attrs) {

                angular.extend($scope, {
                    filters: MensageriaFilter.getInstance($attrs.id).filters,
                    statuses: [{
                        value: -1,
                        label: 'Status'
                    }, {
                        value: 0,
                        label: 'Offline'
                    }, {
                        value: 1,
                        label: 'Online'
                    }],
                    departamentos: [],
                    perfis: [],
                    carregarPerfil: carregarPerfil,
                    res: $scope.$root.res
                })

                $scope.$watch('[filters.status, filters.departamento, filters.perfil]', function () {
                    MensageriaFilter.getInstance($attrs.id).trigger('filterChanged');
                });

                Departamento.getAgencias().then(function (departamentos) {
                    $scope.departamentos = _.map(departamentos, function (departamento) {
                        return {
                            value: departamento.id,
                            label: departamento.nome
                        };
                    });
                    $scope.departamentos.unshift({
                        value: -1,
                        label: 'Departamento'
                    });
                    $scope.filters.departamento = -1;
                });

                //$scope.filters.perfil;

                /**
                 * @method carregarPerfil
                 */
                function carregarPerfil() {
                    MensageriaService.getPerfisByDepartamento($scope.filters.departamento)
                        .then(function (perfis) {
                            $scope.perfis = _.map(perfis, function (perfil) {
                                return {
                                    value: perfil.id,
                                    label: perfil.nome
                                };
                            });
                            $scope.perfis.unshift({
                                value: -1,
                                label: 'Perfil'
                            });
                            $scope.filters.perfil = $scope.perfis[0].value;
                        });
                }

            }
        }
    }
}());