From 769952a5de1b78941bad0ecca3ce9327cd1106b2 Mon Sep 17 00:00:00 2001 From: NicolasCantu Date: Thu, 16 Jan 2025 10:01:36 +0100 Subject: [PATCH] Fix getting of the child process in loadMemberChat --- src/pages/chat/chat.ts | 188 +++++++++++++++++++--------------------- src/services/service.ts | 8 +- 2 files changed, 91 insertions(+), 105 deletions(-) diff --git a/src/pages/chat/chat.ts b/src/pages/chat/chat.ts index 9232a9f..8044a25 100755 --- a/src/pages/chat/chat.ts +++ b/src/pages/chat/chat.ts @@ -388,13 +388,12 @@ class ChatElement extends HTMLElement { messagesContainer.innerHTML = ''; // Filter processes for the children of current process - const children = await service.getChildrenOfProcess(this.processId); + const children: string[] = await service.getChildrenOfProcess(this.processId); let messagesProcess: Process | null = null; - console.log(this.processRoles); const processRoles = this.processRoles; for (const child of children) { - const roles = await this.getRoles(child); + const roles = await this.getRoles(JSON.parse(child)); // Check that we and the other members are in the role if (!service.isChildRole(processRoles, roles)) { console.error('Child process roles are not a subset of parent') @@ -408,7 +407,7 @@ class ChatElement extends HTMLElement { console.error('We\'re not part of child process'); continue; } - messagesProcess = child; + messagesProcess = JSON.parse(child); } if (messagesProcess === null) { @@ -428,98 +427,91 @@ class ChatElement extends HTMLElement { console.log('Found child process', messagesProcess); } - const dbRequest = indexedDB.open('4nk'); - - dbRequest.onerror = () => { - console.error("Database error:", dbRequest.error); - }; - - dbRequest.onsuccess = async (event) => { - const db = dbRequest.result; - const transaction = db.transaction(['diffs'], 'readonly'); - const store = transaction.objectStore('diffs'); - const messages: any[] = []; - - const cursorRequest = store.openCursor(); - - cursorRequest.onsuccess = async (e) => { - const cursor = (e.target as IDBRequest).result; - - if (cursor) { - const record = cursor.value; - - if (record.description === 'message_content' && - record.metadata && - record.metadata.roleName === this.selectedRole && - ((record.metadata.sender === myAddresses[0] && record.metadata.recipient === memberId) || - (record.metadata.sender === memberId && record.metadata.recipient === myAddresses[0]))) { - - messages.push(record); - } - cursor.continue(); - } else { - messages.sort((a, b) => a.metadata.timestamp - b.metadata.timestamp); - - for (const message of messages) { - const messageElement = document.createElement('div'); - messageElement.className = 'message-container'; - - const isCurrentUser = message.metadata.sender === myAddresses[0]; - messageElement.style.justifyContent = isCurrentUser ? 'flex-end' : 'flex-start'; - - const messageContent = document.createElement('div'); - messageContent.className = `message ${isCurrentUser ? 'user' : ''}`; - - const senderEmoji = await addressToEmoji(message.metadata.sender); - - if (message.metadata.type === 'file') { - let fileContent = ''; - if (message.metadata.fileType.startsWith('image/')) { - fileContent = ` -
- ${message.metadata.fileName} -
- `; - } else { - const blob = this.base64ToBlob(message.metadata.fileData, message.metadata.fileType); - const url = URL.createObjectURL(blob); - fileContent = ` -
- - 📎 ${message.metadata.fileName} - -
- `; - } - - messageContent.innerHTML = ` -
- ${senderEmoji}: ${fileContent} -
-
- ${new Date(message.metadata.timestamp).toLocaleString('fr-FR')} -
- `; - } else { - // Message texte normal - messageContent.innerHTML = ` -
- ${senderEmoji}: ${message.metadata.text} -
-
- ${new Date(message.metadata.timestamp).toLocaleString('fr-FR')} -
- `; - } - - messageElement.appendChild(messageContent); - messagesContainer.appendChild(messageElement); - } - - this.scrollToBottom(messagesContainer); + // Get the diffs from the database + for (const state of messagesProcess.states) { + const pcd_commitment = state.pcd_commitment; + if (pcd_commitment) { + const message_hash = pcd_commitment.message; + if (message_hash) { + const diff = await service.getDiffByValue(message_hash); + const message = diff.new_value; + console.log(message); } - }; - }; + } + } + + // if (record.description === 'message_content' && + // record.metadata && + // record.metadata.roleName === this.selectedRole && + // ((record.metadata.sender === myAddresses[0] && record.metadata.recipient === memberId) || + // (record.metadata.sender === memberId && record.metadata.recipient === myAddresses[0]))) { + + // messages.push(record); + // } + // cursor.continue(); + // } else { + // messages.sort((a, b) => a.metadata.timestamp - b.metadata.timestamp); + + // for (const message of messages) { + // const messageElement = document.createElement('div'); + // messageElement.className = 'message-container'; + + // const isCurrentUser = message.metadata.sender === myAddresses[0]; + // messageElement.style.justifyContent = isCurrentUser ? 'flex-end' : 'flex-start'; + + // const messageContent = document.createElement('div'); + // messageContent.className = `message ${isCurrentUser ? 'user' : ''}`; + + // const senderEmoji = await addressToEmoji(message.metadata.sender); + + // if (message.metadata.type === 'file') { + // let fileContent = ''; + // if (message.metadata.fileType.startsWith('image/')) { + // fileContent = ` + //
+ // ${message.metadata.fileName} + //
+ // `; + // } else { + // const blob = this.base64ToBlob(message.metadata.fileData, message.metadata.fileType); + // const url = URL.createObjectURL(blob); + // fileContent = ` + //
+ // + // 📎 ${message.metadata.fileName} + // + //
+ // `; + // } + + // messageContent.innerHTML = ` + //
+ // ${senderEmoji}: ${fileContent} + //
+ //
+ // ${new Date(message.metadata.timestamp).toLocaleString('fr-FR')} + //
+ // `; + // } else { + // // Message texte normal + // messageContent.innerHTML = ` + //
+ // ${senderEmoji}: ${message.metadata.text} + //
+ //
+ // ${new Date(message.metadata.timestamp).toLocaleString('fr-FR')} + //
+ // `; + // } + + // messageElement.appendChild(messageContent); + // messagesContainer.appendChild(messageElement); + // } + + // this.scrollToBottom(messagesContainer); + // } + // }; + // }; } catch (error) { console.error('Error loading chat:', error); @@ -583,12 +575,6 @@ class ChatElement extends HTMLElement { console.log('🎭 Selected role:', this.selectedRole); try { - // console.log('🔍 Début création process message'); - const parentProcessId = this.getAttribute('process-id'); - if (!parentProcessId) { - throw new Error('No parent process ID found'); - } - await this.loadMemberChat(member.sp_addresses); } catch (error) { console.error('❌ Error handling member click:', error); diff --git a/src/services/service.ts b/src/services/service.ts index c181853..79528b0 100755 --- a/src/services/service.ts +++ b/src/services/service.ts @@ -715,7 +715,7 @@ export default class Services { return true; } - rolesContainsUs(role: any): boolean { + rolesContainsUs(roles: any): boolean { try { this.sdkClient.roles_contains_us(JSON.stringify(roles)); } catch (e) { @@ -726,7 +726,7 @@ export default class Services { return true; } - rolesContainsMember(role: any, member: string[]): boolean { + rolesContainsMember(roles: any, member: string[]): boolean { try { this.sdkClient.roles_contains_member(JSON.stringify(roles), member); } catch (e) { @@ -838,7 +838,7 @@ export default class Services { return processes; } - public async getChildrenOfProcess(processId: string): Promise { + public async getChildrenOfProcess(processId: string): Promise { const processes = await this.getProcesses(); const res = []; @@ -849,7 +849,7 @@ export default class Services { const parentIdHash = pcdCommitment['parent_id']; const diff = await this.getDiffByValue(parentIdHash); if (diff && diff['new_value'] === processId) { - res.push(process); + res.push(JSON.stringify(process)); } } catch (e) { continue;