Skip to content

Commit 6fbbdc4

Browse files
authored
fix: Do pubSub publish when resending message is succeeded (#860)
[UIKIT-4519](https://sendbird.atlassian.net/browse/UIKIT-4519) ### Issue When a current user resend failed messages from Thread, the failed messages are added to the Channel. But it shouldn't do that. ### Fix * Do pubSub publish when resending message is succeeded ### ChangeLog * Do not share the failed messages from Thread to the other modules, when resending them
1 parent ca947c8 commit 6fbbdc4

File tree

1 file changed

+84
-59
lines changed

1 file changed

+84
-59
lines changed

src/modules/Thread/context/hooks/useResendMessageCallback.ts

Lines changed: 84 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -33,73 +33,98 @@ export default function useResendMessageCallback({
3333
});
3434

3535
if (failedMessage?.isUserMessage?.() || failedMessage?.messageType === MessageType.USER) {
36-
currentChannel?.resendUserMessage(failedMessage as UserMessage)
37-
.then((message) => {
38-
logger.info('Thread | useResendMessageCallback: Resending failedMessage succeeded.', message);
39-
threadDispatcher({
40-
type: ThreadContextActionTypes.SEND_MESSAGE_SUCESS,
41-
payload: { message },
42-
});
43-
pubSub.publish(topics.SEND_USER_MESSAGE, {
44-
channel: currentChannel,
45-
message: message,
46-
publishingModules: [PublishingModuleType.THREAD],
47-
48-
});
49-
})
50-
.catch((error) => {
51-
logger.warning('Thread | useResendMessageCallback: Resending failedMessage failed.', error);
52-
failedMessage.sendingStatus = SendingStatus.FAILED;
53-
threadDispatcher({
54-
type: ThreadContextActionTypes.SEND_MESSAGE_FAILURE,
55-
payload: { message: failedMessage },
36+
try {
37+
currentChannel?.resendMessage(failedMessage as UserMessage)
38+
.onSucceeded((message) => {
39+
logger.info('Thread | useResendMessageCallback: Resending user message succeeded.', message);
40+
threadDispatcher({
41+
type: ThreadContextActionTypes.SEND_MESSAGE_SUCESS,
42+
payload: { message },
43+
});
44+
pubSub.publish(topics.SEND_USER_MESSAGE, {
45+
channel: currentChannel,
46+
message: message,
47+
publishingModules: [PublishingModuleType.THREAD],
48+
});
49+
})
50+
.onFailed((error) => {
51+
logger.warning('Thread | useResendMessageCallback: Resending user message failed.', error);
52+
failedMessage.sendingStatus = SendingStatus.FAILED;
53+
threadDispatcher({
54+
type: ThreadContextActionTypes.SEND_MESSAGE_FAILURE,
55+
payload: { message: failedMessage },
56+
});
5657
});
58+
} catch (err) {
59+
logger.warning('Thread | useResendMessageCallback: Resending user message failed.', err);
60+
failedMessage.sendingStatus = SendingStatus.FAILED;
61+
threadDispatcher({
62+
type: ThreadContextActionTypes.SEND_MESSAGE_FAILURE,
63+
payload: { message: failedMessage },
5764
});
65+
}
5866
} else if (failedMessage?.isFileMessage?.() || failedMessage?.messageType === MessageType.FILE) {
59-
currentChannel?.resendFileMessage?.(failedMessage as FileMessage)
60-
.then((message) => {
61-
logger.info('Thread | useResendMessageCallback: Resending failedMessage succeeded.', message);
62-
threadDispatcher({
63-
type: ThreadContextActionTypes.SEND_MESSAGE_SUCESS,
64-
payload: { message },
65-
});
66-
})
67-
.catch((error) => {
68-
logger.warning('Thread | useResendMessageCallback: Resending failedMessage failed.', error);
69-
failedMessage.sendingStatus = SendingStatus.FAILED;
70-
threadDispatcher({
71-
type: ThreadContextActionTypes.SEND_MESSAGE_FAILURE,
72-
payload: { message: failedMessage },
73-
});
74-
pubSub.publish(topics.SEND_FILE_MESSAGE, {
75-
channel: currentChannel,
76-
message: failedMessage,
77-
publishingModules: [PublishingModuleType.THREAD],
67+
try {
68+
currentChannel?.resendMessage?.(failedMessage as FileMessage)
69+
.onSucceeded((message) => {
70+
logger.info('Thread | useResendMessageCallback: Resending file message succeeded.', message);
71+
threadDispatcher({
72+
type: ThreadContextActionTypes.SEND_MESSAGE_SUCESS,
73+
payload: { message },
74+
});
75+
pubSub.publish(topics.SEND_FILE_MESSAGE, {
76+
channel: currentChannel,
77+
message: failedMessage,
78+
publishingModules: [PublishingModuleType.THREAD],
79+
});
80+
})
81+
.onFailed((error) => {
82+
logger.warning('Thread | useResendMessageCallback: Resending file message failed.', error);
83+
failedMessage.sendingStatus = SendingStatus.FAILED;
84+
threadDispatcher({
85+
type: ThreadContextActionTypes.SEND_MESSAGE_FAILURE,
86+
payload: { message: failedMessage },
87+
});
7888
});
89+
} catch (err) {
90+
logger.warning('Thread | useResendMessageCallback: Resending file message failed.', err);
91+
failedMessage.sendingStatus = SendingStatus.FAILED;
92+
threadDispatcher({
93+
type: ThreadContextActionTypes.SEND_MESSAGE_FAILURE,
94+
payload: { message: failedMessage },
7995
});
96+
}
8097
} else if (failedMessage?.isMultipleFilesMessage?.()) {
81-
currentChannel?.resendMessage?.(failedMessage as MultipleFilesMessage)
82-
// TODO: Handle on pending event (Same goes for the other message types).
83-
// TODO: Handle on file info upload event.
84-
.onSucceeded((message: MultipleFilesMessage) => {
85-
logger.info('Thread | useResendMessageCallback: Resending failedMessage succeeded.', message);
86-
threadDispatcher({
87-
type: ThreadContextActionTypes.SEND_MESSAGE_SUCESS,
88-
payload: { message },
89-
});
90-
})
91-
.onFailed((error: Error, message: MultipleFilesMessage) => {
92-
logger.warning('Thread | useResendMessageCallback: Resending failedMessage failed.', error);
93-
threadDispatcher({
94-
type: ThreadContextActionTypes.SEND_MESSAGE_FAILURE,
95-
payload: { message },
96-
});
97-
pubSub.publish(topics.SEND_FILE_MESSAGE, {
98-
channel: currentChannel,
99-
message,
100-
publishingModules: [PublishingModuleType.THREAD],
98+
try {
99+
currentChannel?.resendMessage?.(failedMessage as MultipleFilesMessage)
100+
// TODO: Handle on pending event (Same goes for the other message types).
101+
// TODO: Handle on file info upload event.
102+
.onSucceeded((message: MultipleFilesMessage) => {
103+
logger.info('Thread | useResendMessageCallback: Resending MFM succeeded.', message);
104+
threadDispatcher({
105+
type: ThreadContextActionTypes.SEND_MESSAGE_SUCESS,
106+
payload: { message },
107+
});
108+
pubSub.publish(topics.SEND_FILE_MESSAGE, {
109+
channel: currentChannel,
110+
message,
111+
publishingModules: [PublishingModuleType.THREAD],
112+
});
113+
})
114+
.onFailed((error: Error, message: MultipleFilesMessage) => {
115+
logger.warning('Thread | useResendMessageCallback: Resending MFM failed.', error);
116+
threadDispatcher({
117+
type: ThreadContextActionTypes.SEND_MESSAGE_FAILURE,
118+
payload: { message },
119+
});
101120
});
121+
} catch (err) {
122+
logger.warning('Thread | useResendMessageCallback: Resending MFM failed.', err);
123+
threadDispatcher({
124+
type: ThreadContextActionTypes.SEND_MESSAGE_FAILURE,
125+
payload: { message: failedMessage },
102126
});
127+
}
103128
} else {
104129
logger.warning('Thread | useResendMessageCallback: Message is not resendable.', failedMessage);
105130
failedMessage.sendingStatus = SendingStatus.FAILED;

0 commit comments

Comments
 (0)