@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.
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 +6 -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
@@ -34,14 +34,14 @@ const useOpenChannelMessagesWithQuery = (sdk, channel, userId, options) => {
34
34
  } = (0, _useChannelMessagesReducer.useChannelMessagesReducer)(options === null || options === void 0 ? void 0 : options.sortComparator);
35
35
  const init = (0, _uikitUtils.useFreshCallback)(async uid => {
36
36
  if (uid) {
37
- var _queryRef$current;
37
+ var _queryRef$current, _sdk$currentUser2;
38
38
  queryRef.current = createMessageQuery(channel, options === null || options === void 0 ? void 0 : options.queryCreator);
39
39
  if ((_queryRef$current = queryRef.current) !== null && _queryRef$current !== void 0 && _queryRef$current.hasNext) {
40
- var _queryRef$current2;
40
+ var _queryRef$current2, _sdk$currentUser;
41
41
  const list = await ((_queryRef$current2 = queryRef.current) === null || _queryRef$current2 === void 0 ? void 0 : _queryRef$current2.load());
42
- updateMessages(list, true, sdk.currentUser.userId);
42
+ updateMessages(list, true, (_sdk$currentUser = sdk.currentUser) === null || _sdk$currentUser === void 0 ? void 0 : _sdk$currentUser.userId);
43
43
  }
44
- updateNewMessages([], true, sdk.currentUser.userId);
44
+ updateNewMessages([], true, (_sdk$currentUser2 = sdk.currentUser) === null || _sdk$currentUser2 === void 0 ? void 0 : _sdk$currentUser2.userId);
45
45
  }
46
46
  });
47
47
  const channelUpdater = channel => {
@@ -51,7 +51,7 @@ const useOpenChannelMessagesWithQuery = (sdk, channel, userId, options) => {
51
51
  };
52
52
  (0, _useConnectionHandler.useConnectionHandler)(sdk, handlerId, {
53
53
  async onReconnectSucceeded() {
54
- var _queryRef$current3, _queryRef$current4, _queryRef$current5, _queryRef$current6, _queryRef$current7, _queryRef$current8, _queryRef$current9, _queryRef$current10, _queryRef$current11, _queryRef$current12, _queryRef$current13, _queryRef$current14, _queryRef$current15, _queryRef$current16, _queryRef$current17, _queryRef$current18;
54
+ var _queryRef$current3, _queryRef$current4, _queryRef$current5, _queryRef$current6, _queryRef$current7, _queryRef$current8, _queryRef$current9, _queryRef$current10, _queryRef$current11, _queryRef$current12, _queryRef$current13, _queryRef$current14, _queryRef$current15, _queryRef$current16, _queryRef$current17, _queryRef$current18, _sdk$currentUser3;
55
55
  const lastMessage = messages[0];
56
56
  if (!lastMessage) return;
57
57
  const messageContext = {
@@ -120,12 +120,13 @@ const useOpenChannelMessagesWithQuery = (sdk, channel, userId, options) => {
120
120
  }
121
121
 
122
122
  // Update to View
123
- updateMessages([...messageContext.addedMessages, ...messageContext.updatedMessages], false, sdk.currentUser.userId);
123
+ updateMessages([...messageContext.addedMessages, ...messageContext.updatedMessages], false, (_sdk$currentUser3 = sdk.currentUser) === null || _sdk$currentUser3 === void 0 ? void 0 : _sdk$currentUser3.userId);
124
124
  deleteMessages(messageContext.deletedMessageIds, []);
125
125
  if (messageContext.addedMessages.length > 0) {
126
126
  var _options$shouldCountN;
127
127
  if (options !== null && options !== void 0 && (_options$shouldCountN = options.shouldCountNewMessages) !== null && _options$shouldCountN !== void 0 && _options$shouldCountN.call(options)) {
128
- updateNewMessages(messageContext.addedMessages, false, sdk.currentUser.userId);
128
+ var _sdk$currentUser4;
129
+ updateNewMessages(messageContext.addedMessages, false, (_sdk$currentUser4 = sdk.currentUser) === null || _sdk$currentUser4 === void 0 ? void 0 : _sdk$currentUser4.userId);
129
130
  }
130
131
  if (options !== null && options !== void 0 && options.onMessagesReceived) {
131
132
  options.onMessagesReceived(messageContext.addedMessages);
@@ -136,21 +137,23 @@ const useOpenChannelMessagesWithQuery = (sdk, channel, userId, options) => {
136
137
  (0, _useChannelHandler.useChannelHandler)(sdk, handlerId, {
137
138
  // Messages
138
139
  onMessageReceived(eventChannel, message) {
139
- var _options$shouldCountN2;
140
+ var _sdk$currentUser5, _sdk$currentUser6, _options$shouldCountN2;
140
141
  if ((0, _uikitUtils.isDifferentChannel)(channel, eventChannel)) return;
141
- if ((0, _uikitUtils.isMyMessage)(message, sdk.currentUser.userId)) return;
142
- updateMessages([message], false, sdk.currentUser.userId);
142
+ if ((0, _uikitUtils.isMyMessage)(message, (_sdk$currentUser5 = sdk.currentUser) === null || _sdk$currentUser5 === void 0 ? void 0 : _sdk$currentUser5.userId)) return;
143
+ updateMessages([message], false, (_sdk$currentUser6 = sdk.currentUser) === null || _sdk$currentUser6 === void 0 ? void 0 : _sdk$currentUser6.userId);
143
144
  if (options !== null && options !== void 0 && (_options$shouldCountN2 = options.shouldCountNewMessages) !== null && _options$shouldCountN2 !== void 0 && _options$shouldCountN2.call(options)) {
144
- updateNewMessages([message], false, sdk.currentUser.userId);
145
+ var _sdk$currentUser7;
146
+ updateNewMessages([message], false, (_sdk$currentUser7 = sdk.currentUser) === null || _sdk$currentUser7 === void 0 ? void 0 : _sdk$currentUser7.userId);
145
147
  }
146
148
  if (options !== null && options !== void 0 && options.onMessagesReceived) {
147
149
  options.onMessagesReceived([message]);
148
150
  }
149
151
  },
150
152
  onMessageUpdated(eventChannel, message) {
153
+ var _sdk$currentUser8, _sdk$currentUser9;
151
154
  if ((0, _uikitUtils.isDifferentChannel)(channel, eventChannel)) return;
152
- if ((0, _uikitUtils.isMyMessage)(message, sdk.currentUser.userId)) return;
153
- updateMessages([message], false, sdk.currentUser.userId);
155
+ if ((0, _uikitUtils.isMyMessage)(message, (_sdk$currentUser8 = sdk.currentUser) === null || _sdk$currentUser8 === void 0 ? void 0 : _sdk$currentUser8.userId)) return;
156
+ updateMessages([message], false, (_sdk$currentUser9 = sdk.currentUser) === null || _sdk$currentUser9 === void 0 ? void 0 : _sdk$currentUser9.userId);
154
157
  },
155
158
  onMessageDeleted(eventChannel, messageId) {
156
159
  if ((0, _uikitUtils.isDifferentChannel)(channel, eventChannel)) return;
@@ -177,8 +180,9 @@ const useOpenChannelMessagesWithQuery = (sdk, channel, userId, options) => {
177
180
  onUserMuted: channelUpdater,
178
181
  onUserUnmuted: channelUpdater,
179
182
  onUserBanned(eventChannel, bannedUser) {
183
+ var _sdk$currentUser10;
180
184
  if ((0, _uikitUtils.isDifferentChannel)(channel, eventChannel)) return;
181
- if (bannedUser.userId === sdk.currentUser.userId) {
185
+ if (bannedUser.userId === ((_sdk$currentUser10 = sdk.currentUser) === null || _sdk$currentUser10 === void 0 ? void 0 : _sdk$currentUser10.userId)) {
182
186
  var _options$onChannelDel2;
183
187
  options === null || options === void 0 ? void 0 : (_options$onChannelDel2 = options.onChannelDeleted) === null || _options$onChannelDel2 === void 0 ? void 0 : _options$onChannelDel2.call(options);
184
188
  } else {
@@ -210,9 +214,9 @@ const useOpenChannelMessagesWithQuery = (sdk, channel, userId, options) => {
210
214
  const prev = (0, _uikitUtils.useFreshCallback)(async () => {
211
215
  var _queryRef$current19;
212
216
  if (queryRef.current && (_queryRef$current19 = queryRef.current) !== null && _queryRef$current19 !== void 0 && _queryRef$current19.hasNext) {
213
- var _queryRef$current20;
217
+ var _queryRef$current20, _sdk$currentUser11;
214
218
  const list = await ((_queryRef$current20 = queryRef.current) === null || _queryRef$current20 === void 0 ? void 0 : _queryRef$current20.load());
215
- updateMessages(list, false, sdk.currentUser.userId);
219
+ updateMessages(list, false, (_sdk$currentUser11 = sdk.currentUser) === null || _sdk$currentUser11 === void 0 ? void 0 : _sdk$currentUser11.userId);
216
220
  }
217
221
  });
218
222
  const hasPrev = (0, _uikitUtils.useFreshCallback)(() => {
@@ -225,16 +229,21 @@ const useOpenChannelMessagesWithQuery = (sdk, channel, userId, options) => {
225
229
  return new Promise((resolve, reject) => {
226
230
  channel.sendUserMessage(params).onPending(pendingMessage => {
227
231
  if (pendingMessage.isUserMessage()) {
228
- updateMessages([pendingMessage], false, sdk.currentUser.userId);
232
+ var _sdk$currentUser12;
233
+ updateMessages([pendingMessage], false, (_sdk$currentUser12 = sdk.currentUser) === null || _sdk$currentUser12 === void 0 ? void 0 : _sdk$currentUser12.userId);
229
234
  onPending === null || onPending === void 0 ? void 0 : onPending(pendingMessage);
230
235
  }
231
236
  }).onSucceeded(sentMessage => {
232
237
  if (sentMessage.isUserMessage()) {
233
- updateMessages([sentMessage], false, sdk.currentUser.userId);
238
+ var _sdk$currentUser13;
239
+ updateMessages([sentMessage], false, (_sdk$currentUser13 = sdk.currentUser) === null || _sdk$currentUser13 === void 0 ? void 0 : _sdk$currentUser13.userId);
234
240
  resolve(sentMessage);
235
241
  }
236
- }).onFailed((err, sentMessage) => {
237
- updateMessages([sentMessage], false, sdk.currentUser.userId);
242
+ }).onFailed((err, failedMessage) => {
243
+ if (failedMessage) {
244
+ var _sdk$currentUser14;
245
+ updateMessages([failedMessage], false, (_sdk$currentUser14 = sdk.currentUser) === null || _sdk$currentUser14 === void 0 ? void 0 : _sdk$currentUser14.userId);
246
+ }
238
247
  reject(err);
239
248
  });
240
249
  });
@@ -243,37 +252,45 @@ const useOpenChannelMessagesWithQuery = (sdk, channel, userId, options) => {
243
252
  return new Promise((resolve, reject) => {
244
253
  channel.sendFileMessage(params).onPending(pendingMessage => {
245
254
  if (pendingMessage.isFileMessage()) {
246
- updateMessages([pendingMessage], false, sdk.currentUser.userId);
255
+ var _sdk$currentUser15;
256
+ updateMessages([pendingMessage], false, (_sdk$currentUser15 = sdk.currentUser) === null || _sdk$currentUser15 === void 0 ? void 0 : _sdk$currentUser15.userId);
247
257
  onPending === null || onPending === void 0 ? void 0 : onPending(pendingMessage);
248
258
  }
249
259
  }).onSucceeded(sentMessage => {
250
260
  if (sentMessage.isFileMessage()) {
251
- updateMessages([sentMessage], false, sdk.currentUser.userId);
261
+ var _sdk$currentUser16;
262
+ updateMessages([sentMessage], false, (_sdk$currentUser16 = sdk.currentUser) === null || _sdk$currentUser16 === void 0 ? void 0 : _sdk$currentUser16.userId);
252
263
  resolve(sentMessage);
253
264
  }
254
- }).onFailed((err, sentMessage) => {
255
- updateMessages([sentMessage], false, sdk.currentUser.userId);
265
+ }).onFailed((err, failedMessage) => {
266
+ if (failedMessage) {
267
+ var _sdk$currentUser17;
268
+ updateMessages([failedMessage], false, (_sdk$currentUser17 = sdk.currentUser) === null || _sdk$currentUser17 === void 0 ? void 0 : _sdk$currentUser17.userId);
269
+ }
256
270
  reject(err);
257
271
  });
258
272
  });
259
273
  });
260
274
  const updateUserMessage = (0, _uikitUtils.useFreshCallback)(async (messageId, params) => {
275
+ var _sdk$currentUser18;
261
276
  const updatedMessage = await channel.updateUserMessage(messageId, params);
262
- updateMessages([updatedMessage], false, sdk.currentUser.userId);
277
+ updateMessages([updatedMessage], false, (_sdk$currentUser18 = sdk.currentUser) === null || _sdk$currentUser18 === void 0 ? void 0 : _sdk$currentUser18.userId);
263
278
  return updatedMessage;
264
279
  });
265
280
  const updateFileMessage = (0, _uikitUtils.useFreshCallback)(async (messageId, params) => {
281
+ var _sdk$currentUser19;
266
282
  const updatedMessage = await channel.updateFileMessage(messageId, params);
267
- updateMessages([updatedMessage], false, sdk.currentUser.userId);
283
+ updateMessages([updatedMessage], false, (_sdk$currentUser19 = sdk.currentUser) === null || _sdk$currentUser19 === void 0 ? void 0 : _sdk$currentUser19.userId);
268
284
  return updatedMessage;
269
285
  });
270
286
  const resendMessage = (0, _uikitUtils.useFreshCallback)(async failedMessage => {
287
+ var _sdk$currentUser20;
271
288
  const message = await (() => {
272
289
  if (failedMessage.isUserMessage()) return channel.resendUserMessage(failedMessage);
273
290
  if (failedMessage.isFileMessage()) return channel.resendFileMessage(failedMessage);
274
291
  return null;
275
292
  })();
276
- if (message) updateMessages([message], false, sdk.currentUser.userId);
293
+ if (message) updateMessages([message], false, (_sdk$currentUser20 = sdk.currentUser) === null || _sdk$currentUser20 === void 0 ? void 0 : _sdk$currentUser20.userId);
277
294
  });
278
295
  const deleteMessage = (0, _uikitUtils.useFreshCallback)(async message => {
279
296
  if (message.sendingStatus === 'succeeded') {
@@ -284,7 +301,8 @@ const useOpenChannelMessagesWithQuery = (sdk, channel, userId, options) => {
284
301
  }
285
302
  });
286
303
  const resetNewMessages = (0, _uikitUtils.useFreshCallback)(() => {
287
- updateNewMessages([], true, sdk.currentUser.userId);
304
+ var _sdk$currentUser21;
305
+ updateNewMessages([], true, (_sdk$currentUser21 = sdk.currentUser) === null || _sdk$currentUser21 === void 0 ? void 0 : _sdk$currentUser21.userId);
288
306
  });
289
307
  return {
290
308
  loading,
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_uikitUtils","_useChannelHandler","_useConnectionHandler","_useChannelMessagesReducer","createMessageQuery","channel","creator","createPreviousMessageListQuery","limit","reverse","useOpenChannelMessagesWithQuery","sdk","userId","options","queryRef","useRef","forceUpdate","useForceUpdate","handlerId","useUniqHandlerId","loading","refreshing","messages","newMessages","updateMessages","updateNewMessages","deleteNewMessages","deleteMessages","updateLoading","updateRefreshing","useChannelMessagesReducer","sortComparator","init","useFreshCallback","uid","_queryRef$current","current","queryCreator","hasNext","_queryRef$current2","list","load","currentUser","channelUpdater","isOpenChannel","isDifferentChannel","useConnectionHandler","onReconnectSucceeded","_queryRef$current3","_queryRef$current4","_queryRef$current5","_queryRef$current6","_queryRef$current7","_queryRef$current8","_queryRef$current9","_queryRef$current10","_queryRef$current11","_queryRef$current12","_queryRef$current13","_queryRef$current14","_queryRef$current15","_queryRef$current16","_queryRef$current17","_queryRef$current18","lastMessage","messageContext","updatedMessages","addedMessages","deletedMessageIds","changeLogsContext","hasMore","token","messageQueryContext","timestamp","createdAt","changelogsParams","replyType","includeMetaArray","includeReactions","includeThreadInfo","includeParentMessageInfo","changeLogsByTS","getMessageChangeLogsSinceTimestamp","push","changeLogsByToken","getMessageChangeLogsSinceToken","messageQueryParams","prevResultSize","nextResultSize","customTypesFilter","messageTypeFilter","senderUserIdsFilter","showSubchannelMessagesOnly","queriedMessages","getMessagesByTimestamp","length","unshift","_options$shouldCountN","shouldCountNewMessages","call","onMessagesReceived","useChannelHandler","onMessageReceived","eventChannel","message","_options$shouldCountN2","isMyMessage","onMessageUpdated","onMessageDeleted","messageId","onChannelChanged","onChannelFrozen","onChannelUnfrozen","onChannelParticipantCountChanged","onChannelDeleted","channelUrl","type","url","_options$onChannelDel","onOperatorUpdated","onUserUnbanned","onUserMuted","onUserUnmuted","onUserBanned","bannedUser","_options$onChannelDel2","useAsyncEffect","enter","error","_options$onError","_options$onChannelDel3","onError","exit","catch","NOOP","refresh","prev","_queryRef$current19","_queryRef$current20","hasPrev","_queryRef$current21","next","ASYNC_NOOP","sendUserMessage","params","onPending","Promise","resolve","reject","pendingMessage","isUserMessage","onSucceeded","sentMessage","onFailed","err","sendFileMessage","isFileMessage","updateUserMessage","updatedMessage","updateFileMessage","resendMessage","failedMessage","resendUserMessage","resendFileMessage","deleteMessage","sendingStatus","reqId","resetNewMessages","exports"],"sources":["useOpenChannelMessagesWithQuery.ts"],"sourcesContent":["import { useRef } from 'react';\n\nimport type {\n SendbirdBaseChannel,\n SendbirdBaseMessage,\n SendbirdOpenChannel,\n SendbirdPreviousMessageListQuery,\n} from '@sendbird/uikit-utils';\nimport {\n ASYNC_NOOP,\n NOOP,\n isDifferentChannel,\n isMyMessage,\n useAsyncEffect,\n useForceUpdate,\n useFreshCallback,\n useUniqHandlerId,\n} from '@sendbird/uikit-utils';\n\nimport { useChannelHandler } from '../../handler/useChannelHandler';\nimport { useConnectionHandler } from '../../handler/useConnectionHandler';\nimport type { UseOpenChannelMessages, UseOpenChannelMessagesOptions } from '../../types';\nimport { useChannelMessagesReducer } from '../useChannelMessagesReducer';\n\nconst createMessageQuery = (channel: SendbirdOpenChannel, creator?: UseOpenChannelMessagesOptions['queryCreator']) => {\n if (creator) return creator();\n return channel.createPreviousMessageListQuery({\n limit: 100,\n reverse: true,\n });\n};\n\nexport const useOpenChannelMessagesWithQuery: UseOpenChannelMessages = (sdk, channel, userId, options) => {\n const queryRef = useRef<SendbirdPreviousMessageListQuery>();\n const forceUpdate = useForceUpdate();\n const handlerId = useUniqHandlerId('useOpenChannelMessagesWithQuery');\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 init = useFreshCallback(async (uid?: string) => {\n if (uid) {\n queryRef.current = createMessageQuery(channel, options?.queryCreator);\n if (queryRef.current?.hasNext) {\n const list = await queryRef.current?.load();\n\n updateMessages(list, true, sdk.currentUser.userId);\n }\n updateNewMessages([], true, sdk.currentUser.userId);\n }\n });\n\n const channelUpdater = (channel: SendbirdBaseChannel) => {\n if (channel.isOpenChannel() && !isDifferentChannel(channel, channel)) {\n forceUpdate();\n }\n };\n\n useConnectionHandler(sdk, handlerId, {\n async onReconnectSucceeded() {\n const lastMessage = messages[0];\n if (!lastMessage) return;\n\n const messageContext = {\n updatedMessages: [] as SendbirdBaseMessage[],\n addedMessages: [] as SendbirdBaseMessage[],\n deletedMessageIds: [] as number[],\n };\n const changeLogsContext = {\n hasMore: false,\n token: '',\n };\n const messageQueryContext = {\n hasMore: false,\n timestamp: lastMessage.createdAt,\n };\n\n // Updated & Deleted messages\n const changelogsParams = {\n replyType: queryRef.current?.replyType,\n includeMetaArray: queryRef.current?.includeMetaArray,\n includeReactions: queryRef.current?.includeReactions,\n includeThreadInfo: queryRef.current?.includeThreadInfo,\n includeParentMessageInfo: queryRef.current?.includeParentMessageInfo,\n };\n\n const changeLogsByTS = await channel.getMessageChangeLogsSinceTimestamp(lastMessage.createdAt);\n changeLogsContext.token = changeLogsByTS.token;\n changeLogsContext.hasMore = changeLogsByTS.hasMore;\n messageContext.updatedMessages.push(...changeLogsByTS.updatedMessages);\n messageContext.deletedMessageIds.push(...changeLogsByTS.deletedMessageIds);\n\n while (changeLogsContext.hasMore) {\n const changeLogsByToken = await channel.getMessageChangeLogsSinceToken(changeLogsByTS.token, changelogsParams);\n changeLogsContext.token = changeLogsByToken.token;\n changeLogsContext.hasMore = changeLogsByToken.hasMore;\n messageContext.updatedMessages.push(...changeLogsByToken.updatedMessages);\n messageContext.deletedMessageIds.push(...changeLogsByToken.deletedMessageIds);\n }\n\n // Added messages\n const messageQueryParams = {\n prevResultSize: 0,\n nextResultSize: queryRef.current?.limit ?? 100,\n reverse: queryRef.current?.reverse,\n includeParentMessageInfo: queryRef.current?.includeParentMessageInfo,\n includeThreadInfo: queryRef.current?.includeThreadInfo,\n includeReactions: queryRef.current?.includeReactions,\n includeMetaArray: queryRef.current?.includeMetaArray,\n replyType: queryRef.current?.replyType,\n customTypesFilter: queryRef.current?.customTypesFilter,\n messageTypeFilter: queryRef.current?.messageTypeFilter,\n senderUserIdsFilter: queryRef.current?.senderUserIdsFilter,\n showSubchannelMessagesOnly: queryRef.current?.showSubchannelMessagesOnly,\n };\n\n const queriedMessages = await channel.getMessagesByTimestamp(lastMessage.createdAt, messageQueryParams);\n messageQueryContext.hasMore = queriedMessages.length > 0;\n if (messageQueryContext.hasMore) {\n messageQueryContext.timestamp = queriedMessages[0].createdAt;\n messageContext.addedMessages.unshift(...queriedMessages);\n }\n\n while (messageQueryContext.hasMore) {\n const queriedMessages = await channel.getMessagesByTimestamp(messageQueryContext.timestamp, messageQueryParams);\n messageQueryContext.hasMore = queriedMessages.length > 0;\n if (messageQueryContext.hasMore) {\n messageQueryContext.timestamp = queriedMessages[0].createdAt;\n messageContext.addedMessages.unshift(...queriedMessages);\n }\n }\n\n // Update to View\n updateMessages(\n [...messageContext.addedMessages, ...messageContext.updatedMessages],\n false,\n sdk.currentUser.userId,\n );\n deleteMessages(messageContext.deletedMessageIds, []);\n\n if (messageContext.addedMessages.length > 0) {\n if (options?.shouldCountNewMessages?.()) {\n updateNewMessages(messageContext.addedMessages, false, sdk.currentUser.userId);\n }\n if (options?.onMessagesReceived) {\n options.onMessagesReceived(messageContext.addedMessages);\n }\n }\n },\n });\n\n useChannelHandler(\n sdk,\n handlerId,\n {\n // Messages\n onMessageReceived(eventChannel, message) {\n if (isDifferentChannel(channel, eventChannel)) return;\n if (isMyMessage(message, sdk.currentUser.userId)) return;\n\n updateMessages([message], false, sdk.currentUser.userId);\n if (options?.shouldCountNewMessages?.()) {\n updateNewMessages([message], false, sdk.currentUser.userId);\n }\n if (options?.onMessagesReceived) {\n options.onMessagesReceived([message]);\n }\n },\n onMessageUpdated(eventChannel, message) {\n if (isDifferentChannel(channel, eventChannel)) return;\n if (isMyMessage(message, sdk.currentUser.userId)) return;\n\n updateMessages([message], false, sdk.currentUser.userId);\n },\n onMessageDeleted(eventChannel, messageId) {\n if (isDifferentChannel(channel, eventChannel)) return;\n deleteMessages([messageId], []);\n deleteNewMessages([messageId], []);\n },\n // Channels\n onChannelChanged: channelUpdater,\n onChannelFrozen: channelUpdater,\n onChannelUnfrozen: channelUpdater,\n onChannelParticipantCountChanged(eventChannel) {\n if (isDifferentChannel(channel, eventChannel)) return;\n channelUpdater(eventChannel);\n },\n onChannelDeleted(channelUrl, type) {\n if (channel.url === channelUrl && type === 'open') {\n options?.onChannelDeleted?.();\n }\n },\n // Users\n onOperatorUpdated: channelUpdater,\n onUserUnbanned: channelUpdater,\n onUserMuted: channelUpdater,\n onUserUnmuted: channelUpdater,\n onUserBanned(eventChannel, bannedUser) {\n if (isDifferentChannel(channel, eventChannel)) return;\n\n if (bannedUser.userId === sdk.currentUser.userId) {\n options?.onChannelDeleted?.();\n } else {\n channelUpdater(eventChannel);\n }\n },\n },\n 'open',\n );\n\n useAsyncEffect(async () => {\n updateLoading(true);\n\n try {\n await channel.enter();\n await init(userId);\n } catch (error) {\n options?.onError?.(error);\n options?.onChannelDeleted?.();\n } finally {\n updateLoading(false);\n }\n\n return () => {\n channel.exit().catch(NOOP);\n };\n }, [channel.url, userId]);\n\n const refresh: ReturnType<UseOpenChannelMessages>['refresh'] = useFreshCallback(async () => {\n updateRefreshing(true);\n await init(userId);\n updateRefreshing(false);\n });\n\n const prev: ReturnType<UseOpenChannelMessages>['prev'] = useFreshCallback(async () => {\n if (queryRef.current && queryRef.current?.hasNext) {\n const list = await queryRef.current?.load();\n updateMessages(list, false, sdk.currentUser.userId);\n }\n });\n const hasPrev: ReturnType<UseOpenChannelMessages>['hasPrev'] = useFreshCallback(\n () => queryRef.current?.hasNext ?? false,\n );\n\n const next: ReturnType<UseOpenChannelMessages>['next'] = useFreshCallback(ASYNC_NOOP);\n const hasNext: ReturnType<UseOpenChannelMessages>['hasNext'] = useFreshCallback(() => false);\n\n const sendUserMessage: ReturnType<UseOpenChannelMessages>['sendUserMessage'] = useFreshCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n channel\n .sendUserMessage(params)\n .onPending((pendingMessage) => {\n if (pendingMessage.isUserMessage()) {\n updateMessages([pendingMessage], false, sdk.currentUser.userId);\n onPending?.(pendingMessage);\n }\n })\n .onSucceeded((sentMessage) => {\n if (sentMessage.isUserMessage()) {\n updateMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage);\n }\n })\n .onFailed((err, sentMessage) => {\n updateMessages([sentMessage], false, sdk.currentUser.userId);\n reject(err);\n });\n });\n },\n );\n\n const sendFileMessage: ReturnType<UseOpenChannelMessages>['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);\n }\n })\n .onFailed((err, sentMessage) => {\n updateMessages([sentMessage], false, sdk.currentUser.userId);\n reject(err);\n });\n });\n },\n );\n\n const updateUserMessage: ReturnType<UseOpenChannelMessages>['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<UseOpenChannelMessages>['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<UseOpenChannelMessages>['resendMessage'] = useFreshCallback(async (failedMessage) => {\n const message = await (() => {\n if (failedMessage.isUserMessage()) return channel.resendUserMessage(failedMessage);\n if (failedMessage.isFileMessage()) return channel.resendFileMessage(failedMessage);\n return null;\n })();\n\n if (message) updateMessages([message], false, sdk.currentUser.userId);\n });\n const deleteMessage: ReturnType<UseOpenChannelMessages>['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 deleteMessages([message.messageId], [message.reqId]);\n }\n });\n const resetNewMessages: ReturnType<UseOpenChannelMessages>['resetNewMessages'] = useFreshCallback(() => {\n updateNewMessages([], true, sdk.currentUser.userId);\n });\n\n return {\n loading,\n refreshing,\n refresh,\n messages,\n newMessages,\n next,\n hasNext,\n prev,\n hasPrev,\n sendUserMessage,\n sendFileMessage,\n updateUserMessage,\n updateFileMessage,\n resendMessage,\n deleteMessage,\n resetNewMessages,\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["_react","require","_uikitUtils","_useChannelHandler","_useConnectionHandler","_useChannelMessagesReducer","createMessageQuery","channel","creator","createPreviousMessageListQuery","limit","reverse","useOpenChannelMessagesWithQuery","sdk","userId","options","queryRef","useRef","forceUpdate","useForceUpdate","handlerId","useUniqHandlerId","loading","refreshing","messages","newMessages","updateMessages","updateNewMessages","deleteNewMessages","deleteMessages","updateLoading","updateRefreshing","useChannelMessagesReducer","sortComparator","init","useFreshCallback","uid","_queryRef$current","_sdk$currentUser2","current","queryCreator","hasNext","_queryRef$current2","_sdk$currentUser","list","load","currentUser","channelUpdater","isOpenChannel","isDifferentChannel","useConnectionHandler","onReconnectSucceeded","_queryRef$current3","_queryRef$current4","_queryRef$current5","_queryRef$current6","_queryRef$current7","_queryRef$current8","_queryRef$current9","_queryRef$current10","_queryRef$current11","_queryRef$current12","_queryRef$current13","_queryRef$current14","_queryRef$current15","_queryRef$current16","_queryRef$current17","_queryRef$current18","_sdk$currentUser3","lastMessage","messageContext","updatedMessages","addedMessages","deletedMessageIds","changeLogsContext","hasMore","token","messageQueryContext","timestamp","createdAt","changelogsParams","replyType","includeMetaArray","includeReactions","includeThreadInfo","includeParentMessageInfo","changeLogsByTS","getMessageChangeLogsSinceTimestamp","push","changeLogsByToken","getMessageChangeLogsSinceToken","messageQueryParams","prevResultSize","nextResultSize","customTypesFilter","messageTypeFilter","senderUserIdsFilter","showSubchannelMessagesOnly","queriedMessages","getMessagesByTimestamp","length","unshift","_options$shouldCountN","shouldCountNewMessages","call","_sdk$currentUser4","onMessagesReceived","useChannelHandler","onMessageReceived","eventChannel","message","_sdk$currentUser5","_sdk$currentUser6","_options$shouldCountN2","isMyMessage","_sdk$currentUser7","onMessageUpdated","_sdk$currentUser8","_sdk$currentUser9","onMessageDeleted","messageId","onChannelChanged","onChannelFrozen","onChannelUnfrozen","onChannelParticipantCountChanged","onChannelDeleted","channelUrl","type","url","_options$onChannelDel","onOperatorUpdated","onUserUnbanned","onUserMuted","onUserUnmuted","onUserBanned","bannedUser","_sdk$currentUser10","_options$onChannelDel2","useAsyncEffect","enter","error","_options$onError","_options$onChannelDel3","onError","exit","catch","NOOP","refresh","prev","_queryRef$current19","_queryRef$current20","_sdk$currentUser11","hasPrev","_queryRef$current21","next","ASYNC_NOOP","sendUserMessage","params","onPending","Promise","resolve","reject","pendingMessage","isUserMessage","_sdk$currentUser12","onSucceeded","sentMessage","_sdk$currentUser13","onFailed","err","failedMessage","_sdk$currentUser14","sendFileMessage","isFileMessage","_sdk$currentUser15","_sdk$currentUser16","_sdk$currentUser17","updateUserMessage","_sdk$currentUser18","updatedMessage","updateFileMessage","_sdk$currentUser19","resendMessage","_sdk$currentUser20","resendUserMessage","resendFileMessage","deleteMessage","sendingStatus","reqId","resetNewMessages","_sdk$currentUser21","exports"],"sources":["useOpenChannelMessagesWithQuery.ts"],"sourcesContent":["import { useRef } from 'react';\n\nimport { MessageListParams } from '@sendbird/chat/message';\nimport type {\n SendbirdBaseChannel,\n SendbirdBaseMessage,\n SendbirdOpenChannel,\n SendbirdPreviousMessageListQuery,\n} from '@sendbird/uikit-utils';\nimport {\n ASYNC_NOOP,\n NOOP,\n isDifferentChannel,\n isMyMessage,\n useAsyncEffect,\n useForceUpdate,\n useFreshCallback,\n useUniqHandlerId,\n} from '@sendbird/uikit-utils';\n\nimport { useChannelHandler } from '../../handler/useChannelHandler';\nimport { useConnectionHandler } from '../../handler/useConnectionHandler';\nimport type { UseOpenChannelMessages, UseOpenChannelMessagesOptions } from '../../types';\nimport { useChannelMessagesReducer } from '../useChannelMessagesReducer';\n\nconst createMessageQuery = (channel: SendbirdOpenChannel, creator?: UseOpenChannelMessagesOptions['queryCreator']) => {\n if (creator) return creator();\n return channel.createPreviousMessageListQuery({\n limit: 100,\n reverse: true,\n });\n};\n\nexport const useOpenChannelMessagesWithQuery: UseOpenChannelMessages = (sdk, channel, userId, options) => {\n const queryRef = useRef<SendbirdPreviousMessageListQuery>();\n const forceUpdate = useForceUpdate();\n const handlerId = useUniqHandlerId('useOpenChannelMessagesWithQuery');\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 init = useFreshCallback(async (uid?: string) => {\n if (uid) {\n queryRef.current = createMessageQuery(channel, options?.queryCreator);\n if (queryRef.current?.hasNext) {\n const list = await queryRef.current?.load();\n\n updateMessages(list, true, sdk.currentUser?.userId);\n }\n updateNewMessages([], true, sdk.currentUser?.userId);\n }\n });\n\n const channelUpdater = (channel: SendbirdBaseChannel) => {\n if (channel.isOpenChannel() && !isDifferentChannel(channel, channel)) {\n forceUpdate();\n }\n };\n\n useConnectionHandler(sdk, handlerId, {\n async onReconnectSucceeded() {\n const lastMessage = messages[0];\n if (!lastMessage) return;\n\n const messageContext = {\n updatedMessages: [] as SendbirdBaseMessage[],\n addedMessages: [] as SendbirdBaseMessage[],\n deletedMessageIds: [] as number[],\n };\n const changeLogsContext = {\n hasMore: false,\n token: '',\n };\n const messageQueryContext = {\n hasMore: false,\n timestamp: lastMessage.createdAt,\n };\n\n // Updated & Deleted messages\n const changelogsParams = {\n replyType: queryRef.current?.replyType,\n includeMetaArray: queryRef.current?.includeMetaArray,\n includeReactions: queryRef.current?.includeReactions,\n includeThreadInfo: queryRef.current?.includeThreadInfo,\n includeParentMessageInfo: queryRef.current?.includeParentMessageInfo,\n };\n\n const changeLogsByTS = await channel.getMessageChangeLogsSinceTimestamp(lastMessage.createdAt);\n changeLogsContext.token = changeLogsByTS.token;\n changeLogsContext.hasMore = changeLogsByTS.hasMore;\n messageContext.updatedMessages.push(...changeLogsByTS.updatedMessages);\n messageContext.deletedMessageIds.push(...changeLogsByTS.deletedMessageIds);\n\n while (changeLogsContext.hasMore) {\n const changeLogsByToken = await channel.getMessageChangeLogsSinceToken(changeLogsByTS.token, changelogsParams);\n changeLogsContext.token = changeLogsByToken.token;\n changeLogsContext.hasMore = changeLogsByToken.hasMore;\n messageContext.updatedMessages.push(...changeLogsByToken.updatedMessages);\n messageContext.deletedMessageIds.push(...changeLogsByToken.deletedMessageIds);\n }\n\n // Added messages\n const messageQueryParams: MessageListParams = {\n prevResultSize: 0,\n nextResultSize: queryRef.current?.limit ?? 100,\n reverse: queryRef.current?.reverse,\n includeParentMessageInfo: queryRef.current?.includeParentMessageInfo,\n includeThreadInfo: queryRef.current?.includeThreadInfo,\n includeReactions: queryRef.current?.includeReactions,\n includeMetaArray: queryRef.current?.includeMetaArray,\n replyType: queryRef.current?.replyType,\n customTypesFilter: queryRef.current?.customTypesFilter as never,\n messageTypeFilter: queryRef.current?.messageTypeFilter,\n senderUserIdsFilter: queryRef.current?.senderUserIdsFilter as never,\n showSubchannelMessagesOnly: queryRef.current?.showSubchannelMessagesOnly,\n };\n\n const queriedMessages = await channel.getMessagesByTimestamp(lastMessage.createdAt, messageQueryParams);\n messageQueryContext.hasMore = queriedMessages.length > 0;\n if (messageQueryContext.hasMore) {\n messageQueryContext.timestamp = queriedMessages[0].createdAt;\n messageContext.addedMessages.unshift(...queriedMessages);\n }\n\n while (messageQueryContext.hasMore) {\n const queriedMessages = await channel.getMessagesByTimestamp(messageQueryContext.timestamp, messageQueryParams);\n messageQueryContext.hasMore = queriedMessages.length > 0;\n if (messageQueryContext.hasMore) {\n messageQueryContext.timestamp = queriedMessages[0].createdAt;\n messageContext.addedMessages.unshift(...queriedMessages);\n }\n }\n\n // Update to View\n updateMessages(\n [...messageContext.addedMessages, ...messageContext.updatedMessages],\n false,\n sdk.currentUser?.userId,\n );\n deleteMessages(messageContext.deletedMessageIds, []);\n\n if (messageContext.addedMessages.length > 0) {\n if (options?.shouldCountNewMessages?.()) {\n updateNewMessages(messageContext.addedMessages, false, sdk.currentUser?.userId);\n }\n if (options?.onMessagesReceived) {\n options.onMessagesReceived(messageContext.addedMessages);\n }\n }\n },\n });\n\n useChannelHandler(\n sdk,\n handlerId,\n {\n // Messages\n onMessageReceived(eventChannel, message) {\n if (isDifferentChannel(channel, eventChannel)) return;\n if (isMyMessage(message, sdk.currentUser?.userId)) return;\n\n updateMessages([message], false, sdk.currentUser?.userId);\n if (options?.shouldCountNewMessages?.()) {\n updateNewMessages([message], false, sdk.currentUser?.userId);\n }\n if (options?.onMessagesReceived) {\n options.onMessagesReceived([message]);\n }\n },\n onMessageUpdated(eventChannel, message) {\n if (isDifferentChannel(channel, eventChannel)) return;\n if (isMyMessage(message, sdk.currentUser?.userId)) return;\n\n updateMessages([message], false, sdk.currentUser?.userId);\n },\n onMessageDeleted(eventChannel, messageId) {\n if (isDifferentChannel(channel, eventChannel)) return;\n deleteMessages([messageId], []);\n deleteNewMessages([messageId], []);\n },\n // Channels\n onChannelChanged: channelUpdater,\n onChannelFrozen: channelUpdater,\n onChannelUnfrozen: channelUpdater,\n onChannelParticipantCountChanged(eventChannel) {\n if (isDifferentChannel(channel, eventChannel)) return;\n channelUpdater(eventChannel);\n },\n onChannelDeleted(channelUrl, type) {\n if (channel.url === channelUrl && type === 'open') {\n options?.onChannelDeleted?.();\n }\n },\n // Users\n onOperatorUpdated: channelUpdater,\n onUserUnbanned: channelUpdater,\n onUserMuted: channelUpdater,\n onUserUnmuted: channelUpdater,\n onUserBanned(eventChannel, bannedUser) {\n if (isDifferentChannel(channel, eventChannel)) return;\n\n if (bannedUser.userId === sdk.currentUser?.userId) {\n options?.onChannelDeleted?.();\n } else {\n channelUpdater(eventChannel);\n }\n },\n },\n 'open',\n );\n\n useAsyncEffect(async () => {\n updateLoading(true);\n\n try {\n await channel.enter();\n await init(userId);\n } catch (error) {\n options?.onError?.(error);\n options?.onChannelDeleted?.();\n } finally {\n updateLoading(false);\n }\n\n return () => {\n channel.exit().catch(NOOP);\n };\n }, [channel.url, userId]);\n\n const refresh: ReturnType<UseOpenChannelMessages>['refresh'] = useFreshCallback(async () => {\n updateRefreshing(true);\n await init(userId);\n updateRefreshing(false);\n });\n\n const prev: ReturnType<UseOpenChannelMessages>['prev'] = useFreshCallback(async () => {\n if (queryRef.current && queryRef.current?.hasNext) {\n const list = await queryRef.current?.load();\n updateMessages(list, false, sdk.currentUser?.userId);\n }\n });\n const hasPrev: ReturnType<UseOpenChannelMessages>['hasPrev'] = useFreshCallback(\n () => queryRef.current?.hasNext ?? false,\n );\n\n const next: ReturnType<UseOpenChannelMessages>['next'] = useFreshCallback(ASYNC_NOOP);\n const hasNext: ReturnType<UseOpenChannelMessages>['hasNext'] = useFreshCallback(() => false);\n\n const sendUserMessage: ReturnType<UseOpenChannelMessages>['sendUserMessage'] = useFreshCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n channel\n .sendUserMessage(params)\n .onPending((pendingMessage) => {\n if (pendingMessage.isUserMessage()) {\n updateMessages([pendingMessage], false, sdk.currentUser?.userId);\n onPending?.(pendingMessage);\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\n const sendFileMessage: ReturnType<UseOpenChannelMessages>['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);\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\n const updateUserMessage: ReturnType<UseOpenChannelMessages>['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<UseOpenChannelMessages>['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<UseOpenChannelMessages>['resendMessage'] = useFreshCallback(async (failedMessage) => {\n const message = await (() => {\n if (failedMessage.isUserMessage()) return channel.resendUserMessage(failedMessage);\n if (failedMessage.isFileMessage()) return channel.resendFileMessage(failedMessage);\n return null;\n })();\n\n if (message) updateMessages([message], false, sdk.currentUser?.userId);\n });\n const deleteMessage: ReturnType<UseOpenChannelMessages>['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 deleteMessages([message.messageId], [message.reqId]);\n }\n });\n const resetNewMessages: ReturnType<UseOpenChannelMessages>['resetNewMessages'] = useFreshCallback(() => {\n updateNewMessages([], true, sdk.currentUser?.userId);\n });\n\n return {\n loading,\n refreshing,\n refresh,\n messages,\n newMessages,\n next,\n hasNext,\n prev,\n hasPrev,\n sendUserMessage,\n sendFileMessage,\n updateUserMessage,\n updateFileMessage,\n resendMessage,\n deleteMessage,\n resetNewMessages,\n };\n};\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AASA,IAAAC,WAAA,GAAAD,OAAA;AAWA,IAAAE,kBAAA,GAAAF,OAAA;AACA,IAAAG,qBAAA,GAAAH,OAAA;AAEA,IAAAI,0BAAA,GAAAJ,OAAA;AAEA,MAAMK,kBAAkB,GAAGA,CAACC,OAA4B,EAAEC,OAAuD,KAAK;EACpH,IAAIA,OAAO,EAAE,OAAOA,OAAO,EAAE;EAC7B,OAAOD,OAAO,CAACE,8BAA8B,CAAC;IAC5CC,KAAK,EAAE,GAAG;IACVC,OAAO,EAAE;EACX,CAAC,CAAC;AACJ,CAAC;AAEM,MAAMC,+BAAuD,GAAGA,CAACC,GAAG,EAAEN,OAAO,EAAEO,MAAM,EAAEC,OAAO,KAAK;EACxG,MAAMC,QAAQ,GAAG,IAAAC,aAAM,GAAoC;EAC3D,MAAMC,WAAW,GAAG,IAAAC,0BAAc,GAAE;EACpC,MAAMC,SAAS,GAAG,IAAAC,4BAAgB,EAAC,iCAAiC,CAAC;EAErE,MAAM;IACJC,OAAO;IACPC,UAAU;IACVC,QAAQ;IACRC,WAAW;IACXC,cAAc;IACdC,iBAAiB;IACjBC,iBAAiB;IACjBC,cAAc;IACdC,aAAa;IACbC;EACF,CAAC,GAAG,IAAAC,oDAAyB,EAACjB,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEkB,cAAc,CAAC;EAEtD,MAAMC,IAAI,GAAG,IAAAC,4BAAgB,EAAC,MAAOC,GAAY,IAAK;IACpD,IAAIA,GAAG,EAAE;MAAA,IAAAC,iBAAA,EAAAC,iBAAA;MACPtB,QAAQ,CAACuB,OAAO,GAAGjC,kBAAkB,CAACC,OAAO,EAAEQ,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEyB,YAAY,CAAC;MACrE,KAAAH,iBAAA,GAAIrB,QAAQ,CAACuB,OAAO,cAAAF,iBAAA,eAAhBA,iBAAA,CAAkBI,OAAO,EAAE;QAAA,IAAAC,kBAAA,EAAAC,gBAAA;QAC7B,MAAMC,IAAI,GAAG,QAAAF,kBAAA,GAAM1B,QAAQ,CAACuB,OAAO,cAAAG,kBAAA,uBAAhBA,kBAAA,CAAkBG,IAAI,EAAE;QAE3CnB,cAAc,CAACkB,IAAI,EAAE,IAAI,GAAAD,gBAAA,GAAE9B,GAAG,CAACiC,WAAW,cAAAH,gBAAA,uBAAfA,gBAAA,CAAiB7B,MAAM,CAAC;MACrD;MACAa,iBAAiB,CAAC,EAAE,EAAE,IAAI,GAAAW,iBAAA,GAAEzB,GAAG,CAACiC,WAAW,cAAAR,iBAAA,uBAAfA,iBAAA,CAAiBxB,MAAM,CAAC;IACtD;EACF,CAAC,CAAC;EAEF,MAAMiC,cAAc,GAAIxC,OAA4B,IAAK;IACvD,IAAIA,OAAO,CAACyC,aAAa,EAAE,IAAI,CAAC,IAAAC,8BAAkB,EAAC1C,OAAO,EAAEA,OAAO,CAAC,EAAE;MACpEW,WAAW,EAAE;IACf;EACF,CAAC;EAED,IAAAgC,0CAAoB,EAACrC,GAAG,EAAEO,SAAS,EAAE;IACnC,MAAM+B,oBAAoBA,CAAA,EAAG;MAAA,IAAAC,kBAAA,EAAAC,kBAAA,EAAAC,kBAAA,EAAAC,kBAAA,EAAAC,kBAAA,EAAAC,kBAAA,EAAAC,kBAAA,EAAAC,mBAAA,EAAAC,mBAAA,EAAAC,mBAAA,EAAAC,mBAAA,EAAAC,mBAAA,EAAAC,mBAAA,EAAAC,mBAAA,EAAAC,mBAAA,EAAAC,mBAAA,EAAAC,iBAAA;MAC3B,MAAMC,WAAW,GAAG7C,QAAQ,CAAC,CAAC,CAAC;MAC/B,IAAI,CAAC6C,WAAW,EAAE;MAElB,MAAMC,cAAc,GAAG;QACrBC,eAAe,EAAE,EAA2B;QAC5CC,aAAa,EAAE,EAA2B;QAC1CC,iBAAiB,EAAE;MACrB,CAAC;MACD,MAAMC,iBAAiB,GAAG;QACxBC,OAAO,EAAE,KAAK;QACdC,KAAK,EAAE;MACT,CAAC;MACD,MAAMC,mBAAmB,GAAG;QAC1BF,OAAO,EAAE,KAAK;QACdG,SAAS,EAAET,WAAW,CAACU;MACzB,CAAC;;MAED;MACA,MAAMC,gBAAgB,GAAG;QACvBC,SAAS,GAAA7B,kBAAA,GAAEpC,QAAQ,CAACuB,OAAO,cAAAa,kBAAA,uBAAhBA,kBAAA,CAAkB6B,SAAS;QACtCC,gBAAgB,GAAA7B,kBAAA,GAAErC,QAAQ,CAACuB,OAAO,cAAAc,kBAAA,uBAAhBA,kBAAA,CAAkB6B,gBAAgB;QACpDC,gBAAgB,GAAA7B,kBAAA,GAAEtC,QAAQ,CAACuB,OAAO,cAAAe,kBAAA,uBAAhBA,kBAAA,CAAkB6B,gBAAgB;QACpDC,iBAAiB,GAAA7B,kBAAA,GAAEvC,QAAQ,CAACuB,OAAO,cAAAgB,kBAAA,uBAAhBA,kBAAA,CAAkB6B,iBAAiB;QACtDC,wBAAwB,GAAA7B,kBAAA,GAAExC,QAAQ,CAACuB,OAAO,cAAAiB,kBAAA,uBAAhBA,kBAAA,CAAkB6B;MAC9C,CAAC;MAED,MAAMC,cAAc,GAAG,MAAM/E,OAAO,CAACgF,kCAAkC,CAAClB,WAAW,CAACU,SAAS,CAAC;MAC9FL,iBAAiB,CAACE,KAAK,GAAGU,cAAc,CAACV,KAAK;MAC9CF,iBAAiB,CAACC,OAAO,GAAGW,cAAc,CAACX,OAAO;MAClDL,cAAc,CAACC,eAAe,CAACiB,IAAI,CAAC,GAAGF,cAAc,CAACf,eAAe,CAAC;MACtED,cAAc,CAACG,iBAAiB,CAACe,IAAI,CAAC,GAAGF,cAAc,CAACb,iBAAiB,CAAC;MAE1E,OAAOC,iBAAiB,CAACC,OAAO,EAAE;QAChC,MAAMc,iBAAiB,GAAG,MAAMlF,OAAO,CAACmF,8BAA8B,CAACJ,cAAc,CAACV,KAAK,EAAEI,gBAAgB,CAAC;QAC9GN,iBAAiB,CAACE,KAAK,GAAGa,iBAAiB,CAACb,KAAK;QACjDF,iBAAiB,CAACC,OAAO,GAAGc,iBAAiB,CAACd,OAAO;QACrDL,cAAc,CAACC,eAAe,CAACiB,IAAI,CAAC,GAAGC,iBAAiB,CAAClB,eAAe,CAAC;QACzED,cAAc,CAACG,iBAAiB,CAACe,IAAI,CAAC,GAAGC,iBAAiB,CAAChB,iBAAiB,CAAC;MAC/E;;MAEA;MACA,MAAMkB,kBAAqC,GAAG;QAC5CC,cAAc,EAAE,CAAC;QACjBC,cAAc,EAAE,EAAApC,kBAAA,GAAAzC,QAAQ,CAACuB,OAAO,cAAAkB,kBAAA,uBAAhBA,kBAAA,CAAkB/C,KAAK,KAAI,GAAG;QAC9CC,OAAO,GAAA+C,kBAAA,GAAE1C,QAAQ,CAACuB,OAAO,cAAAmB,kBAAA,uBAAhBA,kBAAA,CAAkB/C,OAAO;QAClC0E,wBAAwB,GAAA1B,mBAAA,GAAE3C,QAAQ,CAACuB,OAAO,cAAAoB,mBAAA,uBAAhBA,mBAAA,CAAkB0B,wBAAwB;QACpED,iBAAiB,GAAAxB,mBAAA,GAAE5C,QAAQ,CAACuB,OAAO,cAAAqB,mBAAA,uBAAhBA,mBAAA,CAAkBwB,iBAAiB;QACtDD,gBAAgB,GAAAtB,mBAAA,GAAE7C,QAAQ,CAACuB,OAAO,cAAAsB,mBAAA,uBAAhBA,mBAAA,CAAkBsB,gBAAgB;QACpDD,gBAAgB,GAAApB,mBAAA,GAAE9C,QAAQ,CAACuB,OAAO,cAAAuB,mBAAA,uBAAhBA,mBAAA,CAAkBoB,gBAAgB;QACpDD,SAAS,GAAAlB,mBAAA,GAAE/C,QAAQ,CAACuB,OAAO,cAAAwB,mBAAA,uBAAhBA,mBAAA,CAAkBkB,SAAS;QACtCa,iBAAiB,GAAA9B,mBAAA,GAAEhD,QAAQ,CAACuB,OAAO,cAAAyB,mBAAA,uBAAhBA,mBAAA,CAAkB8B,iBAA0B;QAC/DC,iBAAiB,GAAA9B,mBAAA,GAAEjD,QAAQ,CAACuB,OAAO,cAAA0B,mBAAA,uBAAhBA,mBAAA,CAAkB8B,iBAAiB;QACtDC,mBAAmB,GAAA9B,mBAAA,GAAElD,QAAQ,CAACuB,OAAO,cAAA2B,mBAAA,uBAAhBA,mBAAA,CAAkB8B,mBAA4B;QACnEC,0BAA0B,GAAA9B,mBAAA,GAAEnD,QAAQ,CAACuB,OAAO,cAAA4B,mBAAA,uBAAhBA,mBAAA,CAAkB8B;MAChD,CAAC;MAED,MAAMC,eAAe,GAAG,MAAM3F,OAAO,CAAC4F,sBAAsB,CAAC9B,WAAW,CAACU,SAAS,EAAEY,kBAAkB,CAAC;MACvGd,mBAAmB,CAACF,OAAO,GAAGuB,eAAe,CAACE,MAAM,GAAG,CAAC;MACxD,IAAIvB,mBAAmB,CAACF,OAAO,EAAE;QAC/BE,mBAAmB,CAACC,SAAS,GAAGoB,eAAe,CAAC,CAAC,CAAC,CAACnB,SAAS;QAC5DT,cAAc,CAACE,aAAa,CAAC6B,OAAO,CAAC,GAAGH,eAAe,CAAC;MAC1D;MAEA,OAAOrB,mBAAmB,CAACF,OAAO,EAAE;QAClC,MAAMuB,eAAe,GAAG,MAAM3F,OAAO,CAAC4F,sBAAsB,CAACtB,mBAAmB,CAACC,SAAS,EAAEa,kBAAkB,CAAC;QAC/Gd,mBAAmB,CAACF,OAAO,GAAGuB,eAAe,CAACE,MAAM,GAAG,CAAC;QACxD,IAAIvB,mBAAmB,CAACF,OAAO,EAAE;UAC/BE,mBAAmB,CAACC,SAAS,GAAGoB,eAAe,CAAC,CAAC,CAAC,CAACnB,SAAS;UAC5DT,cAAc,CAACE,aAAa,CAAC6B,OAAO,CAAC,GAAGH,eAAe,CAAC;QAC1D;MACF;;MAEA;MACAxE,cAAc,CACZ,CAAC,GAAG4C,cAAc,CAACE,aAAa,EAAE,GAAGF,cAAc,CAACC,eAAe,CAAC,EACpE,KAAK,GAAAH,iBAAA,GACLvD,GAAG,CAACiC,WAAW,cAAAsB,iBAAA,uBAAfA,iBAAA,CAAiBtD,MAAM,CACxB;MACDe,cAAc,CAACyC,cAAc,CAACG,iBAAiB,EAAE,EAAE,CAAC;MAEpD,IAAIH,cAAc,CAACE,aAAa,CAAC4B,MAAM,GAAG,CAAC,EAAE;QAAA,IAAAE,qBAAA;QAC3C,IAAIvF,OAAO,aAAPA,OAAO,gBAAAuF,qBAAA,GAAPvF,OAAO,CAAEwF,sBAAsB,cAAAD,qBAAA,eAA/BA,qBAAA,CAAAE,IAAA,CAAAzF,OAAO,CAA4B,EAAE;UAAA,IAAA0F,iBAAA;UACvC9E,iBAAiB,CAAC2C,cAAc,CAACE,aAAa,EAAE,KAAK,GAAAiC,iBAAA,GAAE5F,GAAG,CAACiC,WAAW,cAAA2D,iBAAA,uBAAfA,iBAAA,CAAiB3F,MAAM,CAAC;QACjF;QACA,IAAIC,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAE2F,kBAAkB,EAAE;UAC/B3F,OAAO,CAAC2F,kBAAkB,CAACpC,cAAc,CAACE,aAAa,CAAC;QAC1D;MACF;IACF;EACF,CAAC,CAAC;EAEF,IAAAmC,oCAAiB,EACf9F,GAAG,EACHO,SAAS,EACT;IACE;IACAwF,iBAAiBA,CAACC,YAAY,EAAEC,OAAO,EAAE;MAAA,IAAAC,iBAAA,EAAAC,iBAAA,EAAAC,sBAAA;MACvC,IAAI,IAAAhE,8BAAkB,EAAC1C,OAAO,EAAEsG,YAAY,CAAC,EAAE;MAC/C,IAAI,IAAAK,uBAAW,EAACJ,OAAO,GAAAC,iBAAA,GAAElG,GAAG,CAACiC,WAAW,cAAAiE,iBAAA,uBAAfA,iBAAA,CAAiBjG,MAAM,CAAC,EAAE;MAEnDY,cAAc,CAAC,CAACoF,OAAO,CAAC,EAAE,KAAK,GAAAE,iBAAA,GAAEnG,GAAG,CAACiC,WAAW,cAAAkE,iBAAA,uBAAfA,iBAAA,CAAiBlG,MAAM,CAAC;MACzD,IAAIC,OAAO,aAAPA,OAAO,gBAAAkG,sBAAA,GAAPlG,OAAO,CAAEwF,sBAAsB,cAAAU,sBAAA,eAA/BA,sBAAA,CAAAT,IAAA,CAAAzF,OAAO,CAA4B,EAAE;QAAA,IAAAoG,iBAAA;QACvCxF,iBAAiB,CAAC,CAACmF,OAAO,CAAC,EAAE,KAAK,GAAAK,iBAAA,GAAEtG,GAAG,CAACiC,WAAW,cAAAqE,iBAAA,uBAAfA,iBAAA,CAAiBrG,MAAM,CAAC;MAC9D;MACA,IAAIC,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAE2F,kBAAkB,EAAE;QAC/B3F,OAAO,CAAC2F,kBAAkB,CAAC,CAACI,OAAO,CAAC,CAAC;MACvC;IACF,CAAC;IACDM,gBAAgBA,CAACP,YAAY,EAAEC,OAAO,EAAE;MAAA,IAAAO,iBAAA,EAAAC,iBAAA;MACtC,IAAI,IAAArE,8BAAkB,EAAC1C,OAAO,EAAEsG,YAAY,CAAC,EAAE;MAC/C,IAAI,IAAAK,uBAAW,EAACJ,OAAO,GAAAO,iBAAA,GAAExG,GAAG,CAACiC,WAAW,cAAAuE,iBAAA,uBAAfA,iBAAA,CAAiBvG,MAAM,CAAC,EAAE;MAEnDY,cAAc,CAAC,CAACoF,OAAO,CAAC,EAAE,KAAK,GAAAQ,iBAAA,GAAEzG,GAAG,CAACiC,WAAW,cAAAwE,iBAAA,uBAAfA,iBAAA,CAAiBxG,MAAM,CAAC;IAC3D,CAAC;IACDyG,gBAAgBA,CAACV,YAAY,EAAEW,SAAS,EAAE;MACxC,IAAI,IAAAvE,8BAAkB,EAAC1C,OAAO,EAAEsG,YAAY,CAAC,EAAE;MAC/ChF,cAAc,CAAC,CAAC2F,SAAS,CAAC,EAAE,EAAE,CAAC;MAC/B5F,iBAAiB,CAAC,CAAC4F,SAAS,CAAC,EAAE,EAAE,CAAC;IACpC,CAAC;IACD;IACAC,gBAAgB,EAAE1E,cAAc;IAChC2E,eAAe,EAAE3E,cAAc;IAC/B4E,iBAAiB,EAAE5E,cAAc;IACjC6E,gCAAgCA,CAACf,YAAY,EAAE;MAC7C,IAAI,IAAA5D,8BAAkB,EAAC1C,OAAO,EAAEsG,YAAY,CAAC,EAAE;MAC/C9D,cAAc,CAAC8D,YAAY,CAAC;IAC9B,CAAC;IACDgB,gBAAgBA,CAACC,UAAU,EAAEC,IAAI,EAAE;MACjC,IAAIxH,OAAO,CAACyH,GAAG,KAAKF,UAAU,IAAIC,IAAI,KAAK,MAAM,EAAE;QAAA,IAAAE,qBAAA;QACjDlH,OAAO,aAAPA,OAAO,wBAAAkH,qBAAA,GAAPlH,OAAO,CAAE8G,gBAAgB,cAAAI,qBAAA,uBAAzBA,qBAAA,CAAAzB,IAAA,CAAAzF,OAAO,CAAsB;MAC/B;IACF,CAAC;IACD;IACAmH,iBAAiB,EAAEnF,cAAc;IACjCoF,cAAc,EAAEpF,cAAc;IAC9BqF,WAAW,EAAErF,cAAc;IAC3BsF,aAAa,EAAEtF,cAAc;IAC7BuF,YAAYA,CAACzB,YAAY,EAAE0B,UAAU,EAAE;MAAA,IAAAC,kBAAA;MACrC,IAAI,IAAAvF,8BAAkB,EAAC1C,OAAO,EAAEsG,YAAY,CAAC,EAAE;MAE/C,IAAI0B,UAAU,CAACzH,MAAM,OAAA0H,kBAAA,GAAK3H,GAAG,CAACiC,WAAW,cAAA0F,kBAAA,uBAAfA,kBAAA,CAAiB1H,MAAM,GAAE;QAAA,IAAA2H,sBAAA;QACjD1H,OAAO,aAAPA,OAAO,wBAAA0H,sBAAA,GAAP1H,OAAO,CAAE8G,gBAAgB,cAAAY,sBAAA,uBAAzBA,sBAAA,CAAAjC,IAAA,CAAAzF,OAAO,CAAsB;MAC/B,CAAC,MAAM;QACLgC,cAAc,CAAC8D,YAAY,CAAC;MAC9B;IACF;EACF,CAAC,EACD,MAAM,CACP;EAED,IAAA6B,0BAAc,EAAC,YAAY;IACzB5G,aAAa,CAAC,IAAI,CAAC;IAEnB,IAAI;MACF,MAAMvB,OAAO,CAACoI,KAAK,EAAE;MACrB,MAAMzG,IAAI,CAACpB,MAAM,CAAC;IACpB,CAAC,CAAC,OAAO8H,KAAK,EAAE;MAAA,IAAAC,gBAAA,EAAAC,sBAAA;MACd/H,OAAO,aAAPA,OAAO,wBAAA8H,gBAAA,GAAP9H,OAAO,CAAEgI,OAAO,cAAAF,gBAAA,uBAAhBA,gBAAA,CAAArC,IAAA,CAAAzF,OAAO,EAAY6H,KAAK,CAAC;MACzB7H,OAAO,aAAPA,OAAO,wBAAA+H,sBAAA,GAAP/H,OAAO,CAAE8G,gBAAgB,cAAAiB,sBAAA,uBAAzBA,sBAAA,CAAAtC,IAAA,CAAAzF,OAAO,CAAsB;IAC/B,CAAC,SAAS;MACRe,aAAa,CAAC,KAAK,CAAC;IACtB;IAEA,OAAO,MAAM;MACXvB,OAAO,CAACyI,IAAI,EAAE,CAACC,KAAK,CAACC,gBAAI,CAAC;IAC5B,CAAC;EACH,CAAC,EAAE,CAAC3I,OAAO,CAACyH,GAAG,EAAElH,MAAM,CAAC,CAAC;EAEzB,MAAMqI,OAAsD,GAAG,IAAAhH,4BAAgB,EAAC,YAAY;IAC1FJ,gBAAgB,CAAC,IAAI,CAAC;IACtB,MAAMG,IAAI,CAACpB,MAAM,CAAC;IAClBiB,gBAAgB,CAAC,KAAK,CAAC;EACzB,CAAC,CAAC;EAEF,MAAMqH,IAAgD,GAAG,IAAAjH,4BAAgB,EAAC,YAAY;IAAA,IAAAkH,mBAAA;IACpF,IAAIrI,QAAQ,CAACuB,OAAO,KAAA8G,mBAAA,GAAIrI,QAAQ,CAACuB,OAAO,cAAA8G,mBAAA,eAAhBA,mBAAA,CAAkB5G,OAAO,EAAE;MAAA,IAAA6G,mBAAA,EAAAC,kBAAA;MACjD,MAAM3G,IAAI,GAAG,QAAA0G,mBAAA,GAAMtI,QAAQ,CAACuB,OAAO,cAAA+G,mBAAA,uBAAhBA,mBAAA,CAAkBzG,IAAI,EAAE;MAC3CnB,cAAc,CAACkB,IAAI,EAAE,KAAK,GAAA2G,kBAAA,GAAE1I,GAAG,CAACiC,WAAW,cAAAyG,kBAAA,uBAAfA,kBAAA,CAAiBzI,MAAM,CAAC;IACtD;EACF,CAAC,CAAC;EACF,MAAM0I,OAAsD,GAAG,IAAArH,4BAAgB,EAC7E;IAAA,IAAAsH,mBAAA;IAAA,OAAM,EAAAA,mBAAA,GAAAzI,QAAQ,CAACuB,OAAO,cAAAkH,mBAAA,uBAAhBA,mBAAA,CAAkBhH,OAAO,KAAI,KAAK;EAAA,EACzC;EAED,MAAMiH,IAAgD,GAAG,IAAAvH,4BAAgB,EAACwH,sBAAU,CAAC;EACrF,MAAMlH,OAAsD,GAAG,IAAAN,4BAAgB,EAAC,MAAM,KAAK,CAAC;EAE5F,MAAMyH,eAAsE,GAAG,IAAAzH,4BAAgB,EAC7F,CAAC0H,MAAM,EAAEC,SAAS,KAAK;IACrB,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;MACtC1J,OAAO,CACJqJ,eAAe,CAACC,MAAM,CAAC,CACvBC,SAAS,CAAEI,cAAc,IAAK;QAC7B,IAAIA,cAAc,CAACC,aAAa,EAAE,EAAE;UAAA,IAAAC,kBAAA;UAClC1I,cAAc,CAAC,CAACwI,cAAc,CAAC,EAAE,KAAK,GAAAE,kBAAA,GAAEvJ,GAAG,CAACiC,WAAW,cAAAsH,kBAAA,uBAAfA,kBAAA,CAAiBtJ,MAAM,CAAC;UAChEgJ,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAGI,cAAc,CAAC;QAC7B;MACF,CAAC,CAAC,CACDG,WAAW,CAAEC,WAAW,IAAK;QAC5B,IAAIA,WAAW,CAACH,aAAa,EAAE,EAAE;UAAA,IAAAI,kBAAA;UAC/B7I,cAAc,CAAC,CAAC4I,WAAW,CAAC,EAAE,KAAK,GAAAC,kBAAA,GAAE1J,GAAG,CAACiC,WAAW,cAAAyH,kBAAA,uBAAfA,kBAAA,CAAiBzJ,MAAM,CAAC;UAC7DkJ,OAAO,CAACM,WAAW,CAAC;QACtB;MACF,CAAC,CAAC,CACDE,QAAQ,CAAC,CAACC,GAAG,EAAEC,aAAa,KAAK;QAChC,IAAIA,aAAa,EAAE;UAAA,IAAAC,kBAAA;UACjBjJ,cAAc,CAAC,CAACgJ,aAAa,CAAC,EAAE,KAAK,GAAAC,kBAAA,GAAE9J,GAAG,CAACiC,WAAW,cAAA6H,kBAAA,uBAAfA,kBAAA,CAAiB7J,MAAM,CAAC;QACjE;QACAmJ,MAAM,CAACQ,GAAG,CAAC;MACb,CAAC,CAAC;IACN,CAAC,CAAC;EACJ,CAAC,CACF;EAED,MAAMG,eAAsE,GAAG,IAAAzI,4BAAgB,EAC7F,CAAC0H,MAAM,EAAEC,SAAS,KAAK;IACrB,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;MACtC1J,OAAO,CACJqK,eAAe,CAACf,MAAM,CAAC,CACvBC,SAAS,CAAEI,cAAc,IAAK;QAC7B,IAAIA,cAAc,CAACW,aAAa,EAAE,EAAE;UAAA,IAAAC,kBAAA;UAClCpJ,cAAc,CAAC,CAACwI,cAAc,CAAC,EAAE,KAAK,GAAAY,kBAAA,GAAEjK,GAAG,CAACiC,WAAW,cAAAgI,kBAAA,uBAAfA,kBAAA,CAAiBhK,MAAM,CAAC;UAChEgJ,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAGI,cAAc,CAAC;QAC7B;MACF,CAAC,CAAC,CACDG,WAAW,CAAEC,WAAW,IAAK;QAC5B,IAAIA,WAAW,CAACO,aAAa,EAAE,EAAE;UAAA,IAAAE,kBAAA;UAC/BrJ,cAAc,CAAC,CAAC4I,WAAW,CAAC,EAAE,KAAK,GAAAS,kBAAA,GAAElK,GAAG,CAACiC,WAAW,cAAAiI,kBAAA,uBAAfA,kBAAA,CAAiBjK,MAAM,CAAC;UAC7DkJ,OAAO,CAACM,WAAW,CAAC;QACtB;MACF,CAAC,CAAC,CACDE,QAAQ,CAAC,CAACC,GAAG,EAAEC,aAAa,KAAK;QAChC,IAAIA,aAAa,EAAE;UAAA,IAAAM,kBAAA;UACjBtJ,cAAc,CAAC,CAACgJ,aAAa,CAAC,EAAE,KAAK,GAAAM,kBAAA,GAAEnK,GAAG,CAACiC,WAAW,cAAAkI,kBAAA,uBAAfA,kBAAA,CAAiBlK,MAAM,CAAC;QACjE;QACAmJ,MAAM,CAACQ,GAAG,CAAC;MACb,CAAC,CAAC;IACN,CAAC,CAAC;EACJ,CAAC,CACF;EAED,MAAMQ,iBAA0E,GAAG,IAAA9I,4BAAgB,EACjG,OAAOqF,SAAS,EAAEqC,MAAM,KAAK;IAAA,IAAAqB,kBAAA;IAC3B,MAAMC,cAAc,GAAG,MAAM5K,OAAO,CAAC0K,iBAAiB,CAACzD,SAAS,EAAEqC,MAAM,CAAC;IACzEnI,cAAc,CAAC,CAACyJ,cAAc,CAAC,EAAE,KAAK,GAAAD,kBAAA,GAAErK,GAAG,CAACiC,WAAW,cAAAoI,kBAAA,uBAAfA,kBAAA,CAAiBpK,MAAM,CAAC;IAChE,OAAOqK,cAAc;EACvB,CAAC,CACF;EACD,MAAMC,iBAA0E,GAAG,IAAAjJ,4BAAgB,EACjG,OAAOqF,SAAS,EAAEqC,MAAM,KAAK;IAAA,IAAAwB,kBAAA;IAC3B,MAAMF,cAAc,GAAG,MAAM5K,OAAO,CAAC6K,iBAAiB,CAAC5D,SAAS,EAAEqC,MAAM,CAAC;IACzEnI,cAAc,CAAC,CAACyJ,cAAc,CAAC,EAAE,KAAK,GAAAE,kBAAA,GAAExK,GAAG,CAACiC,WAAW,cAAAuI,kBAAA,uBAAfA,kBAAA,CAAiBvK,MAAM,CAAC;IAChE,OAAOqK,cAAc;EACvB,CAAC,CACF;EACD,MAAMG,aAAkE,GAAG,IAAAnJ,4BAAgB,EAAC,MAAOuI,aAAa,IAAK;IAAA,IAAAa,kBAAA;IACnH,MAAMzE,OAAO,GAAG,MAAM,CAAC,MAAM;MAC3B,IAAI4D,aAAa,CAACP,aAAa,EAAE,EAAE,OAAO5J,OAAO,CAACiL,iBAAiB,CAACd,aAAa,CAAC;MAClF,IAAIA,aAAa,CAACG,aAAa,EAAE,EAAE,OAAOtK,OAAO,CAACkL,iBAAiB,CAACf,aAAa,CAAC;MAClF,OAAO,IAAI;IACb,CAAC,GAAG;IAEJ,IAAI5D,OAAO,EAAEpF,cAAc,CAAC,CAACoF,OAAO,CAAC,EAAE,KAAK,GAAAyE,kBAAA,GAAE1K,GAAG,CAACiC,WAAW,cAAAyI,kBAAA,uBAAfA,kBAAA,CAAiBzK,MAAM,CAAC;EACxE,CAAC,CAAC;EACF,MAAM4K,aAAkE,GAAG,IAAAvJ,4BAAgB,EAAC,MAAO2E,OAAO,IAAK;IAC7G,IAAIA,OAAO,CAAC6E,aAAa,KAAK,WAAW,EAAE;MACzC,IAAI7E,OAAO,CAACqD,aAAa,EAAE,EAAE,MAAM5J,OAAO,CAACmL,aAAa,CAAC5E,OAAO,CAAC;MACjE,IAAIA,OAAO,CAAC+D,aAAa,EAAE,EAAE,MAAMtK,OAAO,CAACmL,aAAa,CAAC5E,OAAO,CAAC;IACnE,CAAC,MAAM;MACLjF,cAAc,CAAC,CAACiF,OAAO,CAACU,SAAS,CAAC,EAAE,CAACV,OAAO,CAAC8E,KAAK,CAAC,CAAC;IACtD;EACF,CAAC,CAAC;EACF,MAAMC,gBAAwE,GAAG,IAAA1J,4BAAgB,EAAC,MAAM;IAAA,IAAA2J,kBAAA;IACtGnK,iBAAiB,CAAC,EAAE,EAAE,IAAI,GAAAmK,kBAAA,GAAEjL,GAAG,CAACiC,WAAW,cAAAgJ,kBAAA,uBAAfA,kBAAA,CAAiBhL,MAAM,CAAC;EACtD,CAAC,CAAC;EAEF,OAAO;IACLQ,OAAO;IACPC,UAAU;IACV4H,OAAO;IACP3H,QAAQ;IACRC,WAAW;IACXiI,IAAI;IACJjH,OAAO;IACP2G,IAAI;IACJI,OAAO;IACPI,eAAe;IACfgB,eAAe;IACfK,iBAAiB;IACjBG,iBAAiB;IACjBE,aAAa;IACbI,aAAa;IACbG;EACF,CAAC;AACH,CAAC;AAACE,OAAA,CAAAnL,+BAAA,GAAAA,+BAAA"}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type { ReplyType } from '@sendbird/chat/message';\nimport type {\n SendbirdChatSDK,\n SendbirdError,\n SendbirdFileMessage,\n SendbirdFileMessageCreateParams,\n SendbirdFileMessageUpdateParams,\n SendbirdGroupChannel,\n SendbirdGroupChannelCollection,\n SendbirdGroupChannelListQuery,\n SendbirdMessage,\n SendbirdMessageCollection,\n SendbirdOpenChannel,\n SendbirdOpenChannelListQuery,\n SendbirdPreviousMessageListQuery,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\n SendbirdUserMessageUpdateParams,\n UserStruct,\n} from '@sendbird/uikit-utils';\n\nexport interface CustomQueryInterface<Data> {\n isLoading: boolean;\n next: () => Promise<Data[]>;\n hasNext: boolean;\n}\nexport interface CustomBidirectionalQueryInterface<Data> {\n isLoading: boolean;\n next: () => Promise<Data[]>;\n hasNext: () => boolean;\n prev: () => Promise<Data[]>;\n hasPrev: () => boolean;\n}\n\n/**\n * @interface UseGroupChannelList\n * @description interface for group channel list hook\n * */\nexport interface UseGroupChannelList {\n (sdk: SendbirdChatSDK, userId?: string, options?: UseGroupChannelListOptions): {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Get group channels state\n * */\n groupChannels: SendbirdGroupChannel[];\n\n /**\n * Fetch next channels to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n };\n}\nexport type UseGroupChannelListOptions = {\n queryCreator?: () => SendbirdGroupChannelListQuery;\n collectionCreator?: () => SendbirdGroupChannelCollection;\n enableCollectionWithoutLocalCache?: boolean;\n};\n\n/**\n * @interface UseGroupChannelMessages\n * @description interface for group channel messages hook\n * - Receive new messages from other users & should count new messages -> append to state(newMessages)\n * - onTopReached -> prev() -> fetch prev messages and append to state(messages)\n * - onBottomReached -> next() -> fetch next messages and append to state(messages)\n * */\nexport interface UseGroupChannelMessages {\n (sdk: SendbirdChatSDK, channel: SendbirdGroupChannel, userId?: string, options?: UseGroupChannelMessagesOptions): {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Get messages, this state is for render\n * For example, if a user receives a new messages while searching for an old message\n * for this case, new messages will be included here.\n * @return {SendbirdMessage[]}\n * */\n messages: SendbirdMessage[];\n\n /**\n * Fetch prev messages to state\n * @return {Promise<void>}\n * */\n prev: () => Promise<void>;\n\n /**\n * Check if there are more prev messages to fetch\n * @return {boolean}\n * */\n hasPrev: () => boolean;\n\n /**\n * Fetch next messages to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n\n /**\n * Check if there are more next messages to fetch\n * @return {boolean}\n * */\n hasNext: () => boolean;\n\n /**\n * A new message means a message that meets the below conditions\n * - Not admin message\n * - Not updated message\n * - Not current user's message\n * */\n newMessages: SendbirdMessage[];\n\n /**\n * reset message list with starting point\n * */\n resetWithStartingPoint: (startingPoint: number, callback?: () => void) => void;\n\n /**\n * Reset new messages\n * */\n resetNewMessages: () => void;\n\n /**\n * Send file message\n * @param params file message params\n * @param callback sent message callback\n * @return pending message\n * */\n sendFileMessage: (\n params: SendbirdFileMessageCreateParams,\n onPending?: (message: SendbirdFileMessage, error?: SendbirdError) => void,\n ) => Promise<SendbirdFileMessage>;\n\n /**\n * Send user message\n * @param params user message params\n * @param callback sent message callback\n * @return pending message\n * */\n sendUserMessage: (\n params: SendbirdUserMessageCreateParams,\n onPending?: (message: SendbirdUserMessage, error?: SendbirdError) => void,\n ) => Promise<SendbirdUserMessage>;\n\n /**\n * Update file message\n * @param messageId\n * @param params file message params\n * @return updated message\n * */\n updateFileMessage: (messageId: number, params: SendbirdFileMessageUpdateParams) => Promise<SendbirdFileMessage>;\n\n /**\n * Update user message\n * @param messageId\n * @param params user message params\n * @return updated message\n * */\n updateUserMessage: (messageId: number, params: SendbirdUserMessageUpdateParams) => Promise<SendbirdUserMessage>;\n\n /**\n * Resend failed message\n * @param failedMessage failed message to resend\n * @return {Promise<void>}\n * */\n resendMessage: (failedMessage: SendbirdFileMessage | SendbirdUserMessage) => Promise<void>;\n\n /**\n * Delete message\n * @param message sent or failed message\n * @return {Promise<void>}\n * */\n deleteMessage: (message: SendbirdFileMessage | SendbirdUserMessage) => Promise<void>;\n };\n}\n\nexport type UseGroupChannelMessagesOptions = {\n replyType?: ReplyType;\n sortComparator?: (a: SendbirdMessage, b: SendbirdMessage) => number;\n queryCreator?: () => SendbirdPreviousMessageListQuery;\n collectionCreator?: (options?: Pick<UseGroupChannelMessagesOptions, 'startingPoint'>) => SendbirdMessageCollection;\n enableCollectionWithoutLocalCache?: boolean;\n onChannelDeleted?: () => void;\n shouldCountNewMessages?: () => boolean;\n startingPoint?: number;\n onMessagesReceived?: (messages: SendbirdMessage[]) => void;\n};\n\n/**\n * @interface UseOpenChannelList\n * @description interface for open channel list hook\n * */\nexport interface UseOpenChannelList {\n (sdk: SendbirdChatSDK, userId?: string, options?: UseOpenChannelListOptions): {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Error state\n * */\n error: unknown | null;\n\n /**\n * Get open channels state\n * */\n openChannels: SendbirdOpenChannel[];\n\n /**\n * Fetch next channels to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n };\n}\nexport type UseOpenChannelListOptions = {\n queryCreator?: () => SendbirdOpenChannelListQuery;\n};\n\n/**\n * @interface UseOpenChannelMessages\n * @description interface for open channel messages hook\n * - Receive new messages from other users & should count new messages -> append to state(newMessages)\n * - onTopReached -> prev() -> fetch prev messages and append to state(messages)\n * - onBottomReached -> noop\n * */\nexport interface UseOpenChannelMessages {\n (sdk: SendbirdChatSDK, channel: SendbirdOpenChannel, userId?: string, options?: UseOpenChannelMessagesOptions): {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Get messages, this state is for render\n * For example, if a user receives a new messages while searching for an old message\n * for this case, new messages will be included here.\n * @return {SendbirdMessage[]}\n * */\n messages: SendbirdMessage[];\n\n /**\n * Fetch prev messages to state\n * @return {Promise<void>}\n * */\n prev: () => Promise<void>;\n\n /**\n * Check if there are more prev messages to fetch\n * @return {boolean}\n * */\n hasPrev: () => boolean;\n\n /**\n * A new message means a message that meets the below conditions\n * - Not admin message\n * - Not updated message\n * - Not current user's message\n * */\n newMessages: SendbirdMessage[];\n\n /**\n * Reset new messages\n * */\n resetNewMessages: () => void;\n\n /**\n * Fetch next messages to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n\n /**\n * Check if there are more next messages to fetch\n * @return {boolean}\n * */\n hasNext: () => boolean;\n\n /**\n * Send file message\n * @param params file message params\n * @param callback sent message callback\n * @return pending message\n * */\n sendFileMessage: (\n params: SendbirdFileMessageCreateParams,\n onPending?: (message: SendbirdFileMessage, error?: SendbirdError) => void,\n ) => Promise<SendbirdFileMessage>;\n\n /**\n * Send user message\n * @param params user message params\n * @param callback sent message callback\n * @return pending message\n * */\n sendUserMessage: (\n params: SendbirdUserMessageCreateParams,\n onPending?: (message: SendbirdUserMessage, error?: SendbirdError) => void,\n ) => Promise<SendbirdUserMessage>;\n\n /**\n * Update file message\n * @param messageId\n * @param params file message params\n * @return updated message\n * */\n updateFileMessage: (messageId: number, params: SendbirdFileMessageUpdateParams) => Promise<SendbirdFileMessage>;\n\n /**\n * Update user message\n * @param messageId\n * @param params user message params\n * @return updated message\n * */\n updateUserMessage: (messageId: number, params: SendbirdUserMessageUpdateParams) => Promise<SendbirdUserMessage>;\n\n /**\n * Resend failed message\n * @param failedMessage failed message to resend\n * @return {Promise<void>}\n * */\n resendMessage: (failedMessage: SendbirdFileMessage | SendbirdUserMessage) => Promise<void>;\n\n /**\n * Delete message\n * @param message sent or failed message\n * @return {Promise<void>}\n * */\n deleteMessage: (message: SendbirdFileMessage | SendbirdUserMessage) => Promise<void>;\n };\n}\n\nexport type UseOpenChannelMessagesOptions = {\n sortComparator?: (a: SendbirdMessage, b: SendbirdMessage) => number;\n queryCreator?: () => SendbirdPreviousMessageListQuery;\n onChannelDeleted?: () => void;\n onError?: (error?: unknown) => void;\n shouldCountNewMessages?: () => boolean;\n onMessagesReceived?: (messages: SendbirdMessage[]) => void;\n};\n\n/**\n * @interface UseUserListReturn\n * @description interface for user list hook return value\n * */\nexport interface UseUserListReturn<User extends UserStruct> {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Error state\n * */\n error: unknown | null;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Get users state\n * */\n users: User[];\n\n /**\n * Update or Insert user to list\n * */\n upsertUser: (user: User) => void;\n\n /**\n * Delete user from list\n * */\n deleteUser: (userId: User['userId']) => void;\n\n /**\n * Fetch next users to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n}\n\nexport type UseUserListOptions<User extends UserStruct> = {\n sortComparator?: (a: User, b: User) => number;\n queryCreator?: () => CustomQueryInterface<User>;\n};\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type { ReplyType } from '@sendbird/chat/message';\nimport type {\n SendbirdChatSDK,\n SendbirdError,\n SendbirdFileMessage,\n SendbirdFileMessageCreateParams,\n SendbirdFileMessageUpdateParams,\n SendbirdGroupChannel,\n SendbirdGroupChannelCollection,\n SendbirdGroupChannelListQuery,\n SendbirdMessage,\n SendbirdMessageCollection,\n SendbirdOpenChannel,\n SendbirdOpenChannelListQuery,\n SendbirdPreviousMessageListQuery,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\n SendbirdUserMessageUpdateParams,\n UserStruct,\n} from '@sendbird/uikit-utils';\n\nexport interface CustomQueryInterface<Data> {\n isLoading: boolean;\n next: () => Promise<Data[]>;\n hasNext: boolean;\n}\nexport interface CustomBidirectionalQueryInterface<Data> {\n isLoading: boolean;\n next: () => Promise<Data[]>;\n hasNext: () => boolean;\n prev: () => Promise<Data[]>;\n hasPrev: () => boolean;\n}\n\n/**\n * @interface UseGroupChannelList\n * @description interface for group channel list hook\n * */\nexport interface UseGroupChannelList {\n (sdk: SendbirdChatSDK, userId?: string, options?: UseGroupChannelListOptions): {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Get group channels state\n * */\n groupChannels: SendbirdGroupChannel[];\n\n /**\n * Fetch next channels to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n };\n}\nexport type UseGroupChannelListOptions = {\n queryCreator?: () => SendbirdGroupChannelListQuery;\n collectionCreator?: () => SendbirdGroupChannelCollection;\n enableCollectionWithoutLocalCache?: boolean;\n};\n\n/**\n * @interface UseGroupChannelMessages\n * @description interface for group channel messages hook\n * - Receive new messages from other users & should count new messages -> append to state(newMessages)\n * - onTopReached -> prev() -> fetch prev messages and append to state(messages)\n * - onBottomReached -> next() -> fetch next messages and append to state(messages)\n * */\nexport interface UseGroupChannelMessages {\n (sdk: SendbirdChatSDK, channel: SendbirdGroupChannel, userId?: string, options?: UseGroupChannelMessagesOptions): {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Get messages, this state is for render\n * For example, if a user receives a new messages while searching for an old message\n * for this case, new messages will be included here.\n * @return {SendbirdMessage[]}\n * */\n messages: SendbirdMessage[];\n\n /**\n * Fetch prev messages to state\n * @return {Promise<void>}\n * */\n prev: () => Promise<void>;\n\n /**\n * Check if there are more prev messages to fetch\n * @return {boolean}\n * */\n hasPrev: () => boolean;\n\n /**\n * Fetch next messages to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n\n /**\n * Check if there are more next messages to fetch\n * @return {boolean}\n * */\n hasNext: () => boolean;\n\n /**\n * A new message means a message that meets the below conditions\n * - Not admin message\n * - Not updated message\n * - Not current user's message\n * */\n newMessages: SendbirdMessage[];\n\n /**\n * reset message list with starting point\n * */\n resetWithStartingPoint: (startingPoint: number, callback?: () => void) => void;\n\n /**\n * Reset new messages\n * */\n resetNewMessages: () => void;\n\n /**\n * Send file message\n * @param params file message params\n * @param callback sent message callback\n * @return pending message\n * */\n sendFileMessage: (\n params: SendbirdFileMessageCreateParams,\n onPending?: (message: SendbirdFileMessage, error?: SendbirdError) => void,\n ) => Promise<SendbirdFileMessage>;\n\n /**\n * Send user message\n * @param params user message params\n * @param callback sent message callback\n * @return pending message\n * */\n sendUserMessage: (\n params: SendbirdUserMessageCreateParams,\n onPending?: (message: SendbirdUserMessage, error?: SendbirdError) => void,\n ) => Promise<SendbirdUserMessage>;\n\n /**\n * Update file message\n * @param messageId\n * @param params file message params\n * @return updated message\n * */\n updateFileMessage: (messageId: number, params: SendbirdFileMessageUpdateParams) => Promise<SendbirdFileMessage>;\n\n /**\n * Update user message\n * @param messageId\n * @param params user message params\n * @return updated message\n * */\n updateUserMessage: (messageId: number, params: SendbirdUserMessageUpdateParams) => Promise<SendbirdUserMessage>;\n\n /**\n * Resend failed message\n * @param failedMessage failed message to resend\n * @return {Promise<void>}\n * */\n resendMessage: (failedMessage: SendbirdFileMessage | SendbirdUserMessage) => Promise<void>;\n\n /**\n * Delete message\n * @param message sent or failed message\n * @return {Promise<void>}\n * */\n deleteMessage: (message: SendbirdFileMessage | SendbirdUserMessage) => Promise<void>;\n };\n}\n\nexport type UseGroupChannelMessagesOptions = {\n replyType?: ReplyType;\n sortComparator?: (a: SendbirdMessage, b: SendbirdMessage) => number;\n queryCreator?: () => SendbirdPreviousMessageListQuery;\n collectionCreator?: (options?: Pick<UseGroupChannelMessagesOptions, 'startingPoint'>) => SendbirdMessageCollection;\n enableCollectionWithoutLocalCache?: boolean;\n onChannelDeleted?: () => void;\n shouldCountNewMessages?: () => boolean;\n startingPoint?: number;\n onMessagesReceived?: (messages: SendbirdMessage[]) => void;\n onMessagesUpdated?: (messages: SendbirdMessage[]) => void;\n};\n\n/**\n * @interface UseOpenChannelList\n * @description interface for open channel list hook\n * */\nexport interface UseOpenChannelList {\n (sdk: SendbirdChatSDK, userId?: string, options?: UseOpenChannelListOptions): {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Error state\n * */\n error: unknown | null;\n\n /**\n * Get open channels state\n * */\n openChannels: SendbirdOpenChannel[];\n\n /**\n * Fetch next channels to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n };\n}\nexport type UseOpenChannelListOptions = {\n queryCreator?: () => SendbirdOpenChannelListQuery;\n};\n\n/**\n * @interface UseOpenChannelMessages\n * @description interface for open channel messages hook\n * - Receive new messages from other users & should count new messages -> append to state(newMessages)\n * - onTopReached -> prev() -> fetch prev messages and append to state(messages)\n * - onBottomReached -> noop\n * */\nexport interface UseOpenChannelMessages {\n (sdk: SendbirdChatSDK, channel: SendbirdOpenChannel, userId?: string, options?: UseOpenChannelMessagesOptions): {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Get messages, this state is for render\n * For example, if a user receives a new messages while searching for an old message\n * for this case, new messages will be included here.\n * @return {SendbirdMessage[]}\n * */\n messages: SendbirdMessage[];\n\n /**\n * Fetch prev messages to state\n * @return {Promise<void>}\n * */\n prev: () => Promise<void>;\n\n /**\n * Check if there are more prev messages to fetch\n * @return {boolean}\n * */\n hasPrev: () => boolean;\n\n /**\n * A new message means a message that meets the below conditions\n * - Not admin message\n * - Not updated message\n * - Not current user's message\n * */\n newMessages: SendbirdMessage[];\n\n /**\n * Reset new messages\n * */\n resetNewMessages: () => void;\n\n /**\n * Fetch next messages to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n\n /**\n * Check if there are more next messages to fetch\n * @return {boolean}\n * */\n hasNext: () => boolean;\n\n /**\n * Send file message\n * @param params file message params\n * @param callback sent message callback\n * @return pending message\n * */\n sendFileMessage: (\n params: SendbirdFileMessageCreateParams,\n onPending?: (message: SendbirdFileMessage, error?: SendbirdError) => void,\n ) => Promise<SendbirdFileMessage>;\n\n /**\n * Send user message\n * @param params user message params\n * @param callback sent message callback\n * @return pending message\n * */\n sendUserMessage: (\n params: SendbirdUserMessageCreateParams,\n onPending?: (message: SendbirdUserMessage, error?: SendbirdError) => void,\n ) => Promise<SendbirdUserMessage>;\n\n /**\n * Update file message\n * @param messageId\n * @param params file message params\n * @return updated message\n * */\n updateFileMessage: (messageId: number, params: SendbirdFileMessageUpdateParams) => Promise<SendbirdFileMessage>;\n\n /**\n * Update user message\n * @param messageId\n * @param params user message params\n * @return updated message\n * */\n updateUserMessage: (messageId: number, params: SendbirdUserMessageUpdateParams) => Promise<SendbirdUserMessage>;\n\n /**\n * Resend failed message\n * @param failedMessage failed message to resend\n * @return {Promise<void>}\n * */\n resendMessage: (failedMessage: SendbirdFileMessage | SendbirdUserMessage) => Promise<void>;\n\n /**\n * Delete message\n * @param message sent or failed message\n * @return {Promise<void>}\n * */\n deleteMessage: (message: SendbirdFileMessage | SendbirdUserMessage) => Promise<void>;\n };\n}\n\nexport type UseOpenChannelMessagesOptions = {\n sortComparator?: (a: SendbirdMessage, b: SendbirdMessage) => number;\n queryCreator?: () => SendbirdPreviousMessageListQuery;\n onChannelDeleted?: () => void;\n onError?: (error?: unknown) => void;\n shouldCountNewMessages?: () => boolean;\n onMessagesReceived?: (messages: SendbirdMessage[]) => void;\n};\n\n/**\n * @interface UseUserListReturn\n * @description interface for user list hook return value\n * */\nexport interface UseUserListReturn<User extends UserStruct> {\n /**\n * Loading state, only available on first render\n * */\n loading: boolean;\n\n /**\n * Refreshing state, status is changes when the refresh is called.\n * */\n refreshing: boolean;\n\n /**\n * Error state\n * */\n error: unknown | null;\n\n /**\n * Refresh, clear and reload messages from latest\n * @return {Promise<void>}\n * */\n refresh: () => Promise<void>;\n\n /**\n * Get users state\n * */\n users: User[];\n\n /**\n * Update or Insert user to list\n * */\n upsertUser: (user: User) => void;\n\n /**\n * Delete user from list\n * */\n deleteUser: (userId: User['userId']) => void;\n\n /**\n * Fetch next users to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n}\n\nexport type UseUserListOptions<User extends UserStruct> = {\n sortComparator?: (a: User, b: User) => number;\n queryCreator?: () => CustomQueryInterface<User>;\n};\n"],"mappings":""}
@@ -1,5 +1,6 @@
1
1
  import { useReducer } from 'react';
2
- import { arrayToMapWithGetter, getMessageUniqId, isNewMessage, isSendableMessage, useIIFE } from '@sendbird/uikit-utils';
2
+ import { SendingStatus } from '@sendbird/chat/message';
3
+ import { arrayToMapWithGetter, getMessageUniqId, isMyMessage, isNewMessage, isSendableMessage, useIIFE } from '@sendbird/uikit-utils';
3
4
  const defaultReducer = (_ref, action) => {
4
5
  let {
5
6
  ...draft
@@ -17,26 +18,42 @@ const defaultReducer = (_ref, action) => {
17
18
  }
18
19
  case 'update_messages':
19
20
  {
21
+ const userId = action.value.currentUserId;
20
22
  if (action.value.clearBeforeAction) {
21
- draft['messageMap'] = arrayToMapWithGetter(action.value.messages, getMessageUniqId);
23
+ draft['messageMap'] = messagesToObject(action.value.messages);
22
24
  } else {
23
- // Remove existing messages before update for prevent duplicate display
24
- const messageKeys = action.value.messages.map(it => isSendableMessage(it) ? [it.messageId, it.reqId] : [it.messageId]).flat();
25
- messageKeys.forEach(key => delete draft['messageMap'][key]);
25
+ // Filtering meaningless message updates
26
+ const nextMessages = action.value.messages.filter(next => {
27
+ if (isMyMessage(next, userId)) {
28
+ const prev = draft['messageMap'][next.reqId] ?? draft['messageMap'][next.messageId];
29
+ if (isMyMessage(prev, userId)) {
30
+ const shouldUpdate = shouldUpdateMessage(prev, next);
31
+ if (shouldUpdate) {
32
+ // Remove existing messages before update to prevent duplicate display
33
+ delete draft['messageMap'][prev.reqId];
34
+ delete draft['messageMap'][prev.messageId];
35
+ }
36
+ return shouldUpdate;
37
+ }
38
+ }
39
+ return true;
40
+ });
41
+ const obj = messagesToObject(nextMessages);
26
42
  draft['messageMap'] = {
27
43
  ...draft['messageMap'],
28
- ...arrayToMapWithGetter(action.value.messages, getMessageUniqId)
44
+ ...obj
29
45
  };
30
46
  }
31
47
  return draft;
32
48
  }
33
49
  case 'update_new_messages':
34
50
  {
35
- const newMessages = action.value.messages.filter(it => isNewMessage(it, action.value.currentUserId));
51
+ const userId = action.value.currentUserId;
52
+ const newMessages = action.value.messages.filter(it => isNewMessage(it, userId));
36
53
  if (action.value.clearBeforeAction) {
37
54
  draft['newMessageMap'] = arrayToMapWithGetter(newMessages, getMessageUniqId);
38
55
  } else {
39
- // Remove existing messages before update for prevent duplicate display
56
+ // Remove existing messages before update to prevent duplicate display
40
57
  const messageKeys = newMessages.map(it => it.messageId);
41
58
  messageKeys.forEach(key => delete draft['newMessageMap'][key]);
42
59
  draft['newMessageMap'] = {
@@ -53,12 +70,44 @@ const defaultReducer = (_ref, action) => {
53
70
  draft[key] = {
54
71
  ...draft[key]
55
72
  };
56
- action.value.messageIds.forEach(msgId => delete draft[key][msgId]);
57
- action.value.reqIds.forEach(reqId => delete draft[key][reqId]);
73
+ action.value.messageIds.forEach(msgId => {
74
+ const message = draft[key][msgId];
75
+ if (message) {
76
+ if (isSendableMessage(message)) delete draft[key][message.reqId];
77
+ delete draft[key][message.messageId];
78
+ }
79
+ });
80
+ action.value.reqIds.forEach(reqId => {
81
+ const message = draft[key][reqId];
82
+ if (message) {
83
+ if (isSendableMessage(message)) delete draft[key][message.reqId];
84
+ delete draft[key][message.messageId];
85
+ }
86
+ });
58
87
  return draft;
59
88
  }
60
89
  }
61
90
  };
91
+ const messagesToObject = messages => {
92
+ return messages.reduce((accum, curr) => {
93
+ if (isSendableMessage(curr)) {
94
+ accum[curr.reqId] = curr;
95
+ if (curr.sendingStatus === SendingStatus.SUCCEEDED) {
96
+ accum[curr.messageId] = curr;
97
+ }
98
+ } else {
99
+ accum[curr.messageId] = curr;
100
+ }
101
+ return accum;
102
+ }, {});
103
+ };
104
+ const shouldUpdateMessage = (prev, next) => {
105
+ // message data update (e.g. reactions)
106
+ if (prev.sendingStatus === SendingStatus.SUCCEEDED) return next.sendingStatus === SendingStatus.SUCCEEDED;
107
+
108
+ // message sending status update
109
+ return prev.sendingStatus !== next.sendingStatus;
110
+ };
62
111
  export const useChannelMessagesReducer = sortComparator => {
63
112
  const [{
64
113
  loading,
@@ -126,8 +175,8 @@ export const useChannelMessagesReducer = sortComparator => {
126
175
  });
127
176
  };
128
177
  const messages = useIIFE(() => {
129
- if (sortComparator) return Object.values(messageMap).sort(sortComparator);
130
- return Object.values(messageMap);
178
+ if (sortComparator) return Array.from(new Set(Object.values(messageMap))).sort(sortComparator);
179
+ return Array.from(new Set(Object.values(messageMap)));
131
180
  });
132
181
  const newMessages = Object.values(newMessageMap);
133
182
  return {
@@ -1 +1 @@
1
- {"version":3,"names":["useReducer","arrayToMapWithGetter","getMessageUniqId","isNewMessage","isSendableMessage","useIIFE","defaultReducer","_ref","action","draft","type","value","status","clearBeforeAction","messages","messageKeys","map","it","messageId","reqId","flat","forEach","key","newMessages","filter","currentUserId","messageIds","msgId","reqIds","useChannelMessagesReducer","sortComparator","loading","refreshing","messageMap","newMessageMap","dispatch","updateMessages","deleteMessages","updateNewMessages","deleteNewMessages","updateLoading","updateRefreshing","Object","values","sort"],"sources":["useChannelMessagesReducer.ts"],"sourcesContent":["import { useReducer } from 'react';\n\nimport type { SendbirdBaseMessage } from '@sendbird/uikit-utils';\nimport {\n SendbirdMessage,\n arrayToMapWithGetter,\n getMessageUniqId,\n isNewMessage,\n isSendableMessage,\n useIIFE,\n} from '@sendbird/uikit-utils';\n\ntype Options = {\n sortComparator?: (a: SendbirdMessage, b: SendbirdMessage) => number;\n};\n\ntype Action =\n | {\n type: 'update_loading' | 'update_refreshing';\n value: { status: boolean };\n }\n | {\n type: 'update_messages' | 'update_new_messages';\n value: { messages: SendbirdBaseMessage[]; clearBeforeAction: boolean; currentUserId?: string };\n }\n | {\n type: 'delete_messages' | 'delete_new_messages';\n value: { messageIds: number[]; reqIds: string[] };\n };\n\ntype State = {\n loading: boolean;\n refreshing: boolean;\n messageMap: Record<string, SendbirdBaseMessage>;\n newMessageMap: Record<string, SendbirdBaseMessage>;\n};\n\nconst defaultReducer = ({ ...draft }: State, action: Action) => {\n switch (action.type) {\n case 'update_refreshing': {\n draft['refreshing'] = action.value.status;\n return draft;\n }\n case 'update_loading': {\n draft['loading'] = action.value.status;\n return draft;\n }\n case 'update_messages': {\n if (action.value.clearBeforeAction) {\n draft['messageMap'] = arrayToMapWithGetter(action.value.messages, getMessageUniqId);\n } else {\n // Remove existing messages before update for prevent duplicate display\n const messageKeys = action.value.messages\n .map((it) => (isSendableMessage(it) ? [it.messageId, it.reqId] : [it.messageId]))\n .flat();\n messageKeys.forEach((key) => delete draft['messageMap'][key]);\n\n draft['messageMap'] = {\n ...draft['messageMap'],\n ...arrayToMapWithGetter(action.value.messages, getMessageUniqId),\n };\n }\n\n return draft;\n }\n case 'update_new_messages': {\n const newMessages = action.value.messages.filter((it) => isNewMessage(it, action.value.currentUserId));\n\n if (action.value.clearBeforeAction) {\n draft['newMessageMap'] = arrayToMapWithGetter(newMessages, getMessageUniqId);\n } else {\n // Remove existing messages before update for prevent duplicate display\n const messageKeys = newMessages.map((it) => it.messageId);\n messageKeys.forEach((key) => delete draft['newMessageMap'][key]);\n\n draft['newMessageMap'] = {\n ...draft['newMessageMap'],\n ...arrayToMapWithGetter(newMessages, getMessageUniqId),\n };\n }\n\n return draft;\n }\n case 'delete_messages':\n case 'delete_new_messages': {\n const key = action.type === 'delete_messages' ? 'messageMap' : 'newMessageMap';\n draft[key] = { ...draft[key] };\n action.value.messageIds.forEach((msgId) => delete draft[key][msgId]);\n action.value.reqIds.forEach((reqId) => delete draft[key][reqId]);\n\n return draft;\n }\n }\n};\n\nexport const useChannelMessagesReducer = (sortComparator?: Options['sortComparator']) => {\n const [{ loading, refreshing, messageMap, newMessageMap }, dispatch] = useReducer(defaultReducer, {\n loading: true,\n refreshing: false,\n messageMap: {},\n newMessageMap: {},\n });\n\n const updateMessages = (messages: SendbirdBaseMessage[], clearBeforeAction: boolean, currentUserId?: string) => {\n dispatch({ type: 'update_messages', value: { messages, clearBeforeAction, currentUserId } });\n };\n const deleteMessages = (messageIds: number[], reqIds: string[]) => {\n dispatch({ type: 'delete_messages', value: { messageIds, reqIds } });\n };\n const updateNewMessages = (messages: SendbirdBaseMessage[], clearBeforeAction: boolean, currentUserId?: string) => {\n dispatch({ type: 'update_new_messages', value: { messages, clearBeforeAction, currentUserId } });\n };\n const deleteNewMessages = (messageIds: number[], reqIds: string[]) => {\n dispatch({ type: 'delete_new_messages', value: { messageIds, reqIds } });\n };\n const updateLoading = (status: boolean) => {\n dispatch({ type: 'update_loading', value: { status } });\n };\n const updateRefreshing = (status: boolean) => {\n dispatch({ type: 'update_refreshing', value: { status } });\n };\n\n const messages = useIIFE(() => {\n if (sortComparator) return Object.values(messageMap).sort(sortComparator);\n return Object.values(messageMap);\n });\n const newMessages = Object.values(newMessageMap);\n\n return {\n updateLoading,\n updateRefreshing,\n updateMessages,\n deleteMessages,\n\n loading,\n refreshing,\n messages,\n\n newMessages,\n updateNewMessages,\n deleteNewMessages,\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["useReducer","SendingStatus","arrayToMapWithGetter","getMessageUniqId","isMyMessage","isNewMessage","isSendableMessage","useIIFE","defaultReducer","_ref","action","draft","type","value","status","userId","currentUserId","clearBeforeAction","messagesToObject","messages","nextMessages","filter","next","prev","reqId","messageId","shouldUpdate","shouldUpdateMessage","obj","newMessages","it","messageKeys","map","forEach","key","messageIds","msgId","message","reqIds","reduce","accum","curr","sendingStatus","SUCCEEDED","useChannelMessagesReducer","sortComparator","loading","refreshing","messageMap","newMessageMap","dispatch","updateMessages","deleteMessages","updateNewMessages","deleteNewMessages","updateLoading","updateRefreshing","Array","from","Set","Object","values","sort"],"sources":["useChannelMessagesReducer.ts"],"sourcesContent":["import { useReducer } from 'react';\n\nimport { SendableMessage } from '@sendbird/chat/lib/__definition';\nimport { SendingStatus } from '@sendbird/chat/message';\nimport type { SendbirdBaseMessage } from '@sendbird/uikit-utils';\nimport {\n SendbirdMessage,\n arrayToMapWithGetter,\n getMessageUniqId,\n isMyMessage,\n isNewMessage,\n isSendableMessage,\n useIIFE,\n} from '@sendbird/uikit-utils';\n\ntype Options = {\n sortComparator?: (a: SendbirdMessage, b: SendbirdMessage) => number;\n};\n\ntype Action =\n | {\n type: 'update_loading' | 'update_refreshing';\n value: { status: boolean };\n }\n | {\n type: 'update_messages' | 'update_new_messages';\n value: { messages: SendbirdBaseMessage[]; clearBeforeAction: boolean; currentUserId?: string };\n }\n | {\n type: 'delete_messages' | 'delete_new_messages';\n value: { messageIds: number[]; reqIds: string[] };\n };\n\ntype State = {\n loading: boolean;\n refreshing: boolean;\n messageMap: Record<string, SendbirdBaseMessage>;\n newMessageMap: Record<string, SendbirdBaseMessage>;\n};\n\nconst defaultReducer = ({ ...draft }: State, action: Action) => {\n switch (action.type) {\n case 'update_refreshing': {\n draft['refreshing'] = action.value.status;\n return draft;\n }\n case 'update_loading': {\n draft['loading'] = action.value.status;\n return draft;\n }\n case 'update_messages': {\n const userId = action.value.currentUserId;\n\n if (action.value.clearBeforeAction) {\n draft['messageMap'] = messagesToObject(action.value.messages);\n } else {\n // Filtering meaningless message updates\n const nextMessages = action.value.messages.filter((next) => {\n if (isMyMessage(next, userId)) {\n const prev = draft['messageMap'][next.reqId] ?? draft['messageMap'][next.messageId];\n if (isMyMessage(prev, userId)) {\n const shouldUpdate = shouldUpdateMessage(prev, next);\n if (shouldUpdate) {\n // Remove existing messages before update to prevent duplicate display\n delete draft['messageMap'][prev.reqId];\n delete draft['messageMap'][prev.messageId];\n }\n return shouldUpdate;\n }\n }\n return true;\n });\n\n const obj = messagesToObject(nextMessages);\n draft['messageMap'] = { ...draft['messageMap'], ...obj };\n }\n\n return draft;\n }\n case 'update_new_messages': {\n const userId = action.value.currentUserId;\n const newMessages = action.value.messages.filter((it) => isNewMessage(it, userId));\n\n if (action.value.clearBeforeAction) {\n draft['newMessageMap'] = arrayToMapWithGetter(newMessages, getMessageUniqId);\n } else {\n // Remove existing messages before update to prevent duplicate display\n const messageKeys = newMessages.map((it) => it.messageId);\n messageKeys.forEach((key) => delete draft['newMessageMap'][key]);\n\n draft['newMessageMap'] = {\n ...draft['newMessageMap'],\n ...arrayToMapWithGetter(newMessages, getMessageUniqId),\n };\n }\n\n return draft;\n }\n case 'delete_messages':\n case 'delete_new_messages': {\n const key = action.type === 'delete_messages' ? 'messageMap' : 'newMessageMap';\n draft[key] = { ...draft[key] };\n action.value.messageIds.forEach((msgId) => {\n const message = draft[key][msgId];\n if (message) {\n if (isSendableMessage(message)) delete draft[key][message.reqId];\n delete draft[key][message.messageId];\n }\n });\n action.value.reqIds.forEach((reqId) => {\n const message = draft[key][reqId];\n if (message) {\n if (isSendableMessage(message)) delete draft[key][message.reqId];\n delete draft[key][message.messageId];\n }\n });\n\n return draft;\n }\n }\n};\n\nconst messagesToObject = (messages: SendbirdBaseMessage[]) => {\n return messages.reduce((accum, curr) => {\n if (isSendableMessage(curr)) {\n accum[curr.reqId] = curr;\n if (curr.sendingStatus === SendingStatus.SUCCEEDED) {\n accum[curr.messageId] = curr;\n }\n } else {\n accum[curr.messageId] = curr;\n }\n return accum;\n }, {} as Record<string, SendbirdBaseMessage>);\n};\n\nconst shouldUpdateMessage = (prev: SendableMessage, next: SendableMessage) => {\n // message data update (e.g. reactions)\n if (prev.sendingStatus === SendingStatus.SUCCEEDED) return next.sendingStatus === SendingStatus.SUCCEEDED;\n\n // message sending status update\n return prev.sendingStatus !== next.sendingStatus;\n};\n\nexport const useChannelMessagesReducer = (sortComparator?: Options['sortComparator']) => {\n const [{ loading, refreshing, messageMap, newMessageMap }, dispatch] = useReducer(defaultReducer, {\n loading: true,\n refreshing: false,\n messageMap: {},\n newMessageMap: {},\n });\n\n const updateMessages = (messages: SendbirdBaseMessage[], clearBeforeAction: boolean, currentUserId?: string) => {\n dispatch({ type: 'update_messages', value: { messages, clearBeforeAction, currentUserId } });\n };\n const deleteMessages = (messageIds: number[], reqIds: string[]) => {\n dispatch({ type: 'delete_messages', value: { messageIds, reqIds } });\n };\n const updateNewMessages = (messages: SendbirdBaseMessage[], clearBeforeAction: boolean, currentUserId?: string) => {\n dispatch({ type: 'update_new_messages', value: { messages, clearBeforeAction, currentUserId } });\n };\n const deleteNewMessages = (messageIds: number[], reqIds: string[]) => {\n dispatch({ type: 'delete_new_messages', value: { messageIds, reqIds } });\n };\n const updateLoading = (status: boolean) => {\n dispatch({ type: 'update_loading', value: { status } });\n };\n const updateRefreshing = (status: boolean) => {\n dispatch({ type: 'update_refreshing', value: { status } });\n };\n\n const messages = useIIFE(() => {\n if (sortComparator) return Array.from(new Set(Object.values(messageMap))).sort(sortComparator);\n return Array.from(new Set(Object.values(messageMap)));\n });\n const newMessages = Object.values(newMessageMap);\n\n return {\n updateLoading,\n updateRefreshing,\n updateMessages,\n deleteMessages,\n\n loading,\n refreshing,\n messages,\n\n newMessages,\n updateNewMessages,\n deleteNewMessages,\n };\n};\n"],"mappings":"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"}