/**
* @ngdoc directives
* @name buscaUsuariosTelegram
* @module s4c.directives.buscausuariostelegram.buscaUsuariosTelegram
*
* @description
* `buscaUsuariosTelegram` Caixa de busca do sistema, gerencia os resultados da barra
* de busca.
*
*@example
* <s4c-busca-usuarios-telegram>
* </s4c-busca-usuarios-telegram>
*/
(function () {
'use strict';
function buscaUsuariosTelegram($scope, $q, TelegramService, Departamento, Perfil, BuscaUsuariosTelegramManager) {
$scope.res = $scope.$root.res;
$scope.list = [];
$scope.filters = {};
$scope.filters.tipo = '';
$scope.filters.departamento = 0;
$scope.filters.perfil = 0;
$scope.filters.nome = '';
/**
* Cancela o compartilhamento de mensagem com os usuários do Telegram
*
* @method desativar
*
*
*
*/
$scope.desativar = function () {
$scope.ativo = false;
};
/**
* Listener para o atributo ativo
*
* @method watch
*
* @param newVal {String} Novo Valor
* @param newVal {String} Valor antigo
*/
$scope.$watch('ativo', function (newVal, oldVal) {
if (oldVal === false && newVal === true) {
var lists = $q.all([
TelegramService.getGroups(),
TelegramService.getUsers()
]);
lists.then(function (list) {
var groups = filterLists(list[0], $scope.usuariosSelecionados);
var users = filterLists(list[1], $scope.usuariosSelecionados);
groups = _.filter(groups, function (o) {
return o.Usuarios.length > 0;
});
$scope.list = users.concat(groups);
});
}
});
/**
* Abre a janela pra compartilhamento de mensagem com os usuários do Telegram
*
* @method sendMessageOptional
*
*
*/
$scope.sendMessageOptional = function () {
$scope.isCompartilharActive = true;
};
/**
* Fecha o componente
*
* @method fechar
*
*
*/
$scope.fechar = function () {
$scope.isCompartilharActive = false;
BuscaUsuariosTelegramManager['messageOptional'] = '';
}
/**
* Salva os usuários do telegram na lista de usuários
*
* @method saveMembers
*
*
*/
$scope.saveMembers = function () {
BuscaUsuariosTelegramManager['messageOptional'] = $scope.compartilharTexto || '';
$scope.usuariosSelecionados = _.filter($scope.list, { selected: true, isUser: true });
$scope.gruposSelecionados = _.filter($scope.list, { selected: true, isGroup: true });
$scope.selecaoConcluida = true;
$scope.isCompartilharActive = false;
$scope.desativar();
};
/**
* Faz um filtro na lista passada como parâmetro
*
* @method filterLists
*
* @param lists {Array} Lista
* @param listBase {Array} Lista
*/
function filterLists(lists, listBase) {
_.forEach(lists, function (list) {
list.isGroup = ((list.hasOwnProperty('Usuarios')) ? true : false);
list.isUser = ((list.hasOwnProperty('GrupoMensageriaExternas')) ? true : false);
var foundList = _.find(listBase, function (o) {
return o.id == list.id;
});
list.selected = ((foundList !== undefined) ? true : false);
});
if ($scope.filtrarUsuarios) {
return _.filter(lists, function (usuario) {
return usuario.isGroup || $scope.filtrarUsuarios({ usuario: usuario });
});
}
return lists;
}
$scope.tipos = [{
label: 'Tipo',
value: ''
}, {
label: 'Grupo',
value: 'isGroup'
}, {
label: 'Usuário',
value: 'isUser'
}];
Departamento.getAgencias().then(function (departamentos) {
$scope.departamentos = _.map(departamentos, function (departamento) {
return {
label: departamento.nome,
value: departamento.id
}
});
$scope.departamentos.unshift({
label: 'Deptos',
value: 0
})
})
Perfil.getPerfis().then(function (perfis) {
$scope.perfis = _.map(perfis, function (perfil) {
return {
label: perfil.nome,
value: perfil.id
}
});
$scope.perfis.unshift({
label: 'Perfis',
value: 0
});
});
/**
* Executa o filtro nas lista
*
* @method filterList
*
*
*/
$scope.filterList = function () {
return _.filter($scope.list, function (item) {
return (!$scope.filters.tipo || item[$scope.filters.tipo])
&& (!$scope.filters.departamento || item.DepartamentoId == $scope.filters.departamento)
&& (!$scope.filters.perfil || _.chain(item.Perfils)
.map('id')
.includes($scope.filters.perfil)
.value())
});
}
}
buscaUsuariosTelegram.$inject = ['$scope', '$q', 'TelegramService', 'Departamento', 'Perfil', 'BuscaUsuariosTelegramManager'];
angular.module('s4c.components.buscaUsuariosTelegram', [])
.directive('s4cBuscaUsuariosTelegram', function () {
return {
restrict: 'EA',
templateUrl: 'app/directives/busca-usuarios-telegram/busca-usuarios-telegram.html',
replace: true,
scope: {
'ativo': '=',
'usuariosSelecionados': '=',
'gruposSelecionados': '=',
'selecaoConcluida': '=',
'filtrarUsuarios': '&'
},
controller: buscaUsuariosTelegram
};
});
}());