From ffd878d2a936d885ddb4234899d38f2795381e53 Mon Sep 17 00:00:00 2001 From: Pascal Date: Tue, 14 Jan 2025 11:59:15 +0100 Subject: [PATCH] message_role_ok --- src/pages/chat/chat.ts | 135 ++++++++++++++++++++++------------------- 1 file changed, 71 insertions(+), 64 deletions(-) diff --git a/src/pages/chat/chat.ts b/src/pages/chat/chat.ts index 61d9f7e..1576ec4 100755 --- a/src/pages/chat/chat.ts +++ b/src/pages/chat/chat.ts @@ -62,6 +62,7 @@ class ChatElement extends HTMLElement { roleName: 'Default Role' })); private messageState: number = 0; + private selectedRole: string | null = null; constructor() { @@ -382,61 +383,81 @@ class ChatElement extends HTMLElement { private async sendMessage() { const messageInput = this.shadowRoot?.querySelector('#message-input') as HTMLInputElement; - if (!messageInput || !this.selectedMemberId) return; + if (!messageInput || !this.selectedMemberId) { + console.error('❌ Missing message input or selected member'); + return; + } + if (!this.selectedRole) { + console.error('❌ No role selected'); + return; + } + const messageText = messageInput.value.trim(); - if (messageText === '') return; + if (messageText === '') { + console.error('❌ Empty message'); + return; + } try { const myAddresses = await this.getMemberFromDevice(); if (!myAddresses) throw new Error('No paired member found'); - - const messageProcess = await this.getExistingMessageProcess( - this.getAttribute('process-id') || '', - [this.selectedMemberId] - ); - - if (!messageProcess) { - console.error('❌ Processus message non trouvé'); - return; - } + console.log('📍 My addresses:', myAddresses); + console.log('👥 Using role:', this.selectedRole); const timestamp = Date.now(); - const uniqueKey = `${this.getAttribute('process-id')}${timestamp}`; + const processId = this.getAttribute('process-id'); + const uniqueKey = `${processId}${timestamp}`; - const messageTemplate = { - value_commitment: uniqueKey, - messaging_id: this.getAttribute('process-id'), - description: 'message_content', - content: { - text: messageText, - timestamp: timestamp, - sender: myAddresses[0], - recipient: this.selectedMemberId, - messageState: this.messageState - }, - roles: { - users: { - members: [ - { sp_addresses: myAddresses }, - { sp_addresses: [this.selectedMemberId] } - ] - } - } + // Ouvrir directement IndexedDB + const dbRequest = indexedDB.open('4nk'); + + dbRequest.onerror = (event) => { + console.error("Database error:", dbRequest.error); }; - const db = await Database.getInstance(); - await db.addObject({ - storeName: 'diffs', - object: messageTemplate, - key: null - }); + dbRequest.onsuccess = (event) => { + const db = dbRequest.result; + const transaction = db.transaction(['diffs'], 'readwrite'); + const store = transaction.objectStore('diffs'); + + 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 + } + }; + + console.log('📝 Saving message template:', messageTemplate); + + const request = store.add(messageTemplate); + + request.onsuccess = () => { + console.log('✅ Message successfully saved to IndexedDB'); + messageInput.value = ''; + this.loadMemberChat(this.selectedMemberId!); + }; + + request.onerror = () => { + console.error('❌ Error saving message:', request.error); + }; + + transaction.oncomplete = () => { + console.log('✅ Transaction completed'); + db.close(); + }; + }; - messageInput.value = ''; - await this.loadMemberChat(this.selectedMemberId); } catch (error) { - console.error('❌ Erreur envoi message:', error); + console.error('❌ Error in sendMessage:', error); } } @@ -492,6 +513,8 @@ class ChatElement extends HTMLElement { private async toggleMembers(roleData: any, roleElement: HTMLElement) { let memberList = roleElement.querySelector('.member-list'); + const roleName = roleElement.querySelector('.role-name')?.textContent || ''; + if (memberList) { (memberList as HTMLElement).style.display = (memberList as HTMLElement).style.display === 'none' ? 'block' : 'none'; @@ -521,35 +544,19 @@ class ChatElement extends HTMLElement { memberItem.onclick = async (event) => { event.stopPropagation(); + // Stocker le rôle sélectionné + this.selectedRole = roleName; + console.log('🎭 Selected role:', this.selectedRole); + try { const parentProcessId = this.getAttribute('process-id'); - console.log('🔍 Parent Process ID:', parentProcessId); - if (!parentProcessId) { throw new Error('No parent process ID found'); } - const db = await Database.getInstance(); - const processes = await db.getObject('processes', parentProcessId); - console.log('💾 Processus trouvé:', processes); - - if (processes) { - console.log('✅ Processus existant trouvé, chargement de la conversation'); - this.loadMemberChat(member.sp_addresses[0]); - } else { - console.log('🆕 Création d\'un nouveau processus de message'); - const roleName = roleElement.querySelector('.role-name')?.textContent || 'default'; - const result = await this.createMessagingProcess( - [member], - 'relay_address', - 1, - parentProcessId, - roleName - ); - this.loadMemberChat(member.sp_addresses[0]); - } + this.loadMemberChat(member.sp_addresses[0]); } catch (error) { - console.error('❌ Erreur lors du clic:', error); + console.error('❌ Error handling member click:', error); } }; @@ -1118,7 +1125,7 @@ class ChatElement extends HTMLElement { // Chercher le processus message dans les rôles for (const role in roles) { - console.log(`🔍 Vérification du rôle: ${role}`); + console.log(` Vérification du rôle: ${role}`); const members = roles[role].members; if (members?.some((member: any) => spAddresses.includes(member.sp_addresses[0])