@sendbird/uikit-chat-hooks 3.0.4-rc.1 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/channel/useChannelMessagesReducer.js +60 -11
- package/lib/commonjs/channel/useChannelMessagesReducer.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +94 -83
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +44 -26
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
- package/lib/commonjs/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js +46 -28
- package/lib/commonjs/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js.map +1 -1
- package/lib/commonjs/types.js.map +1 -1
- package/lib/module/channel/useChannelMessagesReducer.js +61 -12
- package/lib/module/channel/useChannelMessagesReducer.js.map +1 -1
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +96 -85
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +44 -26
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
- package/lib/module/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js +46 -28
- package/lib/module/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js.map +1 -1
- package/lib/module/types.js.map +1 -1
- package/lib/typescript/src/types.d.ts +1 -0
- package/package.json +6 -5
- package/src/channel/useChannelMessagesReducer.ts +66 -17
- package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.ts +75 -84
- package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.ts +26 -22
- package/src/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.ts +31 -26
- package/src/types.ts +1 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useEffect, useRef } from 'react';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { CollectionEventSource } from '@sendbird/chat';
|
|
3
|
+
import { MessageCollectionInitPolicy, MessageFilter } from '@sendbird/chat/groupChannel';
|
|
4
|
+
import { Logger, confirmAndMarkAsRead, isDifferentChannel, isMyMessage, isSendableMessage, useForceUpdate, useFreshCallback, useUniqHandlerId } from '@sendbird/uikit-utils';
|
|
4
5
|
import { useChannelHandler } from '../../handler/useChannelHandler';
|
|
5
6
|
import { useChannelMessagesReducer } from '../useChannelMessagesReducer';
|
|
6
7
|
const MESSAGE_LIMIT = {
|
|
@@ -23,9 +24,12 @@ function isNotEmpty(arr) {
|
|
|
23
24
|
if (!arr) return false;
|
|
24
25
|
return arr.length !== 0;
|
|
25
26
|
}
|
|
27
|
+
function shouldUseSearchLimit(startingPoint) {
|
|
28
|
+
return startingPoint < Date.now();
|
|
29
|
+
}
|
|
26
30
|
export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, options) => {
|
|
27
31
|
const initialStartingPoint = (options === null || options === void 0 ? void 0 : options.startingPoint) ?? Number.MAX_SAFE_INTEGER;
|
|
28
|
-
const initialLimit =
|
|
32
|
+
const initialLimit = shouldUseSearchLimit(initialStartingPoint) ? MESSAGE_LIMIT.SEARCH : MESSAGE_LIMIT.DEFAULT;
|
|
29
33
|
const forceUpdate = useForceUpdate();
|
|
30
34
|
const collectionRef = useRef();
|
|
31
35
|
const collectionInitializedRef = useRef(false);
|
|
@@ -45,9 +49,9 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
45
49
|
const channelMarkAsRead = async source => {
|
|
46
50
|
try {
|
|
47
51
|
switch (source) {
|
|
48
|
-
case
|
|
49
|
-
case
|
|
50
|
-
case
|
|
52
|
+
case CollectionEventSource.EVENT_MESSAGE_RECEIVED:
|
|
53
|
+
case CollectionEventSource.EVENT_MESSAGE_SENT_SUCCESS:
|
|
54
|
+
case CollectionEventSource.SYNC_MESSAGE_FILL:
|
|
51
55
|
case undefined:
|
|
52
56
|
await confirmAndMarkAsRead([channel]);
|
|
53
57
|
break;
|
|
@@ -56,77 +60,66 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
56
60
|
Logger.warn('[useGroupChannelMessagesWithCollection/channelMarkAsRead]', e);
|
|
57
61
|
}
|
|
58
62
|
};
|
|
59
|
-
const
|
|
63
|
+
const updateNewMessagesReceived = (source, messages) => {
|
|
64
|
+
const incomingMessages = messages.filter(it => {
|
|
65
|
+
var _sdk$currentUser;
|
|
66
|
+
return !isMyMessage(it, (_sdk$currentUser = sdk.currentUser) === null || _sdk$currentUser === void 0 ? void 0 : _sdk$currentUser.userId);
|
|
67
|
+
});
|
|
68
|
+
if (incomingMessages.length > 0) {
|
|
69
|
+
switch (source) {
|
|
70
|
+
case CollectionEventSource.EVENT_MESSAGE_RECEIVED:
|
|
71
|
+
case CollectionEventSource.SYNC_MESSAGE_FILL:
|
|
72
|
+
{
|
|
73
|
+
var _options$shouldCountN, _sdk$currentUser2, _options$onMessagesRe;
|
|
74
|
+
if (options !== null && options !== void 0 && (_options$shouldCountN = options.shouldCountNewMessages) !== null && _options$shouldCountN !== void 0 && _options$shouldCountN.call(options)) updateNewMessages(incomingMessages, false, (_sdk$currentUser2 = sdk.currentUser) === null || _sdk$currentUser2 === void 0 ? void 0 : _sdk$currentUser2.userId);
|
|
75
|
+
options === null || options === void 0 ? void 0 : (_options$onMessagesRe = options.onMessagesReceived) === null || _options$onMessagesRe === void 0 ? void 0 : _options$onMessagesRe.call(options, incomingMessages);
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
const updateUnsentMessages = () => {
|
|
82
|
+
var _sdk$currentUser3, _sdk$currentUser4;
|
|
60
83
|
const {
|
|
61
84
|
pendingMessages,
|
|
62
85
|
failedMessages
|
|
63
86
|
} = collectionRef.current ?? {};
|
|
64
|
-
if (isNotEmpty(pendingMessages)) updateMessages(pendingMessages, false, sdk.currentUser.userId);
|
|
65
|
-
if (isNotEmpty(failedMessages)) updateMessages(failedMessages, false, sdk.currentUser.userId);
|
|
87
|
+
if (isNotEmpty(pendingMessages)) updateMessages(pendingMessages, false, (_sdk$currentUser3 = sdk.currentUser) === null || _sdk$currentUser3 === void 0 ? void 0 : _sdk$currentUser3.userId);
|
|
88
|
+
if (isNotEmpty(failedMessages)) updateMessages(failedMessages, false, (_sdk$currentUser4 = sdk.currentUser) === null || _sdk$currentUser4 === void 0 ? void 0 : _sdk$currentUser4.userId);
|
|
66
89
|
};
|
|
67
90
|
const init = useFreshCallback(async (startingPoint, limit, callback) => {
|
|
68
|
-
var _collectionRef$curren, _collectionRef$curren2;
|
|
91
|
+
var _collectionRef$curren, _sdk$currentUser5, _collectionRef$curren2;
|
|
69
92
|
if (collectionRef.current) (_collectionRef$curren = collectionRef.current) === null || _collectionRef$curren === void 0 ? void 0 : _collectionRef$curren.dispose();
|
|
70
93
|
channelMarkAsRead();
|
|
71
|
-
updateNewMessages([], true, sdk.currentUser.userId);
|
|
94
|
+
updateNewMessages([], true, (_sdk$currentUser5 = sdk.currentUser) === null || _sdk$currentUser5 === void 0 ? void 0 : _sdk$currentUser5.userId);
|
|
72
95
|
collectionInitializedRef.current = false;
|
|
73
96
|
collectionRef.current = createMessageCollection(channel, limit, {
|
|
74
97
|
...options,
|
|
75
98
|
startingPoint
|
|
76
99
|
});
|
|
77
100
|
(_collectionRef$curren2 = collectionRef.current) === null || _collectionRef$curren2 === void 0 ? void 0 : _collectionRef$curren2.setMessageCollectionHandler({
|
|
78
|
-
onMessagesAdded: (
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
case MessageEventSource.EVENT_MESSAGE_SENT_SUCCESS:
|
|
84
|
-
case MessageEventSource.EVENT_MESSAGE_SENT_FAILED:
|
|
85
|
-
return !isMyMessage(it, sdk.currentUser.userId);
|
|
86
|
-
default:
|
|
87
|
-
return true;
|
|
88
|
-
}
|
|
89
|
-
});
|
|
90
|
-
if (incomingMessages.length > 0) {
|
|
91
|
-
var _options$shouldCountN;
|
|
92
|
-
updateMessages(incomingMessages, false, sdk.currentUser.userId);
|
|
93
|
-
if (options !== null && options !== void 0 && (_options$shouldCountN = options.shouldCountNewMessages) !== null && _options$shouldCountN !== void 0 && _options$shouldCountN.call(options)) {
|
|
94
|
-
updateNewMessages(incomingMessages, false, sdk.currentUser.userId);
|
|
95
|
-
}
|
|
96
|
-
switch (_.source) {
|
|
97
|
-
case MessageEventSource.EVENT_MESSAGE_RECEIVED:
|
|
98
|
-
case MessageEventSource.SYNC_MESSAGE_FILL:
|
|
99
|
-
{
|
|
100
|
-
var _options$onMessagesRe;
|
|
101
|
-
options === null || options === void 0 ? void 0 : (_options$onMessagesRe = options.onMessagesReceived) === null || _options$onMessagesRe === void 0 ? void 0 : _options$onMessagesRe.call(options, incomingMessages);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
101
|
+
onMessagesAdded: (ctx, __, messages) => {
|
|
102
|
+
var _sdk$currentUser6;
|
|
103
|
+
channelMarkAsRead(ctx.source);
|
|
104
|
+
updateNewMessagesReceived(ctx.source, messages);
|
|
105
|
+
updateMessages(messages, false, (_sdk$currentUser6 = sdk.currentUser) === null || _sdk$currentUser6 === void 0 ? void 0 : _sdk$currentUser6.userId);
|
|
105
106
|
},
|
|
106
|
-
onMessagesUpdated: (
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
});
|
|
116
|
-
if (incomingMessages.length > 0) {
|
|
117
|
-
var _options$shouldCountN2;
|
|
118
|
-
// NOTE: admin message is not added via onMessagesAdded handler, not checked yet is this a bug.
|
|
119
|
-
updateMessages(messages, false, sdk.currentUser.userId);
|
|
120
|
-
if (options !== null && options !== void 0 && (_options$shouldCountN2 = options.shouldCountNewMessages) !== null && _options$shouldCountN2 !== void 0 && _options$shouldCountN2.call(options)) {
|
|
121
|
-
if (_.source === MessageEventSource.EVENT_MESSAGE_RECEIVED) {
|
|
122
|
-
updateNewMessages(messages, false, sdk.currentUser.userId);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
107
|
+
onMessagesUpdated: (ctx, __, messages) => {
|
|
108
|
+
var _sdk$currentUser7;
|
|
109
|
+
channelMarkAsRead(ctx.source);
|
|
110
|
+
updateNewMessagesReceived(ctx.source, messages); // NOTE: admin message is not added via onMessagesAdded handler, not checked yet is this a bug.
|
|
111
|
+
|
|
112
|
+
updateMessages(messages, false, (_sdk$currentUser7 = sdk.currentUser) === null || _sdk$currentUser7 === void 0 ? void 0 : _sdk$currentUser7.userId);
|
|
113
|
+
if (ctx.source === CollectionEventSource.EVENT_MESSAGE_UPDATED) {
|
|
114
|
+
var _options$onMessagesUp;
|
|
115
|
+
options === null || options === void 0 ? void 0 : (_options$onMessagesUp = options.onMessagesUpdated) === null || _options$onMessagesUp === void 0 ? void 0 : _options$onMessagesUp.call(options, messages);
|
|
125
116
|
}
|
|
126
117
|
},
|
|
127
|
-
onMessagesDeleted: (_, __,
|
|
128
|
-
|
|
129
|
-
|
|
118
|
+
onMessagesDeleted: (_, __, ___, messages) => {
|
|
119
|
+
const msgIds = messages.map(it => it.messageId);
|
|
120
|
+
const reqIds = messages.filter(isSendableMessage).map(it => it.reqId);
|
|
121
|
+
deleteMessages(msgIds, reqIds);
|
|
122
|
+
deleteNewMessages(msgIds, reqIds);
|
|
130
123
|
},
|
|
131
124
|
onChannelDeleted: () => {
|
|
132
125
|
var _options$onChannelDel;
|
|
@@ -142,19 +135,20 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
142
135
|
}
|
|
143
136
|
});
|
|
144
137
|
collectionRef.current.initialize(MessageCollectionInitPolicy.CACHE_AND_REPLACE_BY_API).onCacheResult((err, messages) => {
|
|
145
|
-
if (err) sdk.isCacheEnabled && Logger.error('[useGroupChannelMessagesWithCollection/onCacheResult]', err);else {
|
|
138
|
+
if (err) sdk.isCacheEnabled && Logger.error('[useGroupChannelMessagesWithCollection/onCacheResult]', err);else if (messages) {
|
|
139
|
+
var _sdk$currentUser8;
|
|
146
140
|
Logger.debug('[useGroupChannelMessagesWithCollection/onCacheResult]', 'message length:', messages.length);
|
|
147
|
-
updateMessages(messages, true, sdk.currentUser.userId);
|
|
148
|
-
|
|
141
|
+
updateMessages(messages, true, (_sdk$currentUser8 = sdk.currentUser) === null || _sdk$currentUser8 === void 0 ? void 0 : _sdk$currentUser8.userId);
|
|
142
|
+
updateUnsentMessages();
|
|
149
143
|
}
|
|
150
144
|
callback === null || callback === void 0 ? void 0 : callback();
|
|
151
145
|
}).onApiResult((err, messages) => {
|
|
152
|
-
if (err) Logger.warn('[useGroupChannelMessagesWithCollection/onApiResult]', err);else {
|
|
153
|
-
var _options$onMessagesRe2;
|
|
146
|
+
if (err) Logger.warn('[useGroupChannelMessagesWithCollection/onApiResult]', err);else if (messages) {
|
|
147
|
+
var _sdk$currentUser9, _options$onMessagesRe2;
|
|
154
148
|
Logger.debug('[useGroupChannelMessagesWithCollection/onApiResult]', 'message length:', messages.length);
|
|
155
|
-
updateMessages(messages, true, sdk.currentUser.userId);
|
|
149
|
+
updateMessages(messages, true, (_sdk$currentUser9 = sdk.currentUser) === null || _sdk$currentUser9 === void 0 ? void 0 : _sdk$currentUser9.userId);
|
|
156
150
|
if (!(options !== null && options !== void 0 && options.startingPoint)) options === null || options === void 0 ? void 0 : (_options$onMessagesRe2 = options.onMessagesReceived) === null || _options$onMessagesRe2 === void 0 ? void 0 : _options$onMessagesRe2.call(options, messages);
|
|
157
|
-
if (sdk.isCacheEnabled)
|
|
151
|
+
if (sdk.isCacheEnabled) updateUnsentMessages();
|
|
158
152
|
}
|
|
159
153
|
collectionInitializedRef.current = true;
|
|
160
154
|
callback === null || callback === void 0 ? void 0 : callback();
|
|
@@ -163,7 +157,8 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
163
157
|
useChannelHandler(sdk, handlerId, {
|
|
164
158
|
onUserBanned(channel, bannedUser) {
|
|
165
159
|
if (channel.isGroupChannel() && !isDifferentChannel(channel, channel)) {
|
|
166
|
-
|
|
160
|
+
var _sdk$currentUser10;
|
|
161
|
+
if (bannedUser.userId === ((_sdk$currentUser10 = sdk.currentUser) === null || _sdk$currentUser10 === void 0 ? void 0 : _sdk$currentUser10.userId)) {
|
|
167
162
|
var _options$onChannelDel2;
|
|
168
163
|
options === null || options === void 0 ? void 0 : (_options$onChannelDel2 = options.onChannelDeleted) === null || _options$onChannelDel2 === void 0 ? void 0 : _options$onChannelDel2.call(options);
|
|
169
164
|
} else {
|
|
@@ -178,7 +173,7 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
178
173
|
updateLoading(true);
|
|
179
174
|
init(initialStartingPoint, initialLimit, () => updateLoading(false));
|
|
180
175
|
}, 0);
|
|
181
|
-
}, [channel.url, userId]);
|
|
176
|
+
}, [channel.url, userId, options === null || options === void 0 ? void 0 : options.replyType]);
|
|
182
177
|
useEffect(() => {
|
|
183
178
|
return () => {
|
|
184
179
|
var _collectionRef$curren3;
|
|
@@ -193,9 +188,9 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
193
188
|
var _collectionRef$curren4;
|
|
194
189
|
if (collectionRef.current && (_collectionRef$curren4 = collectionRef.current) !== null && _collectionRef$curren4 !== void 0 && _collectionRef$curren4.hasPrevious) {
|
|
195
190
|
try {
|
|
196
|
-
var _collectionRef$curren5;
|
|
191
|
+
var _collectionRef$curren5, _sdk$currentUser11;
|
|
197
192
|
const list = await ((_collectionRef$curren5 = collectionRef.current) === null || _collectionRef$curren5 === void 0 ? void 0 : _collectionRef$curren5.loadPrevious());
|
|
198
|
-
updateMessages(list, false, sdk.currentUser.userId);
|
|
193
|
+
updateMessages(list, false, (_sdk$currentUser11 = sdk.currentUser) === null || _sdk$currentUser11 === void 0 ? void 0 : _sdk$currentUser11.userId);
|
|
199
194
|
} catch {}
|
|
200
195
|
}
|
|
201
196
|
});
|
|
@@ -210,9 +205,9 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
210
205
|
var _collectionRef$curren6;
|
|
211
206
|
if (collectionRef.current && (_collectionRef$curren6 = collectionRef.current) !== null && _collectionRef$curren6 !== void 0 && _collectionRef$curren6.hasNext) {
|
|
212
207
|
try {
|
|
213
|
-
var _collectionRef$curren7;
|
|
208
|
+
var _collectionRef$curren7, _sdk$currentUser12;
|
|
214
209
|
const fetchedList = await ((_collectionRef$curren7 = collectionRef.current) === null || _collectionRef$curren7 === void 0 ? void 0 : _collectionRef$curren7.loadNext());
|
|
215
|
-
updateMessages(fetchedList, false, sdk.currentUser.userId);
|
|
210
|
+
updateMessages(fetchedList, false, (_sdk$currentUser12 = sdk.currentUser) === null || _sdk$currentUser12 === void 0 ? void 0 : _sdk$currentUser12.userId);
|
|
216
211
|
} catch {}
|
|
217
212
|
}
|
|
218
213
|
});
|
|
@@ -227,16 +222,21 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
227
222
|
return new Promise((resolve, reject) => {
|
|
228
223
|
channel.sendUserMessage(params).onPending(pendingMessage => {
|
|
229
224
|
if (pendingMessage.isUserMessage()) {
|
|
225
|
+
var _sdk$currentUser13;
|
|
230
226
|
onPending === null || onPending === void 0 ? void 0 : onPending(pendingMessage);
|
|
231
|
-
updateMessages([pendingMessage], false, sdk.currentUser.userId);
|
|
227
|
+
updateMessages([pendingMessage], false, (_sdk$currentUser13 = sdk.currentUser) === null || _sdk$currentUser13 === void 0 ? void 0 : _sdk$currentUser13.userId);
|
|
232
228
|
}
|
|
233
229
|
}).onSucceeded(sentMessage => {
|
|
234
230
|
if (sentMessage.isUserMessage()) {
|
|
235
|
-
|
|
231
|
+
var _sdk$currentUser14;
|
|
232
|
+
updateMessages([sentMessage], false, (_sdk$currentUser14 = sdk.currentUser) === null || _sdk$currentUser14 === void 0 ? void 0 : _sdk$currentUser14.userId);
|
|
236
233
|
resolve(sentMessage);
|
|
237
234
|
}
|
|
238
235
|
}).onFailed((err, failedMessage) => {
|
|
239
|
-
|
|
236
|
+
if (failedMessage) {
|
|
237
|
+
var _sdk$currentUser15;
|
|
238
|
+
updateMessages([failedMessage], false, (_sdk$currentUser15 = sdk.currentUser) === null || _sdk$currentUser15 === void 0 ? void 0 : _sdk$currentUser15.userId);
|
|
239
|
+
}
|
|
240
240
|
reject(err);
|
|
241
241
|
});
|
|
242
242
|
});
|
|
@@ -245,37 +245,45 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
245
245
|
return new Promise((resolve, reject) => {
|
|
246
246
|
channel.sendFileMessage(params).onPending(pendingMessage => {
|
|
247
247
|
if (pendingMessage.isFileMessage()) {
|
|
248
|
-
|
|
248
|
+
var _sdk$currentUser16;
|
|
249
|
+
updateMessages([pendingMessage], false, (_sdk$currentUser16 = sdk.currentUser) === null || _sdk$currentUser16 === void 0 ? void 0 : _sdk$currentUser16.userId);
|
|
249
250
|
onPending === null || onPending === void 0 ? void 0 : onPending(pendingMessage);
|
|
250
251
|
}
|
|
251
252
|
}).onSucceeded(sentMessage => {
|
|
252
253
|
if (sentMessage.isFileMessage()) {
|
|
253
|
-
|
|
254
|
+
var _sdk$currentUser17;
|
|
255
|
+
updateMessages([sentMessage], false, (_sdk$currentUser17 = sdk.currentUser) === null || _sdk$currentUser17 === void 0 ? void 0 : _sdk$currentUser17.userId);
|
|
254
256
|
resolve(sentMessage);
|
|
255
257
|
}
|
|
256
258
|
}).onFailed((err, failedMessage) => {
|
|
257
|
-
|
|
259
|
+
if (failedMessage) {
|
|
260
|
+
var _sdk$currentUser18;
|
|
261
|
+
updateMessages([failedMessage], false, (_sdk$currentUser18 = sdk.currentUser) === null || _sdk$currentUser18 === void 0 ? void 0 : _sdk$currentUser18.userId);
|
|
262
|
+
}
|
|
258
263
|
reject(err);
|
|
259
264
|
});
|
|
260
265
|
});
|
|
261
266
|
});
|
|
262
267
|
const updateUserMessage = useFreshCallback(async (messageId, params) => {
|
|
268
|
+
var _sdk$currentUser19;
|
|
263
269
|
const updatedMessage = await channel.updateUserMessage(messageId, params);
|
|
264
|
-
updateMessages([updatedMessage], false, sdk.currentUser.userId);
|
|
270
|
+
updateMessages([updatedMessage], false, (_sdk$currentUser19 = sdk.currentUser) === null || _sdk$currentUser19 === void 0 ? void 0 : _sdk$currentUser19.userId);
|
|
265
271
|
return updatedMessage;
|
|
266
272
|
});
|
|
267
273
|
const updateFileMessage = useFreshCallback(async (messageId, params) => {
|
|
274
|
+
var _sdk$currentUser20;
|
|
268
275
|
const updatedMessage = await channel.updateFileMessage(messageId, params);
|
|
269
|
-
updateMessages([updatedMessage], false, sdk.currentUser.userId);
|
|
276
|
+
updateMessages([updatedMessage], false, (_sdk$currentUser20 = sdk.currentUser) === null || _sdk$currentUser20 === void 0 ? void 0 : _sdk$currentUser20.userId);
|
|
270
277
|
return updatedMessage;
|
|
271
278
|
});
|
|
272
279
|
const resendMessage = useFreshCallback(async failedMessage => {
|
|
280
|
+
var _sdk$currentUser21;
|
|
273
281
|
const resentMessage = await (() => {
|
|
274
282
|
if (failedMessage.isUserMessage()) return channel.resendUserMessage(failedMessage);
|
|
275
283
|
if (failedMessage.isFileMessage()) return channel.resendFileMessage(failedMessage);
|
|
276
284
|
return null;
|
|
277
285
|
})();
|
|
278
|
-
if (resentMessage) updateMessages([resentMessage], false, sdk.currentUser.userId);
|
|
286
|
+
if (resentMessage) updateMessages([resentMessage], false, (_sdk$currentUser21 = sdk.currentUser) === null || _sdk$currentUser21 === void 0 ? void 0 : _sdk$currentUser21.userId);
|
|
279
287
|
});
|
|
280
288
|
const deleteMessage = useFreshCallback(async message => {
|
|
281
289
|
if (message.sendingStatus === 'succeeded') {
|
|
@@ -291,12 +299,15 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
291
299
|
}
|
|
292
300
|
});
|
|
293
301
|
const resetNewMessages = useFreshCallback(() => {
|
|
294
|
-
|
|
302
|
+
var _sdk$currentUser22;
|
|
303
|
+
updateNewMessages([], true, (_sdk$currentUser22 = sdk.currentUser) === null || _sdk$currentUser22 === void 0 ? void 0 : _sdk$currentUser22.userId);
|
|
295
304
|
});
|
|
296
305
|
const resetWithStartingPoint = useFreshCallback((startingPoint, callback) => {
|
|
306
|
+
var _sdk$currentUser23;
|
|
307
|
+
const limit = shouldUseSearchLimit(startingPoint) ? MESSAGE_LIMIT.SEARCH : MESSAGE_LIMIT.DEFAULT;
|
|
297
308
|
updateLoading(true);
|
|
298
|
-
updateMessages([], true, sdk.currentUser.userId);
|
|
299
|
-
init(startingPoint,
|
|
309
|
+
updateMessages([], true, (_sdk$currentUser23 = sdk.currentUser) === null || _sdk$currentUser23 === void 0 ? void 0 : _sdk$currentUser23.userId);
|
|
310
|
+
init(startingPoint, limit, () => {
|
|
300
311
|
updateLoading(false);
|
|
301
312
|
callback === null || callback === void 0 ? void 0 : callback();
|
|
302
313
|
});
|
package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useRef","MessageCollectionInitPolicy","MessageEventSource","MessageFilter","Logger","confirmAndMarkAsRead","isDifferentChannel","isMyMessage","useForceUpdate","useFreshCallback","useUniqHandlerId","useChannelHandler","useChannelMessagesReducer","MESSAGE_LIMIT","DEFAULT","SEARCH","createMessageCollection","channel","limit","options","collectionCreator","startingPoint","filter","replyType","isNotEmpty","arr","length","useGroupChannelMessagesWithCollection","sdk","userId","initialStartingPoint","Number","MAX_SAFE_INTEGER","initialLimit","forceUpdate","collectionRef","collectionInitializedRef","handlerId","loading","refreshing","messages","newMessages","updateMessages","updateNewMessages","deleteNewMessages","deleteMessages","updateLoading","updateRefreshing","sortComparator","channelMarkAsRead","source","EVENT_MESSAGE_RECEIVED","EVENT_MESSAGE_SENT_SUCCESS","SYNC_MESSAGE_FILL","undefined","e","warn","updateUnsendMessages","pendingMessages","failedMessages","current","currentUser","init","callback","_collectionRef$curren","_collectionRef$curren2","dispose","setMessageCollectionHandler","onMessagesAdded","_","__","incomingMessages","it","EVENT_MESSAGE_SENT_PENDING","EVENT_MESSAGE_SENT_FAILED","_options$shouldCountN","shouldCountNewMessages","call","_options$onMessagesRe","onMessagesReceived","onMessagesUpdated","EVENT_MESSAGE_UPDATED","_options$shouldCountN2","onMessagesDeleted","messageIds","onChannelDeleted","_options$onChannelDel","onChannelUpdated","eventChannel","isGroupChannel","onHugeGapDetected","initialize","CACHE_AND_REPLACE_BY_API","onCacheResult","err","isCacheEnabled","error","debug","onApiResult","_options$onMessagesRe2","onUserBanned","bannedUser","_options$onChannelDel2","setTimeout","url","_collectionRef$curren3","refresh","prev","_collectionRef$curren4","hasPrevious","_collectionRef$curren5","list","loadPrevious","hasPrev","next","_collectionRef$curren6","hasNext","_collectionRef$curren7","fetchedList","loadNext","sendUserMessage","params","onPending","Promise","resolve","reject","pendingMessage","isUserMessage","onSucceeded","sentMessage","onFailed","failedMessage","sendFileMessage","isFileMessage","updateUserMessage","messageId","updatedMessage","updateFileMessage","resendMessage","resentMessage","resendUserMessage","resendFileMessage","deleteMessage","message","sendingStatus","_collectionRef$curren8","removeFailedMessage","reqId","resetNewMessages","resetWithStartingPoint"],"sources":["useGroupChannelMessagesWithCollection.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport { MessageCollectionInitPolicy, MessageEventSource, MessageFilter } from '@sendbird/chat/groupChannel';\nimport type { SendbirdFileMessage, SendbirdGroupChannel, SendbirdMessageCollection } from '@sendbird/uikit-utils';\nimport {\n Logger,\n confirmAndMarkAsRead,\n isDifferentChannel,\n isMyMessage,\n useForceUpdate,\n useFreshCallback,\n useUniqHandlerId,\n} from '@sendbird/uikit-utils';\n\nimport { useChannelHandler } from '../../handler/useChannelHandler';\nimport type { UseGroupChannelMessages, UseGroupChannelMessagesOptions } from '../../types';\nimport { useChannelMessagesReducer } from '../useChannelMessagesReducer';\n\nconst MESSAGE_LIMIT = {\n DEFAULT: 50,\n SEARCH: 20,\n};\n\nconst createMessageCollection = (\n channel: SendbirdGroupChannel,\n limit: number,\n options: UseGroupChannelMessagesOptions,\n) => {\n if (options?.collectionCreator) return options?.collectionCreator({ startingPoint: options?.startingPoint });\n\n const filter = new MessageFilter();\n if (options.replyType) filter.replyType = options.replyType;\n\n return channel.createMessageCollection({ filter, limit, startingPoint: options?.startingPoint });\n};\n\nfunction isNotEmpty(arr?: unknown[]): arr is unknown[] {\n if (!arr) return false;\n return arr.length !== 0;\n}\n\nexport const useGroupChannelMessagesWithCollection: UseGroupChannelMessages = (sdk, channel, userId, options) => {\n const initialStartingPoint = options?.startingPoint ?? Number.MAX_SAFE_INTEGER;\n const initialLimit = typeof options?.startingPoint === 'number' ? MESSAGE_LIMIT.SEARCH : MESSAGE_LIMIT.DEFAULT;\n\n const forceUpdate = useForceUpdate();\n const collectionRef = useRef<SendbirdMessageCollection>();\n const collectionInitializedRef = useRef(false);\n const handlerId = useUniqHandlerId('useGroupChannelMessagesWithCollection');\n\n const {\n loading,\n refreshing,\n messages,\n newMessages,\n updateMessages,\n updateNewMessages,\n deleteNewMessages,\n deleteMessages,\n updateLoading,\n updateRefreshing,\n } = useChannelMessagesReducer(options?.sortComparator);\n\n const channelMarkAsRead = async (source?: MessageEventSource) => {\n try {\n switch (source) {\n case MessageEventSource.EVENT_MESSAGE_RECEIVED:\n case MessageEventSource.EVENT_MESSAGE_SENT_SUCCESS:\n case MessageEventSource.SYNC_MESSAGE_FILL:\n case undefined:\n await confirmAndMarkAsRead([channel]);\n break;\n }\n } catch (e) {\n Logger.warn('[useGroupChannelMessagesWithCollection/channelMarkAsRead]', e);\n }\n };\n\n const updateUnsendMessages = () => {\n const { pendingMessages, failedMessages } = collectionRef.current ?? {};\n if (isNotEmpty(pendingMessages)) updateMessages(pendingMessages, false, sdk.currentUser.userId);\n if (isNotEmpty(failedMessages)) updateMessages(failedMessages, false, sdk.currentUser.userId);\n };\n\n const init = useFreshCallback(async (startingPoint: number, limit: number, callback?: () => void) => {\n if (collectionRef.current) collectionRef.current?.dispose();\n\n channelMarkAsRead();\n updateNewMessages([], true, sdk.currentUser.userId);\n\n collectionInitializedRef.current = false;\n collectionRef.current = createMessageCollection(channel, limit, {\n ...options,\n startingPoint,\n });\n\n collectionRef.current?.setMessageCollectionHandler({\n onMessagesAdded: (_, __, messages) => {\n channelMarkAsRead(_.source);\n\n const incomingMessages = messages.filter((it) => {\n switch (_.source) {\n case MessageEventSource.EVENT_MESSAGE_SENT_PENDING:\n case MessageEventSource.EVENT_MESSAGE_SENT_SUCCESS:\n case MessageEventSource.EVENT_MESSAGE_SENT_FAILED:\n return !isMyMessage(it, sdk.currentUser.userId);\n default:\n return true;\n }\n });\n\n if (incomingMessages.length > 0) {\n updateMessages(incomingMessages, false, sdk.currentUser.userId);\n\n if (options?.shouldCountNewMessages?.()) {\n updateNewMessages(incomingMessages, false, sdk.currentUser.userId);\n }\n\n switch (_.source) {\n case MessageEventSource.EVENT_MESSAGE_RECEIVED:\n case MessageEventSource.SYNC_MESSAGE_FILL: {\n options?.onMessagesReceived?.(incomingMessages);\n }\n }\n }\n },\n onMessagesUpdated: (_, __, messages) => {\n channelMarkAsRead(_.source);\n\n const incomingMessages = messages.filter((it) => {\n switch (_.source) {\n case MessageEventSource.EVENT_MESSAGE_UPDATED:\n return !isMyMessage(it, sdk.currentUser.userId);\n default:\n return true;\n }\n });\n\n if (incomingMessages.length > 0) {\n // NOTE: admin message is not added via onMessagesAdded handler, not checked yet is this a bug.\n updateMessages(messages, false, sdk.currentUser.userId);\n\n if (options?.shouldCountNewMessages?.()) {\n if (_.source === MessageEventSource.EVENT_MESSAGE_RECEIVED) {\n updateNewMessages(messages, false, sdk.currentUser.userId);\n }\n }\n }\n },\n onMessagesDeleted: (_, __, messageIds) => {\n deleteMessages(messageIds, []);\n deleteNewMessages(messageIds, []);\n },\n onChannelDeleted: () => {\n options?.onChannelDeleted?.();\n },\n onChannelUpdated: (_, eventChannel) => {\n if (eventChannel.isGroupChannel() && !isDifferentChannel(eventChannel, channel)) {\n forceUpdate();\n }\n },\n onHugeGapDetected: () => {\n init(Number.MAX_SAFE_INTEGER, MESSAGE_LIMIT.DEFAULT);\n },\n });\n\n collectionRef.current\n .initialize(MessageCollectionInitPolicy.CACHE_AND_REPLACE_BY_API)\n .onCacheResult((err, messages) => {\n if (err) sdk.isCacheEnabled && Logger.error('[useGroupChannelMessagesWithCollection/onCacheResult]', err);\n else {\n Logger.debug('[useGroupChannelMessagesWithCollection/onCacheResult]', 'message length:', messages.length);\n\n updateMessages(messages, true, sdk.currentUser.userId);\n updateUnsendMessages();\n }\n\n callback?.();\n })\n .onApiResult((err, messages) => {\n if (err) Logger.warn('[useGroupChannelMessagesWithCollection/onApiResult]', err);\n else {\n Logger.debug('[useGroupChannelMessagesWithCollection/onApiResult]', 'message length:', messages.length);\n\n updateMessages(messages, true, sdk.currentUser.userId);\n if (!options?.startingPoint) options?.onMessagesReceived?.(messages);\n if (sdk.isCacheEnabled) updateUnsendMessages();\n }\n\n collectionInitializedRef.current = true;\n callback?.();\n });\n });\n\n useChannelHandler(sdk, handlerId, {\n onUserBanned(channel, bannedUser) {\n if (channel.isGroupChannel() && !isDifferentChannel(channel, channel)) {\n if (bannedUser.userId === sdk.currentUser.userId) {\n options?.onChannelDeleted?.();\n } else {\n forceUpdate();\n }\n }\n },\n });\n\n useEffect(() => {\n // NOTE: Cache read is heavy task, and it prevents smooth ui transition\n setTimeout(async () => {\n updateLoading(true);\n init(initialStartingPoint, initialLimit, () => updateLoading(false));\n }, 0);\n }, [channel.url, userId]);\n\n useEffect(() => {\n return () => {\n if (collectionRef.current) collectionRef.current?.dispose();\n };\n }, []);\n\n const refresh: ReturnType<UseGroupChannelMessages>['refresh'] = useFreshCallback(async () => {\n updateRefreshing(true);\n init(Number.MAX_SAFE_INTEGER, MESSAGE_LIMIT.DEFAULT, () => updateRefreshing(false));\n });\n\n const prev: ReturnType<UseGroupChannelMessages>['prev'] = useFreshCallback(async () => {\n if (collectionRef.current && collectionRef.current?.hasPrevious) {\n try {\n const list = await collectionRef.current?.loadPrevious();\n updateMessages(list, false, sdk.currentUser.userId);\n } catch {}\n }\n });\n\n const hasPrev: ReturnType<UseGroupChannelMessages>['hasPrev'] = useFreshCallback(() => {\n if (collectionInitializedRef.current && collectionRef.current) {\n return collectionRef.current.hasPrevious;\n } else {\n return false;\n }\n });\n\n const next: ReturnType<UseGroupChannelMessages>['next'] = useFreshCallback(async () => {\n if (collectionRef.current && collectionRef.current?.hasNext) {\n try {\n const fetchedList = await collectionRef.current?.loadNext();\n updateMessages(fetchedList, false, sdk.currentUser.userId);\n } catch {}\n }\n });\n\n const hasNext: ReturnType<UseGroupChannelMessages>['hasNext'] = useFreshCallback(() => {\n if (collectionInitializedRef.current && collectionRef.current) {\n return collectionRef.current.hasNext;\n } else {\n return false;\n }\n });\n\n const sendUserMessage: ReturnType<UseGroupChannelMessages>['sendUserMessage'] = useFreshCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n channel\n .sendUserMessage(params)\n .onPending((pendingMessage) => {\n if (pendingMessage.isUserMessage()) {\n onPending?.(pendingMessage);\n updateMessages([pendingMessage], false, sdk.currentUser.userId);\n }\n })\n .onSucceeded((sentMessage) => {\n if (sentMessage.isUserMessage()) {\n updateMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage);\n }\n })\n .onFailed((err, failedMessage) => {\n updateMessages([failedMessage], false, sdk.currentUser.userId);\n reject(err);\n });\n });\n },\n );\n const sendFileMessage: ReturnType<UseGroupChannelMessages>['sendFileMessage'] = useFreshCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n channel\n .sendFileMessage(params)\n .onPending((pendingMessage) => {\n if (pendingMessage.isFileMessage()) {\n updateMessages([pendingMessage], false, sdk.currentUser.userId);\n onPending?.(pendingMessage);\n }\n })\n .onSucceeded((sentMessage) => {\n if (sentMessage.isFileMessage()) {\n updateMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage as SendbirdFileMessage);\n }\n })\n .onFailed((err, failedMessage) => {\n updateMessages([failedMessage], false, sdk.currentUser.userId);\n reject(err);\n });\n });\n },\n );\n const updateUserMessage: ReturnType<UseGroupChannelMessages>['updateUserMessage'] = useFreshCallback(\n async (messageId, params) => {\n const updatedMessage = await channel.updateUserMessage(messageId, params);\n updateMessages([updatedMessage], false, sdk.currentUser.userId);\n return updatedMessage;\n },\n );\n const updateFileMessage: ReturnType<UseGroupChannelMessages>['updateFileMessage'] = useFreshCallback(\n async (messageId, params) => {\n const updatedMessage = await channel.updateFileMessage(messageId, params);\n updateMessages([updatedMessage], false, sdk.currentUser.userId);\n return updatedMessage;\n },\n );\n const resendMessage: ReturnType<UseGroupChannelMessages>['resendMessage'] = useFreshCallback(\n async (failedMessage) => {\n const resentMessage = await (() => {\n if (failedMessage.isUserMessage()) return channel.resendUserMessage(failedMessage);\n if (failedMessage.isFileMessage()) return channel.resendFileMessage(failedMessage);\n return null;\n })();\n\n if (resentMessage) updateMessages([resentMessage], false, sdk.currentUser.userId);\n },\n );\n const deleteMessage: ReturnType<UseGroupChannelMessages>['deleteMessage'] = useFreshCallback(async (message) => {\n if (message.sendingStatus === 'succeeded') {\n if (message.isUserMessage()) await channel.deleteMessage(message);\n if (message.isFileMessage()) await channel.deleteMessage(message);\n } else {\n try {\n await collectionRef.current?.removeFailedMessage(message.reqId);\n } finally {\n deleteMessages([message.messageId], [message.reqId]);\n }\n }\n });\n const resetNewMessages: ReturnType<UseGroupChannelMessages>['resetNewMessages'] = useFreshCallback(() => {\n updateNewMessages([], true, sdk.currentUser.userId);\n });\n const resetWithStartingPoint: ReturnType<UseGroupChannelMessages>['resetWithStartingPoint'] = useFreshCallback(\n (startingPoint, callback) => {\n updateLoading(true);\n updateMessages([], true, sdk.currentUser.userId);\n init(startingPoint, MESSAGE_LIMIT.DEFAULT, () => {\n updateLoading(false);\n callback?.();\n });\n },\n );\n\n return {\n loading,\n refreshing,\n refresh,\n messages,\n next,\n hasNext,\n prev,\n hasPrev,\n newMessages,\n resetNewMessages,\n sendUserMessage,\n sendFileMessage,\n updateUserMessage,\n updateFileMessage,\n resendMessage,\n deleteMessage,\n resetWithStartingPoint,\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","CollectionEventSource","MessageCollectionInitPolicy","MessageFilter","Logger","confirmAndMarkAsRead","isDifferentChannel","isMyMessage","isSendableMessage","useForceUpdate","useFreshCallback","useUniqHandlerId","useChannelHandler","useChannelMessagesReducer","MESSAGE_LIMIT","DEFAULT","SEARCH","createMessageCollection","channel","limit","options","collectionCreator","startingPoint","filter","replyType","isNotEmpty","arr","length","shouldUseSearchLimit","Date","now","useGroupChannelMessagesWithCollection","sdk","userId","initialStartingPoint","Number","MAX_SAFE_INTEGER","initialLimit","forceUpdate","collectionRef","collectionInitializedRef","handlerId","loading","refreshing","messages","newMessages","updateMessages","updateNewMessages","deleteNewMessages","deleteMessages","updateLoading","updateRefreshing","sortComparator","channelMarkAsRead","source","EVENT_MESSAGE_RECEIVED","EVENT_MESSAGE_SENT_SUCCESS","SYNC_MESSAGE_FILL","undefined","e","warn","updateNewMessagesReceived","incomingMessages","it","_sdk$currentUser","currentUser","_options$shouldCountN","_sdk$currentUser2","_options$onMessagesRe","shouldCountNewMessages","call","onMessagesReceived","updateUnsentMessages","_sdk$currentUser3","_sdk$currentUser4","pendingMessages","failedMessages","current","init","callback","_collectionRef$curren","_sdk$currentUser5","_collectionRef$curren2","dispose","setMessageCollectionHandler","onMessagesAdded","ctx","__","_sdk$currentUser6","onMessagesUpdated","_sdk$currentUser7","EVENT_MESSAGE_UPDATED","_options$onMessagesUp","onMessagesDeleted","_","___","msgIds","map","messageId","reqIds","reqId","onChannelDeleted","_options$onChannelDel","onChannelUpdated","eventChannel","isGroupChannel","onHugeGapDetected","initialize","CACHE_AND_REPLACE_BY_API","onCacheResult","err","isCacheEnabled","error","_sdk$currentUser8","debug","onApiResult","_sdk$currentUser9","_options$onMessagesRe2","onUserBanned","bannedUser","_sdk$currentUser10","_options$onChannelDel2","setTimeout","url","_collectionRef$curren3","refresh","prev","_collectionRef$curren4","hasPrevious","_collectionRef$curren5","_sdk$currentUser11","list","loadPrevious","hasPrev","next","_collectionRef$curren6","hasNext","_collectionRef$curren7","_sdk$currentUser12","fetchedList","loadNext","sendUserMessage","params","onPending","Promise","resolve","reject","pendingMessage","isUserMessage","_sdk$currentUser13","onSucceeded","sentMessage","_sdk$currentUser14","onFailed","failedMessage","_sdk$currentUser15","sendFileMessage","isFileMessage","_sdk$currentUser16","_sdk$currentUser17","_sdk$currentUser18","updateUserMessage","_sdk$currentUser19","updatedMessage","updateFileMessage","_sdk$currentUser20","resendMessage","_sdk$currentUser21","resentMessage","resendUserMessage","resendFileMessage","deleteMessage","message","sendingStatus","_collectionRef$curren8","removeFailedMessage","resetNewMessages","_sdk$currentUser22","resetWithStartingPoint","_sdk$currentUser23"],"sources":["useGroupChannelMessagesWithCollection.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport { CollectionEventSource } from '@sendbird/chat';\nimport { MessageCollectionInitPolicy, MessageFilter } from '@sendbird/chat/groupChannel';\nimport type { SendbirdFileMessage, SendbirdGroupChannel, SendbirdMessageCollection } from '@sendbird/uikit-utils';\nimport {\n Logger,\n SendbirdBaseMessage,\n confirmAndMarkAsRead,\n isDifferentChannel,\n isMyMessage,\n isSendableMessage,\n useForceUpdate,\n useFreshCallback,\n useUniqHandlerId,\n} from '@sendbird/uikit-utils';\n\nimport { useChannelHandler } from '../../handler/useChannelHandler';\nimport type { UseGroupChannelMessages, UseGroupChannelMessagesOptions } from '../../types';\nimport { useChannelMessagesReducer } from '../useChannelMessagesReducer';\n\nconst MESSAGE_LIMIT = {\n DEFAULT: 50,\n SEARCH: 20,\n};\n\nconst createMessageCollection = (\n channel: SendbirdGroupChannel,\n limit: number,\n options: UseGroupChannelMessagesOptions,\n) => {\n if (options?.collectionCreator) return options?.collectionCreator({ startingPoint: options?.startingPoint });\n\n const filter = new MessageFilter();\n if (options.replyType) filter.replyType = options.replyType;\n\n return channel.createMessageCollection({ filter, limit, startingPoint: options?.startingPoint });\n};\n\nfunction isNotEmpty(arr?: unknown[]): arr is unknown[] {\n if (!arr) return false;\n return arr.length !== 0;\n}\n\nfunction shouldUseSearchLimit(startingPoint: number) {\n return startingPoint < Date.now();\n}\n\nexport const useGroupChannelMessagesWithCollection: UseGroupChannelMessages = (sdk, channel, userId, options) => {\n const initialStartingPoint = options?.startingPoint ?? Number.MAX_SAFE_INTEGER;\n const initialLimit = shouldUseSearchLimit(initialStartingPoint) ? MESSAGE_LIMIT.SEARCH : MESSAGE_LIMIT.DEFAULT;\n\n const forceUpdate = useForceUpdate();\n const collectionRef = useRef<SendbirdMessageCollection>();\n const collectionInitializedRef = useRef(false);\n const handlerId = useUniqHandlerId('useGroupChannelMessagesWithCollection');\n\n const {\n loading,\n refreshing,\n messages,\n newMessages,\n updateMessages,\n updateNewMessages,\n deleteNewMessages,\n deleteMessages,\n updateLoading,\n updateRefreshing,\n } = useChannelMessagesReducer(options?.sortComparator);\n\n const channelMarkAsRead = async (source?: CollectionEventSource) => {\n try {\n switch (source) {\n case CollectionEventSource.EVENT_MESSAGE_RECEIVED:\n case CollectionEventSource.EVENT_MESSAGE_SENT_SUCCESS:\n case CollectionEventSource.SYNC_MESSAGE_FILL:\n case undefined:\n await confirmAndMarkAsRead([channel]);\n break;\n }\n } catch (e) {\n Logger.warn('[useGroupChannelMessagesWithCollection/channelMarkAsRead]', e);\n }\n };\n const updateNewMessagesReceived = (source: CollectionEventSource, messages: SendbirdBaseMessage[]) => {\n const incomingMessages = messages.filter((it) => !isMyMessage(it, sdk.currentUser?.userId));\n if (incomingMessages.length > 0) {\n switch (source) {\n case CollectionEventSource.EVENT_MESSAGE_RECEIVED:\n case CollectionEventSource.SYNC_MESSAGE_FILL: {\n if (options?.shouldCountNewMessages?.()) updateNewMessages(incomingMessages, false, sdk.currentUser?.userId);\n options?.onMessagesReceived?.(incomingMessages);\n break;\n }\n }\n }\n };\n\n const updateUnsentMessages = () => {\n const { pendingMessages, failedMessages } = collectionRef.current ?? {};\n if (isNotEmpty(pendingMessages)) updateMessages(pendingMessages, false, sdk.currentUser?.userId);\n if (isNotEmpty(failedMessages)) updateMessages(failedMessages, false, sdk.currentUser?.userId);\n };\n\n const init = useFreshCallback(async (startingPoint: number, limit: number, callback?: () => void) => {\n if (collectionRef.current) collectionRef.current?.dispose();\n\n channelMarkAsRead();\n updateNewMessages([], true, sdk.currentUser?.userId);\n\n collectionInitializedRef.current = false;\n collectionRef.current = createMessageCollection(channel, limit, {\n ...options,\n startingPoint,\n });\n\n collectionRef.current?.setMessageCollectionHandler({\n onMessagesAdded: (ctx, __, messages) => {\n channelMarkAsRead(ctx.source);\n updateNewMessagesReceived(ctx.source, messages);\n\n updateMessages(messages, false, sdk.currentUser?.userId);\n },\n onMessagesUpdated: (ctx, __, messages) => {\n channelMarkAsRead(ctx.source);\n updateNewMessagesReceived(ctx.source, messages); // NOTE: admin message is not added via onMessagesAdded handler, not checked yet is this a bug.\n\n updateMessages(messages, false, sdk.currentUser?.userId);\n\n if (ctx.source === CollectionEventSource.EVENT_MESSAGE_UPDATED) {\n options?.onMessagesUpdated?.(messages);\n }\n },\n onMessagesDeleted: (_, __, ___, messages) => {\n const msgIds = messages.map((it) => it.messageId);\n const reqIds = messages.filter(isSendableMessage).map((it) => it.reqId);\n deleteMessages(msgIds, reqIds);\n deleteNewMessages(msgIds, reqIds);\n },\n onChannelDeleted: () => {\n options?.onChannelDeleted?.();\n },\n onChannelUpdated: (_, eventChannel) => {\n if (eventChannel.isGroupChannel() && !isDifferentChannel(eventChannel, channel)) {\n forceUpdate();\n }\n },\n onHugeGapDetected: () => {\n init(Number.MAX_SAFE_INTEGER, MESSAGE_LIMIT.DEFAULT);\n },\n });\n\n collectionRef.current\n .initialize(MessageCollectionInitPolicy.CACHE_AND_REPLACE_BY_API)\n .onCacheResult((err, messages) => {\n if (err) sdk.isCacheEnabled && Logger.error('[useGroupChannelMessagesWithCollection/onCacheResult]', err);\n else if (messages) {\n Logger.debug('[useGroupChannelMessagesWithCollection/onCacheResult]', 'message length:', messages.length);\n\n updateMessages(messages, true, sdk.currentUser?.userId);\n updateUnsentMessages();\n }\n\n callback?.();\n })\n .onApiResult((err, messages) => {\n if (err) Logger.warn('[useGroupChannelMessagesWithCollection/onApiResult]', err);\n else if (messages) {\n Logger.debug('[useGroupChannelMessagesWithCollection/onApiResult]', 'message length:', messages.length);\n\n updateMessages(messages, true, sdk.currentUser?.userId);\n if (!options?.startingPoint) options?.onMessagesReceived?.(messages);\n if (sdk.isCacheEnabled) updateUnsentMessages();\n }\n\n collectionInitializedRef.current = true;\n callback?.();\n });\n });\n\n useChannelHandler(sdk, handlerId, {\n onUserBanned(channel, bannedUser) {\n if (channel.isGroupChannel() && !isDifferentChannel(channel, channel)) {\n if (bannedUser.userId === sdk.currentUser?.userId) {\n options?.onChannelDeleted?.();\n } else {\n forceUpdate();\n }\n }\n },\n });\n\n useEffect(() => {\n // NOTE: Cache read is heavy task, and it prevents smooth ui transition\n setTimeout(async () => {\n updateLoading(true);\n init(initialStartingPoint, initialLimit, () => updateLoading(false));\n }, 0);\n }, [channel.url, userId, options?.replyType]);\n\n useEffect(() => {\n return () => {\n if (collectionRef.current) collectionRef.current?.dispose();\n };\n }, []);\n\n const refresh: ReturnType<UseGroupChannelMessages>['refresh'] = useFreshCallback(async () => {\n updateRefreshing(true);\n init(Number.MAX_SAFE_INTEGER, MESSAGE_LIMIT.DEFAULT, () => updateRefreshing(false));\n });\n\n const prev: ReturnType<UseGroupChannelMessages>['prev'] = useFreshCallback(async () => {\n if (collectionRef.current && collectionRef.current?.hasPrevious) {\n try {\n const list = await collectionRef.current?.loadPrevious();\n updateMessages(list, false, sdk.currentUser?.userId);\n } catch {}\n }\n });\n\n const hasPrev: ReturnType<UseGroupChannelMessages>['hasPrev'] = useFreshCallback(() => {\n if (collectionInitializedRef.current && collectionRef.current) {\n return collectionRef.current.hasPrevious;\n } else {\n return false;\n }\n });\n\n const next: ReturnType<UseGroupChannelMessages>['next'] = useFreshCallback(async () => {\n if (collectionRef.current && collectionRef.current?.hasNext) {\n try {\n const fetchedList = await collectionRef.current?.loadNext();\n updateMessages(fetchedList, false, sdk.currentUser?.userId);\n } catch {}\n }\n });\n\n const hasNext: ReturnType<UseGroupChannelMessages>['hasNext'] = useFreshCallback(() => {\n if (collectionInitializedRef.current && collectionRef.current) {\n return collectionRef.current.hasNext;\n } else {\n return false;\n }\n });\n\n const sendUserMessage: ReturnType<UseGroupChannelMessages>['sendUserMessage'] = useFreshCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n channel\n .sendUserMessage(params)\n .onPending((pendingMessage) => {\n if (pendingMessage.isUserMessage()) {\n onPending?.(pendingMessage);\n updateMessages([pendingMessage], false, sdk.currentUser?.userId);\n }\n })\n .onSucceeded((sentMessage) => {\n if (sentMessage.isUserMessage()) {\n updateMessages([sentMessage], false, sdk.currentUser?.userId);\n resolve(sentMessage);\n }\n })\n .onFailed((err, failedMessage) => {\n if (failedMessage) {\n updateMessages([failedMessage], false, sdk.currentUser?.userId);\n }\n reject(err);\n });\n });\n },\n );\n const sendFileMessage: ReturnType<UseGroupChannelMessages>['sendFileMessage'] = useFreshCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n channel\n .sendFileMessage(params)\n .onPending((pendingMessage) => {\n if (pendingMessage.isFileMessage()) {\n updateMessages([pendingMessage], false, sdk.currentUser?.userId);\n onPending?.(pendingMessage);\n }\n })\n .onSucceeded((sentMessage) => {\n if (sentMessage.isFileMessage()) {\n updateMessages([sentMessage], false, sdk.currentUser?.userId);\n resolve(sentMessage as SendbirdFileMessage);\n }\n })\n .onFailed((err, failedMessage) => {\n if (failedMessage) {\n updateMessages([failedMessage], false, sdk.currentUser?.userId);\n }\n reject(err);\n });\n });\n },\n );\n const updateUserMessage: ReturnType<UseGroupChannelMessages>['updateUserMessage'] = useFreshCallback(\n async (messageId, params) => {\n const updatedMessage = await channel.updateUserMessage(messageId, params);\n updateMessages([updatedMessage], false, sdk.currentUser?.userId);\n return updatedMessage;\n },\n );\n const updateFileMessage: ReturnType<UseGroupChannelMessages>['updateFileMessage'] = useFreshCallback(\n async (messageId, params) => {\n const updatedMessage = await channel.updateFileMessage(messageId, params);\n updateMessages([updatedMessage], false, sdk.currentUser?.userId);\n return updatedMessage;\n },\n );\n const resendMessage: ReturnType<UseGroupChannelMessages>['resendMessage'] = useFreshCallback(\n async (failedMessage) => {\n const resentMessage = await (() => {\n if (failedMessage.isUserMessage()) return channel.resendUserMessage(failedMessage);\n if (failedMessage.isFileMessage()) return channel.resendFileMessage(failedMessage);\n return null;\n })();\n\n if (resentMessage) updateMessages([resentMessage], false, sdk.currentUser?.userId);\n },\n );\n const deleteMessage: ReturnType<UseGroupChannelMessages>['deleteMessage'] = useFreshCallback(async (message) => {\n if (message.sendingStatus === 'succeeded') {\n if (message.isUserMessage()) await channel.deleteMessage(message);\n if (message.isFileMessage()) await channel.deleteMessage(message);\n } else {\n try {\n await collectionRef.current?.removeFailedMessage(message.reqId);\n } finally {\n deleteMessages([message.messageId], [message.reqId]);\n }\n }\n });\n const resetNewMessages: ReturnType<UseGroupChannelMessages>['resetNewMessages'] = useFreshCallback(() => {\n updateNewMessages([], true, sdk.currentUser?.userId);\n });\n const resetWithStartingPoint: ReturnType<UseGroupChannelMessages>['resetWithStartingPoint'] = useFreshCallback(\n (startingPoint, callback) => {\n const limit = shouldUseSearchLimit(startingPoint) ? MESSAGE_LIMIT.SEARCH : MESSAGE_LIMIT.DEFAULT;\n updateLoading(true);\n updateMessages([], true, sdk.currentUser?.userId);\n init(startingPoint, limit, () => {\n updateLoading(false);\n callback?.();\n });\n },\n );\n\n return {\n loading,\n refreshing,\n refresh,\n messages,\n next,\n hasNext,\n prev,\n hasPrev,\n newMessages,\n resetNewMessages,\n sendUserMessage,\n sendFileMessage,\n updateUserMessage,\n updateFileMessage,\n resendMessage,\n deleteMessage,\n resetWithStartingPoint,\n };\n};\n"],"mappings":"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"}
|