/**
* @ngdoc controller
* @name AdminTelegramGruposCtrl
* @module s4c.controllers.AdminTelegramGruposCtrl
*
* @description
* `AdminTelegramGruposCtrl` Controller da administração dos grupos do telegram
*
*
*/
(function () {
'use strict';
function AdminTelegramGruposCtrl($scope, TelegramService, $q, $mdDialog) {
$scope.groupNewActive = false;
$scope.groupViewActive = false;
$scope.groupEditActive = false;
$scope.usuarios = {};
$scope.grupos = {};
$scope.grupo = {};
$scope.res = $scope.$root.res;
/**
* @method _selectedGroup
* @param {*} grupo
*/
function _selectedGroup(grupo) {
$scope.grupos = _.map($scope.grupos, function (grupo) {
grupo.isActive = false;
return grupo;
});
grupo.isActive = true;
}
/**
* @method _userGroupState
* @param {*} usuario
* @param {*} grupo
*/
function _userGroupState(usuario, grupo) {
var _usuarioNoGrupo = _.find(grupo.Usuarios, {
'id': usuario.id
});
if (_usuarioNoGrupo) {
usuario.isSelected = true;
} else {
usuario.isSelected = false;
}
return usuario;
}
/**
* @method getGroups
*/
TelegramService.getGroups().then(function (grupos) {
grupos = _.map(grupos, function (grupo) {
return grupo = _.extend(grupo, {
_originalState: grupo
});
});
$scope.grupos = _.filter(grupos, grupo => { return grupo.tipo !== 2 });
});
TelegramService.getUsers().then(function (usuarios) {
$scope.usuarios = usuarios;
});
/**
* @method deleteGroup
* @param {*} id
*/
$scope.deleteGroup = function deleteGroup(id) {
var confirm = $mdDialog.confirm()
.title('Tem certeza que deseja deletar?')
.content('Esta ação é irreversível.')
.ariaLabel('Deletar Grupo Telegram')
.ok('Sim')
.cancel('Não')
.targetEvent(event);
$mdDialog.show(confirm).then(function () {
TelegramService.deleteGroup(id).then(function () {
$scope.groupNewActive = false;
$scope.groupViewActive = false;
$scope.groupEditActive = false;
$scope.grupos = $scope.grupos.filter(function (e) {
return e.id !== id;
});
});
});
};
/**
* @method editGroup
* @param {*} grupo
*/
$scope.editGroup = function editGroup(grupo) {
_selectedGroup(grupo);
$scope.groupNewActive = false;
$scope.groupViewActive = true;
$scope.groupEditActive = true;
$scope.grupo = grupo;
$scope.usuarios = _.map($scope.usuarios, function (usuario) {
return _userGroupState(usuario, grupo);
});
};
/**
* @method cancelEditGroup
*
*/
$scope.cancelEditGroup = function cancelEditGroup() {
$scope.groupNewActive = false;
$scope.groupViewActive = true;
$scope.groupEditActive = false;
// Reset the original state
var grupo = $scope.grupo._originalState;
var originalState = _.clone(grupo._originalState);
grupo._originalState = originalState;
$scope.grupo = grupo;
$scope.usuarios = _.map($scope.usuarios, function (usuario) {
return _userGroupState(usuario, grupo);
});
};
/**
* @method viewGroup
* @param {*} grupo
*/
$scope.viewGroup = function viewGroup(grupo) {
_selectedGroup(grupo);
$scope.groupNewActive = false;
$scope.groupViewActive = true;
$scope.groupEditActive = false;
$scope.grupo = grupo;
};
/**
* @method newGroup
*/
$scope.newGroup = function newGroup() {
$scope.groupViewActive = false;
$scope.groupEditActive = false;
$scope.groupNewActive = true;
$scope.grupo = {
_originalState: []
};
};
/**
* @method cancelNewGroup
*/
$scope.cancelNewGroup = function cancelNewGroup() {
$scope.groupViewActive = false;
$scope.groupEditActive = false;
$scope.groupNewActive = false;
$scope.grupo = {};
};
/**
* @method saveNewGroup
* @param {*} grupo
*/
$scope.saveNewGroup = function saveNewGroup(grupo) {
grupo.mensageria = 'telegram';
TelegramService.saveGroup(grupo).then(function (data) {
console.log(data);
data._originalState = data;
$scope.grupos.push(data);
$scope.viewGroup(grupo);
});
};
/**
* @method saveGroup
* @param {*} grupo
*/
$scope.saveGroup = function saveGroup(grupo) {
var selectedUsers = $scope.usuarios.filter(function (usuario) {
return usuario.isSelected;
});
var unselectedUsers = $scope.usuarios.filter(function (usuario) {
return !usuario.isSelected;
});
var addedUsers = _.filter(selectedUsers, function (selectedUser) {
return !_.find(grupo._originalState.Usuarios, { 'id': selectedUser.id });
});
var deletedUsers = _.filter(unselectedUsers, function (selectedUser) {
return _.find(grupo._originalState.Usuarios, { 'id': selectedUser.id });
});
// Track removed users
// Track added users
// Create a queue to save deleted and added users
var processGroup = $q.all([
TelegramService.deleteUsersFromGroup(grupo.id, deletedUsers),
TelegramService.addUsersToGroup(grupo.id, addedUsers)
]);
// Update the list of users
processGroup.then(function (result) {
var deletedUsersReq = result[0],
addedUsersReq = result[1];
// Update currently active group original state
TelegramService.getUsersFromGroup(grupo.id).then(function (users) {
grupo._originalState.Usuarios = users;
});
});
};
}
angular.module('s4c.telegram')
.controller('AdminTelegramGruposCtrl', AdminTelegramGruposCtrl);
AdminTelegramGruposCtrl.$inject = ['$scope', 'TelegramService', '$q', '$mdDialog'];
}());