mirror of
https://git.imnavajas.es/jjimenez/safekat.git
synced 2025-07-25 22:52:08 +00:00
Merge branch 'main' into 'dev/presu_cliente_v2'
Main See merge request jjimenez/safekat!347
This commit is contained in:
@ -149,6 +149,7 @@ class Chat {
|
||||
this.domItem.find(".chat-history-header div.chat-contact-info h6").text(row.display)
|
||||
this.domItem.find(".chat-history-header div.chat-contact-info small.user-status").text(row.display)
|
||||
this._getChatMessage()
|
||||
this._getChatTotalMessages(row.name)
|
||||
this._getChatDeparmentUsers()
|
||||
})
|
||||
|
||||
@ -213,13 +214,26 @@ class Chat {
|
||||
${row.display}
|
||||
</p>
|
||||
</div>
|
||||
${row.unreadMessages ? `<span
|
||||
class="badge badge-center rounded-pill bg-primary messages-unread-contact">${row.unreadMessages}</span>` : ""}
|
||||
<span class="badge badge-center rounded-pill bg-danger messages-unread-contact">0</span>
|
||||
</a>
|
||||
</li>
|
||||
`
|
||||
return chat
|
||||
}
|
||||
_getChatTotalMessages(row_name) {
|
||||
let ajax = new Ajax(
|
||||
`/chat/department/${this.chatType}/${this.chatDeparmentId}/${this.modelId}`,
|
||||
null,
|
||||
null,
|
||||
(data)=> {
|
||||
this.chatList.find(`#chat_${row_name} .messages-unread-contact`).text(data.count)
|
||||
},
|
||||
null
|
||||
|
||||
|
||||
);
|
||||
ajax.get();
|
||||
}
|
||||
_getChatMessage() {
|
||||
let ajax = new Ajax(
|
||||
`/chat/department/${this.chatType}/${this.chatDeparmentId}/${this.modelId}`,
|
||||
@ -463,7 +477,11 @@ export const showNotificationMessages = (dom) => {
|
||||
null,
|
||||
(data) => {
|
||||
dom.empty()
|
||||
$("#chat-notification-number").text(data.totalMessages ?? 0)
|
||||
$("#chat-notification-number")
|
||||
if(data.totalMessages > 0){
|
||||
$("#chat-notification-number").removeClass("d-none")
|
||||
$("#chat-notification-number").text(data.totalMessages ?? 0)
|
||||
}
|
||||
data?.internals?.map((e) => {
|
||||
let numberOfMessages = e.unreadMessages
|
||||
if(numberOfMessages > 0){
|
||||
|
||||
199
httpdocs/assets/js/safekat/components/internalMessagesSection.js
Normal file
199
httpdocs/assets/js/safekat/components/internalMessagesSection.js
Normal file
@ -0,0 +1,199 @@
|
||||
import Ajax from "./ajax.js"
|
||||
import Modal from "./modal.js"
|
||||
import ClassSelect from "./select2.js"
|
||||
|
||||
const getInitials = (name) => name.split(" ").map(e => e.charAt(0)).join("")
|
||||
const hebraList = (message) => `
|
||||
<div class="list-group-item list-group-item-action d-flex align-items-center cursor-pointer">
|
||||
<div class="avatar avatar-sm me-2">
|
||||
<span class="avatar-initial rounded-circle bg-primary" title="${message.senderFullName}">${getInitials(message.senderFullName)}</span>
|
||||
</div>
|
||||
<div class="w-100 px-4">
|
||||
<div class="d-flex flex-column">
|
||||
<div class="d-flex align-items-center">
|
||||
<p class="px-1">
|
||||
<span class="ti ti-xs ti-clock"></span>
|
||||
</p>
|
||||
<p class="px-1">
|
||||
${message.created_at}
|
||||
</p>
|
||||
<h6>
|
||||
${message.senderFullName} (${message.senderUserName})
|
||||
</h6>
|
||||
</div>
|
||||
<p class="text-start">${message.message}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`
|
||||
const hebraUsersList = (user) => `
|
||||
|
||||
<div class="avatar avatar-sm me-2">
|
||||
<span class="avatar-initial rounded-circle bg-secondary" title="${user.userFullName}">${getInitials(user.userFullName)}</span>
|
||||
</div>
|
||||
|
||||
`
|
||||
class InternalMessages {
|
||||
constructor(domItem) {
|
||||
this.item = domItem
|
||||
this.containerMessages = this.item.find("#container-internal-messages")
|
||||
this.btnNewHebra = this.item.find(".btn-new-hebra")
|
||||
this.btnNewHebraMessage = this.item.find(".btn-new-hebra-message")
|
||||
this.modalNewMessage = new Modal($("#modalNewInternalMessage"))
|
||||
this.selectUsers = this.item.find("#selectUsersHebra")
|
||||
this.btnNewHebraSubmit = this.item.find("#submit_new_hebra")
|
||||
this.textAreaMessage = this.item.find("#new-internal-message-text")
|
||||
this.hebraTitle = this.item.find("#new-internal-message-title")
|
||||
this.btnUpdateHebraSubmit = this.item.find("#submit_update_hebra")
|
||||
this.message = ""
|
||||
this.formNewValues = ""
|
||||
this.formUpdateValues = ""
|
||||
this.subjectHebra = ""
|
||||
this.modelId = this.item.data("id")
|
||||
this.type = this.item.data("type")
|
||||
this.chatId = null
|
||||
|
||||
this.selectMessageUsers = new ClassSelect(this.selectUsers, '/chat/users/internal', "Seleccione un usuario",true)
|
||||
}
|
||||
init() {
|
||||
this.selectMessageUsers.init()
|
||||
this.item.on("click", ".btn-new-hebra", this.handleBtnNewHebra.bind(this))
|
||||
this.item.on("click", ".btn-new-hebra-message", this.handleBtnUpdateHebra.bind(this))
|
||||
this.modalNewMessage.item.on("click","#submit_new_hebra",this.handlePostNewHebra.bind(this))
|
||||
this.modalNewMessage.item.on("click","#submit_update_hebra",this.handleUpdateHebra.bind(this))
|
||||
this.handleGetInternalMessages()
|
||||
|
||||
}
|
||||
handleGetInternalMessages() {
|
||||
this.containerMessages.empty()
|
||||
let ajax = new Ajax(
|
||||
`/chat/hebra/${this.type}/${this.modelId}`,
|
||||
null,
|
||||
null,
|
||||
this._handleGetInternalMessagesSuccess.bind(this),
|
||||
this._handleGetInternalMessagesError.bind(this)
|
||||
)
|
||||
ajax.get()
|
||||
}
|
||||
handlePostNewHebra(){
|
||||
this._handleUpdateFormNewHebraValues()
|
||||
let ajax = new Ajax(
|
||||
`/chat/hebra/${this.type}`,
|
||||
this.formNewValues,
|
||||
null,
|
||||
this.handlePostNewHebraSuccess.bind(this),
|
||||
this.handlePostNewHebraError.bind(this),
|
||||
)
|
||||
ajax.post()
|
||||
|
||||
}
|
||||
handlePostNewHebraSuccess(data){
|
||||
this.modalNewMessage.toggle()
|
||||
this.handleGetInternalMessages()
|
||||
}
|
||||
handlePostNewHebraError(err){}
|
||||
handleUpdateHebra(){
|
||||
this._handleUpdateFormUpdateHebraValues()
|
||||
let ajax = new Ajax(
|
||||
`/chat/hebra/${this.chatId}`,
|
||||
this.formUpdateValues,
|
||||
null,
|
||||
this.handleUpdateNewHebraSuccess.bind(this),
|
||||
this.handleUpdateNewHebraError.bind(this),
|
||||
)
|
||||
ajax.post()
|
||||
}
|
||||
handleUpdateNewHebraSuccess(data){
|
||||
this.modalNewMessage.toggle()
|
||||
this.handleGetInternalMessages()
|
||||
}
|
||||
handleUpdateNewHebraError(err){}
|
||||
handleBtnNewHebra(e) {
|
||||
e.preventDefault()
|
||||
this.chatId = null
|
||||
this.modalNewMessage.item.find(".modal-title").text("Nueva hebra")
|
||||
this.selectMessageUsers.reset()
|
||||
this.textAreaMessage.val("")
|
||||
this.hebraTitle.val("")
|
||||
this.hebraTitle.parent().removeClass("d-none")
|
||||
this.btnNewHebraSubmit.removeClass("d-none")
|
||||
this.btnUpdateHebraSubmit.addClass("d-none")
|
||||
this.modalNewMessage.show()
|
||||
this._handleUpdateFormNewHebraValues()
|
||||
}
|
||||
handleBtnUpdateHebra(e) {
|
||||
e.preventDefault()
|
||||
this.chatId = $(e.currentTarget).data("id")
|
||||
this.selectMessageUsers.reset()
|
||||
this.textAreaMessage.val("")
|
||||
this.hebraTitle.val("")
|
||||
this.hebraTitle.parent().addClass("d-none")
|
||||
this.modalNewMessage.item.find(".modal-title").text("Nuevo mensaje")
|
||||
this.btnUpdateHebraSubmit.removeClass("d-none")
|
||||
this.btnNewHebraSubmit.addClass("d-none")
|
||||
this.modalNewMessage.show()
|
||||
this._handleUpdateFormUpdateHebraValues()
|
||||
|
||||
}
|
||||
_handleUpdateFormNewHebraValues() {
|
||||
this.formNewValues = {
|
||||
title : this.hebraTitle.val(),
|
||||
users: this.selectMessageUsers.getVal(),
|
||||
message: this.textAreaMessage.val(),
|
||||
modelId : this.modelId
|
||||
}
|
||||
}
|
||||
_handleUpdateFormUpdateHebraValues() {
|
||||
this.formUpdateValues = {
|
||||
users: this.selectMessageUsers.getVal(),
|
||||
message: this.textAreaMessage.val(),
|
||||
modelId : this.modelId
|
||||
}
|
||||
}
|
||||
_handleGetInternalMessagesSuccess(data){
|
||||
Object.values(data).map((k) => {
|
||||
this._addHebraDOM(k.chatId,k.chatTitle,k.messages,k.users)
|
||||
})
|
||||
}
|
||||
_handleGetInternalMessagesError(err){}
|
||||
|
||||
_addHebraDOM(key,chatTitle,messages,users) {
|
||||
const itemHebra = $(`<div id="hebra-item-${key}"></div>`).addClass("border border-container flex-grow-0 container-p-y mt-4 p-5")
|
||||
const headerHebra = $("<div></div>").addClass("d-flex justify-content-between align-items-center")
|
||||
const contentHeaderHebra = $("<h4></h4>").text(`${chatTitle}`)
|
||||
const btnNewHebra = $("<button></button>").attr("type", "button").addClass("btn btn-danger btn-sm btn-new-hebra")
|
||||
btnNewHebra.append('<span class="ti-xs ti ti-git-branch"></span>')
|
||||
btnNewHebra.append("Nueva hebra")
|
||||
headerHebra.append(contentHeaderHebra,btnNewHebra)
|
||||
itemHebra.append(headerHebra)
|
||||
let itemMessagesHebraRow = $("<div></div>").addClass("row")
|
||||
let itemMessagesHebraCol = $("<div></div>").addClass("col")
|
||||
let itemMessagesListGroup = $("<div></div>").addClass("list-group")
|
||||
itemMessagesHebraRow.append(itemMessagesHebraCol)
|
||||
itemMessagesHebraCol.append(itemMessagesListGroup)
|
||||
let itemFooterHebra = $("<div></div>").addClass("d-flex justify-content-between align-items-center")
|
||||
let itemFooterUserFlex = $("<div></div>").addClass("d-flex justify-content-start ")
|
||||
let itemFooterHebraUserFlexChildren = $("<div></div>").addClass("d-flex align-items-center avatar-group mb-4 mt-4")
|
||||
itemFooterUserFlex.append(itemFooterHebraUserFlexChildren)
|
||||
itemFooterHebra.append(itemFooterUserFlex)
|
||||
users.map((user) => {
|
||||
let avatarUsers = hebraUsersList(user)
|
||||
itemFooterHebraUserFlexChildren.append(avatarUsers)
|
||||
})
|
||||
itemFooterHebra.append(`
|
||||
<button class="btn btn-primary btn-md waves-effect waves-light btn-new-hebra-message" data-id="${key}">
|
||||
<span class="ti-xs ti ti-message-2 me-1"></span>
|
||||
Nuevo mensaje
|
||||
</button>
|
||||
`)
|
||||
messages.map((message) => {
|
||||
let messageContent = hebraList(message)
|
||||
itemMessagesListGroup.append(messageContent)
|
||||
})
|
||||
itemHebra.append(itemMessagesListGroup)
|
||||
itemHebra.append(itemFooterHebra)
|
||||
this.containerMessages.append(itemHebra)
|
||||
}
|
||||
}
|
||||
|
||||
export default InternalMessages;
|
||||
@ -1,6 +1,11 @@
|
||||
import Chat from '../components/chat.js'
|
||||
import InternalMessages from "../components/internalMessagesSection.js"
|
||||
|
||||
let chat = new Chat($("#chat-factura"))
|
||||
chat.init()
|
||||
chat.initFactura()
|
||||
chat._handleListContacts()
|
||||
$(document).ready(() => {
|
||||
let chat = new Chat($("#chat-factura"))
|
||||
chat.init()
|
||||
chat.initFactura()
|
||||
let internalMessages = new InternalMessages($("#internal_messages_chat"))
|
||||
internalMessages.init()
|
||||
|
||||
})
|
||||
@ -1,6 +1,11 @@
|
||||
import Chat from '../components/chat.js'
|
||||
import InternalMessages from "../components/internalMessagesSection.js"
|
||||
|
||||
let chat = new Chat($("#chat-pedido"))
|
||||
chat.init()
|
||||
chat.initPedido()
|
||||
chat._handleListContacts()
|
||||
$(document).ready(() => {
|
||||
let chat = new Chat($("#chat-pedido"))
|
||||
chat.init()
|
||||
chat.initPedido()
|
||||
let internalMessages = new InternalMessages($("#internal_messages_chat"))
|
||||
internalMessages.init()
|
||||
|
||||
})
|
||||
@ -1,6 +1,11 @@
|
||||
import Chat from '../components/chat.js'
|
||||
import InternalMessages from "../components/internalMessagesSection.js"
|
||||
|
||||
let chat = new Chat($("#chat-presupuesto"))
|
||||
chat.init()
|
||||
chat.initPresupuesto()
|
||||
chat._handleListContacts()
|
||||
$(document).ready(() => {
|
||||
let chat = new Chat($("#chat-presupuesto"))
|
||||
chat.init()
|
||||
chat.initPresupuesto()
|
||||
let internalMessages = new InternalMessages($("#internal_messages_chat"))
|
||||
internalMessages.init()
|
||||
|
||||
})
|
||||
Reference in New Issue
Block a user