Skip to content

Commit d8c6c30

Browse files
committed
update room after sending message
1 parent b6b5c52 commit d8c6c30

File tree

2 files changed

+29
-6
lines changed

2 files changed

+29
-6
lines changed

packages/messenger-vue-demo/src/chatUtils.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ export type ChatRoom = {
6767
saved: lastMessage?.indicator === MessageIndicator.RECEIVED,
6868
distributed: lastMessage?.indicator === MessageIndicator.SENT,
6969
seen: lastMessage?.indicator === MessageIndicator.READED,
70-
new: lastMessage?.indicator !== MessageIndicator.READED,
70+
new: lastMessage?.indicator !== MessageIndicator.READED, // TODO: and not my own message
7171
},
7272
users: allParticipants,
7373
typingUsers: [], // Default empty
@@ -86,6 +86,7 @@ export type ChatRoom = {
8686
const senderId = message.envelop.message.metadata.from ? String(message.envelop.message.metadata.from) : "unknown_sender";
8787

8888
return {
89+
new: false,
8990
_id: _id,
9091
indexId: message.indexId || null, // Assuming indexId is available or null
9192
content: message.envelop.message.message || "No content",
@@ -97,7 +98,8 @@ export type ChatRoom = {
9798
system: message.system || false,
9899
saved: message.indicator === MessageIndicator.RECEIVED,
99100
distributed: message.indicator === MessageIndicator.SENT,
100-
seen: message.indicator === MessageIndicator.READED,
101+
// seen: message.indicator === MessageIndicator.READED, // TODO: and not my own message
102+
seen: true,
101103
deleted: message.deleted || false,
102104
failure: message.failure || false,
103105
disableActions: message.disableActions || false,

packages/messenger-vue-demo/src/composables/chat.ts

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { computed, ref, markRaw, type Ref } from 'vue';
22
import { Dm3, Dm3Sdk, type Dm3SdkConfig } from '@dm3-org/dm3-js-sdk';
33
import {ethers} from 'ethers';
44
import type { Conversation } from '@dm3-org/dm3-lib-storage';
5-
import { transformToMessages, transformToRooms } from '@/chatUtils';
5+
import { transformToMessages, transformToRooms, type ChatRoom } from '@/chatUtils';
66
import { computedAsync } from '@vueuse/core';
77

88
const sepoliaProvider = new ethers.providers.JsonRpcProvider("https://eth-sepolia.g.alchemy.com/v2/cBTHRhVcZ3Vt4BOFpA_Hi5DcTB1KQQV1", {
@@ -29,14 +29,16 @@ const sdk = new Dm3Sdk(configLukso);
2929
type 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

4244
const 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

Comments
 (0)