const inputMessage = document.querySelector('.footer-write');
const inputMessageAnexo = document.querySelector('#msgInputAnexo');
const sendFile = document.querySelector('.send-anexo');
const conn = new WebSocket(`wss://chat.dots.app.br?userId=${SESSION_DATA.id}&dbname=${SESSION_DATA.dots_acesso[0].pdo_dbname}`);
// const conn = new WebSocket(`ws://localhost:6969?userId=${SESSION_DATA.id}&dbname=${SESSION_DATA.dots_acesso[0].pdo_dbname}`);
conn.addEventListener('open', function (event) {
});
conn.addEventListener('message', e => {
listenServer(e.data);
if (($('#RightMenu').css('display') == 'none') || (GetLS('apt_display') == 'none')) {
const messageData = JSON.parse(e.data);
if (SESSION_DATA.dots_acesso[0].pdo_dbname == messageData.dbname && messageData.receiver.id == SESSION_DATA.id) {
notificationNewMessageWithoutChat(e.data);
// existsNotification();
}
}
});
conn.addEventListener('close', function (event) {
// if (event.wasClean) {
// console.log(`Conexão fechada de forma limpa, código: ${event.code}, motivo: ${event.reason}`);
// } else {
// console.error('Conexão fechada abruptamente');
// }
});
if (inputMessage) {
inputMessage.addEventListener('keypress', e => {
// pula linha
if (e.keyCode == 13 && e.shiftKey) return;
if (e.keyCode === 13) {
e.preventDefault();
const message = e.target.innerHTML.replace('
', '');
// mensagem vazia
if (e.target.innerHTML.trim() == "") return;
e.target.innerHTML = '';
sendMessage(message);
alteraHeightBodyMessage(e, true);
return false;
}
// muda height caixa de texto
alteraHeightBodyMessage(e);
});
// inputMessageAnexo.addEventListener('keypress', e => {
// if (e.keyCode == 13) {
// document.querySelector('.send-anexo').click();
// }
// });
// print
document.addEventListener('paste', (e) => {
var clipboardData = event.clipboardData || window.clipboardData;
if (clipboardData.items) {
for (var i = 0; i < clipboardData.items.length; i++) {
var item = clipboardData.items[i];
if (item.type.indexOf('image') !== -1) {
e.preventDefault();
var blob = item.getAsFile();
var reader = new FileReader();
reader.onload = function (event) {
var base64Image = event.target.result;
const file = new File([
new Blob([base64Image])
], "image.png", { type: 'image/png' });
insereArquivoSelecionadoNoChat([file], base64Image);
};
reader.readAsDataURL(blob);
} else if (item.type.indexOf('text') !== -1) {
e.preventDefault();
e.target.innerText = removerTagsHTML(clipboardData.getData('text'));
}
}
}
});
// sendFile.addEventListener('click', () => {
// const message = document.querySelector('#msgInputAnexo').value;
// document.querySelector(".preview-anexo > img").style = "display: none";
// document.querySelector(".preview-doc").style = "display: none";
// document.querySelector(".div-anexo").style = "display: none";
// $('.item-anexo').remove();
// sendMessage(message);
// })
}
function sendMessage(message) {
const { hours, minutes } = fnCurrentTime();
const { chatType } = JSON.parse(localStorage.getItem('openChat'));
const filesId = [];
const filesName = [];
const filesReferencia = [];
const session = getDataSession();
let idReply = 0;
let filesArrayChat = []; //adicionado por que o envio de arquivos está comentado e essa variável é criada no arquivo files.js que está comentado também
if ($('#container-reply').length > 0) idReply = $('#container-reply').data('idreply');
if (filesArrayChat.length > 0) {
filesArrayChat.forEach(file => {
sendFiles(file, '00000000000000').then(response => {
filesId.push(Number(response.arquivos_processados[0].id_arquivo));
filesName.push(response.arquivos_processados[0].caminho_curto);
filesReferencia.push(response.arquivos_processados[0].referencia_arquivo);
})
})
}
const interval = setInterval(() => {
if (filesArrayChat.length == filesId.length) {
const messageData = {
chatType,
sender: SENDER_DATA,
receiver: RECEIVER_DATA,
files: filesName.toString(),
nome_arquivo: filesReferencia.toString(),
filesId: `{${filesId.toString()}}`,
hour: `${hours}:${minutes}`,
reply: idReply,
dbname: session.dots_acesso[0].pdo_dbname,
message
};
clearInterval(interval);
filesArrayChat = [];
conn.send(JSON.stringify(messageData));
}
}, 10);
}
// monitoring system events
function listenServer(request) {
const messageData = JSON.parse(request);
const { chatId, chatType } = JSON.parse(localStorage.getItem('openChat'));
const session = getDataSession();
if (session.dots_acesso[0].pdo_dbname == messageData.dbname) {
// user online
if (messageData.status == 'online') getUsersOnline(messageData.userId);
// user offline
if (messageData.status == 'offline' && messageData.userId != SESSION_DATA.id) getUsersOffline(messageData.userId);
// reação e exclusão
if (messageData.type == 'reaction' || messageData.type == 'remove') getMessageId(messageData.messageId);
if (messageData.type == 'messageViewed' && messageData.senderId == SESSION_DATA.id && messageData.receiverId == chatId) {
$('.messageViewed').css({ 'color': '#30c4c9' });
}
if (messageData.type == 'naoLida') {
verificaMensagensNovas();
// existsNotification();
}
// new message
if (messageData.hour) {
const getAllMessageDates = document.querySelectorAll('.date-message');
// const lastMessageDate = getAllMessageDates[getAllMessageDates.length - 1] ? getAllMessageDates[getAllMessageDates.length - 1].id.split('date-')[1] : "";
const { year, month, date, hours, minutes, seconds } = fnCurrentTime();
const today = `${year}-${month}-${date} ${hours}:${minutes}:${seconds}`;
messageData.data_envio = today;
const messageDataArray = [messageData];
if (chatType != 'bot') {
processMessages(messageDataArray, false)
.then((result) => {
createDateMessageV2(result);
})
.catch((error) => {
console.error("Error processing messages:", error);
});
}
showNotificationNewMessage(messageData);
const messageToMyself = messageData.chatType == 'user' && messageData.sender.id == SESSION_DATA.id && chatId == SESSION_DATA.id;
// mensagem visualizada
if (messageData.sender.id == chatId && chatId != SESSION_DATA.id || messageToMyself) {
showNewMensagemInChat();
messageViewed(chatId, chatType);
} else {
verificaMensagensNovas();
};
}
}
}
function notificationNewMessageWithoutChat(request) {
const messageData = JSON.parse(request);
if (messageData.hour) {
changeFavicon();
}
}
function showNotificationNewMessage(messageData) {
const { chatId, chatType } = JSON.parse(localStorage.getItem('openChat'));
if (chatType == 'user') $(`.user-${chatId}-unread-notification`).remove();
if (messageData.chatType == 'user' && messageData.receiver.id == SESSION_DATA.id && chatId != messageData.sender.id && messageData.sender.id != SESSION_DATA.id) {
let divNumMessage = $(`#user-${messageData.sender.id}`);
let spanNotification = document.querySelector(`span[id=notification_${messageData.sender.id}]`);
if (!spanNotification) {
divNumMessage.append(`1`);
} else {
/**OBTEM O NUMERO DE MENSAGEM ATUAL */
let NumMessage = parseInt(apenasNumeros(spanNotification.innerHTML));
/**SOMA +1 MENSAGEM */
NumMessage = (NumMessage + 1);
spanNotification.innerHTML = NumMessage;
}
}
}
function verificaMensagensNovas() {
const formData = new FormData();
formData.append('idRemetente', SENDER_DATA.id);
fetch(`${URL_BASE}App/Controller/Chat/MessageAPI.php`, {
method: 'POST',
body: formData
})
.then(req => req.json())
.then(res => {
localStorage.setItem('quantidadeMensagensNovas', res.amountMessage.length);
})
}
function changeFavicon(messageView = false) {
if (!messageView) {
document.querySelector("link[rel*='icon']").href = `${URL_BASE}App/View/Public/images/favicon_nm.png`;
if (!document.querySelector('#btnNavbarChat #iconNotificacaoChat')) {
$(".icon-nav-chat").append('');
}
} else {
const allIcons = document.querySelectorAll('.not-icon-chat');
allIcons.forEach(icon => $(icon).remove());
document.querySelector("link[rel*='icon']").href = `${URL_BASE}App/View/Public/images/favicon.png`;
}
}
function showNewMensagemInChat() {
const totalScroll = document.querySelector('.body-message').scrollHeight - document.querySelector('.body-message').clientHeight;
const currentScroll = document.querySelector('.body-message').scrollTop;
// notifica mensagem nova
if (currentScroll + 100 < totalScroll) $('.novaMensagem').css({ 'visibility': 'visible', 'opacity': '1', 'transition': '0.5s' });
}
function hiddenNewMensagemInChat() {
$('.novaMensagem').css({ 'visibility': 'hidden', 'opacity': '0', 'transition': '0.5s' });
}
function getUsersOnline() {
_GET('App/Controller/Query/get.controller.php', {
table_name: 'usuario',
condition: ` AND chat_online IS NOT NULL`
})
.done(data => {
const users = JSON.parse(data);
$(`#userOnline-${SESSION_DATA.id}`).addClass('user-online');
users.forEach(user => {
$(`#userOnline-${user.id}`).addClass('user-online');
const userDiv = document.querySelector(`#user-${user.id}`);
if (user.id != SESSION_DATA.id) {
if (userDiv) userDiv.remove();
$(`#user-${SESSION_DATA.id}`).after(userDiv);
} else {
}
});
})
}
function getUsersOffline(userId) {
$(`#userOnline-${userId}`).removeClass('user-online')
const userDiv = document.querySelector(`#user-${userId}`);
if (userDiv) userDiv.remove();
$('#collapseConversaDireta').append(userDiv);
}
function alteraHeightBodyMessage(event, pressEnter = false) {
const scroll = $(event.target).height();
if (pressEnter) $('.body-message').css({ 'height': `100%` });
else $('.body-message').css({ 'height': `calc(100% - ${scroll > 50 ? (scroll) : 0}px)` });
}
function chatBot(message, destinatarioId) {
const { hours, minutes } = fnCurrentTime();
const messageData = {
chatType: 'bot',
sender: {
id: '-1'
},
receiver: {
id: destinatarioId
},
hour: `${hours}:${minutes}`,
message
}
conn.send(JSON.stringify(messageData));
}