diff --git a/packages/api/src/EmbeddedChatApi.ts b/packages/api/src/EmbeddedChatApi.ts index 6f2408414..99a51f3eb 100644 --- a/packages/api/src/EmbeddedChatApi.ts +++ b/packages/api/src/EmbeddedChatApi.ts @@ -14,6 +14,7 @@ export default class EmbeddedChatApi { rid: string; sdk: DDPSDK; onMessageCallbacks: ((message: any) => void)[]; + onThreadMessageCallbacks: ((message: any) => void)[]; onMessageDeleteCallbacks: ((messageId: string) => void)[]; onTypingStatusCallbacks: ((users: string[]) => void)[]; onActionTriggeredCallbacks: ((data: any) => void)[]; @@ -36,6 +37,7 @@ export default class EmbeddedChatApi { retryTime: 2000, }); this.onMessageCallbacks = []; + this.onThreadMessageCallbacks = []; this.onMessageDeleteCallbacks = []; this.onTypingStatusCallbacks = []; this.typingUsers = []; @@ -236,7 +238,6 @@ export default class EmbeddedChatApi { /** * All subscriptions are implemented here. - * TODO: Add logic to call thread message event listeners. To be done after thread implementation */ async connect(isChannelPrivate = false) { // Guard against concurrent connect() calls (e.g. React StrictMode double-invoke) @@ -293,6 +294,11 @@ export default class EmbeddedChatApi { const message = this._normalizeMessage(data); if (message) { this.onMessageCallbacks.forEach((callback) => callback(message)); + if (message.tmid) { + this.onThreadMessageCallbacks.forEach((callback) => + callback(message) + ); + } } } ); @@ -345,6 +351,11 @@ export default class EmbeddedChatApi { if (message) { message.renderType = "blocks"; this.onMessageCallbacks.forEach((callback) => callback(message)); + if (message.tmid) { + this.onThreadMessageCallbacks.forEach((callback) => + callback(message) + ); + } } } ); @@ -379,6 +390,21 @@ export default class EmbeddedChatApi { ); } + async addThreadMessageListener(callback: (message: any) => void) { + const idx = this.onThreadMessageCallbacks.findIndex((c) => c === callback); + if (idx !== -1) { + this.onThreadMessageCallbacks[idx] = callback; + } else { + this.onThreadMessageCallbacks.push(callback); + } + } + + async removeThreadMessageListener(callback: (message: any) => void) { + this.onThreadMessageCallbacks = this.onThreadMessageCallbacks.filter( + (c) => c !== callback + ); + } + async addMessageDeleteListener(callback: (messageId: string) => void) { const idx = this.onMessageDeleteCallbacks.findIndex((c) => c === callback); if (idx !== -1) {