@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
@@ -1,7 +1,6 @@
1
1
  import { useCallback, useRef } from 'react';
2
2
  import { Logger, confirmAndMarkAsRead, isDifferentChannel, useAsyncEffect, useForceUpdate } from '@sendbird/uikit-utils';
3
3
  import { useChannelHandler } from '../../handler/useChannelHandler';
4
- import { useActiveGroupChannel } from '../useActiveGroupChannel';
5
4
  import { useGroupChannelMessagesReducer } from './reducer';
6
5
 
7
6
  const createMessageQuery = (channel, creator) => {
@@ -14,12 +13,7 @@ const createMessageQuery = (channel, creator) => {
14
13
 
15
14
  const HOOK_NAME = 'useGroupChannelMessagesWithQuery';
16
15
  export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options) => {
17
- const queryRef = useRef(); // NOTE: We cannot determine the channel object of Sendbird SDK is stale or not, so force update after setActiveChannel
18
-
19
- const {
20
- activeChannel,
21
- setActiveChannel
22
- } = useActiveGroupChannel(sdk, channel);
16
+ const queryRef = useRef();
23
17
  const forceUpdate = useForceUpdate();
24
18
  const {
25
19
  loading,
@@ -35,11 +29,11 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
35
29
  updateRefreshing
36
30
  } = useGroupChannelMessagesReducer(userId, options === null || options === void 0 ? void 0 : options.sortComparator);
37
31
 
38
- const channelMarkAs = async () => {
32
+ const channelMarkAsRead = async () => {
39
33
  try {
40
34
  await confirmAndMarkAsRead([channel]);
41
35
  } catch (e) {
42
- Logger.warn(`[${HOOK_NAME}/channelMarkAs/Read]`, e);
36
+ Logger.warn(`[${HOOK_NAME}/channelMarkAsRead]`, e);
43
37
  }
44
38
  };
45
39
 
@@ -47,8 +41,8 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
47
41
  if (uid) {
48
42
  var _queryRef$current;
49
43
 
50
- queryRef.current = createMessageQuery(activeChannel, options === null || options === void 0 ? void 0 : options.queryCreator);
51
- channelMarkAs().catch();
44
+ queryRef.current = createMessageQuery(channel, options === null || options === void 0 ? void 0 : options.queryCreator);
45
+ channelMarkAsRead().catch();
52
46
 
53
47
  if ((_queryRef$current = queryRef.current) !== null && _queryRef$current !== void 0 && _queryRef$current.hasNext) {
54
48
  var _queryRef$current2;
@@ -59,11 +53,10 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
59
53
 
60
54
  updateNextMessages([], true, sdk.currentUser.userId);
61
55
  }
62
- }, [sdk, activeChannel.url, options === null || options === void 0 ? void 0 : options.queryCreator]);
56
+ }, [sdk, channel.url, options === null || options === void 0 ? void 0 : options.queryCreator]);
63
57
 
64
58
  const channelUpdater = channel => {
65
- if (channel.isGroupChannel() && !isDifferentChannel(channel, activeChannel)) {
66
- setActiveChannel(channel);
59
+ if (channel.isGroupChannel() && !isDifferentChannel(channel, channel)) {
67
60
  forceUpdate();
68
61
  }
69
62
  };
@@ -71,18 +64,18 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
71
64
  useChannelHandler(sdk, HOOK_NAME, {
72
65
  // Messages
73
66
  onMessageReceived(eventChannel, message) {
74
- if (isDifferentChannel(activeChannel, eventChannel)) return;
75
- channelMarkAs();
67
+ if (isDifferentChannel(channel, eventChannel)) return;
68
+ channelMarkAsRead();
76
69
  updateNextMessages([message], false, sdk.currentUser.userId);
77
70
  },
78
71
 
79
72
  onMessageUpdated(eventChannel, message) {
80
- if (isDifferentChannel(activeChannel, eventChannel)) return;
73
+ if (isDifferentChannel(channel, eventChannel)) return;
81
74
  updateMessages([message], false, sdk.currentUser.userId);
82
75
  },
83
76
 
84
77
  onMessageDeleted(eventChannel, messageId) {
85
- if (isDifferentChannel(activeChannel, eventChannel)) return;
78
+ if (isDifferentChannel(channel, eventChannel)) return;
86
79
  deleteMessages([messageId], []);
87
80
  deleteNextMessages([messageId], []);
88
81
  },
@@ -94,14 +87,14 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
94
87
  onChannelHidden: channelUpdater,
95
88
 
96
89
  onChannelMemberCountChanged(channels) {
97
- const channel = channels.find(c => !isDifferentChannel(c, activeChannel));
98
- if (channel) channelUpdater(channel);
90
+ const foundChannel = channels.find(c => !isDifferentChannel(c, channel));
91
+ if (foundChannel) channelUpdater(foundChannel);
99
92
  },
100
93
 
101
94
  onChannelDeleted(channelUrl) {
102
95
  var _options$onChannelDel;
103
96
 
104
- 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);
97
+ 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);
105
98
  },
106
99
 
107
100
  // Users
@@ -115,7 +108,7 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
115
108
  onUserUnmuted: channelUpdater,
116
109
 
117
110
  onUserBanned(eventChannel, bannedUser) {
118
- if (isDifferentChannel(activeChannel, eventChannel)) return;
111
+ if (isDifferentChannel(channel, eventChannel)) return;
119
112
 
120
113
  if (bannedUser.userId === sdk.currentUser.userId) {
121
114
  var _options$onChannelDel2;
@@ -155,7 +148,7 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
155
148
  }, [nextMessages.length]);
156
149
  const sendUserMessage = useCallback((params, onPending) => {
157
150
  return new Promise((resolve, reject) => {
158
- activeChannel.sendUserMessage(params).onPending(pendingMessage => {
151
+ channel.sendUserMessage(params).onPending(pendingMessage => {
159
152
  if (pendingMessage.isUserMessage()) {
160
153
  updateNextMessages([pendingMessage], false, sdk.currentUser.userId);
161
154
  onPending === null || onPending === void 0 ? void 0 : onPending(pendingMessage);
@@ -169,10 +162,10 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
169
162
  reject(err);
170
163
  });
171
164
  });
172
- }, [activeChannel]);
165
+ }, [channel]);
173
166
  const sendFileMessage = useCallback((params, onPending) => {
174
167
  return new Promise((resolve, reject) => {
175
- activeChannel.sendFileMessage(params).onPending(pendingMessage => {
168
+ channel.sendFileMessage(params).onPending(pendingMessage => {
176
169
  if (pendingMessage.isFileMessage()) {
177
170
  updateNextMessages([pendingMessage], false, sdk.currentUser.userId);
178
171
  onPending === null || onPending === void 0 ? void 0 : onPending(pendingMessage);
@@ -186,35 +179,33 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
186
179
  reject(err);
187
180
  });
188
181
  });
189
- }, [activeChannel]);
182
+ }, [channel]);
190
183
  const updateUserMessage = useCallback(async (messageId, params) => {
191
- const updatedMessage = await activeChannel.updateUserMessage(messageId, params);
184
+ const updatedMessage = await channel.updateUserMessage(messageId, params);
192
185
  updateMessages([updatedMessage], false, sdk.currentUser.userId);
193
186
  return updatedMessage;
194
- }, [activeChannel]);
187
+ }, [channel]);
195
188
  const updateFileMessage = useCallback(async (messageId, params) => {
196
- const updatedMessage = await activeChannel.updateFileMessage(messageId, params);
189
+ const updatedMessage = await channel.updateFileMessage(messageId, params);
197
190
  updateMessages([updatedMessage], false, sdk.currentUser.userId);
198
191
  return updatedMessage;
199
- }, [activeChannel]);
192
+ }, [channel]);
200
193
  const resendMessage = useCallback(async failedMessage => {
201
194
  const message = await (() => {
202
- if (failedMessage.isUserMessage()) return activeChannel.resendUserMessage(failedMessage); // FIXME: v4 bugs
203
- // @ts-ignore
204
-
205
- if (failedMessage.isFileMessage()) return activeChannel.resendFileMessage(failedMessage);
195
+ if (failedMessage.isUserMessage()) return channel.resendUserMessage(failedMessage);
196
+ if (failedMessage.isFileMessage()) return channel.resendFileMessage(failedMessage);
206
197
  return null;
207
198
  })();
208
199
  if (message) updateNextMessages([message], false, sdk.currentUser.userId);
209
- }, [activeChannel]);
200
+ }, [channel]);
210
201
  const deleteMessage = useCallback(async message => {
211
202
  if (message.sendingStatus === 'succeeded') {
212
- if (message.isUserMessage()) await activeChannel.deleteMessage(message);
213
- if (message.isFileMessage()) await activeChannel.deleteMessage(message);
203
+ if (message.isUserMessage()) await channel.deleteMessage(message);
204
+ if (message.isFileMessage()) await channel.deleteMessage(message);
214
205
  } else {
215
206
  deleteMessages([message.messageId], [message.reqId]);
216
207
  }
217
- }, [activeChannel]);
208
+ }, [channel]);
218
209
  return {
219
210
  loading,
220
211
  refreshing,
@@ -229,8 +220,7 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
229
220
  updateUserMessage,
230
221
  updateFileMessage,
231
222
  resendMessage,
232
- deleteMessage,
233
- activeChannel
223
+ deleteMessage
234
224
  };
235
225
  };
236
226
  //# sourceMappingURL=useGroupChannelMessagesWithQuery.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useRef","Logger","confirmAndMarkAsRead","isDifferentChannel","useAsyncEffect","useForceUpdate","useChannelHandler","useActiveGroupChannel","useGroupChannelMessagesReducer","createMessageQuery","channel","creator","createPreviousMessageListQuery","limit","reverse","HOOK_NAME","useGroupChannelMessagesWithQuery","sdk","userId","options","queryRef","activeChannel","setActiveChannel","forceUpdate","loading","refreshing","messages","nextMessages","newMessagesFromMembers","updateMessages","updateNextMessages","deleteNextMessages","deleteMessages","updateLoading","updateRefreshing","sortComparator","channelMarkAs","e","warn","init","uid","current","queryCreator","catch","hasNext","list","load","currentUser","url","channelUpdater","isGroupChannel","onMessageReceived","eventChannel","message","onMessageUpdated","onMessageDeleted","messageId","onChannelChanged","onChannelFrozen","onChannelUnfrozen","onChannelHidden","onChannelMemberCountChanged","channels","find","c","onChannelDeleted","channelUrl","onOperatorUpdated","onUserLeft","onUserJoined","onUserUnbanned","onUserMuted","onUserUnmuted","onUserBanned","bannedUser","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":["useCallback","useRef","Logger","confirmAndMarkAsRead","isDifferentChannel","useAsyncEffect","useForceUpdate","useChannelHandler","useGroupChannelMessagesReducer","createMessageQuery","channel","creator","createPreviousMessageListQuery","limit","reverse","HOOK_NAME","useGroupChannelMessagesWithQuery","sdk","userId","options","queryRef","forceUpdate","loading","refreshing","messages","nextMessages","newMessagesFromMembers","updateMessages","updateNextMessages","deleteNextMessages","deleteMessages","updateLoading","updateRefreshing","sortComparator","channelMarkAsRead","e","warn","init","uid","current","queryCreator","catch","hasNext","list","load","currentUser","url","channelUpdater","isGroupChannel","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","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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"}
@@ -5,10 +5,10 @@ export const useAppFeatures = sdk => {
5
5
  applicationAttributes = []
6
6
  } = sdk.appInfo ?? {};
7
7
  return {
8
- deliveryReceiptEnabled: Boolean(premiumFeatureList.includes(PremiumFeatures.delivery_receipt)),
9
- broadcastChannelEnabled: Boolean(applicationAttributes.includes(ApplicationAttributes.allow_broadcast_channel)),
10
- superGroupChannelEnabled: Boolean(applicationAttributes.includes(ApplicationAttributes.allow_super_group_channel)),
11
- reactionEnabled: Boolean(applicationAttributes.includes(ApplicationAttributes.reactions))
8
+ deliveryReceiptEnabled: premiumFeatureList.includes(PremiumFeatures.delivery_receipt),
9
+ broadcastChannelEnabled: applicationAttributes.includes(ApplicationAttributes.allow_broadcast_channel),
10
+ superGroupChannelEnabled: applicationAttributes.includes(ApplicationAttributes.allow_super_group_channel),
11
+ reactionEnabled: applicationAttributes.includes(ApplicationAttributes.reactions)
12
12
  };
13
13
  };
14
14
  //# sourceMappingURL=useAppFeatures.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["ApplicationAttributes","PremiumFeatures","useAppFeatures","sdk","premiumFeatureList","applicationAttributes","appInfo","deliveryReceiptEnabled","Boolean","includes","delivery_receipt","broadcastChannelEnabled","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,SAASA,qBAAT,EAAgCC,eAAhC,QAAwE,uBAAxE;AAEA,OAAO,MAAMC,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,CAA4BR,eAAe,CAACS,gBAA5C,CAAD,CAD1B;IAELC,uBAAuB,EAAEH,OAAO,CAACH,qBAAqB,CAACI,QAAtB,CAA+BT,qBAAqB,CAACY,uBAArD,CAAD,CAF3B;IAGLC,wBAAwB,EAAEL,OAAO,CAACH,qBAAqB,CAACI,QAAtB,CAA+BT,qBAAqB,CAACc,yBAArD,CAAD,CAH5B;IAILC,eAAe,EAAEP,OAAO,CAACH,qBAAqB,CAACI,QAAtB,CAA+BT,qBAAqB,CAACgB,SAArD,CAAD;EAJnB,CAAP;AAMD,CARM"}
1
+ {"version":3,"names":["ApplicationAttributes","PremiumFeatures","useAppFeatures","sdk","premiumFeatureList","applicationAttributes","appInfo","deliveryReceiptEnabled","includes","delivery_receipt","broadcastChannelEnabled","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,SAASA,qBAAT,EAAgCC,eAAhC,QAAwE,uBAAxE;AAEA,OAAO,MAAMC,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,CAA4BP,eAAe,CAACQ,gBAA5C,CADnB;IAELC,uBAAuB,EAAEL,qBAAqB,CAACG,QAAtB,CAA+BR,qBAAqB,CAACW,uBAArD,CAFpB;IAGLC,wBAAwB,EAAEP,qBAAqB,CAACG,QAAtB,CAA+BR,qBAAqB,CAACa,yBAArD,CAHrB;IAILC,eAAe,EAAET,qBAAqB,CAACG,QAAtB,CAA+BR,qBAAqB,CAACe,SAArD;EAJZ,CAAP;AAMD,CARM"}
@@ -28,6 +28,7 @@ export const useMessageOutgoingStatus = (sdk, channel, message) => {
28
28
  if (message.sendingStatus === 'failed') return 'FAILED';
29
29
  }
30
30
 
31
+ if (channel.isBroadcast || channel.isSuper) return 'NONE';
31
32
  if (channel.getUnreadMemberCount(message) === 0) return 'READ';
32
33
 
33
34
  if (features.deliveryReceiptEnabled) {
@@ -1 +1 @@
1
- {"version":3,"names":["isDifferentChannel","isMyMessage","useForceUpdate","useUniqId","useChannelHandler","useAppFeatures","HOOK_NAME","useMessageOutgoingStatus","sdk","channel","message","features","forceUpdate","currentUser","uniqId","onUndeliveredMemberStatusUpdated","eventChannel","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,SAASA,kBAAT,EAA6BC,WAA7B,EAA0CC,cAA1C,EAA0DC,SAA1D,QAA2E,uBAA3E;AAEA,SAASC,iBAAT,QAAkC,8BAAlC;AACA,SAASC,cAAT,QAA+B,kBAA/B;AAEA,MAAMC,SAAS,GAAG,0BAAlB;AAIA,OAAO,MAAMC,wBAAwB,GAAG,CACtCC,GADsC,EAEtCC,OAFsC,EAGtCC,OAHsC,KAIhB;EACtB,MAAMC,QAAQ,GAAGN,cAAc,CAACG,GAAD,CAA/B;EACA,MAAMI,WAAW,GAAGV,cAAc,EAAlC;EACA,MAAMW,WAAW,GAAGL,GAAG,CAACK,WAAxB;EAEA,MAAMC,MAAM,GAAGX,SAAS,CAACG,SAAD,CAAxB;EACAF,iBAAiB,CAACI,GAAD,EAAO,GAAEF,SAAU,IAAGQ,MAAO,EAA7B,EAAgC;IAC/CC,gCAAgC,CAACC,YAAD,EAAe;MAC7C,IAAIhB,kBAAkB,CAACS,OAAD,EAAUO,YAAV,CAAtB,EAA+C;MAC/C,IAAI,CAACf,WAAW,CAACS,OAAD,EAAUG,WAAV,aAAUA,WAAV,uBAAUA,WAAW,CAAEI,MAAvB,CAAhB,EAAgD;MAEhDL,WAAW;IACZ,CAN8C;;IAO/CM,2BAA2B,CAACF,YAAD,EAAe;MACxC,IAAIhB,kBAAkB,CAACS,OAAD,EAAUO,YAAV,CAAtB,EAA+C;MAC/C,IAAI,CAACf,WAAW,CAACS,OAAD,EAAUG,WAAV,aAAUA,WAAV,uBAAUA,WAAW,CAAEI,MAAvB,CAAhB,EAAgD;MAEhDL,WAAW;IACZ;;EAZ8C,CAAhC,CAAjB;EAeA,IAAI,CAACF,OAAL,EAAc,OAAO,MAAP;;EAEd,IAAI,mBAAmBA,OAAvB,EAAgC;IAC9B,IAAIA,OAAO,CAACS,aAAR,KAA0B,SAA9B,EAAyC,OAAO,SAAP;IACzC,IAAIT,OAAO,CAACS,aAAR,KAA0B,QAA9B,EAAwC,OAAO,QAAP;EACzC;;EAED,IAAIV,OAAO,CAACW,oBAAR,CAA6BV,OAA7B,MAA0C,CAA9C,EAAiD,OAAO,MAAP;;EAEjD,IAAIC,QAAQ,CAACU,sBAAb,EAAqC;IACnC,IAAIZ,OAAO,CAACa,yBAAR,CAAkCZ,OAAlC,MAA+C,CAAnD,EAAsD,OAAO,WAAP;IACtD,OAAO,aAAP;EACD;;EAED,OAAO,QAAP;AACD,CAxCM"}
1
+ {"version":3,"names":["isDifferentChannel","isMyMessage","useForceUpdate","useUniqId","useChannelHandler","useAppFeatures","HOOK_NAME","useMessageOutgoingStatus","sdk","channel","message","features","forceUpdate","currentUser","uniqId","onUndeliveredMemberStatusUpdated","eventChannel","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,SAASA,kBAAT,EAA6BC,WAA7B,EAA0CC,cAA1C,EAA0DC,SAA1D,QAA2E,uBAA3E;AAEA,SAASC,iBAAT,QAAkC,8BAAlC;AACA,SAASC,cAAT,QAA+B,kBAA/B;AAEA,MAAMC,SAAS,GAAG,0BAAlB;AAIA,OAAO,MAAMC,wBAAwB,GAAG,CACtCC,GADsC,EAEtCC,OAFsC,EAGtCC,OAHsC,KAIhB;EACtB,MAAMC,QAAQ,GAAGN,cAAc,CAACG,GAAD,CAA/B;EACA,MAAMI,WAAW,GAAGV,cAAc,EAAlC;EACA,MAAMW,WAAW,GAAGL,GAAG,CAACK,WAAxB;EAEA,MAAMC,MAAM,GAAGX,SAAS,CAACG,SAAD,CAAxB;EACAF,iBAAiB,CAACI,GAAD,EAAO,GAAEF,SAAU,IAAGQ,MAAO,EAA7B,EAAgC;IAC/CC,gCAAgC,CAACC,YAAD,EAAe;MAC7C,IAAIhB,kBAAkB,CAACS,OAAD,EAAUO,YAAV,CAAtB,EAA+C;MAC/C,IAAI,CAACf,WAAW,CAACS,OAAD,EAAUG,WAAV,aAAUA,WAAV,uBAAUA,WAAW,CAAEI,MAAvB,CAAhB,EAAgD;MAEhDL,WAAW;IACZ,CAN8C;;IAO/CM,2BAA2B,CAACF,YAAD,EAAe;MACxC,IAAIhB,kBAAkB,CAACS,OAAD,EAAUO,YAAV,CAAtB,EAA+C;MAC/C,IAAI,CAACf,WAAW,CAACS,OAAD,EAAUG,WAAV,aAAUA,WAAV,uBAAUA,WAAW,CAAEI,MAAvB,CAAhB,EAAgD;MAEhDL,WAAW;IACZ;;EAZ8C,CAAhC,CAAjB;EAeA,IAAI,CAACF,OAAL,EAAc,OAAO,MAAP;;EAEd,IAAI,mBAAmBA,OAAvB,EAAgC;IAC9B,IAAIA,OAAO,CAACS,aAAR,KAA0B,SAA9B,EAAyC,OAAO,SAAP;IACzC,IAAIT,OAAO,CAACS,aAAR,KAA0B,QAA9B,EAAwC,OAAO,QAAP;EACzC;;EAED,IAAIV,OAAO,CAACW,WAAR,IAAuBX,OAAO,CAACY,OAAnC,EAA4C,OAAO,MAAP;EAE5C,IAAIZ,OAAO,CAACa,oBAAR,CAA6BZ,OAA7B,MAA0C,CAA9C,EAAiD,OAAO,MAAP;;EAEjD,IAAIC,QAAQ,CAACY,sBAAb,EAAqC;IACnC,IAAId,OAAO,CAACe,yBAAR,CAAkCd,OAAlC,MAA+C,CAAnD,EAAsD,OAAO,WAAP;IACtD,OAAO,aAAP;EACD;;EAED,OAAO,QAAP;AACD,CA1CM"}
@@ -1,5 +1,5 @@
1
1
  import { useState } from 'react';
2
- import { truncatedBadgeCount, useAsyncEffect } from '@sendbird/uikit-utils';
2
+ import { truncatedCount, useAsyncEffect } from '@sendbird/uikit-utils';
3
3
  import { useUniqId } from '@sendbird/uikit-utils';
4
4
  import { useUserEventHandler } from '../handler/useUserEventHandler';
5
5
  const HOOK_NAME = 'useTotalUnreadChannelCount';
@@ -14,6 +14,6 @@ export const useTotalUnreadChannelCount = (sdk, params) => {
14
14
  setUnreadChannelCount(await sdk.groupChannel.getTotalUnreadChannelCount());
15
15
  }
16
16
  });
17
- return truncatedBadgeCount(unreadChannelCount, params === null || params === void 0 ? void 0 : params.maxCount);
17
+ return truncatedCount(unreadChannelCount, params === null || params === void 0 ? void 0 : params.maxCount);
18
18
  };
19
19
  //# sourceMappingURL=useTotalUnreadChannelCount.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useState","truncatedBadgeCount","useAsyncEffect","useUniqId","useUserEventHandler","HOOK_NAME","useTotalUnreadChannelCount","sdk","params","id","unreadChannelCount","setUnreadChannelCount","groupChannel","getTotalUnreadChannelCount","onTotalUnreadMessageCountUpdated","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,SAASA,QAAT,QAAyB,OAAzB;AAGA,SAASC,mBAAT,EAA8BC,cAA9B,QAAoD,uBAApD;AACA,SAASC,SAAT,QAA0B,uBAA1B;AAEA,SAASC,mBAAT,QAAoC,gCAApC;AAKA,MAAMC,SAAS,GAAG,4BAAlB;AACA,OAAO,MAAMC,0BAA0B,GAAG,CAACC,GAAD,EAAuBC,MAAvB,KAA2C;EACnF,MAAMC,EAAE,GAAGN,SAAS,CAACE,SAAD,CAApB;EACA,MAAM,CAACK,kBAAD,EAAqBC,qBAArB,IAA8CX,QAAQ,CAAC,CAAD,CAA5D;EAEAE,cAAc,CAAC,YAAY;IACzBS,qBAAqB,CAAC,MAAMJ,GAAG,CAACK,YAAJ,CAAiBC,0BAAjB,EAAP,CAArB;EACD,CAFa,EAEX,CAACN,GAAD,CAFW,CAAd;EAIAH,mBAAmB,CAACG,GAAD,EAAMF,SAAS,GAAGI,EAAlB,EAAsB;IACvCK,gCAAgC,EAAE,YAAY;MAC5CH,qBAAqB,CAAC,MAAMJ,GAAG,CAACK,YAAJ,CAAiBC,0BAAjB,EAAP,CAArB;IACD;EAHsC,CAAtB,CAAnB;EAMA,OAAOZ,mBAAmB,CAACS,kBAAD,EAAqBF,MAArB,aAAqBA,MAArB,uBAAqBA,MAAM,CAAEO,QAA7B,CAA1B;AACD,CAfM"}
1
+ {"version":3,"names":["useState","truncatedCount","useAsyncEffect","useUniqId","useUserEventHandler","HOOK_NAME","useTotalUnreadChannelCount","sdk","params","id","unreadChannelCount","setUnreadChannelCount","groupChannel","getTotalUnreadChannelCount","onTotalUnreadMessageCountUpdated","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,SAASA,QAAT,QAAyB,OAAzB;AAGA,SAASC,cAAT,EAAyBC,cAAzB,QAA+C,uBAA/C;AACA,SAASC,SAAT,QAA0B,uBAA1B;AAEA,SAASC,mBAAT,QAAoC,gCAApC;AAKA,MAAMC,SAAS,GAAG,4BAAlB;AACA,OAAO,MAAMC,0BAA0B,GAAG,CAACC,GAAD,EAAuBC,MAAvB,KAA2C;EACnF,MAAMC,EAAE,GAAGN,SAAS,CAACE,SAAD,CAApB;EACA,MAAM,CAACK,kBAAD,EAAqBC,qBAArB,IAA8CX,QAAQ,CAAC,CAAD,CAA5D;EAEAE,cAAc,CAAC,YAAY;IACzBS,qBAAqB,CAAC,MAAMJ,GAAG,CAACK,YAAJ,CAAiBC,0BAAjB,EAAP,CAArB;EACD,CAFa,EAEX,CAACN,GAAD,CAFW,CAAd;EAIAH,mBAAmB,CAACG,GAAD,EAAMF,SAAS,GAAGI,EAAlB,EAAsB;IACvCK,gCAAgC,EAAE,YAAY;MAC5CH,qBAAqB,CAAC,MAAMJ,GAAG,CAACK,YAAJ,CAAiBC,0BAAjB,EAAP,CAArB;IACD;EAHsC,CAAtB,CAAnB;EAMA,OAAOZ,cAAc,CAACS,kBAAD,EAAqBF,MAArB,aAAqBA,MAArB,uBAAqBA,MAAM,CAAEO,QAA7B,CAArB;AACD,CAfM"}
@@ -1,6 +1,6 @@
1
1
  import { useState } from 'react';
2
2
  import { SuperChannelFilter } from '@sendbird/chat/groupChannel';
3
- import { truncatedBadgeCount, useAsyncEffect, useUniqId } from '@sendbird/uikit-utils';
3
+ import { truncatedCount, useAsyncEffect, useUniqId } from '@sendbird/uikit-utils';
4
4
  import { useUserEventHandler } from '../handler/useUserEventHandler';
5
5
  const HOOK_NAME = 'useTotalUnreadMessageCount';
6
6
  export const useTotalUnreadMessageCount = (sdk, options) => {
@@ -18,6 +18,6 @@ export const useTotalUnreadMessageCount = (sdk, options) => {
18
18
  useUserEventHandler(sdk, `${HOOK_NAME}_${id}`, {
19
19
  onTotalUnreadMessageCountUpdated: totalCount => setUnreadMessageCount(totalCount)
20
20
  });
21
- return truncatedBadgeCount(unreadMessageCount, options === null || options === void 0 ? void 0 : options.maxCount);
21
+ return truncatedCount(unreadMessageCount, options === null || options === void 0 ? void 0 : options.maxCount);
22
22
  };
23
23
  //# sourceMappingURL=useTotalUnreadMessageCount.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useState","SuperChannelFilter","truncatedBadgeCount","useAsyncEffect","useUniqId","useUserEventHandler","HOOK_NAME","useTotalUnreadMessageCount","sdk","options","id","unreadMessageCount","setUnreadMessageCount","unreadCount","groupChannel","getTotalUnreadMessageCount","superChannelFilter","ALL","params","channelCustomTypesFilter","onTotalUnreadMessageCountUpdated","totalCount","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,SAASA,QAAT,QAAyB,OAAzB;AAEA,SAASC,kBAAT,QAAkE,6BAAlE;AAEA,SAASC,mBAAT,EAA8BC,cAA9B,EAA8CC,SAA9C,QAA+D,uBAA/D;AAEA,SAASC,mBAAT,QAAoC,gCAApC;AAOA,MAAMC,SAAS,GAAG,4BAAlB;AACA,OAAO,MAAMC,0BAA0B,GAAG,CAACC,GAAD,EAAuBC,OAAvB,KAA6C;EAAA;;EACrF,MAAMC,EAAE,GAAGN,SAAS,CAACE,SAAD,CAApB;EACA,MAAM,CAACK,kBAAD,EAAqBC,qBAArB,IAA8CZ,QAAQ,CAAC,CAAD,CAA5D;EAEAG,cAAc,CAAC,YAAY;IACzB,MAAMU,WAAW,GAAG,MAAML,GAAG,CAACM,YAAJ,CAAiBC,0BAAjB,CAA4C;MACpEC,kBAAkB,EAAEf,kBAAkB,CAACgB,GAD6B;MAEpE,IAAGR,OAAH,aAAGA,OAAH,uBAAGA,OAAO,CAAES,MAAZ;IAFoE,CAA5C,CAA1B;IAIAN,qBAAqB,CAACC,WAAD,CAArB;EACD,CANa,EAMX,CAACL,GAAD,EAAMC,OAAN,aAAMA,OAAN,0CAAMA,OAAO,CAAES,MAAf,oDAAM,gBAAiBF,kBAAvB,EAA2CP,OAA3C,aAA2CA,OAA3C,2CAA2CA,OAAO,CAAES,MAApD,qDAA2C,iBAAiBC,wBAA5D,CANW,CAAd;EAQAd,mBAAmB,CAACG,GAAD,EAAO,GAAEF,SAAU,IAAGI,EAAG,EAAzB,EAA4B;IAC7CU,gCAAgC,EAAGC,UAAD,IAAwBT,qBAAqB,CAACS,UAAD;EADlC,CAA5B,CAAnB;EAIA,OAAOnB,mBAAmB,CAACS,kBAAD,EAAqBF,OAArB,aAAqBA,OAArB,uBAAqBA,OAAO,CAAEa,QAA9B,CAA1B;AACD,CAjBM"}
1
+ {"version":3,"names":["useState","SuperChannelFilter","truncatedCount","useAsyncEffect","useUniqId","useUserEventHandler","HOOK_NAME","useTotalUnreadMessageCount","sdk","options","id","unreadMessageCount","setUnreadMessageCount","unreadCount","groupChannel","getTotalUnreadMessageCount","superChannelFilter","ALL","params","channelCustomTypesFilter","onTotalUnreadMessageCountUpdated","totalCount","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,SAASA,QAAT,QAAyB,OAAzB;AAEA,SAASC,kBAAT,QAAkE,6BAAlE;AAEA,SAASC,cAAT,EAAyBC,cAAzB,EAAyCC,SAAzC,QAA0D,uBAA1D;AAEA,SAASC,mBAAT,QAAoC,gCAApC;AAOA,MAAMC,SAAS,GAAG,4BAAlB;AACA,OAAO,MAAMC,0BAA0B,GAAG,CAACC,GAAD,EAAuBC,OAAvB,KAA6C;EAAA;;EACrF,MAAMC,EAAE,GAAGN,SAAS,CAACE,SAAD,CAApB;EACA,MAAM,CAACK,kBAAD,EAAqBC,qBAArB,IAA8CZ,QAAQ,CAAC,CAAD,CAA5D;EAEAG,cAAc,CAAC,YAAY;IACzB,MAAMU,WAAW,GAAG,MAAML,GAAG,CAACM,YAAJ,CAAiBC,0BAAjB,CAA4C;MACpEC,kBAAkB,EAAEf,kBAAkB,CAACgB,GAD6B;MAEpE,IAAGR,OAAH,aAAGA,OAAH,uBAAGA,OAAO,CAAES,MAAZ;IAFoE,CAA5C,CAA1B;IAIAN,qBAAqB,CAACC,WAAD,CAArB;EACD,CANa,EAMX,CAACL,GAAD,EAAMC,OAAN,aAAMA,OAAN,0CAAMA,OAAO,CAAES,MAAf,oDAAM,gBAAiBF,kBAAvB,EAA2CP,OAA3C,aAA2CA,OAA3C,2CAA2CA,OAAO,CAAES,MAApD,qDAA2C,iBAAiBC,wBAA5D,CANW,CAAd;EAQAd,mBAAmB,CAACG,GAAD,EAAO,GAAEF,SAAU,IAAGI,EAAG,EAAzB,EAA4B;IAC7CU,gCAAgC,EAAGC,UAAD,IAAwBT,qBAAqB,CAACS,UAAD;EADlC,CAA5B,CAAnB;EAIA,OAAOnB,cAAc,CAACS,kBAAD,EAAqBF,OAArB,aAAqBA,OAArB,uBAAqBA,OAAO,CAAEa,QAA9B,CAArB;AACD,CAjBM"}
@@ -1,5 +1,5 @@
1
- import { useCallback, useMemo, useRef, useState } from 'react';
2
- import { Logger, SBErrorCode, SBErrorMessage, useAsyncEffect } from '@sendbird/uikit-utils';
1
+ import { useMemo, useRef, useState } from 'react';
2
+ import { Logger, SBErrorCode, SBErrorMessage, useAsyncEffect, useFreshCallback } from '@sendbird/uikit-utils';
3
3
 
4
4
  const createUserQuery = (sdk, queryCreator) => {
5
5
  if (queryCreator) return queryCreator(); // In order to use the API, the option must be turned on in the dashboard.
@@ -39,12 +39,28 @@ export const useUserList = (sdk, options) => {
39
39
  if (options !== null && options !== void 0 && options.sortComparator) return users.sort(options.sortComparator);
40
40
  return users;
41
41
  }, [users, options === null || options === void 0 ? void 0 : options.sortComparator]);
42
+ const upsertUser = useFreshCallback(user => {
43
+ setUsers(_ref => {
44
+ let [...draft] = _ref;
45
+ const userIdx = draft.findIndex(it => it.userId === user.userId);
46
+ if (userIdx > -1) draft[userIdx] = user;else draft.push(user);
47
+ return draft;
48
+ });
49
+ });
50
+ const deleteUser = useFreshCallback(userId => {
51
+ setUsers(_ref2 => {
52
+ let [...draft] = _ref2;
53
+ const userIdx = draft.findIndex(it => it.userId === userId);
54
+ if (userIdx > -1) draft.splice(userIdx, 1);
55
+ return draft;
56
+ });
57
+ });
42
58
 
43
59
  const updateUsers = (users, clearPrev) => {
44
60
  if (clearPrev) setUsers(users);else setUsers(prev => prev.concat(users));
45
61
  };
46
62
 
47
- const init = useCallback(async () => {
63
+ const init = useFreshCallback(async () => {
48
64
  var _query$current;
49
65
 
50
66
  query.current = createUserQuery(sdk, options === null || options === void 0 ? void 0 : options.queryCreator);
@@ -52,14 +68,14 @@ export const useUserList = (sdk, options) => {
52
68
  if ((_query$current = query.current) !== null && _query$current !== void 0 && _query$current.hasNext) {
53
69
  var _query$current2;
54
70
 
55
- const users = await ((_query$current2 = query.current) === null || _query$current2 === void 0 ? void 0 : _query$current2.next().catch(err => {
56
- Logger.error(error);
57
- if (err.code === SBErrorCode.NON_AUTHORIZED) Logger.warn(SBErrorMessage.ACL);
58
- throw error;
71
+ const users = await ((_query$current2 = query.current) === null || _query$current2 === void 0 ? void 0 : _query$current2.next().catch(e => {
72
+ Logger.error(e);
73
+ if (e.code === SBErrorCode.NON_AUTHORIZED) Logger.warn(SBErrorMessage.ACL);
74
+ throw e;
59
75
  }));
60
76
  updateUsers(users, true);
61
77
  }
62
- }, [sdk, options === null || options === void 0 ? void 0 : options.queryCreator]);
78
+ });
63
79
  useAsyncEffect(async () => {
64
80
  setLoading(true);
65
81
  setError(null);
@@ -71,8 +87,8 @@ export const useUserList = (sdk, options) => {
71
87
  } finally {
72
88
  setLoading(false);
73
89
  }
74
- }, [init]);
75
- const refresh = useCallback(async () => {
90
+ }, []);
91
+ const refresh = useFreshCallback(async () => {
76
92
  setRefreshing(true);
77
93
  setError(null);
78
94
 
@@ -83,23 +99,25 @@ export const useUserList = (sdk, options) => {
83
99
  } finally {
84
100
  setRefreshing(false);
85
101
  }
86
- }, [init]);
87
- const next = useCallback(async () => {
102
+ });
103
+ const next = useFreshCallback(async () => {
88
104
  var _query$current3;
89
105
 
90
106
  if (query.current && (_query$current3 = query.current) !== null && _query$current3 !== void 0 && _query$current3.hasNext) {
91
- const nextUsers = await query.current.next().catch(err => {
92
- Logger.error(error);
93
- if (err.code === SBErrorCode.NON_AUTHORIZED) Logger.warn(SBErrorMessage.ACL);
94
- throw error;
107
+ const nextUsers = await query.current.next().catch(e => {
108
+ Logger.error(e);
109
+ if (e.code === SBErrorCode.NON_AUTHORIZED) Logger.warn(SBErrorMessage.ACL);
110
+ throw e;
95
111
  });
96
112
  updateUsers(nextUsers, false);
97
113
  }
98
- }, []);
114
+ });
99
115
  return {
100
116
  loading,
101
117
  error,
102
118
  users: sortedUsers,
119
+ upsertUser,
120
+ deleteUser,
103
121
  next,
104
122
  refreshing,
105
123
  refresh
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useMemo","useRef","useState","Logger","SBErrorCode","SBErrorMessage","useAsyncEffect","createUserQuery","sdk","queryCreator","createApplicationUserListQuery","useUserList","options","query","error","setError","loading","setLoading","refreshing","setRefreshing","users","setUsers","sortedUsers","sortComparator","sort","updateUsers","clearPrev","prev","concat","init","current","hasNext","next","catch","err","code","NON_AUTHORIZED","warn","ACL","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":["useMemo","useRef","useState","Logger","SBErrorCode","SBErrorMessage","useAsyncEffect","useFreshCallback","createUserQuery","sdk","queryCreator","createApplicationUserListQuery","useUserList","options","query","error","setError","loading","setLoading","refreshing","setRefreshing","users","setUsers","sortedUsers","sortComparator","sort","upsertUser","user","draft","userIdx","findIndex","it","userId","push","deleteUser","splice","updateUsers","clearPrev","prev","concat","init","current","hasNext","next","catch","e","code","NON_AUTHORIZED","warn","ACL","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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"}
@@ -1,6 +1,7 @@
1
1
  export { useGroupChannelList } from './channel/useGroupChannelList';
2
2
  export { useGroupChannelMessages } from './channel/useGroupChannelMessages';
3
3
  export { useActiveGroupChannel } from './channel/useActiveGroupChannel';
4
+ export { useGroupChannel } from './channel/useGroupChannel';
4
5
  export { useAppFeatures } from './common/useAppFeatures';
5
6
  export { useMessageOutgoingStatus } from './common/useMessageOutgoingStatus';
6
7
  export { usePushTrigger } from './common/usePushTrigger';
@@ -1 +1 @@
1
- {"version":3,"names":["useGroupChannelList","useGroupChannelMessages","useActiveGroupChannel","useAppFeatures","useMessageOutgoingStatus","usePushTrigger","useTotalUnreadChannelCount","useTotalUnreadMessageCount","useUserList","useChannelHandler","useConnectionHandler","useUserEventHandler","CustomQuery"],"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,SAASA,mBAAT,QAAoC,+BAApC;AACA,SAASC,uBAAT,QAAwC,mCAAxC;AACA,SAASC,qBAAT,QAAsC,iCAAtC;AAEA,SAASC,cAAT,QAA+B,yBAA/B;AACA,SAASC,wBAAT,QAAyC,mCAAzC;AACA,SAASC,cAAT,QAA+B,yBAA/B;AACA,SAASC,0BAAT,QAA2C,qCAA3C;AACA,SAASC,0BAAT,QAA2C,qCAA3C;AACA,SAASC,WAAT,QAA4B,sBAA5B;AAEA,SAASC,iBAAT,QAAkC,6BAAlC;AACA,SAASC,oBAAT,QAAqC,gCAArC;AACA,SAASC,mBAAT,QAAoC,+BAApC;AAEA,SAASC,WAAT,QAA4B,qBAA5B"}
1
+ {"version":3,"names":["useGroupChannelList","useGroupChannelMessages","useActiveGroupChannel","useGroupChannel","useAppFeatures","useMessageOutgoingStatus","usePushTrigger","useTotalUnreadChannelCount","useTotalUnreadMessageCount","useUserList","useChannelHandler","useConnectionHandler","useUserEventHandler","CustomQuery"],"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,SAASA,mBAAT,QAAoC,+BAApC;AACA,SAASC,uBAAT,QAAwC,mCAAxC;AACA,SAASC,qBAAT,QAAsC,iCAAtC;AACA,SAASC,eAAT,QAAgC,2BAAhC;AAEA,SAASC,cAAT,QAA+B,yBAA/B;AACA,SAASC,wBAAT,QAAyC,mCAAzC;AACA,SAASC,cAAT,QAA+B,yBAA/B;AACA,SAASC,0BAAT,QAA2C,qCAA3C;AACA,SAASC,0BAAT,QAA2C,qCAA3C;AACA,SAASC,WAAT,QAA4B,sBAA5B;AAEA,SAASC,iBAAT,QAAkC,6BAAlC;AACA,SAASC,oBAAT,QAAqC,gCAArC;AACA,SAASC,mBAAT,QAAoC,+BAApC;AAEA,SAASC,WAAT,QAA4B,qBAA5B"}
@@ -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":""}