Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 27 additions & 1 deletion packages/api/src/EmbeddedChatApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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)[];
Expand All @@ -36,6 +37,7 @@ export default class EmbeddedChatApi {
retryTime: 2000,
});
this.onMessageCallbacks = [];
this.onThreadMessageCallbacks = [];
this.onMessageDeleteCallbacks = [];
this.onTypingStatusCallbacks = [];
this.typingUsers = [];
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
);
}
}
}
);
Expand Down Expand Up @@ -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)
);
}
}
}
);
Expand Down Expand Up @@ -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) {
Expand Down