From ef77616d5d3b1ac6bb6c3ed42589fd850d3f4c32 Mon Sep 17 00:00:00 2001 From: swarnendusahu10-dotcom Date: Tue, 27 Oct 2026 10:28:21 +0530 Subject: [PATCH] feat(api): implement thread message event listener callbacks --- packages/api/src/EmbeddedChatApi.ts | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) 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) {