{% extends 'base.html.twig' %}
{% block stylesheets %}
<style>
.panel {
width: 100%;
position: absolute;
bottom: 0;
z-index: 999;
}
.panel-search {
display: none;
padding: 10px;
background-color: #dfdfdf;
height: 500px;
}
.panel::after {
content: '';
background-color: red;
opacity: 0.5;
}
#list-pacientes-search {
height: 540px;
overflow-y: scroll;
}
</style>
{% endblock %}
{% block body %}
<div class="body-chat">
<div class="container-fluid">
<div class="row clearfix">
<div class="col-lg-12">
<div class="card chat-app mt-4">
<div id="plist" class="people-list">
<div class="row mb-1">
<div class="col-lg-12">
<div class="list-button-container">
<div class="text-left btn btn-secundario btn-sm">
<i class="fa fa-external-link-square mr-1"></i>
<a target="_blank" href="{{ path('chat', { afiliadoId: afiliadoId, whabaId: whabaOrigen }) }}" style="cursor: pointer; color:inherit; text-decoration: none;" class="">Abrir en navegador web</a>
</div>
<div class="text-right">
<button id="btnNewConversation" class="btn btn-corporativo btn-sm">
<i class="fa fa-pencil mr-1"></i>
Nuevo chat
</button>
</div>
</div>
</div>
</div>
<div class="row mb-1">
<div class="col-lg-12">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">
<i class="fa fa-search"></i>
</span>
</div>
<input id="txtSearch" type="text" class="form-control" placeholder="Buscar chat activos..."/>
</div>
</div>
</div>
<ul class="list-unstyled chat-list mt-2 mb-0" id="listUserConversation">
{% include 'chat/listado-chat.html.twig' %}
</ul>
</div>
<div class="chat">
<div class="chat-header clearfix">
{% include 'chat/conversacion-header.html.twig' %}
</div>
<div class="chat-history">
{% if oHistorialMensajes is defined %}
{% include 'chat/conversacion.html.twig' %}
{% endif %}
</div>
<div class="chat-message clearfix">
<div class="input-group d-flex no-gutters flex-row align-items-stretch " >
<div class="flex-grow-1">
<input type="text" class="form-control" placeholder="Introduce el texto aquí..." id="txtText"/>
</div>
<div class="input-group-append col-md-auto">
<button id="btnAcction" disabled class="btn btn-corporativo" data-whabadestino="" data-centroid="" data-numtelefono="" data-template="false">
<i class="fa fa-plus"></i>
</button>
<button type="button" class="btn btn-corporativo btnSendMessage" disabled id="btnSendMessage" data-whabadestino="" data-centroid="" data-numtelefono="" data-template="false">
<i class="fa fa-send"></i>
</button>
</div>
</div>
</div>
</div>
<div class="panel">
<div class="panel-search">
<div class="row">
<div class="col-lg-12">
<div class="input-group">
<input type="text" class="form-control txtSearchPacienteNombre" placeholder="Nombre paciente" aria-label="Nombre paciente" aria-describedby="basic-addon2"/>
<input type="text" class="form-control txtSearcPacienteApellido" placeholder="Apellido paciente" aria-label="Apellido paciente" aria-describedby="basic-addon2"/>
<div class="input-group-append">
<button id="btnSearchPaciente" class="btn btn-corporativo" type="button">Buscar</button>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div id="loadSearch" class="spinner-border" role="status" style="display: none">
<span class="sr-only">Loading...</span>
</div>
<ul id="list-pacientes-search" class="list-group"></ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="loading-overlay">
<div id="loading-icon"></div>
</div>
{% include 'chat/componentes/modal-detail-paciente.html.twig' %}
{% include 'chat/componentes/modal-action-chat.html.twig' %}
{% endblock %}
{% block javascripts %}
<script type="text/javascript">
var isOpenSearch = false;
var emojioneAreaInstance;
$(document).keyup(function(e) {
if (e.which === 27) {
if (isOpenSearch) {
$(".panel-search").slideToggle('slow');
isOpenSearch = false;
}
}
});
$(document).click(function(e) {
if (isOpenSearch) {
if ($(e.target).is('div') || $(e.target).is('ul')) {
$(".panel-search").slideToggle('slow');
isOpenSearch = false;
}
}
});
// $("#txtSearch").on('keyup')
$(document).on('keyup', '#txtSearch', function() {
var li = $("li.listado-conversaciones");
var val = $(this).val().toLowerCase();
li.removeClass('hidden')
if (val && val.length > 0) {
li.each(function() {
var that = $(this);
var txt = that.text().toLowerCase();
// If searched term is not found into li's text
if (txt.indexOf(val) == -1) {
// Add .hidden class to the specific element
that.addClass('hidden');
}
});
}
});
$(document).on('click', '#btnNewConversation', function() {
if (!isOpenSearch) {
$(".panel-search").slideToggle('slow');
isOpenSearch = true;
}
});
$(document).on('click', '#btnSearchPaciente', function() {
var txtPacienteNombre = $(".txtSearchPacienteNombre").val();
var txtPacienteApellido = $(".txtSearcPacienteApellido").val()
var centroId = '{{ centroId }}';
var datos = {
pacienteNombre: txtPacienteNombre,
pacienteApellido: txtPacienteApellido,
centroId: centroId
};
$("#loadSearch").css({
'display': 'inline-block'
});
$("#list-pacientes-search").empty();
var html = '';
$.ajax({
url: '{{ path('get_search_pacientes') }}',
dataType: 'json',
type: 'POST',
data: datos,
success: function(data) {
if (data.aPacientes.length > 0) {
data.aPacientes.forEach(function(element) {
html += '<li class="list-group-item selecte-pacient-conversation" data-numtelefono="' + element.telefono + '" data-vcid="' + element.id + '" data-centroid="' + centroId + '">';
html += '<a style="cursor: pointer">' + element.nombre + ' ' + element.apellidos + ' - ' + element.telefono + ' - ' + element.categoryTelefono + '</a>';
html += '</li>';
});
$("#list-pacientes-search").empty().append(html);
$("#loadSearch").css({
'display': 'none'
});
}
}
})
});
/* $(document).on('click', '.selecte-pacient-conversation', function() {
var centroid = $(this).data('centroid');
var numtelefono = $(this).data('numtelefono');
forceDatabaseUpdate(centroid, numtelefono);
initConversation(centroid, numtelefono);
$(".panel-search").slideToggle('slow');
isOpenSearch = false;
}); */
$(document).on('click', '.selecte-pacient-conversation', async function() {
var centroid = $(this).data('centroid');
var numtelefono = $(this).data('numtelefono');
await forceDatabaseUpdate(centroid, numtelefono);
initConversation(centroid, numtelefono);
$(".panel-search").slideToggle('slow');
isOpenSearch = false;
});
$(document).on('click', '.listado-conversaciones', function() {
var centroId = $(this).data('centroid');
var numTelefono = $(this).data('numtelefono');
$(".listado-conversaciones").removeClass('active-chat');
$(this).addClass('active-chat');
initConversation(centroId, numTelefono);
});
/* function forceDatabaseUpdate(centroid, numtelefono) {
$.ajax({
url: '{{ path('force_database_update') }}'+ '/' + numtelefono + '/' + centroid,
dataType: 'json',
success: function(data) {
// Handle successful response here
},
error: function(xhr, status, error) {
// Handle error response here
}
});
} */
function forceDatabaseUpdate(centroid, numtelefono) {
// Show the loading overlay and disable all clicks
$('#loading-overlay').show();
$('body').addClass('disable-clicks');
return new Promise(function(resolve, reject) {
$.ajax({
url: '{{ path('force_database_update') }}'+ '/' + numtelefono + '/' + centroid,
dataType: 'json',
success: function(data) {
// Hide the loading overlay and re-enable clicks on success
$('#loading-overlay').hide();
$('body').removeClass('disable-clicks');
$(".listado-conversaciones").removeClass('active-chat');
// Call the resolve function with the returned data
resolve(data);
},
error: function(xhr, status, error) {
// Hide the loading overlay and re-enable clicks on error
$('#loading-overlay').hide();
$('body').removeClass('disable-clicks');
// Call the reject function with the error information
reject(error);
}
});
});
}
function initConversation(centroId, numTelefono) {
var whabaOrigen = '{{ whabaOrigen }}';
$.ajax({
url: '{{ path('get_conversacion', {'whabaOrigenId': whabaOrigen}) }}/' + numTelefono + '/' + centroId,
dataType: 'json',
success: function(data) {
$(".chat-header").empty().append(data.viewCabecera);
$(".chat-history").empty().append(data.viewConversacion);
/*$(".chat-history").animate({
scrollTop: $(".chat-history").get(0).scrollHeight
}, 2000);*/
$(".chat-history").scrollTop($(".chat-history").get(0).scrollHeight);
$(".btnSendMessage").data('whabadestino', whabaOrigen).data('centroid', centroId).data('numtelefono', numTelefono);
$(".badge-" + numTelefono + '-' + centroId).remove();
// Forzamos a colocar el "Hola", para la plantilla generica
// var valorPlantillaGenerica = (data.isTemplateSend) ? 'Hola' : '';
// $("#txtText").val(valorPlantillaGenerica);
$(".btnSendMessage").data('template', data.isTemplateSend);
/*if (!data.isTemplateSend) {
$("#btnAcction").prop('disabled', false);
}*/
$("#btnAcction").data('whabadestino', whabaOrigen) /* .data('vcid', vcId) */ .data('centroid', centroId).data('numtelefono', numTelefono).prop('disabled', false);
}
})
}
$(document).on('click', '#upload_link_document', function() {
$("#uploadFile").trigger('click');
});
$(document).on('change', '#uploadFile', function() {
console.log(this.files[0]);
var file = this.files[0];
var typeFile = file.type;
console.log(typeFile);
var aFormatsDocs = ['application/pdf', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/msword'];
var aFormatsImage = ['image/jpeg', 'image/png'];
var aFormatsVideo = ['video/mp4'];
var fileTipo = '';
var maxMbVideo = 16 * 1024 * 1024;
if (aFormatsDocs.indexOf(typeFile) !== -1) {
fileTipo = 'document';
} else if (aFormatsImage.indexOf(typeFile) !== -1) {
fileTipo = 'image';
} else if (aFormatsVideo.indexOf(typeFile) !== -1) {
fileTipo = 'video';
if (file.size > maxMbVideo) {
alert('Vídeo superior a tamaño soportado 16mb');
return false;
}
}
var centroid = $("#btnAcction").data('centroid');
var numTelefono = $("#btnAcction").data('numtelefono');
var formData = new FormData();
formData.append('file', file);
formData.append('typeFile', fileTipo);
formData.append('fileExtensionType', typeFile)
formData.append('whabadestino', $("#btnAcction").data('whabadestino'));
formData.append('centroId', $("#btnAcction").data('centroid'));
formData.append('numtelefono', $("#btnAcction").data('numtelefono'));
$("#actionSheet").modal('hide');
$.ajax({
url: '{{ path('upload_file_and_send') }}',
data: formData,
type: 'POST',
contentType: false,
processData: false,
async: true,
success: function(data) {
console.log(data)
$("ul[data-id='" + numTelefono + '_' + centroid + "']").append(data.view);
/*$(".chat-history").animate({
scrollTop: $(".chat-history").get(0).scrollHeight
}, 2000);*/
$(".chat-history").scrollTop($(".chat-history").get(0).scrollHeight);
$("#uploadFile").val(null);
}
})
});
let isSending2 = false;
$(document).ready(function() {
// Initialize emojioneArea for the txtText element
emojioneAreaInstance = $("#txtText").emojioneArea({
inline: true,
searchPlaceholder: "Buscar",
pickerPosition: "top"
})[0].emojioneArea;
var valor = ''; // Define the 'valor' variable outside the 'updateDisabledState' function
function updateDisabledState() {
var disabledButton = (valor.length > 0 && numtelefono !== '') ? false : true;
var numtelefono = $(".btnSendMessage").data('numtelefono');
$(".btnSendMessage").prop('disabled', disabledButton);
}
emojioneAreaInstance.val = function() {
return this.getText();
};
// Bind the keyup event to the emojioneArea instance
emojioneAreaInstance.on("keyup", function(editor, event) {
if (isSending2) {
return;
}
valor = emojioneAreaInstance.getText(); // Update the 'valor' variable within the keyup event handler
var charCode = (event.which) ? event.which : event.keyCode;
var numtelefono = $(".btnSendMessage").data('numtelefono');
updateDisabledState();
if (valor.length > 0 && numtelefono !== '') {
if (charCode === 13) {
isSending2 = true;
var whabaOrigen = $(".btnSendMessage").data('whabadestino');
var centroid = $(".btnSendMessage").data('centroid');
var isTemplate = $(".btnSendMessage").data('template');
var numTelefono = $(".btnSendMessage").data('numtelefono');
sendMessage(whabaOrigen, centroid, isTemplate, numTelefono);
setTimeout(() => {
isSending2 = false;
}, 3000); // Adjust the debounce time as needed
}
}
});
// Bind the emojibtn.click event to update the disabled state of the button
emojioneAreaInstance.on("emojibtn.click", function() {
updateDisabledState();
});
});
function setText(text) {
emojioneAreaInstance.setText(text);
updateDisabledState();
}
let isSending = false;
$(document).on('click', '.btnSendMessage', function() {
if (isSending) {
return;
}
isSending = true;
var whabaOrigen = $(this).data('whabadestino');
var centroid = $(this).data('centroid');
var isTemplate = $(this).data('template');
var numTelefono = $(this).data('numtelefono');
sendMessage(whabaOrigen, centroid, isTemplate, numTelefono);
setTimeout(() => {
isSending = false;
}, 3000); // Adjust the debounce time as needed
});
function sendMessage(whabaOrigen, centroid, isTemplate, numTelefono) {
var typeSend = '';
/*
if (isTemplate) {
typeSend = 'template';
} else {
typeSend = 'text';
}
*/
typeSend = 'text';
var datos = {
whabaOrigen: whabaOrigen,
centroid: centroid,
texto: emojioneAreaInstance.val(),
typeSend: typeSend,
telefonoDestino: numTelefono
};
$.ajax({
url: '{{ path('send_mensaje') }}',
type: 'POST',
data: datos,
dataType: 'json',
success: function(data) {
$("ul[data-id='" + numTelefono + '_' + centroid + "']").append(data.view);
/*
$(".chat-history").animate({
scrollTop: $(".chat-history").get(0).scrollHeight
}, 2000);
*/
$(".chat-history").scrollTop($(".chat-history").get(0).scrollHeight);
/* $("#txtText").val(''); */
emojioneAreaInstance.setText('');
$(".btnSendMessage").prop('disabled', true);
$("#btnAcction").prop('disabled', false);
/*
if (isTemplate) {
$(".btnSendMessage").data('template', false);
}
*/
}
});
}
$(document).on('click', '.btnDetailPaciente', function() {
var pacienteId = $(this).data('pacienteid');
var centroId = $(this).data('centroid');
$.ajax({
url: '{{ path('get_datos_paciente') }}/' + centroId + '/' + pacienteId,
dataType: 'html',
success: function(data) {
$("#modalDatosPaciente .modal-body").empty().append(data);
$("#modalDatosPaciente").modal('show');
}
});
});
$(document).on('click', '#btnAcction', function() {
$("#actionSheet").modal('show');
});
setInterval(callListadoPacientesChat, 30000);
function callListadoPacientesChat() { // Obtaining started chat
var numTelefono = (typeof $(".chat-listado").data('numtelefono') !== "undefined") ? $(".chat-listado").data('numtelefono') : '';
var url = (numTelefono !== '') ? '{{ path('get_listado_conversaciones', {'whabaOrigen': whabaOrigen}) }}/' + numTelefono : '{{ path('get_listado_conversaciones', {'whabaOrigen': whabaOrigen}) }}';
$.ajax({
url: url,
dataType: 'html',
success: function(data) {
$("#listUserConversation").empty().append(data);
}
});
}
setInterval(callLastMessage, 600);
function callLastMessage() {
var idenChat = $(".chat-listado").data('id');
var whabaid = $(".chat-listado").data('whabaid');
var extract = idenChat.split("_");
if (idenChat !== '') {
$.ajax({
url: '{{ path('get_last_message_chat') }}/' + extract[0] + '/' + extract[1],
type: 'POST',
data: {
whabaid: whabaid
},
dataType: 'json',
success: function(data) {
if (data.totalItems > 0) {
$("ul[data-id='" + idenChat + "']").append(data.view);
$(".chat-history").animate({
scrollTop: $(".chat-history").get(0).scrollHeight
}, 2000);
}
}
});
}
}
function downloadFile(conversacionId, classComponente, type) {
$.ajax({
url: '{{ path('get_content_media') }}/' + conversacionId,
dataType: 'json',
success: function(data) {
if (type === 'image') {
$("." + classComponente).attr('src', data.urlMedia);
$("." + classComponente + "-download").hide();
} else if (type === 'audio') {
var htmlAudio = '<audio controls>';
htmlAudio += '<source src="' + data.urlMedia + '" type="audio/ogg" >';
htmlAudio += '</audio>';
$(".audiodownloaded-" + conversacionId).empty().append(htmlAudio);
$("." + classComponente + "-download").hide();
} else if (type === 'video') {
var htmlVideo = '<video controls autoplay>';
htmlVideo += '<source src="' + data.urlMedia + '" type="video/mp4">';
htmlVideo += '</video>';
$(".videodownload-" + conversacionId).empty().append(htmlVideo);
$("." + classComponente + "-download").hide();
} else if (type === 'documento') {
var downloadLink = document.createElement('a');
window.open(data.urlMedia);
}
}
});
}
</script>
{% endblock %}