/**
* @ngdoc directives
* @name MensageriaUsuario
* @module s4c.directives.mensageria.chatusuario.MensageriaUsuario
*
* @description
* `MensageriaUsuario` Controller da funcionalidade de conversas entre Usuários no módulo de mensageria
*
*
*/
(function () {
angular.module('s4c.components.collaboration')
.directive('mensageriaChatUsuario', MensageriaUsuario);
MensageriaUsuario.$inject = [
'$mdDialog',
'MensageriaService',
'AuthService',
'MensageriaChatUsuario',
'FileUploader',
'API_ENDPOINT',
'$sce'
];
function MensageriaUsuario($mdDialog, MensageriaService, AuthService, MensageriaChatUsuario, FileUploader, API_ENDPOINT, $sce) {
return {
restrict: 'E',
templateUrl: 'app/directives/mensageria/chat-usuario/chat-usuario.html',
replace: true,
scope: {
usuario: '=usuario',
ativo: '=ativo'
},
controller: function ($scope) {
$scope.loadMoreMessages = function () {
return MensageriaService.obterMensagensDoUsuario($scope.usuario.id, $scope.page++).then(function (mensagens) {
$scope.mensagens = mensagens;
$scope.addMarkers();
});
};
var uploader = $scope.uploader = new FileUploader(),
uploadCallbackQueue = [];
uploader.clearQueue();
$scope.uploader.filters.push({
'name': 'enforceMaxFileSize',
'fn': function (item, evt) {
var megaByte = parseInt(item.size / 1000000) + "MB";
if (item.size <= 26214400) {
return item.size <= 26214400
} else {
$mdDialog
.show($mdDialog.alert()
.title('Tamanho de arquivo ultrapassado')
.content('O limite do tamanho de arquivos para upload é de 25MB. Seu arquivo possui ' + megaByte + ' - limite ultrapassado!')
.ok('OK'))
return item.size <= 26214400
}
}
});
$scope.uploader.onCompleteItem = function (item, response) {
$scope.mensagem = response;
};
$scope.uploader.onAfterAddingFile = function (item, evt, arquivo) {
item.novoNome = item.file.name;
enviarArquivo(item.file.name);
}
function ext(filename) {
var index = _.lastIndexOf(filename, '.');
return filename.substring(index, filename.length);
}
$scope.uploader.onBeforeUploadItem = function (item) {
item.url = uploader.url;
var token = window.sessionStorage.getItem('s4cToken');
var tokenObj = JSON.parse(token);
item.headers = {
'Authorization': 'Bearer ' + tokenObj.access_token
};
item.file.name = item.novoNome + ext(item.file.name);
};
$scope.uploader.onProgressItem = function (fileItem, progress) {
console.info('onProgressItem', fileItem, progress);
};
$scope.uploader.onCompleteAll = function (result) {
_.each(uploadCallbackQueue, function (callback) {
callback();
});
};
/**
*
* @method enviarArquivo
*
* @param {*} nomeArquivo
*/
function enviarArquivo(nomeArquivo) {
$scope.isUploading = true;
uploader.url = '/mensagem/usuarioFile/' + $scope.usuario.id;
uploader.uploadAll();
uploadCallbackQueue.push(function () {
$scope.isUploading = false;
$scope.arquivosPraSubir = false;
$scope.mensagem = ''
});
}
$scope.uploader.alias = 'arquivo';
$scope.uploader.removeAfterUpload = true;
},
link: function ($scope, $elem, $attrs) {
angular.extend($scope, {
isUploading: false,
desativar: desativar,
enviarMensagem: enviarMensagem,
me: AuthService.user.info,
mensagem: '',
mensagens: [],
apagarMensagens: apagarMensagens,
abrirUpload: abrirUpload
});
$scope.toTrustedHTML = function (html) {
return $sce.trustAsHtml(html);
}
$scope.input = $elem.find('input.uploadArquivo');
// insere um delimitador de tempo
$scope.addMarkers = function () {
$scope.mensagens.forEach(function (obj) {
obj.groupDate = moment(obj.createdAt).format('YYYY-MM-DD');
obj.createdAt = moment(obj.createdAt).format('HH:mm');
});
};
$scope.$watch('usuario', function () {
if ($scope.usuario && $scope.usuario.id) {
$scope.page = ($scope.page ? $scope.page : 1);
MensageriaService.obterMensagensDoUsuario($scope.usuario.id, $scope.page).then(function (mensagens) {
$scope.mensagens = mensagens;
$scope.addMarkers();
setTimeout(function () {
$('#mensagens').animate({
scrollTop: $('#mensagens')[0].scrollHeight + 100
}, 10);
}, 500);
});
}
});
//MensageriaChatUsuario.getInstance();
/**
* @method mensagensSelecionadas
*/
MensageriaChatUsuario.on('mensagensSelecionadas', function (mensagens) {
$scope.mensagensSelecionadas = mensagens;
});
/**
* @method apagarMensagens
*/
function apagarMensagens() {
var mensagens = $scope.mensagensSelecionadas;
mensagens.map(function (mensagem) {
MensageriaService.deletarMensagem(mensagem.id)
.then(function (response) {
MensageriaChatUsuario.trigger('mensagemApagada', mensagem);
});
});
}
/**
* @method mensagemApagada
*
*/
MensageriaChatUsuario.on('mensagemApagada', function (mensagem) {
var indexMsg = _.findIndex($scope.mensagens, function (msg) {
return msg.id === mensagem.id;
});
if (indexMsg > -1) {
$scope.mensagens.splice(indexMsg, 1);
}
});
/**
*
* @method novaMensagem
*
*/
MensageriaChatUsuario.on('novaMensagem', function (mensagem) {
MensageriaService.obterMensagensDoUsuario($scope.usuario.id, $scope.page).then(function (mensagens) {
$scope.mensagens = mensagens;
mensagem.groupDate = moment(mensagem.createdAt).format('YYYY-MM-DD');
mensagem.createdAt = moment().format('HH:mm');
var indexMsg = _.findIndex($scope.mensagens, function (msg) {
return msg.id === mensagem.id;
});
if (indexMsg == -1) {
$scope.mensagens.push(mensagem);
if ($('#mensagens')[0]) {
$('#mensagens').animate({
scrollTop: $('#mensagens')[0].scrollHeight + 100
}, 800);
}
}
});
/*
mensagem.groupDate = moment(mensagem.createdAt).format('YYYY-MM-DD');
mensagem.createdAt = moment().format('HH:mm');
if (mensagem.Usuario.id === $scope.usuario.id) {
$scope.mensagens.push(mensagem);
if($('#mensagens')[0]){
$('#mensagens').animate({
scrollTop: $('#mensagens')[0].scrollHeight + 100
}, 800);
}
} else if (mensagem.Usuario.id === $scope.me.id) {
$scope.mensagens.push(mensagem);
if($('#mensagens')[0]){
$('#mensagens').animate({
scrollTop: $('#mensagens')[0].scrollHeight + 100
}, 800);
}
}
*/
});
/**
* @method abrirUpload
*/
function abrirUpload() {
$("#chat_usuario_arquivo").click();
}
/**
* @method removerArquivo
*/
function removerArquivo() {
$scope.mensagem.arquivo = {};
}
/**
* @method contains
*
* @param {*} mensagem
*/
function contains(mensagem) {
var selectedMsg;
angular.forEach($scope.mensagens, function (msg) {
if (msg.id == mensagem.id) {
selectedMsg = msg;
}
});
return selectedMsg;
}
/**
* @method desativar
*/
function desativar() {
$scope.ativo = false;
};
/**
* @method enviarMensagem
*/
function enviarMensagem() {
// Verificação de mensage vazia:
$scope.mensagem = $scope.mensagem.replace(/^\s+|\s+$/g, '');
if ($scope.mensagem.length > 0) {
MensageriaChatUsuario.enviarMensagem($scope.usuario, $scope.mensagem);
//$scope.mensagens.push($scope.mensagem);
$scope.mensagem = '';
}
}
}
}
}
}());