/**
* @ngdoc directives
* @name Mensagens
* @module s4c.directives.mensageria.mensagens.Mensagens
*
* @description
* `MensageriaMensagens` Gerenciamento das mensagens do módulo de mensageria
*
*/
(function () {
angular.module('s4c.components.collaboration')
.directive('mensageriaMensagens', MensageriaMensagens);
MensageriaMensagens.$inject = [
'ZonaObservacaoService',
'MapaManager',
'CamadasService',
'DetalhamentoManager',
'MensageriaService',
'DetalhamentoService',
'BaseConhecimentoService',
'PlanejamentoService',
'AuthService',
'MensageriaChatUsuario',
'MensageriaChatGrupo',
'$mdDialog',
'$http',
'$rootScope',
'$sce'
]
function MensageriaMensagens(
ZonaObservacaoService,
MapaManager,
CamadasService,
DetalhamentoManager,
MensageriaService,
DetalhamentoService,
BaseConhecimentoService,
PlanejamentoService,
AuthService,
MensageriaChatUsuario,
MensageriaChatGrupo,
$mdDialog,
$http,
$rootScope,
$sce
) {
return {
restrict: 'E',
templateUrl: 'app/directives/mensageria/mensagens/mensagens.html',
replace: true,
scope: {
mensagens: '=',
isGrupo: '=',
scroll: '='
},
link: function ($scope, elem, attrs) {
$scope.res = $scope.$root.res;
verificaMensagensCarregadas();
angular.extend($scope, {
acaoLink: acaoLink,
isRead: isRead,
lerTodasMensagens: lerTodasMensagens,
me: AuthService.user.info,
scrolled: scrolled,
scroll_glue: scroll_glue,
glued: true,
download: download,
apagarMensagem: apagarMensagem,
isHorizontal: isHorizontal
});
/**
* @method apagarMensagem
* @param {*} mensagem
*/
function apagarMensagem(mensagem) {
MensageriaService.deletarMensagem(mensagem.id)
.then(function (response) {
MensageriaChatUsuario.trigger('mensagemApagada', mensagem);
MensageriaChatGrupo.trigger('mensagemApagada', mensagem);
});
}
$scope.toTrustedHTML = function (html) {
return $sce.trustAsHtml(html);
}
/**
* @method thumbnail
* @param {*} arquivo
*/
function thumbnail(arquivo) {
return "/uploads/" + arquivo.thumbnail;
}
/**
* @method carregarAudio
*/
$scope.carregarAudio = function (mensagem) {
console.log(mensagem.arquivo);
mensagem.arquivo.exibe = true;
mensagem.arquivo.path = '/uploads/' + mensagem.arquivo.path
}
/**
* @method isHorizontal
* @param {*} nomeArquivo
*/
function isHorizontal(nomeArquivo) {
if (nomeArquivo.indexOf('horiz') != -1) {
return true;
}
return false;
}
/**
* @method download
* @param {*} fileId
* @param {*} fileName
*/
function download(fileId, fileName) {
$http.get('/filemanager/checkexistence/' + fileId)
.then(function (response) {
if (response.data) {
MensageriaService.getAttachedFile(fileId)
.then(function (data) {
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
var file = new Blob([data], { type: 'application/octet-stream' });
var fileURL = URL.createObjectURL(file);
a.href = fileURL;
a.download = fileName;
a.click();
});
}
else {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_ERRO'))
.content(response.data.message)
.ok($scope.res('COMUM_OK')));
}
}, function (err) {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_ERRO'))
.content(err.data.message)
.ok($scope.res('COMUM_OK')));
});
}
function verificaMensagensCarregadas() {
/*if($scope.mensagens ==null || $scope.mensagens.length==0 ){
setTimeout(function(){
verificaMensagensCarregadas();
}, 500);
}else{
$scope.glued = false;
}*/
}
/**
* @method scroll_glue
*/
function scroll_glue() {
$scope.glued = true;
setTimeout(function () {
$scope.glued = false;
}, 500);
}
$scope.hideMessage = {};
$scope.toogleMessage = function (key) {
if ($scope.hideMessage[key]) {
$scope.hideMessage[key] = false;
} else {
$scope.hideMessage[key] = true;
}
};
$scope.toggleSelected = function (mensagem) {
mensagem.selected = !mensagem.selected;
$scope.glued = false;
};
/**
* @method $watch
*/
$scope.$watch('mensagens', function () {
_.chain($scope.mensagens)
.reject('link')
.map(tratarMensagem)
.value();
$scope.selectedMessages = _getSelectedMessages($scope.mensagens);
if ($scope.selectedMessages == null || $scope.selectedMessages.length == 0) {
scroll_glue();
}
}, true);
$scope.$watch('selectedMessages', function (mensagens) {
MensageriaChatUsuario.trigger('mensagensSelecionadas', mensagens);
});
/**
* @method scrolled
*/
function scrolled() {
return $scope.glued;
}
/**
* @method lerTodasMensagens
*/
function lerTodasMensagens() {
//$scope.scrolled = true;
angular.forEach($scope.mensagens, function (mensagem) {
if (mensagem.lida == null) {
mensagem.lida = [$scope.me.id];
} else {
mensagem.lida.push($scope.me.id);
}
});
}
/**
* @method isRead
* @param {*} mensagem
*/
function isRead(mensagem) {
var messageRead = false;
angular.forEach(mensagem.lida, function (id) {
if (id == $scope.me.id) {
messageRead = true;
}
});
return messageRead;
}
/**
* @method _getSelectedMessages
* @param {*} mensagens
*/
function _getSelectedMessages(mensagens) {
var selectedMessages = mensagens.filter(function (mensagem) {
if (mensagem.selected) return true;
});
return selectedMessages;
}
var tiposObjeto = {
incidente: 'incidente',
baseConhecimento: 'base de conhecimento',
planejamento: 'planejamento',
zonaObservacao: 'zona de observação',
rota: 'rota'
};
var tipos = {
'incidente': function (id) {
DetalhamentoService.pegarIncidente(id)
.then(function (incidente) {
incidente.geojson = JSON.parse(incidente.geojson);
CamadasService.reloadIncidentes(true);
MapaManager.voarParaObjeto(incidente);
}, function (err) {
$mdDialog.show($mdDialog.alert()
.title($scope.res('COMUM_ERRO'))
.content($scope.res('LINK_COMPARTILHADO_NAO_ENCONTRADO'))
.ok($scope.res('COMUM_OK')));
});
},
'baseConhecimento': function (id) {
BaseConhecimentoService.findById(id)
.then(function (bc) {
CamadasService.reloadBasesConhecimento(true);
DetalhamentoManager.voarParaObjeto(bc);
}, function (err) {
$mdDialog.show($mdDialog.alert()
.title($scope.res('COMUM_ERRO'))
.content($scope.res('LINK_COMPARTILHADO_NAO_ENCONTRADO'))
.ok($scope.res('COMUM_OK')));
});
},
'planejamento': function (id) {
PlanejamentoService.getPlanejamento(id)
.then(function (plan) {
CamadasService.reloadPlanejamentos(true);
DetalhamentoManager.voarParaObjeto(plan);
}, function (err) {
$mdDialog.show($mdDialog.alert()
.title($scope.res('COMUM_ERRO'))
.content($scope.res('LINK_COMPARTILHADO_NAO_ENCONTRADO'))
.ok($scope.res('COMUM_OK')));
});
},
'zonaObservacao': function (id) {
ZonaObservacaoService.pegarZona(id)
.then(function (zo) {
CamadasService.reloadZonasObservacao(true);
DetalhamentoManager.voarParaObjeto(zo);
}, function (err) {
$mdDialog.show($mdDialog.alert()
.title($scope.res('COMUM_ERRO'))
.content($scope.res('LINK_COMPARTILHADO_NAO_ENCONTRADO'))
.ok($scope.res('COMUM_OK')));
});
},
'rota': function (id) {
}
};
/**
* @method acaoLink
* @param {*} tipoObjeto
* @param {*} id
*/
function acaoLink(tipoObjeto, id) {
tipos[tipoObjeto](id);
}
/**
* @method tratarMensagem
* @param {*} mensagem
*/
function tratarMensagem(mensagem) {
if (mensagem.mensagem && mensagem.mensagem.match(/\@@(.*)\@@/)) {
var labelAcessar = $scope.res('COMUM_ACESSAR');
var texto = mensagem.mensagem.match(/\@@(.*)\@@/)[1];
var partes = texto.split('|');
var tipoObjeto = partes[0];
var display = tiposObjeto[tipoObjeto];
var id = partes[1];
var linkTemplate = _.template('<a href="#" ng-click="acaoLink(\'${tipoObjeto}\', \'${id}\')"> ' + labelAcessar + ' ${display}</a>');
var link = linkTemplate({
tipoObjeto: tipoObjeto,
id: id,
display: display
});
mensagem.link = link;
mensagem.mensagem = mensagem.mensagem.replace('@@' + texto + '@@', '');
return mensagem;
}
}
}
}
}
}());