@sendbird/uikit-chat-hooks 2.0.3 → 2.2.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 (63) hide show
  1. package/lib/commonjs/channel/useGroupChannel.js +33 -0
  2. package/lib/commonjs/channel/useGroupChannel.js.map +1 -0
  3. package/lib/commonjs/channel/useGroupChannelMessages/reducer.js +3 -3
  4. package/lib/commonjs/channel/useGroupChannelMessages/reducer.js.map +1 -1
  5. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +75 -79
  6. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
  7. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +30 -41
  8. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
  9. package/lib/commonjs/common/useAppFeatures.js +4 -4
  10. package/lib/commonjs/common/useAppFeatures.js.map +1 -1
  11. package/lib/commonjs/common/useMessageOutgoingStatus.js +1 -0
  12. package/lib/commonjs/common/useMessageOutgoingStatus.js.map +1 -1
  13. package/lib/commonjs/common/useTotalUnreadChannelCount.js +1 -1
  14. package/lib/commonjs/common/useTotalUnreadChannelCount.js.map +1 -1
  15. package/lib/commonjs/common/useTotalUnreadMessageCount.js +1 -1
  16. package/lib/commonjs/common/useTotalUnreadMessageCount.js.map +1 -1
  17. package/lib/commonjs/common/useUserList.js +33 -15
  18. package/lib/commonjs/common/useUserList.js.map +1 -1
  19. package/lib/commonjs/index.js +8 -0
  20. package/lib/commonjs/index.js.map +1 -1
  21. package/lib/commonjs/types.js.map +1 -1
  22. package/lib/module/channel/useGroupChannel.js +22 -0
  23. package/lib/module/channel/useGroupChannel.js.map +1 -0
  24. package/lib/module/channel/useGroupChannelMessages/reducer.js +3 -3
  25. package/lib/module/channel/useGroupChannelMessages/reducer.js.map +1 -1
  26. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +76 -79
  27. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
  28. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +30 -40
  29. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
  30. package/lib/module/common/useAppFeatures.js +4 -4
  31. package/lib/module/common/useAppFeatures.js.map +1 -1
  32. package/lib/module/common/useMessageOutgoingStatus.js +1 -0
  33. package/lib/module/common/useMessageOutgoingStatus.js.map +1 -1
  34. package/lib/module/common/useTotalUnreadChannelCount.js +2 -2
  35. package/lib/module/common/useTotalUnreadChannelCount.js.map +1 -1
  36. package/lib/module/common/useTotalUnreadMessageCount.js +2 -2
  37. package/lib/module/common/useTotalUnreadMessageCount.js.map +1 -1
  38. package/lib/module/common/useUserList.js +35 -17
  39. package/lib/module/common/useUserList.js.map +1 -1
  40. package/lib/module/index.js +1 -0
  41. package/lib/module/index.js.map +1 -1
  42. package/lib/module/types.js.map +1 -1
  43. package/lib/typescript/src/channel/useGroupChannel.d.ts +6 -0
  44. package/lib/typescript/src/channel/useGroupChannelList/reducer.d.ts +1 -1
  45. package/lib/typescript/src/common/useMessageOutgoingStatus.d.ts +1 -1
  46. package/lib/typescript/src/common/useTotalUnreadChannelCount.d.ts +1 -1
  47. package/lib/typescript/src/common/useTotalUnreadMessageCount.d.ts +1 -1
  48. package/lib/typescript/src/common/useUserList.d.ts +2 -2
  49. package/lib/typescript/src/index.d.ts +2 -1
  50. package/lib/typescript/src/model/CustomQuery.d.ts +1 -1
  51. package/lib/typescript/src/types.d.ts +13 -9
  52. package/package.json +4 -4
  53. package/src/channel/useGroupChannel.ts +21 -0
  54. package/src/channel/useGroupChannelMessages/reducer.ts +4 -4
  55. package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.ts +92 -86
  56. package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.ts +33 -37
  57. package/src/common/useAppFeatures.ts +4 -4
  58. package/src/common/useMessageOutgoingStatus.ts +2 -0
  59. package/src/common/useTotalUnreadChannelCount.ts +2 -2
  60. package/src/common/useTotalUnreadMessageCount.ts +2 -2
  61. package/src/common/useUserList.ts +46 -20
  62. package/src/index.ts +2 -1
  63. package/src/types.ts +13 -7
@@ -11,8 +11,6 @@ var _uikitUtils = require("@sendbird/uikit-utils");
11
11
 
12
12
  var _useChannelHandler = require("../../handler/useChannelHandler");
13
13
 
14
- var _useActiveGroupChannel = require("../useActiveGroupChannel");
15
-
16
14
  var _reducer = require("./reducer");
17
15
 
18
16
  const createMessageQuery = (channel, creator) => {
@@ -26,12 +24,7 @@ const createMessageQuery = (channel, creator) => {
26
24
  const HOOK_NAME = 'useGroupChannelMessagesWithQuery';
27
25
 
28
26
  const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options) => {
29
- const queryRef = (0, _react.useRef)(); // NOTE: We cannot determine the channel object of Sendbird SDK is stale or not, so force update after setActiveChannel
30
-
31
- const {
32
- activeChannel,
33
- setActiveChannel
34
- } = (0, _useActiveGroupChannel.useActiveGroupChannel)(sdk, channel);
27
+ const queryRef = (0, _react.useRef)();
35
28
  const forceUpdate = (0, _uikitUtils.useForceUpdate)();
36
29
  const {
37
30
  loading,
@@ -47,11 +40,11 @@ const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options) => {
47
40
  updateRefreshing
48
41
  } = (0, _reducer.useGroupChannelMessagesReducer)(userId, options === null || options === void 0 ? void 0 : options.sortComparator);
49
42
 
50
- const channelMarkAs = async () => {
43
+ const channelMarkAsRead = async () => {
51
44
  try {
52
45
  await (0, _uikitUtils.confirmAndMarkAsRead)([channel]);
53
46
  } catch (e) {
54
- _uikitUtils.Logger.warn(`[${HOOK_NAME}/channelMarkAs/Read]`, e);
47
+ _uikitUtils.Logger.warn(`[${HOOK_NAME}/channelMarkAsRead]`, e);
55
48
  }
56
49
  };
57
50
 
@@ -59,8 +52,8 @@ const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options) => {
59
52
  if (uid) {
60
53
  var _queryRef$current;
61
54
 
62
- queryRef.current = createMessageQuery(activeChannel, options === null || options === void 0 ? void 0 : options.queryCreator);
63
- channelMarkAs().catch();
55
+ queryRef.current = createMessageQuery(channel, options === null || options === void 0 ? void 0 : options.queryCreator);
56
+ channelMarkAsRead().catch();
64
57
 
65
58
  if ((_queryRef$current = queryRef.current) !== null && _queryRef$current !== void 0 && _queryRef$current.hasNext) {
66
59
  var _queryRef$current2;
@@ -71,11 +64,10 @@ const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options) => {
71
64
 
72
65
  updateNextMessages([], true, sdk.currentUser.userId);
73
66
  }
74
- }, [sdk, activeChannel.url, options === null || options === void 0 ? void 0 : options.queryCreator]);
67
+ }, [sdk, channel.url, options === null || options === void 0 ? void 0 : options.queryCreator]);
75
68
 
76
69
  const channelUpdater = channel => {
77
- if (channel.isGroupChannel() && !(0, _uikitUtils.isDifferentChannel)(channel, activeChannel)) {
78
- setActiveChannel(channel);
70
+ if (channel.isGroupChannel() && !(0, _uikitUtils.isDifferentChannel)(channel, channel)) {
79
71
  forceUpdate();
80
72
  }
81
73
  };
@@ -83,18 +75,18 @@ const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options) => {
83
75
  (0, _useChannelHandler.useChannelHandler)(sdk, HOOK_NAME, {
84
76
  // Messages
85
77
  onMessageReceived(eventChannel, message) {
86
- if ((0, _uikitUtils.isDifferentChannel)(activeChannel, eventChannel)) return;
87
- channelMarkAs();
78
+ if ((0, _uikitUtils.isDifferentChannel)(channel, eventChannel)) return;
79
+ channelMarkAsRead();
88
80
  updateNextMessages([message], false, sdk.currentUser.userId);
89
81
  },
90
82
 
91
83
  onMessageUpdated(eventChannel, message) {
92
- if ((0, _uikitUtils.isDifferentChannel)(activeChannel, eventChannel)) return;
84
+ if ((0, _uikitUtils.isDifferentChannel)(channel, eventChannel)) return;
93
85
  updateMessages([message], false, sdk.currentUser.userId);
94
86
  },
95
87
 
96
88
  onMessageDeleted(eventChannel, messageId) {
97
- if ((0, _uikitUtils.isDifferentChannel)(activeChannel, eventChannel)) return;
89
+ if ((0, _uikitUtils.isDifferentChannel)(channel, eventChannel)) return;
98
90
  deleteMessages([messageId], []);
99
91
  deleteNextMessages([messageId], []);
100
92
  },
@@ -106,14 +98,14 @@ const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options) => {
106
98
  onChannelHidden: channelUpdater,
107
99
 
108
100
  onChannelMemberCountChanged(channels) {
109
- const channel = channels.find(c => !(0, _uikitUtils.isDifferentChannel)(c, activeChannel));
110
- if (channel) channelUpdater(channel);
101
+ const foundChannel = channels.find(c => !(0, _uikitUtils.isDifferentChannel)(c, channel));
102
+ if (foundChannel) channelUpdater(foundChannel);
111
103
  },
112
104
 
113
105
  onChannelDeleted(channelUrl) {
114
106
  var _options$onChannelDel;
115
107
 
116
- if (activeChannel.url === channelUrl) options === null || options === void 0 ? void 0 : (_options$onChannelDel = options.onChannelDeleted) === null || _options$onChannelDel === void 0 ? void 0 : _options$onChannelDel.call(options);
108
+ if (channel.url === channelUrl) options === null || options === void 0 ? void 0 : (_options$onChannelDel = options.onChannelDeleted) === null || _options$onChannelDel === void 0 ? void 0 : _options$onChannelDel.call(options);
117
109
  },
118
110
 
119
111
  // Users
@@ -127,7 +119,7 @@ const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options) => {
127
119
  onUserUnmuted: channelUpdater,
128
120
 
129
121
  onUserBanned(eventChannel, bannedUser) {
130
- if ((0, _uikitUtils.isDifferentChannel)(activeChannel, eventChannel)) return;
122
+ if ((0, _uikitUtils.isDifferentChannel)(channel, eventChannel)) return;
131
123
 
132
124
  if (bannedUser.userId === sdk.currentUser.userId) {
133
125
  var _options$onChannelDel2;
@@ -167,7 +159,7 @@ const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options) => {
167
159
  }, [nextMessages.length]);
168
160
  const sendUserMessage = (0, _react.useCallback)((params, onPending) => {
169
161
  return new Promise((resolve, reject) => {
170
- activeChannel.sendUserMessage(params).onPending(pendingMessage => {
162
+ channel.sendUserMessage(params).onPending(pendingMessage => {
171
163
  if (pendingMessage.isUserMessage()) {
172
164
  updateNextMessages([pendingMessage], false, sdk.currentUser.userId);
173
165
  onPending === null || onPending === void 0 ? void 0 : onPending(pendingMessage);
@@ -181,10 +173,10 @@ const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options) => {
181
173
  reject(err);
182
174
  });
183
175
  });
184
- }, [activeChannel]);
176
+ }, [channel]);
185
177
  const sendFileMessage = (0, _react.useCallback)((params, onPending) => {
186
178
  return new Promise((resolve, reject) => {
187
- activeChannel.sendFileMessage(params).onPending(pendingMessage => {
179
+ channel.sendFileMessage(params).onPending(pendingMessage => {
188
180
  if (pendingMessage.isFileMessage()) {
189
181
  updateNextMessages([pendingMessage], false, sdk.currentUser.userId);
190
182
  onPending === null || onPending === void 0 ? void 0 : onPending(pendingMessage);
@@ -198,35 +190,33 @@ const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options) => {
198
190
  reject(err);
199
191
  });
200
192
  });
201
- }, [activeChannel]);
193
+ }, [channel]);
202
194
  const updateUserMessage = (0, _react.useCallback)(async (messageId, params) => {
203
- const updatedMessage = await activeChannel.updateUserMessage(messageId, params);
195
+ const updatedMessage = await channel.updateUserMessage(messageId, params);
204
196
  updateMessages([updatedMessage], false, sdk.currentUser.userId);
205
197
  return updatedMessage;
206
- }, [activeChannel]);
198
+ }, [channel]);
207
199
  const updateFileMessage = (0, _react.useCallback)(async (messageId, params) => {
208
- const updatedMessage = await activeChannel.updateFileMessage(messageId, params);
200
+ const updatedMessage = await channel.updateFileMessage(messageId, params);
209
201
  updateMessages([updatedMessage], false, sdk.currentUser.userId);
210
202
  return updatedMessage;
211
- }, [activeChannel]);
203
+ }, [channel]);
212
204
  const resendMessage = (0, _react.useCallback)(async failedMessage => {
213
205
  const message = await (() => {
214
- if (failedMessage.isUserMessage()) return activeChannel.resendUserMessage(failedMessage); // FIXME: v4 bugs
215
- // @ts-ignore
216
-
217
- if (failedMessage.isFileMessage()) return activeChannel.resendFileMessage(failedMessage);
206
+ if (failedMessage.isUserMessage()) return channel.resendUserMessage(failedMessage);
207
+ if (failedMessage.isFileMessage()) return channel.resendFileMessage(failedMessage);
218
208
  return null;
219
209
  })();
220
210
  if (message) updateNextMessages([message], false, sdk.currentUser.userId);
221
- }, [activeChannel]);
211
+ }, [channel]);
222
212
  const deleteMessage = (0, _react.useCallback)(async message => {
223
213
  if (message.sendingStatus === 'succeeded') {
224
- if (message.isUserMessage()) await activeChannel.deleteMessage(message);
225
- if (message.isFileMessage()) await activeChannel.deleteMessage(message);
214
+ if (message.isUserMessage()) await channel.deleteMessage(message);
215
+ if (message.isFileMessage()) await channel.deleteMessage(message);
226
216
  } else {
227
217
  deleteMessages([message.messageId], [message.reqId]);
228
218
  }
229
- }, [activeChannel]);
219
+ }, [channel]);
230
220
  return {
231
221
  loading,
232
222
  refreshing,
@@ -241,8 +231,7 @@ const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options) => {
241
231
  updateUserMessage,
242
232
  updateFileMessage,
243
233
  resendMessage,
244
- deleteMessage,
245
- activeChannel
234
+ deleteMessage
246
235
  };
247
236
  };
248
237
 
@@ -1 +1 @@
1
- {"version":3,"names":["createMessageQuery","channel","creator","createPreviousMessageListQuery","limit","reverse","HOOK_NAME","useGroupChannelMessagesWithQuery","sdk","userId","options","queryRef","useRef","activeChannel","setActiveChannel","useActiveGroupChannel","forceUpdate","useForceUpdate","loading","refreshing","messages","nextMessages","newMessagesFromMembers","updateMessages","updateNextMessages","deleteNextMessages","deleteMessages","updateLoading","updateRefreshing","useGroupChannelMessagesReducer","sortComparator","channelMarkAs","confirmAndMarkAsRead","e","Logger","warn","init","useCallback","uid","current","queryCreator","catch","hasNext","list","load","currentUser","url","channelUpdater","isGroupChannel","isDifferentChannel","useChannelHandler","onMessageReceived","eventChannel","message","onMessageUpdated","onMessageDeleted","messageId","onChannelChanged","onChannelFrozen","onChannelUnfrozen","onChannelHidden","onChannelMemberCountChanged","channels","find","c","onChannelDeleted","channelUrl","onOperatorUpdated","onUserLeft","onUserJoined","onUserUnbanned","onUserMuted","onUserUnmuted","onUserBanned","bannedUser","useAsyncEffect","refresh","prev","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"],"sources":["useGroupChannelMessagesWithQuery.ts"],"sourcesContent":["import { useCallback, useRef } from 'react';\n\nimport type { SendbirdBaseChannel, SendbirdGroupChannel } from '@sendbird/uikit-utils';\nimport {\n Logger,\n confirmAndMarkAsRead,\n isDifferentChannel,\n useAsyncEffect,\n useForceUpdate,\n} from '@sendbird/uikit-utils';\nimport type { SendbirdPreviousMessageListQuery } from '@sendbird/uikit-utils';\n\nimport { useChannelHandler } from '../../handler/useChannelHandler';\nimport type { UseGroupChannelMessages, UseGroupChannelMessagesOptions } from '../../types';\nimport { useActiveGroupChannel } from '../useActiveGroupChannel';\nimport { useGroupChannelMessagesReducer } from './reducer';\n\nconst createMessageQuery = (\n channel: SendbirdGroupChannel,\n creator?: UseGroupChannelMessagesOptions['queryCreator'],\n) => {\n if (creator) return creator();\n return channel.createPreviousMessageListQuery({\n limit: 100,\n reverse: true,\n });\n};\n\nconst HOOK_NAME = 'useGroupChannelMessagesWithQuery';\nexport const useGroupChannelMessagesWithQuery: UseGroupChannelMessages = (sdk, channel, userId, options) => {\n const queryRef = useRef<SendbirdPreviousMessageListQuery>();\n\n // NOTE: We cannot determine the channel object of Sendbird SDK is stale or not, so force update after setActiveChannel\n const { activeChannel, setActiveChannel } = useActiveGroupChannel(sdk, channel);\n const forceUpdate = useForceUpdate();\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 } = useGroupChannelMessagesReducer(userId, options?.sortComparator);\n\n const channelMarkAs = async () => {\n try {\n await confirmAndMarkAsRead([channel]);\n } catch (e) {\n Logger.warn(`[${HOOK_NAME}/channelMarkAs/Read]`, e);\n }\n };\n\n const init = useCallback(\n async (uid?: string) => {\n if (uid) {\n queryRef.current = createMessageQuery(activeChannel, options?.queryCreator);\n channelMarkAs().catch();\n if (queryRef.current?.hasNext) {\n const list = await queryRef.current?.load();\n updateMessages(list, true, sdk.currentUser.userId);\n }\n updateNextMessages([], true, sdk.currentUser.userId);\n }\n },\n [sdk, activeChannel.url, options?.queryCreator],\n );\n\n const channelUpdater = (channel: SendbirdBaseChannel) => {\n if (channel.isGroupChannel() && !isDifferentChannel(channel, activeChannel)) {\n setActiveChannel(channel);\n forceUpdate();\n }\n };\n\n useChannelHandler(sdk, HOOK_NAME, {\n // Messages\n onMessageReceived(eventChannel, message) {\n if (isDifferentChannel(activeChannel, eventChannel)) return;\n channelMarkAs();\n updateNextMessages([message], false, sdk.currentUser.userId);\n },\n onMessageUpdated(eventChannel, message) {\n if (isDifferentChannel(activeChannel, eventChannel)) return;\n updateMessages([message], false, sdk.currentUser.userId);\n },\n onMessageDeleted(eventChannel, messageId) {\n if (isDifferentChannel(activeChannel, eventChannel)) return;\n deleteMessages([messageId], []);\n deleteNextMessages([messageId], []);\n },\n // Channels\n onChannelChanged: channelUpdater,\n onChannelFrozen: channelUpdater,\n onChannelUnfrozen: channelUpdater,\n onChannelHidden: channelUpdater,\n onChannelMemberCountChanged(channels) {\n const channel = channels.find((c) => !isDifferentChannel(c, activeChannel));\n if (channel) channelUpdater(channel);\n },\n onChannelDeleted(channelUrl: string) {\n if (activeChannel.url === channelUrl) options?.onChannelDeleted?.();\n },\n // Users\n onOperatorUpdated: channelUpdater,\n onUserLeft: channelUpdater,\n // onUserEntered: channelUpdater,\n // onUserExited: channelUpdater,\n onUserJoined: channelUpdater,\n onUserUnbanned: channelUpdater,\n onUserMuted: channelUpdater,\n onUserUnmuted: channelUpdater,\n onUserBanned(eventChannel, bannedUser) {\n if (isDifferentChannel(activeChannel, eventChannel)) return;\n\n if (bannedUser.userId === sdk.currentUser.userId) {\n options?.onChannelDeleted?.();\n } else {\n channelUpdater(eventChannel);\n }\n },\n });\n\n useAsyncEffect(async () => {\n updateLoading(true);\n await init(userId);\n updateLoading(false);\n }, [init, userId]);\n\n const refresh: ReturnType<UseGroupChannelMessages>['refresh'] = useCallback(async () => {\n updateRefreshing(true);\n await init(userId);\n updateRefreshing(false);\n }, [init, userId]);\n\n const prev: ReturnType<UseGroupChannelMessages>['prev'] = useCallback(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<UseGroupChannelMessages>['next'] = useCallback(async () => {\n if (nextMessages.length > 0) {\n updateMessages(nextMessages, false, sdk.currentUser.userId);\n updateNextMessages([], true, sdk.currentUser.userId);\n }\n }, [nextMessages.length]);\n\n const sendUserMessage: ReturnType<UseGroupChannelMessages>['sendUserMessage'] = useCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n activeChannel\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) => {\n reject(err);\n });\n });\n },\n [activeChannel],\n );\n const sendFileMessage: ReturnType<UseGroupChannelMessages>['sendFileMessage'] = useCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n activeChannel\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) => {\n reject(err);\n });\n });\n },\n [activeChannel],\n );\n const updateUserMessage: ReturnType<UseGroupChannelMessages>['updateUserMessage'] = useCallback(\n async (messageId, params) => {\n const updatedMessage = await activeChannel.updateUserMessage(messageId, params);\n updateMessages([updatedMessage], false, sdk.currentUser.userId);\n return updatedMessage;\n },\n [activeChannel],\n );\n const updateFileMessage: ReturnType<UseGroupChannelMessages>['updateFileMessage'] = useCallback(\n async (messageId, params) => {\n const updatedMessage = await activeChannel.updateFileMessage(messageId, params);\n updateMessages([updatedMessage], false, sdk.currentUser.userId);\n return updatedMessage;\n },\n [activeChannel],\n );\n const resendMessage: ReturnType<UseGroupChannelMessages>['resendMessage'] = useCallback(\n async (failedMessage) => {\n const message = await (() => {\n if (failedMessage.isUserMessage()) return activeChannel.resendUserMessage(failedMessage);\n // FIXME: v4 bugs\n // @ts-ignore\n if (failedMessage.isFileMessage()) return activeChannel.resendFileMessage(failedMessage);\n return null;\n })();\n\n if (message) updateNextMessages([message], false, sdk.currentUser.userId);\n },\n [activeChannel],\n );\n const deleteMessage: ReturnType<UseGroupChannelMessages>['deleteMessage'] = useCallback(\n async (message) => {\n if (message.sendingStatus === 'succeeded') {\n if (message.isUserMessage()) await activeChannel.deleteMessage(message);\n if (message.isFileMessage()) await activeChannel.deleteMessage(message);\n } else {\n deleteMessages([message.messageId], [message.reqId]);\n }\n },\n [activeChannel],\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 activeChannel,\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["createMessageQuery","channel","creator","createPreviousMessageListQuery","limit","reverse","HOOK_NAME","useGroupChannelMessagesWithQuery","sdk","userId","options","queryRef","useRef","forceUpdate","useForceUpdate","loading","refreshing","messages","nextMessages","newMessagesFromMembers","updateMessages","updateNextMessages","deleteNextMessages","deleteMessages","updateLoading","updateRefreshing","useGroupChannelMessagesReducer","sortComparator","channelMarkAsRead","confirmAndMarkAsRead","e","Logger","warn","init","useCallback","uid","current","queryCreator","catch","hasNext","list","load","currentUser","url","channelUpdater","isGroupChannel","isDifferentChannel","useChannelHandler","onMessageReceived","eventChannel","message","onMessageUpdated","onMessageDeleted","messageId","onChannelChanged","onChannelFrozen","onChannelUnfrozen","onChannelHidden","onChannelMemberCountChanged","channels","foundChannel","find","c","onChannelDeleted","channelUrl","onOperatorUpdated","onUserLeft","onUserJoined","onUserUnbanned","onUserMuted","onUserUnmuted","onUserBanned","bannedUser","useAsyncEffect","refresh","prev","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"],"sources":["useGroupChannelMessagesWithQuery.ts"],"sourcesContent":["import { useCallback, useRef } from 'react';\n\nimport type {\n SendbirdBaseChannel,\n SendbirdGroupChannel,\n SendbirdPreviousMessageListQuery,\n} from '@sendbird/uikit-utils';\nimport {\n Logger,\n confirmAndMarkAsRead,\n isDifferentChannel,\n useAsyncEffect,\n useForceUpdate,\n} from '@sendbird/uikit-utils';\n\nimport { useChannelHandler } from '../../handler/useChannelHandler';\nimport type { UseGroupChannelMessages, UseGroupChannelMessagesOptions } from '../../types';\nimport { useGroupChannelMessagesReducer } from './reducer';\n\nconst createMessageQuery = (\n channel: SendbirdGroupChannel,\n creator?: UseGroupChannelMessagesOptions['queryCreator'],\n) => {\n if (creator) return creator();\n return channel.createPreviousMessageListQuery({\n limit: 100,\n reverse: true,\n });\n};\n\nconst HOOK_NAME = 'useGroupChannelMessagesWithQuery';\nexport const useGroupChannelMessagesWithQuery: UseGroupChannelMessages = (sdk, channel, userId, options) => {\n const queryRef = useRef<SendbirdPreviousMessageListQuery>();\n\n const forceUpdate = useForceUpdate();\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 } = useGroupChannelMessagesReducer(userId, options?.sortComparator);\n\n const channelMarkAsRead = async () => {\n try {\n await confirmAndMarkAsRead([channel]);\n } catch (e) {\n Logger.warn(`[${HOOK_NAME}/channelMarkAsRead]`, e);\n }\n };\n\n const init = useCallback(\n async (uid?: string) => {\n if (uid) {\n queryRef.current = createMessageQuery(channel, options?.queryCreator);\n channelMarkAsRead().catch();\n if (queryRef.current?.hasNext) {\n const list = await queryRef.current?.load();\n updateMessages(list, true, sdk.currentUser.userId);\n }\n updateNextMessages([], true, sdk.currentUser.userId);\n }\n },\n [sdk, channel.url, options?.queryCreator],\n );\n\n const channelUpdater = (channel: SendbirdBaseChannel) => {\n if (channel.isGroupChannel() && !isDifferentChannel(channel, channel)) {\n forceUpdate();\n }\n };\n\n useChannelHandler(sdk, HOOK_NAME, {\n // Messages\n onMessageReceived(eventChannel, message) {\n if (isDifferentChannel(channel, eventChannel)) return;\n channelMarkAsRead();\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 onChannelHidden: channelUpdater,\n onChannelMemberCountChanged(channels) {\n const foundChannel = channels.find((c) => !isDifferentChannel(c, channel));\n if (foundChannel) channelUpdater(foundChannel);\n },\n onChannelDeleted(channelUrl: string) {\n if (channel.url === channelUrl) options?.onChannelDeleted?.();\n },\n // Users\n onOperatorUpdated: channelUpdater,\n onUserLeft: channelUpdater,\n // onUserEntered: channelUpdater,\n // onUserExited: channelUpdater,\n onUserJoined: 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\n useAsyncEffect(async () => {\n updateLoading(true);\n await init(userId);\n updateLoading(false);\n }, [init, userId]);\n\n const refresh: ReturnType<UseGroupChannelMessages>['refresh'] = useCallback(async () => {\n updateRefreshing(true);\n await init(userId);\n updateRefreshing(false);\n }, [init, userId]);\n\n const prev: ReturnType<UseGroupChannelMessages>['prev'] = useCallback(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<UseGroupChannelMessages>['next'] = useCallback(async () => {\n if (nextMessages.length > 0) {\n updateMessages(nextMessages, false, sdk.currentUser.userId);\n updateNextMessages([], true, sdk.currentUser.userId);\n }\n }, [nextMessages.length]);\n\n const sendUserMessage: ReturnType<UseGroupChannelMessages>['sendUserMessage'] = useCallback(\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) => {\n reject(err);\n });\n });\n },\n [channel],\n );\n const sendFileMessage: ReturnType<UseGroupChannelMessages>['sendFileMessage'] = useCallback(\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) => {\n reject(err);\n });\n });\n },\n [channel],\n );\n const updateUserMessage: ReturnType<UseGroupChannelMessages>['updateUserMessage'] = useCallback(\n async (messageId, params) => {\n const updatedMessage = await channel.updateUserMessage(messageId, params);\n updateMessages([updatedMessage], false, sdk.currentUser.userId);\n return updatedMessage;\n },\n [channel],\n );\n const updateFileMessage: ReturnType<UseGroupChannelMessages>['updateFileMessage'] = useCallback(\n async (messageId, params) => {\n const updatedMessage = await channel.updateFileMessage(messageId, params);\n updateMessages([updatedMessage], false, sdk.currentUser.userId);\n return updatedMessage;\n },\n [channel],\n );\n const resendMessage: ReturnType<UseGroupChannelMessages>['resendMessage'] = useCallback(\n 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 [channel],\n );\n const deleteMessage: ReturnType<UseGroupChannelMessages>['deleteMessage'] = useCallback(\n 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 [channel],\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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"}
@@ -13,10 +13,10 @@ const useAppFeatures = sdk => {
13
13
  applicationAttributes = []
14
14
  } = sdk.appInfo ?? {};
15
15
  return {
16
- deliveryReceiptEnabled: Boolean(premiumFeatureList.includes(_uikitUtils.PremiumFeatures.delivery_receipt)),
17
- broadcastChannelEnabled: Boolean(applicationAttributes.includes(_uikitUtils.ApplicationAttributes.allow_broadcast_channel)),
18
- superGroupChannelEnabled: Boolean(applicationAttributes.includes(_uikitUtils.ApplicationAttributes.allow_super_group_channel)),
19
- reactionEnabled: Boolean(applicationAttributes.includes(_uikitUtils.ApplicationAttributes.reactions))
16
+ deliveryReceiptEnabled: premiumFeatureList.includes(_uikitUtils.PremiumFeatures.delivery_receipt),
17
+ broadcastChannelEnabled: applicationAttributes.includes(_uikitUtils.ApplicationAttributes.allow_broadcast_channel),
18
+ superGroupChannelEnabled: applicationAttributes.includes(_uikitUtils.ApplicationAttributes.allow_super_group_channel),
19
+ reactionEnabled: applicationAttributes.includes(_uikitUtils.ApplicationAttributes.reactions)
20
20
  };
21
21
  };
22
22
 
@@ -1 +1 @@
1
- {"version":3,"names":["useAppFeatures","sdk","premiumFeatureList","applicationAttributes","appInfo","deliveryReceiptEnabled","Boolean","includes","PremiumFeatures","delivery_receipt","broadcastChannelEnabled","ApplicationAttributes","allow_broadcast_channel","superGroupChannelEnabled","allow_super_group_channel","reactionEnabled","reactions"],"sources":["useAppFeatures.ts"],"sourcesContent":["import { ApplicationAttributes, PremiumFeatures, SendbirdChatSDK } from '@sendbird/uikit-utils';\n\nexport const useAppFeatures = (sdk: SendbirdChatSDK) => {\n const { premiumFeatureList = [], applicationAttributes = [] } = sdk.appInfo ?? {};\n return {\n deliveryReceiptEnabled: Boolean(premiumFeatureList.includes(PremiumFeatures.delivery_receipt)),\n broadcastChannelEnabled: Boolean(applicationAttributes.includes(ApplicationAttributes.allow_broadcast_channel)),\n superGroupChannelEnabled: Boolean(applicationAttributes.includes(ApplicationAttributes.allow_super_group_channel)),\n reactionEnabled: Boolean(applicationAttributes.includes(ApplicationAttributes.reactions)),\n };\n};\n"],"mappings":";;;;;;;AAAA;;AAEO,MAAMA,cAAc,GAAIC,GAAD,IAA0B;EACtD,MAAM;IAAEC,kBAAkB,GAAG,EAAvB;IAA2BC,qBAAqB,GAAG;EAAnD,IAA0DF,GAAG,CAACG,OAAJ,IAAe,EAA/E;EACA,OAAO;IACLC,sBAAsB,EAAEC,OAAO,CAACJ,kBAAkB,CAACK,QAAnB,CAA4BC,2BAAA,CAAgBC,gBAA5C,CAAD,CAD1B;IAELC,uBAAuB,EAAEJ,OAAO,CAACH,qBAAqB,CAACI,QAAtB,CAA+BI,iCAAA,CAAsBC,uBAArD,CAAD,CAF3B;IAGLC,wBAAwB,EAAEP,OAAO,CAACH,qBAAqB,CAACI,QAAtB,CAA+BI,iCAAA,CAAsBG,yBAArD,CAAD,CAH5B;IAILC,eAAe,EAAET,OAAO,CAACH,qBAAqB,CAACI,QAAtB,CAA+BI,iCAAA,CAAsBK,SAArD,CAAD;EAJnB,CAAP;AAMD,CARM"}
1
+ {"version":3,"names":["useAppFeatures","sdk","premiumFeatureList","applicationAttributes","appInfo","deliveryReceiptEnabled","includes","PremiumFeatures","delivery_receipt","broadcastChannelEnabled","ApplicationAttributes","allow_broadcast_channel","superGroupChannelEnabled","allow_super_group_channel","reactionEnabled","reactions"],"sources":["useAppFeatures.ts"],"sourcesContent":["import { ApplicationAttributes, PremiumFeatures, SendbirdChatSDK } from '@sendbird/uikit-utils';\n\nexport const useAppFeatures = (sdk: SendbirdChatSDK) => {\n const { premiumFeatureList = [], applicationAttributes = [] } = sdk.appInfo ?? {};\n return {\n deliveryReceiptEnabled: premiumFeatureList.includes(PremiumFeatures.delivery_receipt),\n broadcastChannelEnabled: applicationAttributes.includes(ApplicationAttributes.allow_broadcast_channel),\n superGroupChannelEnabled: applicationAttributes.includes(ApplicationAttributes.allow_super_group_channel),\n reactionEnabled: applicationAttributes.includes(ApplicationAttributes.reactions),\n };\n};\n"],"mappings":";;;;;;;AAAA;;AAEO,MAAMA,cAAc,GAAIC,GAAD,IAA0B;EACtD,MAAM;IAAEC,kBAAkB,GAAG,EAAvB;IAA2BC,qBAAqB,GAAG;EAAnD,IAA0DF,GAAG,CAACG,OAAJ,IAAe,EAA/E;EACA,OAAO;IACLC,sBAAsB,EAAEH,kBAAkB,CAACI,QAAnB,CAA4BC,2BAAA,CAAgBC,gBAA5C,CADnB;IAELC,uBAAuB,EAAEN,qBAAqB,CAACG,QAAtB,CAA+BI,iCAAA,CAAsBC,uBAArD,CAFpB;IAGLC,wBAAwB,EAAET,qBAAqB,CAACG,QAAtB,CAA+BI,iCAAA,CAAsBG,yBAArD,CAHrB;IAILC,eAAe,EAAEX,qBAAqB,CAACG,QAAtB,CAA+BI,iCAAA,CAAsBK,SAArD;EAJZ,CAAP;AAMD,CARM"}
@@ -39,6 +39,7 @@ const useMessageOutgoingStatus = (sdk, channel, message) => {
39
39
  if (message.sendingStatus === 'failed') return 'FAILED';
40
40
  }
41
41
 
42
+ if (channel.isBroadcast || channel.isSuper) return 'NONE';
42
43
  if (channel.getUnreadMemberCount(message) === 0) return 'READ';
43
44
 
44
45
  if (features.deliveryReceiptEnabled) {
@@ -1 +1 @@
1
- {"version":3,"names":["HOOK_NAME","useMessageOutgoingStatus","sdk","channel","message","features","useAppFeatures","forceUpdate","useForceUpdate","currentUser","uniqId","useUniqId","useChannelHandler","onUndeliveredMemberStatusUpdated","eventChannel","isDifferentChannel","isMyMessage","userId","onUnreadMemberStatusUpdated","sendingStatus","getUnreadMemberCount","deliveryReceiptEnabled","getUndeliveredMemberCount"],"sources":["useMessageOutgoingStatus.ts"],"sourcesContent":["import type { SendbirdChatSDK, SendbirdGroupChannel, SendbirdMessage } from '@sendbird/uikit-utils';\nimport { isDifferentChannel, isMyMessage, useForceUpdate, useUniqId } from '@sendbird/uikit-utils';\n\nimport { useChannelHandler } from '../handler/useChannelHandler';\nimport { useAppFeatures } from './useAppFeatures';\n\nconst HOOK_NAME = 'useMessageOutgoingStatus';\n\nexport type SBUOutgoingStatus = 'NONE' | 'PENDING' | 'FAILED' | 'UNDELIVERED' | 'DELIVERED' | 'UNREAD' | 'READ';\n\nexport const useMessageOutgoingStatus = (\n sdk: SendbirdChatSDK,\n channel: SendbirdGroupChannel,\n message?: SendbirdMessage | null,\n): SBUOutgoingStatus => {\n const features = useAppFeatures(sdk);\n const forceUpdate = useForceUpdate();\n const currentUser = sdk.currentUser;\n\n const uniqId = useUniqId(HOOK_NAME);\n useChannelHandler(sdk, `${HOOK_NAME}_${uniqId}`, {\n onUndeliveredMemberStatusUpdated(eventChannel) {\n if (isDifferentChannel(channel, eventChannel)) return;\n if (!isMyMessage(message, currentUser?.userId)) return;\n\n forceUpdate();\n },\n onUnreadMemberStatusUpdated(eventChannel) {\n if (isDifferentChannel(channel, eventChannel)) return;\n if (!isMyMessage(message, currentUser?.userId)) return;\n\n forceUpdate();\n },\n });\n\n if (!message) return 'NONE';\n\n if ('sendingStatus' in message) {\n if (message.sendingStatus === 'pending') return 'PENDING';\n if (message.sendingStatus === 'failed') return 'FAILED';\n }\n\n if (channel.getUnreadMemberCount(message) === 0) return 'READ';\n\n if (features.deliveryReceiptEnabled) {\n if (channel.getUndeliveredMemberCount(message) === 0) return 'DELIVERED';\n return 'UNDELIVERED';\n }\n\n return 'UNREAD';\n};\n"],"mappings":";;;;;;;AACA;;AAEA;;AACA;;AAEA,MAAMA,SAAS,GAAG,0BAAlB;;AAIO,MAAMC,wBAAwB,GAAG,CACtCC,GADsC,EAEtCC,OAFsC,EAGtCC,OAHsC,KAIhB;EACtB,MAAMC,QAAQ,GAAG,IAAAC,8BAAA,EAAeJ,GAAf,CAAjB;EACA,MAAMK,WAAW,GAAG,IAAAC,0BAAA,GAApB;EACA,MAAMC,WAAW,GAAGP,GAAG,CAACO,WAAxB;EAEA,MAAMC,MAAM,GAAG,IAAAC,qBAAA,EAAUX,SAAV,CAAf;EACA,IAAAY,oCAAA,EAAkBV,GAAlB,EAAwB,GAAEF,SAAU,IAAGU,MAAO,EAA9C,EAAiD;IAC/CG,gCAAgC,CAACC,YAAD,EAAe;MAC7C,IAAI,IAAAC,8BAAA,EAAmBZ,OAAnB,EAA4BW,YAA5B,CAAJ,EAA+C;MAC/C,IAAI,CAAC,IAAAE,uBAAA,EAAYZ,OAAZ,EAAqBK,WAArB,aAAqBA,WAArB,uBAAqBA,WAAW,CAAEQ,MAAlC,CAAL,EAAgD;MAEhDV,WAAW;IACZ,CAN8C;;IAO/CW,2BAA2B,CAACJ,YAAD,EAAe;MACxC,IAAI,IAAAC,8BAAA,EAAmBZ,OAAnB,EAA4BW,YAA5B,CAAJ,EAA+C;MAC/C,IAAI,CAAC,IAAAE,uBAAA,EAAYZ,OAAZ,EAAqBK,WAArB,aAAqBA,WAArB,uBAAqBA,WAAW,CAAEQ,MAAlC,CAAL,EAAgD;MAEhDV,WAAW;IACZ;;EAZ8C,CAAjD;EAeA,IAAI,CAACH,OAAL,EAAc,OAAO,MAAP;;EAEd,IAAI,mBAAmBA,OAAvB,EAAgC;IAC9B,IAAIA,OAAO,CAACe,aAAR,KAA0B,SAA9B,EAAyC,OAAO,SAAP;IACzC,IAAIf,OAAO,CAACe,aAAR,KAA0B,QAA9B,EAAwC,OAAO,QAAP;EACzC;;EAED,IAAIhB,OAAO,CAACiB,oBAAR,CAA6BhB,OAA7B,MAA0C,CAA9C,EAAiD,OAAO,MAAP;;EAEjD,IAAIC,QAAQ,CAACgB,sBAAb,EAAqC;IACnC,IAAIlB,OAAO,CAACmB,yBAAR,CAAkClB,OAAlC,MAA+C,CAAnD,EAAsD,OAAO,WAAP;IACtD,OAAO,aAAP;EACD;;EAED,OAAO,QAAP;AACD,CAxCM"}
1
+ {"version":3,"names":["HOOK_NAME","useMessageOutgoingStatus","sdk","channel","message","features","useAppFeatures","forceUpdate","useForceUpdate","currentUser","uniqId","useUniqId","useChannelHandler","onUndeliveredMemberStatusUpdated","eventChannel","isDifferentChannel","isMyMessage","userId","onUnreadMemberStatusUpdated","sendingStatus","isBroadcast","isSuper","getUnreadMemberCount","deliveryReceiptEnabled","getUndeliveredMemberCount"],"sources":["useMessageOutgoingStatus.ts"],"sourcesContent":["import type { SendbirdChatSDK, SendbirdGroupChannel, SendbirdMessage } from '@sendbird/uikit-utils';\nimport { isDifferentChannel, isMyMessage, useForceUpdate, useUniqId } from '@sendbird/uikit-utils';\n\nimport { useChannelHandler } from '../handler/useChannelHandler';\nimport { useAppFeatures } from './useAppFeatures';\n\nconst HOOK_NAME = 'useMessageOutgoingStatus';\n\nexport type SBUOutgoingStatus = 'NONE' | 'PENDING' | 'FAILED' | 'UNDELIVERED' | 'DELIVERED' | 'UNREAD' | 'READ';\n\nexport const useMessageOutgoingStatus = (\n sdk: SendbirdChatSDK,\n channel: SendbirdGroupChannel,\n message?: SendbirdMessage | null,\n): SBUOutgoingStatus => {\n const features = useAppFeatures(sdk);\n const forceUpdate = useForceUpdate();\n const currentUser = sdk.currentUser;\n\n const uniqId = useUniqId(HOOK_NAME);\n useChannelHandler(sdk, `${HOOK_NAME}_${uniqId}`, {\n onUndeliveredMemberStatusUpdated(eventChannel) {\n if (isDifferentChannel(channel, eventChannel)) return;\n if (!isMyMessage(message, currentUser?.userId)) return;\n\n forceUpdate();\n },\n onUnreadMemberStatusUpdated(eventChannel) {\n if (isDifferentChannel(channel, eventChannel)) return;\n if (!isMyMessage(message, currentUser?.userId)) return;\n\n forceUpdate();\n },\n });\n\n if (!message) return 'NONE';\n\n if ('sendingStatus' in message) {\n if (message.sendingStatus === 'pending') return 'PENDING';\n if (message.sendingStatus === 'failed') return 'FAILED';\n }\n\n if (channel.isBroadcast || channel.isSuper) return 'NONE';\n\n if (channel.getUnreadMemberCount(message) === 0) return 'READ';\n\n if (features.deliveryReceiptEnabled) {\n if (channel.getUndeliveredMemberCount(message) === 0) return 'DELIVERED';\n return 'UNDELIVERED';\n }\n\n return 'UNREAD';\n};\n"],"mappings":";;;;;;;AACA;;AAEA;;AACA;;AAEA,MAAMA,SAAS,GAAG,0BAAlB;;AAIO,MAAMC,wBAAwB,GAAG,CACtCC,GADsC,EAEtCC,OAFsC,EAGtCC,OAHsC,KAIhB;EACtB,MAAMC,QAAQ,GAAG,IAAAC,8BAAA,EAAeJ,GAAf,CAAjB;EACA,MAAMK,WAAW,GAAG,IAAAC,0BAAA,GAApB;EACA,MAAMC,WAAW,GAAGP,GAAG,CAACO,WAAxB;EAEA,MAAMC,MAAM,GAAG,IAAAC,qBAAA,EAAUX,SAAV,CAAf;EACA,IAAAY,oCAAA,EAAkBV,GAAlB,EAAwB,GAAEF,SAAU,IAAGU,MAAO,EAA9C,EAAiD;IAC/CG,gCAAgC,CAACC,YAAD,EAAe;MAC7C,IAAI,IAAAC,8BAAA,EAAmBZ,OAAnB,EAA4BW,YAA5B,CAAJ,EAA+C;MAC/C,IAAI,CAAC,IAAAE,uBAAA,EAAYZ,OAAZ,EAAqBK,WAArB,aAAqBA,WAArB,uBAAqBA,WAAW,CAAEQ,MAAlC,CAAL,EAAgD;MAEhDV,WAAW;IACZ,CAN8C;;IAO/CW,2BAA2B,CAACJ,YAAD,EAAe;MACxC,IAAI,IAAAC,8BAAA,EAAmBZ,OAAnB,EAA4BW,YAA5B,CAAJ,EAA+C;MAC/C,IAAI,CAAC,IAAAE,uBAAA,EAAYZ,OAAZ,EAAqBK,WAArB,aAAqBA,WAArB,uBAAqBA,WAAW,CAAEQ,MAAlC,CAAL,EAAgD;MAEhDV,WAAW;IACZ;;EAZ8C,CAAjD;EAeA,IAAI,CAACH,OAAL,EAAc,OAAO,MAAP;;EAEd,IAAI,mBAAmBA,OAAvB,EAAgC;IAC9B,IAAIA,OAAO,CAACe,aAAR,KAA0B,SAA9B,EAAyC,OAAO,SAAP;IACzC,IAAIf,OAAO,CAACe,aAAR,KAA0B,QAA9B,EAAwC,OAAO,QAAP;EACzC;;EAED,IAAIhB,OAAO,CAACiB,WAAR,IAAuBjB,OAAO,CAACkB,OAAnC,EAA4C,OAAO,MAAP;EAE5C,IAAIlB,OAAO,CAACmB,oBAAR,CAA6BlB,OAA7B,MAA0C,CAA9C,EAAiD,OAAO,MAAP;;EAEjD,IAAIC,QAAQ,CAACkB,sBAAb,EAAqC;IACnC,IAAIpB,OAAO,CAACqB,yBAAR,CAAkCpB,OAAlC,MAA+C,CAAnD,EAAsD,OAAO,WAAP;IACtD,OAAO,aAAP;EACD;;EAED,OAAO,QAAP;AACD,CA1CM"}
@@ -24,7 +24,7 @@ const useTotalUnreadChannelCount = (sdk, params) => {
24
24
  setUnreadChannelCount(await sdk.groupChannel.getTotalUnreadChannelCount());
25
25
  }
26
26
  });
27
- return (0, _uikitUtils.truncatedBadgeCount)(unreadChannelCount, params === null || params === void 0 ? void 0 : params.maxCount);
27
+ return (0, _uikitUtils.truncatedCount)(unreadChannelCount, params === null || params === void 0 ? void 0 : params.maxCount);
28
28
  };
29
29
 
30
30
  exports.useTotalUnreadChannelCount = useTotalUnreadChannelCount;
@@ -1 +1 @@
1
- {"version":3,"names":["HOOK_NAME","useTotalUnreadChannelCount","sdk","params","id","useUniqId","unreadChannelCount","setUnreadChannelCount","useState","useAsyncEffect","groupChannel","getTotalUnreadChannelCount","useUserEventHandler","onTotalUnreadMessageCountUpdated","truncatedBadgeCount","maxCount"],"sources":["useTotalUnreadChannelCount.ts"],"sourcesContent":["import { useState } from 'react';\n\nimport type { SendbirdChatSDK } from '@sendbird/uikit-utils';\nimport { truncatedBadgeCount, useAsyncEffect } from '@sendbird/uikit-utils';\nimport { useUniqId } from '@sendbird/uikit-utils';\n\nimport { useUserEventHandler } from '../handler/useUserEventHandler';\n\ntype Params = {\n maxCount?: number;\n};\nconst HOOK_NAME = 'useTotalUnreadChannelCount';\nexport const useTotalUnreadChannelCount = (sdk: SendbirdChatSDK, params?: Params) => {\n const id = useUniqId(HOOK_NAME);\n const [unreadChannelCount, setUnreadChannelCount] = useState(0);\n\n useAsyncEffect(async () => {\n setUnreadChannelCount(await sdk.groupChannel.getTotalUnreadChannelCount());\n }, [sdk]);\n\n useUserEventHandler(sdk, HOOK_NAME + id, {\n onTotalUnreadMessageCountUpdated: async () => {\n setUnreadChannelCount(await sdk.groupChannel.getTotalUnreadChannelCount());\n },\n });\n\n return truncatedBadgeCount(unreadChannelCount, params?.maxCount);\n};\n"],"mappings":";;;;;;;AAAA;;AAGA;;AAGA;;AAKA,MAAMA,SAAS,GAAG,4BAAlB;;AACO,MAAMC,0BAA0B,GAAG,CAACC,GAAD,EAAuBC,MAAvB,KAA2C;EACnF,MAAMC,EAAE,GAAG,IAAAC,qBAAA,EAAUL,SAAV,CAAX;EACA,MAAM,CAACM,kBAAD,EAAqBC,qBAArB,IAA8C,IAAAC,eAAA,EAAS,CAAT,CAApD;EAEA,IAAAC,0BAAA,EAAe,YAAY;IACzBF,qBAAqB,CAAC,MAAML,GAAG,CAACQ,YAAJ,CAAiBC,0BAAjB,EAAP,CAArB;EACD,CAFD,EAEG,CAACT,GAAD,CAFH;EAIA,IAAAU,wCAAA,EAAoBV,GAApB,EAAyBF,SAAS,GAAGI,EAArC,EAAyC;IACvCS,gCAAgC,EAAE,YAAY;MAC5CN,qBAAqB,CAAC,MAAML,GAAG,CAACQ,YAAJ,CAAiBC,0BAAjB,EAAP,CAArB;IACD;EAHsC,CAAzC;EAMA,OAAO,IAAAG,+BAAA,EAAoBR,kBAApB,EAAwCH,MAAxC,aAAwCA,MAAxC,uBAAwCA,MAAM,CAAEY,QAAhD,CAAP;AACD,CAfM"}
1
+ {"version":3,"names":["HOOK_NAME","useTotalUnreadChannelCount","sdk","params","id","useUniqId","unreadChannelCount","setUnreadChannelCount","useState","useAsyncEffect","groupChannel","getTotalUnreadChannelCount","useUserEventHandler","onTotalUnreadMessageCountUpdated","truncatedCount","maxCount"],"sources":["useTotalUnreadChannelCount.ts"],"sourcesContent":["import { useState } from 'react';\n\nimport type { SendbirdChatSDK } from '@sendbird/uikit-utils';\nimport { truncatedCount, useAsyncEffect } from '@sendbird/uikit-utils';\nimport { useUniqId } from '@sendbird/uikit-utils';\n\nimport { useUserEventHandler } from '../handler/useUserEventHandler';\n\ntype Params = {\n maxCount?: number;\n};\nconst HOOK_NAME = 'useTotalUnreadChannelCount';\nexport const useTotalUnreadChannelCount = (sdk: SendbirdChatSDK, params?: Params) => {\n const id = useUniqId(HOOK_NAME);\n const [unreadChannelCount, setUnreadChannelCount] = useState(0);\n\n useAsyncEffect(async () => {\n setUnreadChannelCount(await sdk.groupChannel.getTotalUnreadChannelCount());\n }, [sdk]);\n\n useUserEventHandler(sdk, HOOK_NAME + id, {\n onTotalUnreadMessageCountUpdated: async () => {\n setUnreadChannelCount(await sdk.groupChannel.getTotalUnreadChannelCount());\n },\n });\n\n return truncatedCount(unreadChannelCount, params?.maxCount);\n};\n"],"mappings":";;;;;;;AAAA;;AAGA;;AAGA;;AAKA,MAAMA,SAAS,GAAG,4BAAlB;;AACO,MAAMC,0BAA0B,GAAG,CAACC,GAAD,EAAuBC,MAAvB,KAA2C;EACnF,MAAMC,EAAE,GAAG,IAAAC,qBAAA,EAAUL,SAAV,CAAX;EACA,MAAM,CAACM,kBAAD,EAAqBC,qBAArB,IAA8C,IAAAC,eAAA,EAAS,CAAT,CAApD;EAEA,IAAAC,0BAAA,EAAe,YAAY;IACzBF,qBAAqB,CAAC,MAAML,GAAG,CAACQ,YAAJ,CAAiBC,0BAAjB,EAAP,CAArB;EACD,CAFD,EAEG,CAACT,GAAD,CAFH;EAIA,IAAAU,wCAAA,EAAoBV,GAApB,EAAyBF,SAAS,GAAGI,EAArC,EAAyC;IACvCS,gCAAgC,EAAE,YAAY;MAC5CN,qBAAqB,CAAC,MAAML,GAAG,CAACQ,YAAJ,CAAiBC,0BAAjB,EAAP,CAArB;IACD;EAHsC,CAAzC;EAMA,OAAO,IAAAG,0BAAA,EAAeR,kBAAf,EAAmCH,MAAnC,aAAmCA,MAAnC,uBAAmCA,MAAM,CAAEY,QAA3C,CAAP;AACD,CAfM"}
@@ -30,7 +30,7 @@ const useTotalUnreadMessageCount = (sdk, options) => {
30
30
  (0, _useUserEventHandler.useUserEventHandler)(sdk, `${HOOK_NAME}_${id}`, {
31
31
  onTotalUnreadMessageCountUpdated: totalCount => setUnreadMessageCount(totalCount)
32
32
  });
33
- return (0, _uikitUtils.truncatedBadgeCount)(unreadMessageCount, options === null || options === void 0 ? void 0 : options.maxCount);
33
+ return (0, _uikitUtils.truncatedCount)(unreadMessageCount, options === null || options === void 0 ? void 0 : options.maxCount);
34
34
  };
35
35
 
36
36
  exports.useTotalUnreadMessageCount = useTotalUnreadMessageCount;
@@ -1 +1 @@
1
- {"version":3,"names":["HOOK_NAME","useTotalUnreadMessageCount","sdk","options","id","useUniqId","unreadMessageCount","setUnreadMessageCount","useState","useAsyncEffect","unreadCount","groupChannel","getTotalUnreadMessageCount","superChannelFilter","SuperChannelFilter","ALL","params","channelCustomTypesFilter","useUserEventHandler","onTotalUnreadMessageCountUpdated","totalCount","truncatedBadgeCount","maxCount"],"sources":["useTotalUnreadMessageCount.ts"],"sourcesContent":["import { useState } from 'react';\n\nimport { SuperChannelFilter, TotalUnreadMessageCountParams } from '@sendbird/chat/groupChannel';\nimport type { SendbirdChatSDK } from '@sendbird/uikit-utils';\nimport { truncatedBadgeCount, useAsyncEffect, useUniqId } from '@sendbird/uikit-utils';\n\nimport { useUserEventHandler } from '../handler/useUserEventHandler';\n\ntype Options = {\n params?: TotalUnreadMessageCountParams;\n maxCount?: number;\n};\n\nconst HOOK_NAME = 'useTotalUnreadMessageCount';\nexport const useTotalUnreadMessageCount = (sdk: SendbirdChatSDK, options?: Options) => {\n const id = useUniqId(HOOK_NAME);\n const [unreadMessageCount, setUnreadMessageCount] = useState(0);\n\n useAsyncEffect(async () => {\n const unreadCount = await sdk.groupChannel.getTotalUnreadMessageCount({\n superChannelFilter: SuperChannelFilter.ALL,\n ...options?.params,\n });\n setUnreadMessageCount(unreadCount);\n }, [sdk, options?.params?.superChannelFilter, options?.params?.channelCustomTypesFilter]);\n\n useUserEventHandler(sdk, `${HOOK_NAME}_${id}`, {\n onTotalUnreadMessageCountUpdated: (totalCount: number) => setUnreadMessageCount(totalCount),\n });\n\n return truncatedBadgeCount(unreadMessageCount, options?.maxCount);\n};\n"],"mappings":";;;;;;;AAAA;;AAEA;;AAEA;;AAEA;;AAOA,MAAMA,SAAS,GAAG,4BAAlB;;AACO,MAAMC,0BAA0B,GAAG,CAACC,GAAD,EAAuBC,OAAvB,KAA6C;EAAA;;EACrF,MAAMC,EAAE,GAAG,IAAAC,qBAAA,EAAUL,SAAV,CAAX;EACA,MAAM,CAACM,kBAAD,EAAqBC,qBAArB,IAA8C,IAAAC,eAAA,EAAS,CAAT,CAApD;EAEA,IAAAC,0BAAA,EAAe,YAAY;IACzB,MAAMC,WAAW,GAAG,MAAMR,GAAG,CAACS,YAAJ,CAAiBC,0BAAjB,CAA4C;MACpEC,kBAAkB,EAAEC,gCAAA,CAAmBC,GAD6B;MAEpE,IAAGZ,OAAH,aAAGA,OAAH,uBAAGA,OAAO,CAAEa,MAAZ;IAFoE,CAA5C,CAA1B;IAIAT,qBAAqB,CAACG,WAAD,CAArB;EACD,CAND,EAMG,CAACR,GAAD,EAAMC,OAAN,aAAMA,OAAN,0CAAMA,OAAO,CAAEa,MAAf,oDAAM,gBAAiBH,kBAAvB,EAA2CV,OAA3C,aAA2CA,OAA3C,2CAA2CA,OAAO,CAAEa,MAApD,qDAA2C,iBAAiBC,wBAA5D,CANH;EAQA,IAAAC,wCAAA,EAAoBhB,GAApB,EAA0B,GAAEF,SAAU,IAAGI,EAAG,EAA5C,EAA+C;IAC7Ce,gCAAgC,EAAGC,UAAD,IAAwBb,qBAAqB,CAACa,UAAD;EADlC,CAA/C;EAIA,OAAO,IAAAC,+BAAA,EAAoBf,kBAApB,EAAwCH,OAAxC,aAAwCA,OAAxC,uBAAwCA,OAAO,CAAEmB,QAAjD,CAAP;AACD,CAjBM"}
1
+ {"version":3,"names":["HOOK_NAME","useTotalUnreadMessageCount","sdk","options","id","useUniqId","unreadMessageCount","setUnreadMessageCount","useState","useAsyncEffect","unreadCount","groupChannel","getTotalUnreadMessageCount","superChannelFilter","SuperChannelFilter","ALL","params","channelCustomTypesFilter","useUserEventHandler","onTotalUnreadMessageCountUpdated","totalCount","truncatedCount","maxCount"],"sources":["useTotalUnreadMessageCount.ts"],"sourcesContent":["import { useState } from 'react';\n\nimport { SuperChannelFilter, TotalUnreadMessageCountParams } from '@sendbird/chat/groupChannel';\nimport type { SendbirdChatSDK } from '@sendbird/uikit-utils';\nimport { truncatedCount, useAsyncEffect, useUniqId } from '@sendbird/uikit-utils';\n\nimport { useUserEventHandler } from '../handler/useUserEventHandler';\n\ntype Options = {\n params?: TotalUnreadMessageCountParams;\n maxCount?: number;\n};\n\nconst HOOK_NAME = 'useTotalUnreadMessageCount';\nexport const useTotalUnreadMessageCount = (sdk: SendbirdChatSDK, options?: Options) => {\n const id = useUniqId(HOOK_NAME);\n const [unreadMessageCount, setUnreadMessageCount] = useState(0);\n\n useAsyncEffect(async () => {\n const unreadCount = await sdk.groupChannel.getTotalUnreadMessageCount({\n superChannelFilter: SuperChannelFilter.ALL,\n ...options?.params,\n });\n setUnreadMessageCount(unreadCount);\n }, [sdk, options?.params?.superChannelFilter, options?.params?.channelCustomTypesFilter]);\n\n useUserEventHandler(sdk, `${HOOK_NAME}_${id}`, {\n onTotalUnreadMessageCountUpdated: (totalCount: number) => setUnreadMessageCount(totalCount),\n });\n\n return truncatedCount(unreadMessageCount, options?.maxCount);\n};\n"],"mappings":";;;;;;;AAAA;;AAEA;;AAEA;;AAEA;;AAOA,MAAMA,SAAS,GAAG,4BAAlB;;AACO,MAAMC,0BAA0B,GAAG,CAACC,GAAD,EAAuBC,OAAvB,KAA6C;EAAA;;EACrF,MAAMC,EAAE,GAAG,IAAAC,qBAAA,EAAUL,SAAV,CAAX;EACA,MAAM,CAACM,kBAAD,EAAqBC,qBAArB,IAA8C,IAAAC,eAAA,EAAS,CAAT,CAApD;EAEA,IAAAC,0BAAA,EAAe,YAAY;IACzB,MAAMC,WAAW,GAAG,MAAMR,GAAG,CAACS,YAAJ,CAAiBC,0BAAjB,CAA4C;MACpEC,kBAAkB,EAAEC,gCAAA,CAAmBC,GAD6B;MAEpE,IAAGZ,OAAH,aAAGA,OAAH,uBAAGA,OAAO,CAAEa,MAAZ;IAFoE,CAA5C,CAA1B;IAIAT,qBAAqB,CAACG,WAAD,CAArB;EACD,CAND,EAMG,CAACR,GAAD,EAAMC,OAAN,aAAMA,OAAN,0CAAMA,OAAO,CAAEa,MAAf,oDAAM,gBAAiBH,kBAAvB,EAA2CV,OAA3C,aAA2CA,OAA3C,2CAA2CA,OAAO,CAAEa,MAApD,qDAA2C,iBAAiBC,wBAA5D,CANH;EAQA,IAAAC,wCAAA,EAAoBhB,GAApB,EAA0B,GAAEF,SAAU,IAAGI,EAAG,EAA5C,EAA+C;IAC7Ce,gCAAgC,EAAGC,UAAD,IAAwBb,qBAAqB,CAACa,UAAD;EADlC,CAA/C;EAIA,OAAO,IAAAC,0BAAA,EAAef,kBAAf,EAAmCH,OAAnC,aAAmCA,OAAnC,uBAAmCA,OAAO,CAAEmB,QAA5C,CAAP;AACD,CAjBM"}
@@ -47,12 +47,28 @@ const useUserList = (sdk, options) => {
47
47
  if (options !== null && options !== void 0 && options.sortComparator) return users.sort(options.sortComparator);
48
48
  return users;
49
49
  }, [users, options === null || options === void 0 ? void 0 : options.sortComparator]);
50
+ const upsertUser = (0, _uikitUtils.useFreshCallback)(user => {
51
+ setUsers(_ref => {
52
+ let [...draft] = _ref;
53
+ const userIdx = draft.findIndex(it => it.userId === user.userId);
54
+ if (userIdx > -1) draft[userIdx] = user;else draft.push(user);
55
+ return draft;
56
+ });
57
+ });
58
+ const deleteUser = (0, _uikitUtils.useFreshCallback)(userId => {
59
+ setUsers(_ref2 => {
60
+ let [...draft] = _ref2;
61
+ const userIdx = draft.findIndex(it => it.userId === userId);
62
+ if (userIdx > -1) draft.splice(userIdx, 1);
63
+ return draft;
64
+ });
65
+ });
50
66
 
51
67
  const updateUsers = (users, clearPrev) => {
52
68
  if (clearPrev) setUsers(users);else setUsers(prev => prev.concat(users));
53
69
  };
54
70
 
55
- const init = (0, _react.useCallback)(async () => {
71
+ const init = (0, _uikitUtils.useFreshCallback)(async () => {
56
72
  var _query$current;
57
73
 
58
74
  query.current = createUserQuery(sdk, options === null || options === void 0 ? void 0 : options.queryCreator);
@@ -60,15 +76,15 @@ const useUserList = (sdk, options) => {
60
76
  if ((_query$current = query.current) !== null && _query$current !== void 0 && _query$current.hasNext) {
61
77
  var _query$current2;
62
78
 
63
- const users = await ((_query$current2 = query.current) === null || _query$current2 === void 0 ? void 0 : _query$current2.next().catch(err => {
64
- _uikitUtils.Logger.error(error);
79
+ const users = await ((_query$current2 = query.current) === null || _query$current2 === void 0 ? void 0 : _query$current2.next().catch(e => {
80
+ _uikitUtils.Logger.error(e);
65
81
 
66
- if (err.code === _uikitUtils.SBErrorCode.NON_AUTHORIZED) _uikitUtils.Logger.warn(_uikitUtils.SBErrorMessage.ACL);
67
- throw error;
82
+ if (e.code === _uikitUtils.SBErrorCode.NON_AUTHORIZED) _uikitUtils.Logger.warn(_uikitUtils.SBErrorMessage.ACL);
83
+ throw e;
68
84
  }));
69
85
  updateUsers(users, true);
70
86
  }
71
- }, [sdk, options === null || options === void 0 ? void 0 : options.queryCreator]);
87
+ });
72
88
  (0, _uikitUtils.useAsyncEffect)(async () => {
73
89
  setLoading(true);
74
90
  setError(null);
@@ -80,8 +96,8 @@ const useUserList = (sdk, options) => {
80
96
  } finally {
81
97
  setLoading(false);
82
98
  }
83
- }, [init]);
84
- const refresh = (0, _react.useCallback)(async () => {
99
+ }, []);
100
+ const refresh = (0, _uikitUtils.useFreshCallback)(async () => {
85
101
  setRefreshing(true);
86
102
  setError(null);
87
103
 
@@ -92,24 +108,26 @@ const useUserList = (sdk, options) => {
92
108
  } finally {
93
109
  setRefreshing(false);
94
110
  }
95
- }, [init]);
96
- const next = (0, _react.useCallback)(async () => {
111
+ });
112
+ const next = (0, _uikitUtils.useFreshCallback)(async () => {
97
113
  var _query$current3;
98
114
 
99
115
  if (query.current && (_query$current3 = query.current) !== null && _query$current3 !== void 0 && _query$current3.hasNext) {
100
- const nextUsers = await query.current.next().catch(err => {
101
- _uikitUtils.Logger.error(error);
116
+ const nextUsers = await query.current.next().catch(e => {
117
+ _uikitUtils.Logger.error(e);
102
118
 
103
- if (err.code === _uikitUtils.SBErrorCode.NON_AUTHORIZED) _uikitUtils.Logger.warn(_uikitUtils.SBErrorMessage.ACL);
104
- throw error;
119
+ if (e.code === _uikitUtils.SBErrorCode.NON_AUTHORIZED) _uikitUtils.Logger.warn(_uikitUtils.SBErrorMessage.ACL);
120
+ throw e;
105
121
  });
106
122
  updateUsers(nextUsers, false);
107
123
  }
108
- }, []);
124
+ });
109
125
  return {
110
126
  loading,
111
127
  error,
112
128
  users: sortedUsers,
129
+ upsertUser,
130
+ deleteUser,
113
131
  next,
114
132
  refreshing,
115
133
  refresh
@@ -1 +1 @@
1
- {"version":3,"names":["createUserQuery","sdk","queryCreator","createApplicationUserListQuery","useUserList","options","query","useRef","error","setError","useState","loading","setLoading","refreshing","setRefreshing","users","setUsers","sortedUsers","useMemo","sortComparator","sort","updateUsers","clearPrev","prev","concat","init","useCallback","current","hasNext","next","catch","err","Logger","code","SBErrorCode","NON_AUTHORIZED","warn","SBErrorMessage","ACL","useAsyncEffect","e","refresh","nextUsers"],"sources":["useUserList.ts"],"sourcesContent":["import { useCallback, useMemo, useRef, useState } from 'react';\n\nimport type { Optional, SendbirdChatSDK, SendbirdUser } from '@sendbird/uikit-utils';\nimport { Logger, SBErrorCode, SBErrorMessage, useAsyncEffect } from '@sendbird/uikit-utils';\n\nimport type { CustomQueryInterface, UseUserListOptions, UseUserListReturn } from '../types';\n\nconst createUserQuery = <User>(sdk: SendbirdChatSDK, queryCreator?: UseUserListOptions<User>['queryCreator']) => {\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<QueriedUser>,\n QueriedUser = Options['queryCreator'] extends Optional<() => CustomQueryInterface<infer User>> ? User : SendbirdUser,\n>(\n sdk: SendbirdChatSDK,\n options?: Options,\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 updateUsers = (users: QueriedUser[], clearPrev: boolean) => {\n if (clearPrev) setUsers(users);\n else setUsers((prev) => prev.concat(users));\n };\n\n const init = useCallback(async () => {\n query.current = createUserQuery<QueriedUser>(sdk, options?.queryCreator);\n if (query.current?.hasNext) {\n const users = await query.current?.next().catch((err) => {\n Logger.error(error);\n if (err.code === SBErrorCode.NON_AUTHORIZED) Logger.warn(SBErrorMessage.ACL);\n throw error;\n });\n updateUsers(users, true);\n }\n }, [sdk, options?.queryCreator]);\n\n useAsyncEffect(async () => {\n setLoading(true);\n setError(null);\n try {\n await init();\n } catch (e) {\n setError(e);\n } finally {\n setLoading(false);\n }\n }, [init]);\n\n const refresh = useCallback(async () => {\n setRefreshing(true);\n setError(null);\n try {\n await init();\n } catch (e) {\n setError(e);\n } finally {\n setRefreshing(false);\n }\n }, [init]);\n\n const next = useCallback(async () => {\n if (query.current && query.current?.hasNext) {\n const nextUsers = await query.current.next().catch((err) => {\n Logger.error(error);\n if (err.code === SBErrorCode.NON_AUTHORIZED) Logger.warn(SBErrorMessage.ACL);\n throw error;\n });\n updateUsers(nextUsers, false);\n }\n }, []);\n\n return {\n loading,\n error,\n users: sortedUsers,\n next,\n refreshing,\n refresh,\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["createUserQuery","sdk","queryCreator","createApplicationUserListQuery","useUserList","options","query","useRef","error","setError","useState","loading","setLoading","refreshing","setRefreshing","users","setUsers","sortedUsers","useMemo","sortComparator","sort","upsertUser","useFreshCallback","user","draft","userIdx","findIndex","it","userId","push","deleteUser","splice","updateUsers","clearPrev","prev","concat","init","current","hasNext","next","catch","e","Logger","code","SBErrorCode","NON_AUTHORIZED","warn","SBErrorMessage","ACL","useAsyncEffect","refresh","nextUsers"],"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<QueriedUser>,\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?: Options,\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 } 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 } 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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"}
@@ -33,6 +33,12 @@ Object.defineProperty(exports, "useConnectionHandler", {
33
33
  return _useConnectionHandler.useConnectionHandler;
34
34
  }
35
35
  });
36
+ Object.defineProperty(exports, "useGroupChannel", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _useGroupChannel.useGroupChannel;
40
+ }
41
+ });
36
42
  Object.defineProperty(exports, "useGroupChannelList", {
37
43
  enumerable: true,
38
44
  get: function () {
@@ -88,6 +94,8 @@ var _useGroupChannelMessages = require("./channel/useGroupChannelMessages");
88
94
 
89
95
  var _useActiveGroupChannel = require("./channel/useActiveGroupChannel");
90
96
 
97
+ var _useGroupChannel = require("./channel/useGroupChannel");
98
+
91
99
  var _useAppFeatures = require("./common/useAppFeatures");
92
100
 
93
101
  var _useMessageOutgoingStatus = require("./common/useMessageOutgoingStatus");
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export { useGroupChannelList } from './channel/useGroupChannelList';\nexport { useGroupChannelMessages } from './channel/useGroupChannelMessages';\nexport { useActiveGroupChannel } from './channel/useActiveGroupChannel';\n\nexport { useAppFeatures } from './common/useAppFeatures';\nexport { useMessageOutgoingStatus } from './common/useMessageOutgoingStatus';\nexport { usePushTrigger } from './common/usePushTrigger';\nexport { useTotalUnreadChannelCount } from './common/useTotalUnreadChannelCount';\nexport { useTotalUnreadMessageCount } from './common/useTotalUnreadMessageCount';\nexport { useUserList } from './common/useUserList';\n\nexport { useChannelHandler } from './handler/useChannelHandler';\nexport { useConnectionHandler } from './handler/useConnectionHandler';\nexport { useUserEventHandler } from './handler/useUserEventHandler';\n\nexport { CustomQuery } from './model/CustomQuery';\n\nexport type {\n UseGroupChannelList,\n UseGroupChannelListOptions,\n UseGroupChannelMessages,\n UseUserListOptions,\n UseGroupChannelMessagesOptions,\n UseUserListReturn,\n CustomQueryInterface,\n CustomBidirectionalQueryInterface,\n} from './types';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AAEA"}
1
+ {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export { useGroupChannelList } from './channel/useGroupChannelList';\nexport { useGroupChannelMessages } from './channel/useGroupChannelMessages';\nexport { useActiveGroupChannel } from './channel/useActiveGroupChannel';\nexport { useGroupChannel } from './channel/useGroupChannel';\n\nexport { useAppFeatures } from './common/useAppFeatures';\nexport { useMessageOutgoingStatus } from './common/useMessageOutgoingStatus';\nexport { usePushTrigger } from './common/usePushTrigger';\nexport { useTotalUnreadChannelCount } from './common/useTotalUnreadChannelCount';\nexport { useTotalUnreadMessageCount } from './common/useTotalUnreadMessageCount';\nexport { useUserList } from './common/useUserList';\n\nexport { useChannelHandler } from './handler/useChannelHandler';\nexport { useConnectionHandler } from './handler/useConnectionHandler';\nexport { useUserEventHandler } from './handler/useUserEventHandler';\n\nexport { CustomQuery } from './model/CustomQuery';\n\nexport type {\n UseGroupChannelList,\n UseGroupChannelListOptions,\n UseGroupChannelMessages,\n UseGroupChannelMessagesOptions,\n UseUserListOptions,\n UseUserListReturn,\n CustomQueryInterface,\n CustomBidirectionalQueryInterface,\n} from './types';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AAEA"}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type {\n SendbirdChatSDK,\n SendbirdError,\n SendbirdFileMessage,\n SendbirdFileMessageCreateParams,\n SendbirdGroupChannel,\n SendbirdGroupChannelCollection,\n SendbirdGroupChannelListQuery,\n SendbirdMessage,\n SendbirdMessageCollection,\n SendbirdPreviousMessageListQuery,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\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: SendbirdFileMessageCreateParams) => 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: SendbirdUserMessageCreateParams) => 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 * Activated channel\n * */\n activeChannel: SendbirdGroupChannel;\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 UseUserListReturn\n * @description interface for user list hook return value\n * */\nexport interface UseUserListReturn<User> {\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 * Fetch next users to state\n * @return {Promise<void>}\n * */\n next: () => Promise<void>;\n}\n\nexport type UseUserListOptions<User> = {\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 SendbirdGroupChannel,\n SendbirdGroupChannelCollection,\n SendbirdGroupChannelListQuery,\n SendbirdMessage,\n SendbirdMessageCollection,\n SendbirdPreviousMessageListQuery,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\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: SendbirdFileMessageCreateParams) => 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: SendbirdUserMessageCreateParams) => 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 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":""}