@sendbird/uikit-chat-hooks 2.0.3 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) 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 +56 -68
  6. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
  7. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +26 -35
  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/useUserList.js +25 -7
  14. package/lib/commonjs/common/useUserList.js.map +1 -1
  15. package/lib/commonjs/index.js +8 -0
  16. package/lib/commonjs/index.js.map +1 -1
  17. package/lib/commonjs/types.js.map +1 -1
  18. package/lib/module/channel/useGroupChannel.js +22 -0
  19. package/lib/module/channel/useGroupChannel.js.map +1 -0
  20. package/lib/module/channel/useGroupChannelMessages/reducer.js +3 -3
  21. package/lib/module/channel/useGroupChannelMessages/reducer.js.map +1 -1
  22. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +57 -68
  23. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
  24. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +26 -34
  25. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
  26. package/lib/module/common/useAppFeatures.js +4 -4
  27. package/lib/module/common/useAppFeatures.js.map +1 -1
  28. package/lib/module/common/useMessageOutgoingStatus.js +1 -0
  29. package/lib/module/common/useMessageOutgoingStatus.js.map +1 -1
  30. package/lib/module/common/useUserList.js +27 -9
  31. package/lib/module/common/useUserList.js.map +1 -1
  32. package/lib/module/index.js +1 -0
  33. package/lib/module/index.js.map +1 -1
  34. package/lib/module/types.js.map +1 -1
  35. package/lib/typescript/src/channel/useGroupChannel.d.ts +6 -0
  36. package/lib/typescript/src/common/useUserList.d.ts +2 -2
  37. package/lib/typescript/src/index.d.ts +2 -1
  38. package/lib/typescript/src/types.d.ts +13 -6
  39. package/package.json +3 -3
  40. package/src/channel/useGroupChannel.ts +21 -0
  41. package/src/channel/useGroupChannelMessages/reducer.ts +4 -4
  42. package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.ts +70 -76
  43. package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.ts +29 -31
  44. package/src/common/useAppFeatures.ts +4 -4
  45. package/src/common/useMessageOutgoingStatus.ts +2 -0
  46. package/src/common/useUserList.ts +38 -12
  47. package/src/index.ts +3 -1
  48. package/src/types.ts +16 -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,
@@ -59,7 +52,7 @@ 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);
55
+ queryRef.current = createMessageQuery(channel, options === null || options === void 0 ? void 0 : options.queryCreator);
63
56
  channelMarkAs().catch();
64
57
 
65
58
  if ((_queryRef$current = queryRef.current) !== null && _queryRef$current !== void 0 && _queryRef$current.hasNext) {
@@ -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;
78
+ if ((0, _uikitUtils.isDifferentChannel)(channel, eventChannel)) return;
87
79
  channelMarkAs();
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,35 @@ 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
206
+ if (failedMessage.isUserMessage()) return channel.resendUserMessage(failedMessage); // FIXME: v4 bugs
215
207
  // @ts-ignore
216
208
 
217
- if (failedMessage.isFileMessage()) return activeChannel.resendFileMessage(failedMessage);
209
+ if (failedMessage.isFileMessage()) return channel.resendFileMessage(failedMessage);
218
210
  return null;
219
211
  })();
220
212
  if (message) updateNextMessages([message], false, sdk.currentUser.userId);
221
- }, [activeChannel]);
213
+ }, [channel]);
222
214
  const deleteMessage = (0, _react.useCallback)(async message => {
223
215
  if (message.sendingStatus === 'succeeded') {
224
- if (message.isUserMessage()) await activeChannel.deleteMessage(message);
225
- if (message.isFileMessage()) await activeChannel.deleteMessage(message);
216
+ if (message.isUserMessage()) await channel.deleteMessage(message);
217
+ if (message.isFileMessage()) await channel.deleteMessage(message);
226
218
  } else {
227
219
  deleteMessages([message.messageId], [message.reqId]);
228
220
  }
229
- }, [activeChannel]);
221
+ }, [channel]);
230
222
  return {
231
223
  loading,
232
224
  refreshing,
@@ -241,8 +233,7 @@ const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options) => {
241
233
  updateUserMessage,
242
234
  updateFileMessage,
243
235
  resendMessage,
244
- deleteMessage,
245
- activeChannel
236
+ deleteMessage
246
237
  };
247
238
  };
248
239
 
@@ -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","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","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 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(channel, 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, 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 channelMarkAs();\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 // FIXME: v4 bugs\n // @ts-ignore\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"}
@@ -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);
@@ -68,7 +84,7 @@ const useUserList = (sdk, options) => {
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,8 +108,8 @@ 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) {
@@ -105,11 +121,13 @@ const useUserList = (sdk, options) => {
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","err","Logger","code","SBErrorCode","NON_AUTHORIZED","warn","SBErrorMessage","ACL","useAsyncEffect","e","refresh","nextUsers"],"sources":["useUserList.ts"],"sourcesContent":["import { useMemo, useRef, useState } from 'react';\n\nimport type { Optional, SendbirdChatSDK, SendbirdUser } from '@sendbird/uikit-utils';\nimport { Logger, SBErrorCode, SBErrorMessage, useAsyncEffect, useFreshCallback } from '@sendbird/uikit-utils';\n\nimport type { CustomQueryInterface, UseUserListOptions, UseUserListReturn, UserStruct } 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((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 });\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((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 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 UserStruct,\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} 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\nexport interface UserStruct {\n userId: string;\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":""}
@@ -0,0 +1,22 @@
1
+ import { useState } from 'react';
2
+ import { useAsyncEffect } from '@sendbird/uikit-utils';
3
+ export const useGroupChannel = (sdk, channelUrl) => {
4
+ const [channel, setChannel] = useState();
5
+ const [loading, setLoading] = useState(true);
6
+ const [error, setError] = useState();
7
+ useAsyncEffect(async () => {
8
+ try {
9
+ setChannel(await sdk.groupChannel.getChannel(channelUrl));
10
+ } catch (e) {
11
+ setError(e);
12
+ } finally {
13
+ setLoading(false);
14
+ }
15
+ }, []);
16
+ return {
17
+ channel,
18
+ loading,
19
+ error
20
+ };
21
+ };
22
+ //# sourceMappingURL=useGroupChannel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useState","useAsyncEffect","useGroupChannel","sdk","channelUrl","channel","setChannel","loading","setLoading","error","setError","groupChannel","getChannel","e"],"sources":["useGroupChannel.ts"],"sourcesContent":["import { useState } from 'react';\n\nimport { SendbirdChatSDK, SendbirdGroupChannel, useAsyncEffect } from '@sendbird/uikit-utils';\n\nexport const useGroupChannel = (sdk: SendbirdChatSDK, channelUrl: string) => {\n const [channel, setChannel] = useState<SendbirdGroupChannel>();\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<unknown>();\n\n useAsyncEffect(async () => {\n try {\n setChannel(await sdk.groupChannel.getChannel(channelUrl));\n } catch (e) {\n setError(e);\n } finally {\n setLoading(false);\n }\n }, []);\n\n return { channel, loading, error };\n};\n"],"mappings":"AAAA,SAASA,QAAT,QAAyB,OAAzB;AAEA,SAAgDC,cAAhD,QAAsE,uBAAtE;AAEA,OAAO,MAAMC,eAAe,GAAG,CAACC,GAAD,EAAuBC,UAAvB,KAA8C;EAC3E,MAAM,CAACC,OAAD,EAAUC,UAAV,IAAwBN,QAAQ,EAAtC;EACA,MAAM,CAACO,OAAD,EAAUC,UAAV,IAAwBR,QAAQ,CAAC,IAAD,CAAtC;EACA,MAAM,CAACS,KAAD,EAAQC,QAAR,IAAoBV,QAAQ,EAAlC;EAEAC,cAAc,CAAC,YAAY;IACzB,IAAI;MACFK,UAAU,CAAC,MAAMH,GAAG,CAACQ,YAAJ,CAAiBC,UAAjB,CAA4BR,UAA5B,CAAP,CAAV;IACD,CAFD,CAEE,OAAOS,CAAP,EAAU;MACVH,QAAQ,CAACG,CAAD,CAAR;IACD,CAJD,SAIU;MACRL,UAAU,CAAC,KAAD,CAAV;IACD;EACF,CARa,EAQX,EARW,CAAd;EAUA,OAAO;IAAEH,OAAF;IAAWE,OAAX;IAAoBE;EAApB,CAAP;AACD,CAhBM"}
@@ -18,13 +18,13 @@ const defaultReducer = (_ref, action) => {
18
18
  case 'update_next_messages':
19
19
  {
20
20
  const key = action.type === 'update_messages' ? 'messageMap' : 'nextMessageMap';
21
- const messageMap = arrayToMapWithGetter(action.value.messages, getMessageUniqId);
21
+ const receivedMessagesAsMap = arrayToMapWithGetter(action.value.messages, getMessageUniqId);
22
22
 
23
23
  if (action.value.clearPrev) {
24
- draft[key] = messageMap;
24
+ draft[key] = receivedMessagesAsMap;
25
25
  } else {
26
26
  draft[key] = { ...draft[key],
27
- ...messageMap
27
+ ...receivedMessagesAsMap
28
28
  }; // NOTE: Replace pending message to succeeded message
29
29
 
30
30
  action.value.messages.filter(m => {
@@ -1 +1 @@
1
- {"version":3,"names":["useReducer","arrayToMapWithGetter","getMessageUniqId","isMyMessage","isNewMessage","useIIFE","defaultReducer","action","draft","type","key","value","status","messageMap","messages","clearPrev","filter","m","isFileMessage","isUserMessage","Boolean","reqId","sendingStatus","currentUserId","forEach","messageIds","msgId","reqIds","useGroupChannelMessagesReducer","userId","sortComparator","loading","refreshing","nextMessageMap","dispatch","updateMessages","deleteMessages","updateNextMessages","deleteNextMessages","updateLoading","updateRefreshing","Object","values","sort","nextMessages","newMessagesFromMembers","msg"],"sources":["reducer.ts"],"sourcesContent":["import { useReducer } from 'react';\n\nimport type { SendbirdBaseMessage, SendbirdFileMessage, SendbirdUserMessage } from '@sendbird/uikit-utils';\nimport { arrayToMapWithGetter, getMessageUniqId, isMyMessage, isNewMessage, useIIFE } from '@sendbird/uikit-utils';\n\nimport type { UseGroupChannelMessagesOptions } from '../../types';\n\ntype Action =\n | {\n type: 'update_loading' | 'update_refreshing';\n value: { status: boolean };\n }\n | {\n type: 'update_messages' | 'update_next_messages';\n value: { messages: SendbirdBaseMessage[]; clearPrev: boolean; currentUserId?: string };\n }\n | {\n type: 'delete_messages' | 'delete_next_messages';\n value: { messageIds: number[]; reqIds: string[] };\n };\n\ntype State = {\n loading: boolean;\n refreshing: boolean;\n messageMap: Record<string, SendbirdBaseMessage>;\n nextMessageMap: Record<string, SendbirdBaseMessage>;\n};\n\nconst defaultReducer = ({ ...draft }: State, action: Action) => {\n switch (action.type) {\n case 'update_refreshing':\n case 'update_loading': {\n const key = action.type === 'update_loading' ? 'loading' : 'refreshing';\n draft[key] = action.value.status;\n\n return draft;\n }\n case 'update_messages':\n case 'update_next_messages': {\n const key = action.type === 'update_messages' ? 'messageMap' : ('nextMessageMap' as const);\n const messageMap = arrayToMapWithGetter(action.value.messages, getMessageUniqId);\n if (action.value.clearPrev) {\n draft[key] = messageMap;\n } else {\n draft[key] = { ...draft[key], ...messageMap };\n\n // NOTE: Replace pending message to succeeded message\n action.value.messages\n .filter((m): m is SendbirdUserMessage | SendbirdFileMessage => {\n return (\n (m.isFileMessage() || m.isUserMessage()) &&\n Boolean(draft[key][m.reqId]) &&\n m.sendingStatus === 'succeeded' &&\n isMyMessage(m, action.value.currentUserId)\n );\n })\n .forEach((m) => delete draft[key][m.reqId]);\n }\n\n if (action.type === 'update_messages') {\n draft['nextMessageMap'] = {};\n }\n\n return draft;\n }\n case 'delete_messages':\n case 'delete_next_messages': {\n const key = action.type === 'delete_messages' ? 'messageMap' : 'nextMessageMap';\n draft[key] = { ...draft[key] };\n action.value.messageIds.forEach((msgId) => delete draft[key][msgId]);\n action.value.reqIds.forEach((reqId) => delete draft[key][reqId]);\n\n return draft;\n }\n }\n};\n\nexport const useGroupChannelMessagesReducer = (\n userId?: string,\n sortComparator?: UseGroupChannelMessagesOptions['sortComparator'],\n) => {\n const [{ loading, refreshing, messageMap, nextMessageMap }, dispatch] = useReducer(defaultReducer, {\n loading: true,\n refreshing: false,\n messageMap: {},\n nextMessageMap: {},\n });\n\n const updateMessages = (messages: SendbirdBaseMessage[], clearPrev: boolean, currentUserId?: string) => {\n dispatch({ type: 'update_messages', value: { messages, clearPrev, currentUserId } });\n };\n const deleteMessages = (messageIds: number[], reqIds: string[]) => {\n dispatch({ type: 'delete_messages', value: { messageIds, reqIds } });\n };\n const updateNextMessages = (messages: SendbirdBaseMessage[], clearPrev: boolean, currentUserId?: string) => {\n dispatch({ type: 'update_next_messages', value: { messages, clearPrev, currentUserId } });\n };\n const deleteNextMessages = (messageIds: number[], reqIds: string[]) => {\n dispatch({ type: 'delete_next_messages', value: { messageIds, reqIds } });\n };\n const updateLoading = (status: boolean) => {\n dispatch({ type: 'update_loading', value: { status } });\n };\n const updateRefreshing = (status: boolean) => {\n dispatch({ type: 'update_refreshing', value: { status } });\n };\n\n const messages = useIIFE(() => {\n if (sortComparator) return Object.values(messageMap).sort(sortComparator);\n return Object.values(messageMap);\n });\n const nextMessages = Object.values(nextMessageMap);\n const newMessagesFromMembers = nextMessages.filter((msg) => isNewMessage(msg, userId));\n\n return {\n updateLoading,\n updateRefreshing,\n updateMessages,\n updateNextMessages,\n deleteMessages,\n deleteNextMessages,\n\n loading,\n refreshing,\n messages,\n nextMessages,\n newMessagesFromMembers,\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["useReducer","arrayToMapWithGetter","getMessageUniqId","isMyMessage","isNewMessage","useIIFE","defaultReducer","action","draft","type","key","value","status","receivedMessagesAsMap","messages","clearPrev","filter","m","isFileMessage","isUserMessage","Boolean","reqId","sendingStatus","currentUserId","forEach","messageIds","msgId","reqIds","useGroupChannelMessagesReducer","userId","sortComparator","loading","refreshing","messageMap","nextMessageMap","dispatch","updateMessages","deleteMessages","updateNextMessages","deleteNextMessages","updateLoading","updateRefreshing","Object","values","sort","nextMessages","newMessagesFromMembers","msg"],"sources":["reducer.ts"],"sourcesContent":["import { useReducer } from 'react';\n\nimport type { SendbirdBaseMessage, SendbirdFileMessage, SendbirdUserMessage } from '@sendbird/uikit-utils';\nimport { arrayToMapWithGetter, getMessageUniqId, isMyMessage, isNewMessage, useIIFE } from '@sendbird/uikit-utils';\n\nimport type { UseGroupChannelMessagesOptions } from '../../types';\n\ntype Action =\n | {\n type: 'update_loading' | 'update_refreshing';\n value: { status: boolean };\n }\n | {\n type: 'update_messages' | 'update_next_messages';\n value: { messages: SendbirdBaseMessage[]; clearPrev: boolean; currentUserId?: string };\n }\n | {\n type: 'delete_messages' | 'delete_next_messages';\n value: { messageIds: number[]; reqIds: string[] };\n };\n\ntype State = {\n loading: boolean;\n refreshing: boolean;\n messageMap: Record<string, SendbirdBaseMessage>;\n nextMessageMap: Record<string, SendbirdBaseMessage>;\n};\n\nconst defaultReducer = ({ ...draft }: State, action: Action) => {\n switch (action.type) {\n case 'update_refreshing':\n case 'update_loading': {\n const key = action.type === 'update_loading' ? 'loading' : 'refreshing';\n draft[key] = action.value.status;\n\n return draft;\n }\n case 'update_messages':\n case 'update_next_messages': {\n const key = action.type === 'update_messages' ? 'messageMap' : 'nextMessageMap';\n const receivedMessagesAsMap = arrayToMapWithGetter(action.value.messages, getMessageUniqId);\n if (action.value.clearPrev) {\n draft[key] = receivedMessagesAsMap;\n } else {\n draft[key] = { ...draft[key], ...receivedMessagesAsMap };\n\n // NOTE: Replace pending message to succeeded message\n action.value.messages\n .filter((m): m is SendbirdUserMessage | SendbirdFileMessage => {\n return (\n (m.isFileMessage() || m.isUserMessage()) &&\n Boolean(draft[key][m.reqId]) &&\n m.sendingStatus === 'succeeded' &&\n isMyMessage(m, action.value.currentUserId)\n );\n })\n .forEach((m) => delete draft[key][m.reqId]);\n }\n\n if (action.type === 'update_messages') {\n draft['nextMessageMap'] = {};\n }\n\n return draft;\n }\n case 'delete_messages':\n case 'delete_next_messages': {\n const key = action.type === 'delete_messages' ? 'messageMap' : 'nextMessageMap';\n draft[key] = { ...draft[key] };\n action.value.messageIds.forEach((msgId) => delete draft[key][msgId]);\n action.value.reqIds.forEach((reqId) => delete draft[key][reqId]);\n\n return draft;\n }\n }\n};\n\nexport const useGroupChannelMessagesReducer = (\n userId?: string,\n sortComparator?: UseGroupChannelMessagesOptions['sortComparator'],\n) => {\n const [{ loading, refreshing, messageMap, nextMessageMap }, dispatch] = useReducer(defaultReducer, {\n loading: true,\n refreshing: false,\n messageMap: {},\n nextMessageMap: {},\n });\n\n const updateMessages = (messages: SendbirdBaseMessage[], clearPrev: boolean, currentUserId?: string) => {\n dispatch({ type: 'update_messages', value: { messages, clearPrev, currentUserId } });\n };\n const deleteMessages = (messageIds: number[], reqIds: string[]) => {\n dispatch({ type: 'delete_messages', value: { messageIds, reqIds } });\n };\n const updateNextMessages = (messages: SendbirdBaseMessage[], clearPrev: boolean, currentUserId?: string) => {\n dispatch({ type: 'update_next_messages', value: { messages, clearPrev, currentUserId } });\n };\n const deleteNextMessages = (messageIds: number[], reqIds: string[]) => {\n dispatch({ type: 'delete_next_messages', value: { messageIds, reqIds } });\n };\n const updateLoading = (status: boolean) => {\n dispatch({ type: 'update_loading', value: { status } });\n };\n const updateRefreshing = (status: boolean) => {\n dispatch({ type: 'update_refreshing', value: { status } });\n };\n\n const messages = useIIFE(() => {\n if (sortComparator) return Object.values(messageMap).sort(sortComparator);\n return Object.values(messageMap);\n });\n const nextMessages = Object.values(nextMessageMap);\n const newMessagesFromMembers = nextMessages.filter((msg) => isNewMessage(msg, userId));\n\n return {\n updateLoading,\n updateRefreshing,\n updateMessages,\n updateNextMessages,\n deleteMessages,\n deleteNextMessages,\n\n loading,\n refreshing,\n messages,\n nextMessages,\n newMessagesFromMembers,\n };\n};\n"],"mappings":"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"}