@sendbird/uikit-chat-hooks 3.0.4 → 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.
Files changed (25) hide show
  1. package/lib/commonjs/channel/useChannelMessagesReducer.js +60 -11
  2. package/lib/commonjs/channel/useChannelMessagesReducer.js.map +1 -1
  3. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +94 -83
  4. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
  5. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +44 -26
  6. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
  7. package/lib/commonjs/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js +46 -28
  8. package/lib/commonjs/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js.map +1 -1
  9. package/lib/commonjs/types.js.map +1 -1
  10. package/lib/module/channel/useChannelMessagesReducer.js +61 -12
  11. package/lib/module/channel/useChannelMessagesReducer.js.map +1 -1
  12. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +96 -85
  13. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
  14. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +44 -26
  15. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
  16. package/lib/module/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js +46 -28
  17. package/lib/module/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js.map +1 -1
  18. package/lib/module/types.js.map +1 -1
  19. package/lib/typescript/src/types.d.ts +1 -0
  20. package/package.json +5 -5
  21. package/src/channel/useChannelMessagesReducer.ts +66 -17
  22. package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.ts +75 -84
  23. package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.ts +26 -22
  24. package/src/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.ts +31 -26
  25. package/src/types.ts +1 -0
@@ -1,6 +1,7 @@
1
1
  import { useEffect, useRef } from 'react';
2
- import { MessageCollectionInitPolicy, MessageEventSource, MessageFilter } from '@sendbird/chat/groupChannel';
3
- import { Logger, confirmAndMarkAsRead, isDifferentChannel, isMyMessage, useForceUpdate, useFreshCallback, useUniqHandlerId } from '@sendbird/uikit-utils';
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 = typeof (options === null || options === void 0 ? void 0 : options.startingPoint) === 'number' ? MESSAGE_LIMIT.SEARCH : MESSAGE_LIMIT.DEFAULT;
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 MessageEventSource.EVENT_MESSAGE_RECEIVED:
49
- case MessageEventSource.EVENT_MESSAGE_SENT_SUCCESS:
50
- case MessageEventSource.SYNC_MESSAGE_FILL:
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 updateUnsendMessages = () => {
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: (_, __, messages) => {
79
- channelMarkAsRead(_.source);
80
- const incomingMessages = messages.filter(it => {
81
- switch (_.source) {
82
- case MessageEventSource.EVENT_MESSAGE_SENT_PENDING:
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: (_, __, messages) => {
107
- channelMarkAsRead(_.source);
108
- const incomingMessages = messages.filter(it => {
109
- switch (_.source) {
110
- case MessageEventSource.EVENT_MESSAGE_UPDATED:
111
- return !isMyMessage(it, sdk.currentUser.userId);
112
- default:
113
- return true;
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: (_, __, messageIds) => {
128
- deleteMessages(messageIds, []);
129
- deleteNewMessages(messageIds, []);
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
- updateUnsendMessages();
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) updateUnsendMessages();
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
- if (bannedUser.userId === sdk.currentUser.userId) {
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
- updateMessages([sentMessage], false, sdk.currentUser.userId);
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
- updateMessages([failedMessage], false, sdk.currentUser.userId);
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
- updateMessages([pendingMessage], false, sdk.currentUser.userId);
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
- updateMessages([sentMessage], false, sdk.currentUser.userId);
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
- updateMessages([failedMessage], false, sdk.currentUser.userId);
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
- updateNewMessages([], true, sdk.currentUser.userId);
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, MESSAGE_LIMIT.DEFAULT, () => {
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
  });
@@ -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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"}