diff --git a/src/pages/chat/chat.ts b/src/pages/chat/chat.ts index 2a02dfd..d58e23f 100755 --- a/src/pages/chat/chat.ts +++ b/src/pages/chat/chat.ts @@ -269,11 +269,11 @@ class ChatElement extends HTMLElement { otherMembers: Member[], relayAddress: string, feeRate: number, - parentProcessId: string, + processId: string, roleName: string ): Promise { console.log('🚀 Début createMessagingProcess'); - console.log('📝 Parent Process ID:', parentProcessId); + console.log('📝 Parent Process ID:', this.processId); console.log('👥 Other Member:', otherMembers[0]); console.log('👑 Role Name:', roleName); @@ -288,8 +288,15 @@ class ChatElement extends HTMLElement { throw new Error('No paired member found'); } + const currentProcessId = this.getAttribute('process-id'); + console.log('🔍 Current Process ID from attribute:', currentProcessId); + + if (!currentProcessId) { + throw new Error('No process ID found in element attributes'); + } + const messagingTemplate = { - parent_id: parentProcessId, + parent_id: currentProcessId, description: 'messaging', roles: { [roleName]: { @@ -314,11 +321,11 @@ class ChatElement extends HTMLElement { try { const result = await this.sdkClient.create_new_process( JSON.stringify(messagingTemplate), - parentProcessId, + this.processId, relayAddress, feeRate ); - console.log('✅ Résultat création process:', result); + console.log('✅ Process message créé:', result); return result; } catch (e) { console.error('❌ Erreur création process:', e); @@ -379,84 +386,26 @@ class ChatElement extends HTMLElement { throw new Error('No paired member found'); } + // On récupère le processus existant 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] - }); + if (!existingProcess) { + console.error('❌ Aucun processus de message trouvé'); + return; + } 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() - } - } + type: 'text' }; - console.log('📝 Nouveau message:', messageContent); - - if (existingProcess) { - 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 { - // 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 groupItem = this.shadowRoot?.querySelector('[data-process-id]'); - const parentProcessId = groupItem?.getAttribute('data-process-id') || ''; - const roleName = 'default'; - - const result = await this.createMessagingProcess( - [{ sp_addresses: [this.selectedMemberId!] }], - 'relay_address', - 1, - this.processId || '', - 'default' - ); - - await this.saveConversationProcessRef(this.selectedMemberId, messagingTemplate.process_id); - console.log('✅ Nouveau processus de message créé:', messagingTemplate.process_id); - } + // Mise à jour du processus existant avec le nouveau message + await this.updateProcessWithNewMessage(existingProcess.process_id, messageContent); + console.log('✅ Message ajouté au processus existant:', existingProcess.process_id); messageInput.value = ''; - this.loadMemberChat(this.selectedMemberId); } catch (error) { @@ -546,43 +495,26 @@ class ChatElement extends HTMLElement { memberItem.onclick = async (event) => { event.stopPropagation(); try { - if (!this.sdkClient) { - await this.initSDKClient(); + const existingProcess = await this.getExistingConversationProcess(member.sp_addresses[0]); + + if (existingProcess) { + 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, + this.processId || '', + roleName + ); + await this.saveConversationProcessRef(member.sp_addresses[0], (result as any).process_id); + this.loadMemberChat(member.sp_addresses[0]); } - - const groupItem = roleElement.closest('[data-process-id]'); - const processId = groupItem?.getAttribute('data-process-id'); - - if (!processId) { - throw new Error('Process ID not found'); - } - - console.log('Creating messaging process with:', { - processId, - member, - sdkClientInitialized: !!this.sdkClient - }); - - const roleName = roleElement.querySelector('.role-name')?.textContent || 'default'; - console.log('🎭 Role cliqué:', roleName); - - const result = await this.createMessagingProcess( - [member], - 'relay_address', - 1, - processId, - roleName - ); - - console.log('Messaging process created:', { - processId, - template: result, - member: member - }); - - this.loadMemberChat(member.sp_addresses[0]); } catch (error) { - console.error('Error creating messaging process:', error); + console.error('❌ Erreur:', error); } }; @@ -900,11 +832,12 @@ class ChatElement extends HTMLElement { } } }; - const result = await this.createMessagingProcess( [{ sp_addresses: [this.selectedMemberId!] }], 'relay_address', - 1 + 1, + JSON.stringify(messageTemplate), + 'file_message' ); console.log('Final file message process:', { @@ -994,39 +927,42 @@ class ChatElement extends HTMLElement { } private addNewMessagingProcess(processId: string, processName: string) { - console.log('🎯 Adding new messaging process:', { processId, processName }); + console.log('🎯 Début addNewMessagingProcess'); + console.log('📝 ProcessId reçu:', processId); + + // Stockage immédiat du processId + this.processId = processId; + console.log('💾 ProcessId stocké dans this.processId:', this.processId); + const groupList = this.shadowRoot?.querySelector('#group-list'); if (!groupList) { - console.error('Group list not found in shadow DOM'); + console.error('Group list not found'); return; } - // Vérifier si le processus existe déjà + // Vérification que le processId est bien stocké + console.log('🔍 Vérification this.processId après stockage:', this.processId); + const existingProcess = groupList.querySelector(`[data-process-id="${processId}"]`); if (existingProcess) { console.log('Process already exists:', processId); return; } - // Créer le nouveau groupe const li = document.createElement('li'); li.className = 'group-list-item'; - li.setAttribute('data-process-id', processId); + li.setAttribute('data-process-id', processId); - // Créer le conteneur flex const container = document.createElement('div'); container.className = 'group-item-container'; - // Créer un span pour le nom du processus const nameSpan = document.createElement('span'); nameSpan.textContent = processName; nameSpan.className = 'process-name'; - // Créer un span pour les emojis const emojiSpan = document.createElement('span'); emojiSpan.className = 'process-emoji'; - // Ajouter les emojis de l'adresse addressToEmoji(processId).then(emojis => { emojiSpan.textContent = emojis; }); @@ -1035,12 +971,10 @@ class ChatElement extends HTMLElement { container.appendChild(emojiSpan); li.appendChild(container); - // Créer la liste des rôles const roleList = document.createElement('ul'); roleList.className = 'role-list'; roleList.style.display = 'none'; - // Ajouter un rôle par défaut pour le messaging const roleItem = document.createElement('li'); roleItem.className = 'role-item'; roleItem.textContent = 'Messaging';