@@ -2,7 +2,7 @@ import { computed, ref, markRaw, type Ref } from 'vue';
22import { Dm3 , Dm3Sdk , type Dm3SdkConfig } from '@dm3-org/dm3-js-sdk' ;
33import { ethers } from 'ethers' ;
44import type { Conversation } from '@dm3-org/dm3-lib-storage' ;
5- import { transformToMessages , transformToRooms } from '@/chatUtils' ;
5+ import { transformToMessages , transformToRooms , type ChatRoom } from '@/chatUtils' ;
66import { computedAsync } from '@vueuse/core' ;
77
88const sepoliaProvider = new ethers . providers . JsonRpcProvider ( "https://eth-sepolia.g.alchemy.com/v2/cBTHRhVcZ3Vt4BOFpA_Hi5DcTB1KQQV1" , {
@@ -29,14 +29,16 @@ const sdk = new Dm3Sdk(configLukso);
2929type UseDm3ChatReturnType = {
3030 loggedInAccount : Ref < string | null > ;
3131 fetchMessages : ( room , options ) => Promise < void > ;
32- getConversations : ( ) => any [ ] ; // TODO: fix types
3332 messages : Ref ; // TODO: fix types
3433 init : ( ) => Promise < void > ;
3534 startTestConversation : ( ) => Promise < void > ;
3635 isReady : Ref < boolean > ;
3736 conversationsPreview : Ref < any [ ] > ;
3837 selectedConversation : Ref < Conversation | null > ;
3938 sendMessage : ( message : any ) => Promise < void > ;
39+ rooms : Ref < ChatRoom [ ] | undefined > ;
40+ roomsLoaded : Ref < boolean > ;
41+ messagesLoaded : Ref < boolean > ;
4042} ;
4143
4244const requestProvider = ( ) : Promise < ethers . providers . ExternalProvider > => {
@@ -100,11 +102,29 @@ export function useDm3Chat(): UseDm3ChatReturnType {
100102
101103 messages . value = transformToMessages ( conversationsPreview . value
102104 . find ( ( c ) => c . contact . account . ensName === room . roomId )
103- ?. messages . list || [ ] ) ;
105+ ?. messages . list . sort ( ( a , b ) => a . envelop . message . metadata . timestamp - b . envelop . message . metadata . timestamp )
106+ || [ ] ) ;
104107
105108 messagesLoaded . value = true ;
106109 }
107110
111+ const _updateMessages = async ( roomId : string ) => {
112+ const convs = dm3Instance . value ?. conversations . list || [ ] ;
113+
114+ console . log ( 'convs' , convs ) ;
115+
116+ await Promise . all ( convs . map ( ( conv ) => {
117+ return conv . messages . init ( ) ;
118+ } ) ) ;
119+
120+ console . log ( 'convs initilaized' , convs ) ;
121+
122+ messages . value = transformToMessages ( convs
123+ . find ( ( c ) => c . contact . account . ensName === roomId )
124+ ?. messages . list . sort ( ( a , b ) => a . envelop . message . metadata . timestamp - b . envelop . message . metadata . timestamp )
125+ || [ ] ) ;
126+ }
127+
108128 const sendMessage = async ( { content, roomId, replyMessage, files, usersTag} ) => {
109129 if ( ! dm3Instance ) {
110130 console . error ( 'dm3Instance is not initialized' ) ;
@@ -115,6 +135,7 @@ export function useDm3Chat(): UseDm3ChatReturnType {
115135
116136 const conv = await dm3Instance . value ?. conversations ?. addConversation ( roomId ) ;
117137 await conv ?. messages . sendMessage ( content ) ;
138+ _updateMessages ( roomId ) ;
118139 }
119140
120141 return {
@@ -129,6 +150,6 @@ export function useDm3Chat(): UseDm3ChatReturnType {
129150 init,
130151 startTestConversation,
131152 conversationsPreview,
132- selectedConversation
153+ selectedConversation
133154 } ;
134155}
0 commit comments