@sendbird/uikit-chat-hooks 2.4.2 → 2.5.0-rc.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 (46) hide show
  1. package/lib/commonjs/channel/{useGroupChannelMessages/reducer.js → useChannelMessagesReducer.js} +39 -30
  2. package/lib/commonjs/channel/useChannelMessagesReducer.js.map +1 -0
  3. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +169 -99
  4. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
  5. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +56 -25
  6. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
  7. package/lib/commonjs/channel/useOpenChannelList/useOpenChannelListWithQuery.js +0 -4
  8. package/lib/commonjs/channel/useOpenChannelList/useOpenChannelListWithQuery.js.map +1 -1
  9. package/lib/commonjs/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js +128 -28
  10. package/lib/commonjs/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js.map +1 -1
  11. package/lib/commonjs/common/useUserList.js +2 -2
  12. package/lib/commonjs/common/useUserList.js.map +1 -1
  13. package/lib/commonjs/types.js.map +1 -1
  14. package/lib/module/channel/{useGroupChannelMessages/reducer.js → useChannelMessagesReducer.js} +38 -29
  15. package/lib/module/channel/useChannelMessagesReducer.js.map +1 -0
  16. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +170 -100
  17. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
  18. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +57 -26
  19. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
  20. package/lib/module/channel/useOpenChannelList/useOpenChannelListWithQuery.js +0 -4
  21. package/lib/module/channel/useOpenChannelList/useOpenChannelListWithQuery.js.map +1 -1
  22. package/lib/module/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js +129 -29
  23. package/lib/module/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js.map +1 -1
  24. package/lib/module/common/useUserList.js +2 -2
  25. package/lib/module/common/useUserList.js.map +1 -1
  26. package/lib/module/types.js.map +1 -1
  27. package/lib/typescript/src/channel/useChannelMessagesReducer.d.ts +18 -0
  28. package/lib/typescript/src/types.d.ts +51 -20
  29. package/package.json +4 -5
  30. package/src/channel/useChannelMessagesReducer.ts +143 -0
  31. package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.ts +168 -96
  32. package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.ts +62 -25
  33. package/src/channel/useOpenChannelList/useOpenChannelListWithQuery.ts +0 -4
  34. package/src/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.ts +142 -25
  35. package/src/common/useUserList.ts +2 -2
  36. package/src/types.ts +58 -20
  37. package/lib/commonjs/channel/useGroupChannelMessages/reducer.js.map +0 -1
  38. package/lib/commonjs/channel/useOpenChannelMessages/reducer.js +0 -144
  39. package/lib/commonjs/channel/useOpenChannelMessages/reducer.js.map +0 -1
  40. package/lib/module/channel/useGroupChannelMessages/reducer.js.map +0 -1
  41. package/lib/module/channel/useOpenChannelMessages/reducer.js +0 -137
  42. package/lib/module/channel/useOpenChannelMessages/reducer.js.map +0 -1
  43. package/lib/typescript/src/channel/useGroupChannelMessages/reducer.d.ts +0 -15
  44. package/lib/typescript/src/channel/useOpenChannelMessages/reducer.d.ts +0 -15
  45. package/src/channel/useGroupChannelMessages/reducer.ts +0 -126
  46. package/src/channel/useOpenChannelMessages/reducer.ts +0 -126
@@ -7,7 +7,8 @@ exports.useOpenChannelMessagesWithQuery = void 0;
7
7
  var _react = require("react");
8
8
  var _uikitUtils = require("@sendbird/uikit-utils");
9
9
  var _useChannelHandler = require("../../handler/useChannelHandler");
10
- var _reducer = require("./reducer");
10
+ var _useConnectionHandler = require("../../handler/useConnectionHandler");
11
+ var _useChannelMessagesReducer = require("../useChannelMessagesReducer");
11
12
  const createMessageQuery = (channel, creator) => {
12
13
  if (creator) return creator();
13
14
  return channel.createPreviousMessageListQuery({
@@ -23,15 +24,14 @@ const useOpenChannelMessagesWithQuery = (sdk, channel, userId, options) => {
23
24
  loading,
24
25
  refreshing,
25
26
  messages,
26
- nextMessages,
27
- newMessagesFromMembers,
27
+ newMessages,
28
28
  updateMessages,
29
- updateNextMessages,
30
- deleteNextMessages,
29
+ updateNewMessages,
30
+ deleteNewMessages,
31
31
  deleteMessages,
32
32
  updateLoading,
33
33
  updateRefreshing
34
- } = (0, _reducer.useOpenChannelMessagesReducer)(userId, options === null || options === void 0 ? void 0 : options.sortComparator);
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
37
  var _queryRef$current;
@@ -41,7 +41,7 @@ const useOpenChannelMessagesWithQuery = (sdk, channel, userId, options) => {
41
41
  const list = await ((_queryRef$current2 = queryRef.current) === null || _queryRef$current2 === void 0 ? void 0 : _queryRef$current2.load());
42
42
  updateMessages(list, true, sdk.currentUser.userId);
43
43
  }
44
- updateNextMessages([], true, sdk.currentUser.userId);
44
+ updateNewMessages([], true, sdk.currentUser.userId);
45
45
  }
46
46
  });
47
47
  const channelUpdater = channel => {
@@ -49,20 +49,113 @@ const useOpenChannelMessagesWithQuery = (sdk, channel, userId, options) => {
49
49
  forceUpdate();
50
50
  }
51
51
  };
52
+ (0, _useConnectionHandler.useConnectionHandler)(sdk, handlerId, {
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;
55
+ const lastMessage = messages[0];
56
+ if (!lastMessage) return;
57
+ const messageContext = {
58
+ updatedMessages: [],
59
+ addedMessages: [],
60
+ deletedMessageIds: []
61
+ };
62
+ const changeLogsContext = {
63
+ hasMore: false,
64
+ token: ''
65
+ };
66
+ const messageQueryContext = {
67
+ hasMore: false,
68
+ timestamp: lastMessage.createdAt
69
+ };
70
+
71
+ // Updated & Deleted messages
72
+ const changelogsParams = {
73
+ replyType: (_queryRef$current3 = queryRef.current) === null || _queryRef$current3 === void 0 ? void 0 : _queryRef$current3.replyType,
74
+ includeMetaArray: (_queryRef$current4 = queryRef.current) === null || _queryRef$current4 === void 0 ? void 0 : _queryRef$current4.includeMetaArray,
75
+ includeReactions: (_queryRef$current5 = queryRef.current) === null || _queryRef$current5 === void 0 ? void 0 : _queryRef$current5.includeReactions,
76
+ includeThreadInfo: (_queryRef$current6 = queryRef.current) === null || _queryRef$current6 === void 0 ? void 0 : _queryRef$current6.includeThreadInfo,
77
+ includeParentMessageInfo: (_queryRef$current7 = queryRef.current) === null || _queryRef$current7 === void 0 ? void 0 : _queryRef$current7.includeParentMessageInfo
78
+ };
79
+ const changeLogsByTS = await channel.getMessageChangeLogsSinceTimestamp(lastMessage.createdAt);
80
+ changeLogsContext.token = changeLogsByTS.token;
81
+ changeLogsContext.hasMore = changeLogsByTS.hasMore;
82
+ messageContext.updatedMessages.push(...changeLogsByTS.updatedMessages);
83
+ messageContext.deletedMessageIds.push(...changeLogsByTS.deletedMessageIds);
84
+ while (changeLogsContext.hasMore) {
85
+ const changeLogsByToken = await channel.getMessageChangeLogsSinceToken(changeLogsByTS.token, changelogsParams);
86
+ changeLogsContext.token = changeLogsByToken.token;
87
+ changeLogsContext.hasMore = changeLogsByToken.hasMore;
88
+ messageContext.updatedMessages.push(...changeLogsByToken.updatedMessages);
89
+ messageContext.deletedMessageIds.push(...changeLogsByToken.deletedMessageIds);
90
+ }
91
+
92
+ // Added messages
93
+ const messageQueryParams = {
94
+ prevResultSize: 0,
95
+ nextResultSize: ((_queryRef$current8 = queryRef.current) === null || _queryRef$current8 === void 0 ? void 0 : _queryRef$current8.limit) ?? 100,
96
+ reverse: (_queryRef$current9 = queryRef.current) === null || _queryRef$current9 === void 0 ? void 0 : _queryRef$current9.reverse,
97
+ includeParentMessageInfo: (_queryRef$current10 = queryRef.current) === null || _queryRef$current10 === void 0 ? void 0 : _queryRef$current10.includeParentMessageInfo,
98
+ includeThreadInfo: (_queryRef$current11 = queryRef.current) === null || _queryRef$current11 === void 0 ? void 0 : _queryRef$current11.includeThreadInfo,
99
+ includeReactions: (_queryRef$current12 = queryRef.current) === null || _queryRef$current12 === void 0 ? void 0 : _queryRef$current12.includeReactions,
100
+ includeMetaArray: (_queryRef$current13 = queryRef.current) === null || _queryRef$current13 === void 0 ? void 0 : _queryRef$current13.includeMetaArray,
101
+ replyType: (_queryRef$current14 = queryRef.current) === null || _queryRef$current14 === void 0 ? void 0 : _queryRef$current14.replyType,
102
+ customTypesFilter: (_queryRef$current15 = queryRef.current) === null || _queryRef$current15 === void 0 ? void 0 : _queryRef$current15.customTypesFilter,
103
+ messageTypeFilter: (_queryRef$current16 = queryRef.current) === null || _queryRef$current16 === void 0 ? void 0 : _queryRef$current16.messageTypeFilter,
104
+ senderUserIdsFilter: (_queryRef$current17 = queryRef.current) === null || _queryRef$current17 === void 0 ? void 0 : _queryRef$current17.senderUserIdsFilter,
105
+ showSubchannelMessagesOnly: (_queryRef$current18 = queryRef.current) === null || _queryRef$current18 === void 0 ? void 0 : _queryRef$current18.showSubchannelMessagesOnly
106
+ };
107
+ const queriedMessages = await channel.getMessagesByTimestamp(lastMessage.createdAt, messageQueryParams);
108
+ messageQueryContext.hasMore = queriedMessages.length > 0;
109
+ if (messageQueryContext.hasMore) {
110
+ messageQueryContext.timestamp = queriedMessages[0].createdAt;
111
+ messageContext.addedMessages.unshift(...queriedMessages);
112
+ }
113
+ while (messageQueryContext.hasMore) {
114
+ const queriedMessages = await channel.getMessagesByTimestamp(messageQueryContext.timestamp, messageQueryParams);
115
+ messageQueryContext.hasMore = queriedMessages.length > 0;
116
+ if (messageQueryContext.hasMore) {
117
+ messageQueryContext.timestamp = queriedMessages[0].createdAt;
118
+ messageContext.addedMessages.unshift(...queriedMessages);
119
+ }
120
+ }
121
+
122
+ // Update to View
123
+ updateMessages([...messageContext.addedMessages, ...messageContext.updatedMessages], false, sdk.currentUser.userId);
124
+ deleteMessages(messageContext.deletedMessageIds, []);
125
+ if (messageContext.addedMessages.length > 0) {
126
+ var _options$shouldCountN;
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);
129
+ }
130
+ if (options !== null && options !== void 0 && options.onMessagesReceived) {
131
+ options.onMessagesReceived(messageContext.addedMessages);
132
+ }
133
+ }
134
+ }
135
+ });
52
136
  (0, _useChannelHandler.useChannelHandler)(sdk, handlerId, {
53
137
  // Messages
54
138
  onMessageReceived(eventChannel, message) {
139
+ var _options$shouldCountN2;
55
140
  if ((0, _uikitUtils.isDifferentChannel)(channel, eventChannel)) return;
56
- updateNextMessages([message], false, sdk.currentUser.userId);
141
+ if ((0, _uikitUtils.isMyMessage)(message, sdk.currentUser.userId)) return;
142
+ updateMessages([message], false, sdk.currentUser.userId);
143
+ 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
+ }
146
+ if (options !== null && options !== void 0 && options.onMessagesReceived) {
147
+ options.onMessagesReceived([message]);
148
+ }
57
149
  },
58
150
  onMessageUpdated(eventChannel, message) {
59
151
  if ((0, _uikitUtils.isDifferentChannel)(channel, eventChannel)) return;
152
+ if ((0, _uikitUtils.isMyMessage)(message, sdk.currentUser.userId)) return;
60
153
  updateMessages([message], false, sdk.currentUser.userId);
61
154
  },
62
155
  onMessageDeleted(eventChannel, messageId) {
63
156
  if ((0, _uikitUtils.isDifferentChannel)(channel, eventChannel)) return;
64
157
  deleteMessages([messageId], []);
65
- deleteNextMessages([messageId], []);
158
+ deleteNewMessages([messageId], []);
66
159
  },
67
160
  // Channels
68
161
  onChannelChanged: channelUpdater,
@@ -115,33 +208,33 @@ const useOpenChannelMessagesWithQuery = (sdk, channel, userId, options) => {
115
208
  updateRefreshing(false);
116
209
  });
117
210
  const prev = (0, _uikitUtils.useFreshCallback)(async () => {
118
- var _queryRef$current3;
119
- if (queryRef.current && (_queryRef$current3 = queryRef.current) !== null && _queryRef$current3 !== void 0 && _queryRef$current3.hasNext) {
120
- var _queryRef$current4;
121
- const list = await ((_queryRef$current4 = queryRef.current) === null || _queryRef$current4 === void 0 ? void 0 : _queryRef$current4.load());
211
+ var _queryRef$current19;
212
+ if (queryRef.current && (_queryRef$current19 = queryRef.current) !== null && _queryRef$current19 !== void 0 && _queryRef$current19.hasNext) {
213
+ var _queryRef$current20;
214
+ const list = await ((_queryRef$current20 = queryRef.current) === null || _queryRef$current20 === void 0 ? void 0 : _queryRef$current20.load());
122
215
  updateMessages(list, false, sdk.currentUser.userId);
123
216
  }
124
217
  });
125
- const next = (0, _uikitUtils.useFreshCallback)(async () => {
126
- if (nextMessages.length > 0) {
127
- updateMessages(nextMessages, false, sdk.currentUser.userId);
128
- updateNextMessages([], true, sdk.currentUser.userId);
129
- }
218
+ const hasPrev = (0, _uikitUtils.useFreshCallback)(() => {
219
+ var _queryRef$current21;
220
+ return ((_queryRef$current21 = queryRef.current) === null || _queryRef$current21 === void 0 ? void 0 : _queryRef$current21.hasNext) ?? false;
130
221
  });
222
+ const next = (0, _uikitUtils.useFreshCallback)(_uikitUtils.ASYNC_NOOP);
223
+ const hasNext = (0, _uikitUtils.useFreshCallback)(() => false);
131
224
  const sendUserMessage = (0, _uikitUtils.useFreshCallback)((params, onPending) => {
132
225
  return new Promise((resolve, reject) => {
133
226
  channel.sendUserMessage(params).onPending(pendingMessage => {
134
227
  if (pendingMessage.isUserMessage()) {
135
- updateNextMessages([pendingMessage], false, sdk.currentUser.userId);
228
+ updateMessages([pendingMessage], false, sdk.currentUser.userId);
136
229
  onPending === null || onPending === void 0 ? void 0 : onPending(pendingMessage);
137
230
  }
138
231
  }).onSucceeded(sentMessage => {
139
232
  if (sentMessage.isUserMessage()) {
140
- updateNextMessages([sentMessage], false, sdk.currentUser.userId);
233
+ updateMessages([sentMessage], false, sdk.currentUser.userId);
141
234
  resolve(sentMessage);
142
235
  }
143
236
  }).onFailed((err, sentMessage) => {
144
- updateNextMessages([sentMessage], false, sdk.currentUser.userId);
237
+ updateMessages([sentMessage], false, sdk.currentUser.userId);
145
238
  reject(err);
146
239
  });
147
240
  });
@@ -150,16 +243,16 @@ const useOpenChannelMessagesWithQuery = (sdk, channel, userId, options) => {
150
243
  return new Promise((resolve, reject) => {
151
244
  channel.sendFileMessage(params).onPending(pendingMessage => {
152
245
  if (pendingMessage.isFileMessage()) {
153
- updateNextMessages([pendingMessage], false, sdk.currentUser.userId);
246
+ updateMessages([pendingMessage], false, sdk.currentUser.userId);
154
247
  onPending === null || onPending === void 0 ? void 0 : onPending(pendingMessage);
155
248
  }
156
249
  }).onSucceeded(sentMessage => {
157
250
  if (sentMessage.isFileMessage()) {
158
- updateNextMessages([sentMessage], false, sdk.currentUser.userId);
251
+ updateMessages([sentMessage], false, sdk.currentUser.userId);
159
252
  resolve(sentMessage);
160
253
  }
161
254
  }).onFailed((err, sentMessage) => {
162
- updateNextMessages([sentMessage], false, sdk.currentUser.userId);
255
+ updateMessages([sentMessage], false, sdk.currentUser.userId);
163
256
  reject(err);
164
257
  });
165
258
  });
@@ -180,7 +273,7 @@ const useOpenChannelMessagesWithQuery = (sdk, channel, userId, options) => {
180
273
  if (failedMessage.isFileMessage()) return channel.resendFileMessage(failedMessage);
181
274
  return null;
182
275
  })();
183
- if (message) updateNextMessages([message], false, sdk.currentUser.userId);
276
+ if (message) updateMessages([message], false, sdk.currentUser.userId);
184
277
  });
185
278
  const deleteMessage = (0, _uikitUtils.useFreshCallback)(async message => {
186
279
  if (message.sendingStatus === 'succeeded') {
@@ -190,21 +283,28 @@ const useOpenChannelMessagesWithQuery = (sdk, channel, userId, options) => {
190
283
  deleteMessages([message.messageId], [message.reqId]);
191
284
  }
192
285
  });
286
+ const resetNewMessages = (0, _uikitUtils.useFreshCallback)(() => {
287
+ updateNewMessages([], true, sdk.currentUser.userId);
288
+ });
193
289
  return {
194
290
  loading,
195
291
  refreshing,
196
292
  refresh,
197
293
  messages,
198
- nextMessages,
199
- newMessagesFromMembers,
294
+ newMessages,
200
295
  next,
296
+ hasNext,
201
297
  prev,
298
+ hasPrev,
202
299
  sendUserMessage,
203
300
  sendFileMessage,
204
301
  updateUserMessage,
205
302
  updateFileMessage,
206
303
  resendMessage,
207
- deleteMessage
304
+ deleteMessage,
305
+ resetNewMessages,
306
+ nextMessages: newMessages,
307
+ newMessagesFromMembers: newMessages
208
308
  };
209
309
  };
210
310
  exports.useOpenChannelMessagesWithQuery = useOpenChannelMessagesWithQuery;
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_uikitUtils","_useChannelHandler","_reducer","createMessageQuery","channel","creator","createPreviousMessageListQuery","limit","reverse","useOpenChannelMessagesWithQuery","sdk","userId","options","queryRef","useRef","forceUpdate","useForceUpdate","handlerId","useUniqHandlerId","loading","refreshing","messages","nextMessages","newMessagesFromMembers","updateMessages","updateNextMessages","deleteNextMessages","deleteMessages","updateLoading","updateRefreshing","useOpenChannelMessagesReducer","sortComparator","init","useFreshCallback","uid","_queryRef$current","current","queryCreator","hasNext","_queryRef$current2","list","load","currentUser","channelUpdater","isOpenChannel","isDifferentChannel","useChannelHandler","onMessageReceived","eventChannel","message","onMessageUpdated","onMessageDeleted","messageId","onChannelChanged","onChannelFrozen","onChannelUnfrozen","onChannelParticipantCountChanged","onChannelDeleted","channelUrl","type","url","_options$onChannelDel","call","onOperatorUpdated","onUserUnbanned","onUserMuted","onUserUnmuted","onUserBanned","bannedUser","_options$onChannelDel2","useAsyncEffect","enter","error","_options$onError","_options$onChannelDel3","onError","exit","catch","NOOP","refresh","prev","_queryRef$current3","_queryRef$current4","next","length","sendUserMessage","params","onPending","Promise","resolve","reject","pendingMessage","isUserMessage","onSucceeded","sentMessage","onFailed","err","sendFileMessage","isFileMessage","updateUserMessage","updatedMessage","updateFileMessage","resendMessage","failedMessage","resendUserMessage","resendFileMessage","deleteMessage","sendingStatus","reqId","exports"],"sources":["useOpenChannelMessagesWithQuery.ts"],"sourcesContent":["import { useRef } from 'react';\n\nimport type { SendbirdBaseChannel, SendbirdOpenChannel, SendbirdPreviousMessageListQuery } from '@sendbird/uikit-utils';\nimport {\n NOOP,\n isDifferentChannel,\n useAsyncEffect,\n useForceUpdate,\n useFreshCallback,\n useUniqHandlerId,\n} from '@sendbird/uikit-utils';\n\nimport { useChannelHandler } from '../../handler/useChannelHandler';\nimport type { UseOpenChannelMessages, UseOpenChannelMessagesOptions } from '../../types';\nimport { useOpenChannelMessagesReducer } from './reducer';\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 nextMessages,\n newMessagesFromMembers,\n updateMessages,\n updateNextMessages,\n deleteNextMessages,\n deleteMessages,\n updateLoading,\n updateRefreshing,\n } = useOpenChannelMessagesReducer(userId, 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 updateNextMessages([], 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 useChannelHandler(\n sdk,\n handlerId,\n {\n // Messages\n onMessageReceived(eventChannel, message) {\n if (isDifferentChannel(channel, eventChannel)) return;\n updateNextMessages([message], false, sdk.currentUser.userId);\n },\n onMessageUpdated(eventChannel, message) {\n if (isDifferentChannel(channel, eventChannel)) return;\n updateMessages([message], false, sdk.currentUser.userId);\n },\n onMessageDeleted(eventChannel, messageId) {\n if (isDifferentChannel(channel, eventChannel)) return;\n deleteMessages([messageId], []);\n deleteNextMessages([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\n const next: ReturnType<UseOpenChannelMessages>['next'] = useFreshCallback(async () => {\n if (nextMessages.length > 0) {\n updateMessages(nextMessages, false, sdk.currentUser.userId);\n updateNextMessages([], true, sdk.currentUser.userId);\n }\n });\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 updateNextMessages([pendingMessage], false, sdk.currentUser.userId);\n onPending?.(pendingMessage);\n }\n })\n .onSucceeded((sentMessage) => {\n if (sentMessage.isUserMessage()) {\n updateNextMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage);\n }\n })\n .onFailed((err, sentMessage) => {\n updateNextMessages([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 updateNextMessages([pendingMessage], false, sdk.currentUser.userId);\n onPending?.(pendingMessage);\n }\n })\n .onSucceeded((sentMessage) => {\n if (sentMessage.isFileMessage()) {\n updateNextMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage);\n }\n })\n .onFailed((err, sentMessage) => {\n updateNextMessages([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) updateNextMessages([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\n return {\n loading,\n refreshing,\n refresh,\n messages,\n nextMessages,\n newMessagesFromMembers,\n next,\n prev,\n sendUserMessage,\n sendFileMessage,\n updateUserMessage,\n updateFileMessage,\n resendMessage,\n deleteMessage,\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","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","nextMessages","newMessagesFromMembers","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 nextMessages: newMessages,\n newMessagesFromMembers: newMessages,\n };\n};\n"],"mappings":"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"}
@@ -69,7 +69,7 @@ const useUserList = (sdk, options) => {
69
69
  var _query$current2;
70
70
  const users = await ((_query$current2 = query.current) === null || _query$current2 === void 0 ? void 0 : _query$current2.next().catch(e => {
71
71
  _uikitUtils.Logger.error(e);
72
- if (e.code === _uikitUtils.SBErrorCode.NON_AUTHORIZED) _uikitUtils.Logger.warn(_uikitUtils.SBErrorMessage.ACL);
72
+ if (e.code === _uikitUtils.SBErrorCode.UNAUTHORIZED_REQUEST) _uikitUtils.Logger.warn(_uikitUtils.SBErrorMessage.ACL);
73
73
  throw e;
74
74
  }));
75
75
  updateUsers(users, true);
@@ -104,7 +104,7 @@ const useUserList = (sdk, options) => {
104
104
  if (query.current && (_query$current3 = query.current) !== null && _query$current3 !== void 0 && _query$current3.hasNext) {
105
105
  const nextUsers = await query.current.next().catch(e => {
106
106
  _uikitUtils.Logger.error(e);
107
- if (e.code === _uikitUtils.SBErrorCode.NON_AUTHORIZED) _uikitUtils.Logger.warn(_uikitUtils.SBErrorMessage.ACL);
107
+ if (e.code === _uikitUtils.SBErrorCode.UNAUTHORIZED_REQUEST) _uikitUtils.Logger.warn(_uikitUtils.SBErrorMessage.ACL);
108
108
  throw e;
109
109
  });
110
110
  updateUsers(nextUsers, false);
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_uikitUtils","createUserQuery","sdk","queryCreator","createApplicationUserListQuery","useUserList","options","query","useRef","error","setError","useState","loading","setLoading","refreshing","setRefreshing","users","setUsers","sortedUsers","useMemo","sortComparator","sort","upsertUser","useFreshCallback","user","_ref","draft","userIdx","findIndex","it","userId","push","deleteUser","_ref2","splice","updateUsers","clearPrev","prev","concat","init","_query$current","current","hasNext","_query$current2","next","catch","e","Logger","code","SBErrorCode","NON_AUTHORIZED","warn","SBErrorMessage","ACL","useAsyncEffect","refresh","_query$current3","nextUsers","exports"],"sources":["useUserList.ts"],"sourcesContent":["import { useMemo, useRef, useState } from 'react';\n\nimport type { Optional, SendbirdChatSDK, SendbirdUser, UserStruct } from '@sendbird/uikit-utils';\nimport { Logger, SBErrorCode, SBErrorMessage, useAsyncEffect, useFreshCallback } from '@sendbird/uikit-utils';\n\nimport type { CustomQueryInterface, UseUserListOptions, UseUserListReturn } from '../types';\n\nconst createUserQuery = <User extends UserStruct>(\n sdk: SendbirdChatSDK,\n queryCreator?: UseUserListOptions<User>['queryCreator'],\n) => {\n if (queryCreator) return queryCreator();\n // In order to use the API, the option must be turned on in the dashboard.\n return sdk.createApplicationUserListQuery() as unknown as CustomQueryInterface<User>;\n};\n\n/**\n * Get user list from query.\n * default query uses 'instance.createApplicationUserListQuery'\n * The response type of hook is depends on return type of 'query.next()'\n *\n * You can call hook with your custom query using {@link CustomQuery}\n * Or you can create your 'CustomQueryClass' implemented {@link CustomQueryInterface}'\n *\n * ```example\n * const { users } = useUserList(sdk, {\n * queryCreator: () => {\n * const friendQuery = sdk.createFriendListQuery();\n * return new CustomQuery({\n * next: () => friendQuery.next(),\n * isLoading: () => friendQuery.isLoading,\n * hasNext: () => friendQuery.hasMore,\n * });\n * }\n * })\n * ```\n * */\nexport const useUserList = <\n Options extends UseUserListOptions<UserStruct>,\n QueriedUser extends UserStruct = Options['queryCreator'] extends Optional<\n () => CustomQueryInterface<infer User extends UserStruct>\n >\n ? User\n : SendbirdUser,\n>(\n sdk: SendbirdChatSDK,\n options?: UseUserListOptions<QueriedUser>,\n): UseUserListReturn<QueriedUser> => {\n const query = useRef<CustomQueryInterface<QueriedUser>>();\n\n const [error, setError] = useState<unknown>(null);\n const [loading, setLoading] = useState(false);\n const [refreshing, setRefreshing] = useState(false);\n\n const [users, setUsers] = useState<QueriedUser[]>([]);\n const sortedUsers = useMemo((): QueriedUser[] => {\n if (options?.sortComparator) return users.sort(options.sortComparator);\n return users;\n }, [users, options?.sortComparator]);\n\n const upsertUser = useFreshCallback((user: QueriedUser) => {\n setUsers(([...draft]) => {\n const userIdx = draft.findIndex((it) => it.userId === user.userId);\n if (userIdx > -1) draft[userIdx] = user;\n else draft.push(user);\n return draft;\n });\n });\n\n const deleteUser = useFreshCallback((userId: QueriedUser['userId']) => {\n setUsers(([...draft]) => {\n const userIdx = draft.findIndex((it) => it.userId === userId);\n if (userIdx > -1) draft.splice(userIdx, 1);\n return draft;\n });\n });\n\n const updateUsers = (users: QueriedUser[], clearPrev: boolean) => {\n if (clearPrev) setUsers(users);\n else setUsers((prev) => prev.concat(users));\n };\n\n const init = useFreshCallback(async () => {\n query.current = createUserQuery<QueriedUser>(sdk, options?.queryCreator);\n if (query.current?.hasNext) {\n const users = await query.current?.next().catch((e) => {\n Logger.error(e);\n if (e.code === SBErrorCode.NON_AUTHORIZED) Logger.warn(SBErrorMessage.ACL);\n throw e;\n });\n updateUsers(users, true);\n }\n });\n\n useAsyncEffect(async () => {\n setLoading(true);\n setError(null);\n try {\n await init();\n } catch (e) {\n setError(e);\n setUsers([]);\n } finally {\n setLoading(false);\n }\n }, []);\n\n const refresh = useFreshCallback(async () => {\n setRefreshing(true);\n setError(null);\n try {\n await init();\n } catch (e) {\n setError(e);\n setUsers([]);\n } finally {\n setRefreshing(false);\n }\n });\n\n const next = useFreshCallback(async () => {\n if (query.current && query.current?.hasNext) {\n const nextUsers = await query.current.next().catch((e) => {\n Logger.error(e);\n if (e.code === SBErrorCode.NON_AUTHORIZED) Logger.warn(SBErrorMessage.ACL);\n throw e;\n });\n updateUsers(nextUsers, false);\n }\n });\n\n return {\n loading,\n error,\n users: sortedUsers,\n upsertUser,\n deleteUser,\n next,\n refreshing,\n refresh,\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["_react","require","_uikitUtils","createUserQuery","sdk","queryCreator","createApplicationUserListQuery","useUserList","options","query","useRef","error","setError","useState","loading","setLoading","refreshing","setRefreshing","users","setUsers","sortedUsers","useMemo","sortComparator","sort","upsertUser","useFreshCallback","user","_ref","draft","userIdx","findIndex","it","userId","push","deleteUser","_ref2","splice","updateUsers","clearPrev","prev","concat","init","_query$current","current","hasNext","_query$current2","next","catch","e","Logger","code","SBErrorCode","UNAUTHORIZED_REQUEST","warn","SBErrorMessage","ACL","useAsyncEffect","refresh","_query$current3","nextUsers","exports"],"sources":["useUserList.ts"],"sourcesContent":["import { useMemo, useRef, useState } from 'react';\n\nimport type { Optional, SendbirdChatSDK, SendbirdUser, UserStruct } from '@sendbird/uikit-utils';\nimport { Logger, SBErrorCode, SBErrorMessage, useAsyncEffect, useFreshCallback } from '@sendbird/uikit-utils';\n\nimport type { CustomQueryInterface, UseUserListOptions, UseUserListReturn } from '../types';\n\nconst createUserQuery = <User extends UserStruct>(\n sdk: SendbirdChatSDK,\n queryCreator?: UseUserListOptions<User>['queryCreator'],\n) => {\n if (queryCreator) return queryCreator();\n // In order to use the API, the option must be turned on in the dashboard.\n return sdk.createApplicationUserListQuery() as unknown as CustomQueryInterface<User>;\n};\n\n/**\n * Get user list from query.\n * default query uses 'instance.createApplicationUserListQuery'\n * The response type of hook is depends on return type of 'query.next()'\n *\n * You can call hook with your custom query using {@link CustomQuery}\n * Or you can create your 'CustomQueryClass' implemented {@link CustomQueryInterface}'\n *\n * ```example\n * const { users } = useUserList(sdk, {\n * queryCreator: () => {\n * const friendQuery = sdk.createFriendListQuery();\n * return new CustomQuery({\n * next: () => friendQuery.next(),\n * isLoading: () => friendQuery.isLoading,\n * hasNext: () => friendQuery.hasMore,\n * });\n * }\n * })\n * ```\n * */\nexport const useUserList = <\n Options extends UseUserListOptions<UserStruct>,\n QueriedUser extends UserStruct = Options['queryCreator'] extends Optional<\n () => CustomQueryInterface<infer User extends UserStruct>\n >\n ? User\n : SendbirdUser,\n>(\n sdk: SendbirdChatSDK,\n options?: UseUserListOptions<QueriedUser>,\n): UseUserListReturn<QueriedUser> => {\n const query = useRef<CustomQueryInterface<QueriedUser>>();\n\n const [error, setError] = useState<unknown>(null);\n const [loading, setLoading] = useState(false);\n const [refreshing, setRefreshing] = useState(false);\n\n const [users, setUsers] = useState<QueriedUser[]>([]);\n const sortedUsers = useMemo((): QueriedUser[] => {\n if (options?.sortComparator) return users.sort(options.sortComparator);\n return users;\n }, [users, options?.sortComparator]);\n\n const upsertUser = useFreshCallback((user: QueriedUser) => {\n setUsers(([...draft]) => {\n const userIdx = draft.findIndex((it) => it.userId === user.userId);\n if (userIdx > -1) draft[userIdx] = user;\n else draft.push(user);\n return draft;\n });\n });\n\n const deleteUser = useFreshCallback((userId: QueriedUser['userId']) => {\n setUsers(([...draft]) => {\n const userIdx = draft.findIndex((it) => it.userId === userId);\n if (userIdx > -1) draft.splice(userIdx, 1);\n return draft;\n });\n });\n\n const updateUsers = (users: QueriedUser[], clearPrev: boolean) => {\n if (clearPrev) setUsers(users);\n else setUsers((prev) => prev.concat(users));\n };\n\n const init = useFreshCallback(async () => {\n query.current = createUserQuery<QueriedUser>(sdk, options?.queryCreator);\n if (query.current?.hasNext) {\n const users = await query.current?.next().catch((e) => {\n Logger.error(e);\n if (e.code === SBErrorCode.UNAUTHORIZED_REQUEST) Logger.warn(SBErrorMessage.ACL);\n throw e;\n });\n updateUsers(users, true);\n }\n });\n\n useAsyncEffect(async () => {\n setLoading(true);\n setError(null);\n try {\n await init();\n } catch (e) {\n setError(e);\n setUsers([]);\n } finally {\n setLoading(false);\n }\n }, []);\n\n const refresh = useFreshCallback(async () => {\n setRefreshing(true);\n setError(null);\n try {\n await init();\n } catch (e) {\n setError(e);\n setUsers([]);\n } finally {\n setRefreshing(false);\n }\n });\n\n const next = useFreshCallback(async () => {\n if (query.current && query.current?.hasNext) {\n const nextUsers = await query.current.next().catch((e) => {\n Logger.error(e);\n if (e.code === SBErrorCode.UNAUTHORIZED_REQUEST) Logger.warn(SBErrorMessage.ACL);\n throw e;\n });\n updateUsers(nextUsers, false);\n }\n });\n\n return {\n loading,\n error,\n users: sortedUsers,\n upsertUser,\n deleteUser,\n next,\n refreshing,\n refresh,\n };\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import 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 -> append to state(nextMessages)\n * - onTopReached -> prev() -> fetch prev messages and append to state(messages)\n * - onBottomReached -> next() -> nextMessages 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 * Get messages, this state is for temporary data before 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 * */\n nextMessages: SendbirdMessage[];\n\n /**\n * Get new messages from nextMessages\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 newMessagesFromMembers: SendbirdMessage[];\n\n /**\n * Fetch next messages to state\n * @return {Promise<void>}\n * */\n next: () => Promise<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 sortComparator?: (a: SendbirdMessage, b: SendbirdMessage) => number;\n queryCreator?: () => SendbirdPreviousMessageListQuery;\n collectionCreator?: () => SendbirdMessageCollection;\n enableCollectionWithoutLocalCache?: boolean;\n onChannelDeleted?: () => 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 -> append to state(nextMessages)\n * - onTopReached -> prev() -> fetch prev messages and append to state(messages)\n * - onBottomReached -> next() -> nextMessages append to state(messages)\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 * Get messages, this state is for temporary data before 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 * */\n nextMessages: SendbirdMessage[];\n\n /**\n * Get new messages from nextMessages\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 newMessagesFromMembers: SendbirdMessage[];\n\n /**\n * Fetch next messages to state\n * @return {Promise<void>}\n * */\n next: () => Promise<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 UseOpenChannelMessagesOptions = {\n sortComparator?: (a: SendbirdMessage, b: SendbirdMessage) => number;\n queryCreator?: () => SendbirdPreviousMessageListQuery;\n onChannelDeleted?: () => void;\n onError?: (error?: unknown) => 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 {\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 /** @deprecated Please use `newMessages` instead **/\n newMessagesFromMembers: SendbirdMessage[];\n /** @deprecated Please use `newMessages` instead **/\n nextMessages: SendbirdMessage[];\n };\n}\n\nexport type UseGroupChannelMessagesOptions = {\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 /** @deprecated Please use `newMessages` instead **/\n newMessagesFromMembers: SendbirdMessage[];\n /** @deprecated Please use `newMessages` instead **/\n nextMessages: SendbirdMessage[];\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":""}