diff --git a/src/pages/chat/chat.ts b/src/pages/chat/chat.ts index f57483a..57a520f 100755 --- a/src/pages/chat/chat.ts +++ b/src/pages/chat/chat.ts @@ -404,29 +404,84 @@ class ChatElement extends HTMLElement { try { const myAddresses = await this.getMemberFromDevice(); - console.log('👤 Adresses de l\'expéditeur:', myAddresses); + if (!myAddresses) { + throw new Error('No paired member found'); + } - // Vérifier si un processus de conversation existe déjà - const existingProcess = await this.getExistingConversationProcess(this.selectedMemberId!); - console.log('🔍 Processus existant:', existingProcess); + const existingProcess = await this.getExistingConversationProcess(this.selectedMemberId); + // Ajoutons des logs pour voir la structure exacte + console.log('📝 Process existant:', { + fullProcess: existingProcess, + messageStructure: existingProcess?.messages?.object?.content?.[0] + }); + + const messageContent = { + text: messageText, + timestamp: Date.now(), + sender: myAddresses[0], + type: 'text', + state: 'initial', + object: { + content: messageText, + metadata: { + created_at: Date.now(), + last_updated: Date.now() + } + } + }; + + console.log('📝 Nouveau message:', messageContent); + if (existingProcess) { - console.log('📝 Mise à jour du processus existant'); - await this.updateProcessWithNewMessage(existingProcess.process_id, messageText); + console.log('✏️ Mise à jour du processus:', { + processId: existingProcess.process_id, + currentMessages: existingProcess.messages.object.content, + newMessage: messageContent + }); + // Mettre à jour le processus existant avec le nouveau message + existingProcess.messages.object.content.push(messageContent); + existingProcess.messages.object.metadata.last_updated = Date.now(); + + await this.updateProcessWithNewMessage(existingProcess.process_id, messageContent); + console.log('✅ Message ajouté au processus existant:', existingProcess.process_id); } else { - console.log('🆕 Création d\'un nouveau processus'); + // Créer un nouveau processus de message + const messagingTemplate = { + process_id: crypto.randomUUID(), + parent_id: null, + description: 'messaging', + messages: { + state: 'initial', + object: { + type: 'message_list', + content: [messageContent], + content_type: { + allowed: ['text', 'file'], + default: 'text' + }, + metadata: { + created_at: Date.now(), + last_updated: Date.now() + } + } + } + }; + const result = await this.createMessagingProcess( [{ sp_addresses: [this.selectedMemberId] }], 'relay_address', 1 ); - console.log('✅ Nouveau processus créé:', result); - await this.saveConversationProcessRef(this.selectedMemberId!, (result as any).id); + + await this.saveConversationProcessRef(this.selectedMemberId, messagingTemplate.process_id); + console.log('✅ Nouveau processus de message créé:', messagingTemplate.process_id); } - console.log('✅ Message envoyé avec succès'); messageInput.value = ''; + this.loadMemberChat(this.selectedMemberId); + } catch (error) { console.error('❌ Erreur lors de l\'envoi du message:', error); } @@ -446,8 +501,9 @@ class ChatElement extends HTMLElement { } this.selectedMemberId = String(memberId); - const memberMessages = this.messagesMock.find(m => String(m.memberId) === String(memberId)); - + + const existingProcess = await this.getExistingConversationProcess(this.selectedMemberId); + const chatHeader = this.shadowRoot?.querySelector('#chat-header'); const messagesContainer = this.shadowRoot?.querySelector('#messages'); @@ -458,60 +514,27 @@ class ChatElement extends HTMLElement { chatHeader.textContent = `Chat with ${emojis}`; messagesContainer.innerHTML = ''; - if (memberMessages) { - for (const message of memberMessages.messages) { + if (existingProcess?.messages?.object?.content) { + for (const message of existingProcess.messages.object.content) { const messageElement = document.createElement('div'); messageElement.className = 'message-container'; - - if (message.sender === myAddresses[0]) { - messageElement.style.justifyContent = 'flex-end'; - } else { - messageElement.style.justifyContent = 'flex-start'; - } + messageElement.style.justifyContent = message.sender === myAddresses[0] ? 'flex-end' : 'flex-start'; const messageContent = document.createElement('div'); - messageContent.className = message.class || 'message'; - - if (message.type === 'file') { - messageContent.innerHTML = ` -
- - `; - - const fileSpan = messageContent.querySelector('.file-message'); - fileSpan?.addEventListener('click', () => { - const fileKey = `file_${message.id}`; - const fileData = localStorage.getItem(fileKey); - if (fileData) { - // Créer un lien de téléchargement - const link = document.createElement('a'); - link.href = fileData; - link.download = message.fileName; - document.body.appendChild(link); - link.click(); - document.body.removeChild(link); - } - }); - } else { - messageContent.innerHTML = ` - - - `; - } + messageContent.className = `message ${message.sender === myAddresses[0] ? 'user' : ''}`; + messageContent.innerHTML = ` + + + `; messageElement.appendChild(messageContent); messagesContainer.appendChild(messageElement); } + + this.scrollToBottom(messagesContainer); } - - this.scrollToBottom(messagesContainer); } private async toggleMembers(roleData: any, roleElement: HTMLElement) { @@ -1103,17 +1126,14 @@ class ChatElement extends HTMLElement { } } - private async updateProcessWithNewMessage(processId: string, messageText: string) { + private async updateProcessWithNewMessage(processId: string, messageContent: any) { const db = await Database.getInstance(); try { const process = await db.getObject('processes', processId); if (process) { - const myAddresses = await this.getMemberFromDevice(); - process.messages.object.content.push({ - text: messageText, - timestamp: Date.now(), - sender: myAddresses?.[0] - }); + process.messages.object.content.push(messageContent); + process.messages.object.metadata.last_updated = Date.now(); + await db.addObject({ storeName: 'processes', key: processId,