diff --git a/src/pages/chat/chat.ts b/src/pages/chat/chat.ts index 72ee178..37d3c05 100755 --- a/src/pages/chat/chat.ts +++ b/src/pages/chat/chat.ts @@ -420,65 +420,76 @@ class ChatElement extends HTMLElement { dbRequest.onsuccess = async (event) => { const db = dbRequest.result; + // Utiliser une seule transaction pour les deux opérations + const transaction = db.transaction(['diffs'], 'readwrite'); + const store = transaction.objectStore('diffs'); - // Premier message - const transaction1 = db.transaction(['diffs'], 'readwrite'); - const store1 = transaction1.objectStore('diffs'); + try { + // Premier message + await new Promise((resolve, reject) => { + const messageTemplate = { + value_commitment: uniqueKey, + messaging_id: processId, + description: 'message_content', + metadata: { + text: messageText, + timestamp: timestamp, + sender: myAddresses[0], + recipient: this.selectedMemberId, + messageState: this.messageState, + roleName: this.selectedRole + } + }; - const messageTemplate = { - value_commitment: uniqueKey, - messaging_id: processId, - description: 'message_content', - metadata: { - text: messageText, - timestamp: timestamp, - sender: myAddresses[0], - recipient: this.selectedMemberId, - messageState: this.messageState, - roleName: this.selectedRole + const request = store.add(messageTemplate); + request.onsuccess = () => { + console.log('✅ Message saved'); + messageInput.value = ''; + resolve(); + }; + request.onerror = () => reject(request.error); + }); + + // Réponse automatique + await new Promise((resolve, reject) => { + const autoReplyTemplate = { + value_commitment: `${processId}${timestamp + 1000}`, + messaging_id: processId, + description: 'message_content', + metadata: { + text: "Je suis un message automatique de réponse", + timestamp: timestamp + 1000, + sender: this.selectedMemberId, + recipient: myAddresses[0], + messageState: this.messageState, + roleName: this.selectedRole + } + }; + + const request = store.add(autoReplyTemplate); + request.onsuccess = () => { + console.log('✅ Auto reply saved'); + resolve(); + }; + request.onerror = () => reject(request.error); + }); + + // Attendre la fin de la transaction + await new Promise((resolve, reject) => { + transaction.oncomplete = () => { + console.log('✅ Transaction completed'); + resolve(); + }; + transaction.onerror = () => reject(transaction.error); + }); + + // Recharger les messages + if (this.selectedMemberId) { + await this.loadMemberChat(this.selectedMemberId); } - }; - await new Promise((resolve, reject) => { - const request = store1.add(messageTemplate); - request.onsuccess = () => { - console.log('✅ Message saved'); - messageInput.value = ''; - resolve(); - }; - request.onerror = () => reject(request.error); - }); - - // Réponse automatique - const transaction2 = db.transaction(['diffs'], 'readwrite'); - const store2 = transaction2.objectStore('diffs'); - - const autoReplyTemplate = { - value_commitment: `${processId}${timestamp + 1000}`, - messaging_id: processId, - description: 'message_content', - metadata: { - text: "Je suis un message automatique de réponse", - timestamp: timestamp + 1000, - sender: this.selectedMemberId, - recipient: myAddresses[0], - messageState: this.messageState, - roleName: this.selectedRole - } - }; - - await new Promise((resolve, reject) => { - const request = store2.add(autoReplyTemplate); - request.onsuccess = () => { - console.log('✅ Auto reply saved'); - resolve(); - }; - request.onerror = () => reject(request.error); - }); - - // Recharger les messages - if (this.selectedMemberId) { - await this.loadMemberChat(this.selectedMemberId); + } catch (error) { + console.error('❌ Transaction error:', error); } }; @@ -551,11 +562,13 @@ class ChatElement extends HTMLElement { for (const message of messages) { const messageElement = document.createElement('div'); messageElement.className = 'message-container'; - messageElement.style.justifyContent = - message.metadata.sender === myAddresses[0] ? 'flex-end' : 'flex-start'; + + // Vérifier si le message vient de l'utilisateur courant + const isCurrentUser = message.metadata.sender === myAddresses[0]; + messageElement.style.justifyContent = isCurrentUser ? 'flex-end' : 'flex-start'; const messageContent = document.createElement('div'); - messageContent.className = `message ${message.metadata.sender === myAddresses[0] ? 'user' : ''}`; + messageContent.className = `message ${isCurrentUser ? 'user' : ''}`; const senderEmoji = await addressToEmoji(message.metadata.sender);