@sendbird/uikit-chat-hooks 1.1.1 → 2.0.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/README.md +1 -1
  2. package/lib/commonjs/channel/useActiveGroupChannel.js +1 -1
  3. package/lib/commonjs/channel/useActiveGroupChannel.js.map +1 -1
  4. package/lib/commonjs/channel/useGroupChannelList/index.js +3 -0
  5. package/lib/commonjs/channel/useGroupChannelList/index.js.map +1 -1
  6. package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithCollection.js +26 -27
  7. package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithCollection.js.map +1 -1
  8. package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithQuery.js +8 -11
  9. package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithQuery.js.map +1 -1
  10. package/lib/commonjs/channel/useGroupChannelMessages/index.js +3 -0
  11. package/lib/commonjs/channel/useGroupChannelMessages/index.js.map +1 -1
  12. package/lib/commonjs/channel/useGroupChannelMessages/reducer.js.map +1 -1
  13. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +83 -87
  14. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
  15. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +32 -20
  16. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
  17. package/lib/commonjs/common/useMessageOutgoingStatus.js +8 -4
  18. package/lib/commonjs/common/useMessageOutgoingStatus.js.map +1 -1
  19. package/lib/commonjs/common/usePushTrigger.js +13 -5
  20. package/lib/commonjs/common/usePushTrigger.js.map +1 -1
  21. package/lib/commonjs/common/useTotalUnreadChannelCount.js +4 -2
  22. package/lib/commonjs/common/useTotalUnreadChannelCount.js.map +1 -1
  23. package/lib/commonjs/common/useTotalUnreadMessageCount.js +12 -15
  24. package/lib/commonjs/common/useTotalUnreadMessageCount.js.map +1 -1
  25. package/lib/commonjs/handler/useChannelHandler.js +5 -3
  26. package/lib/commonjs/handler/useChannelHandler.js.map +1 -1
  27. package/lib/commonjs/handler/useConnectionHandler.js +5 -3
  28. package/lib/commonjs/handler/useConnectionHandler.js.map +1 -1
  29. package/lib/commonjs/handler/useUserEventHandler.js +19 -6
  30. package/lib/commonjs/handler/useUserEventHandler.js.map +1 -1
  31. package/lib/commonjs/types.js.map +1 -1
  32. package/lib/module/channel/useActiveGroupChannel.js +1 -1
  33. package/lib/module/channel/useActiveGroupChannel.js.map +1 -1
  34. package/lib/module/channel/useGroupChannelList/index.js +2 -0
  35. package/lib/module/channel/useGroupChannelList/index.js.map +1 -1
  36. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js +26 -28
  37. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js.map +1 -1
  38. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithQuery.js +8 -12
  39. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithQuery.js.map +1 -1
  40. package/lib/module/channel/useGroupChannelMessages/index.js +2 -0
  41. package/lib/module/channel/useGroupChannelMessages/index.js.map +1 -1
  42. package/lib/module/channel/useGroupChannelMessages/reducer.js.map +1 -1
  43. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +81 -87
  44. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
  45. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +33 -21
  46. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
  47. package/lib/module/common/useMessageOutgoingStatus.js +8 -4
  48. package/lib/module/common/useMessageOutgoingStatus.js.map +1 -1
  49. package/lib/module/common/usePushTrigger.js +11 -5
  50. package/lib/module/common/usePushTrigger.js.map +1 -1
  51. package/lib/module/common/useTotalUnreadChannelCount.js +4 -2
  52. package/lib/module/common/useTotalUnreadChannelCount.js.map +1 -1
  53. package/lib/module/common/useTotalUnreadMessageCount.js +12 -17
  54. package/lib/module/common/useTotalUnreadMessageCount.js.map +1 -1
  55. package/lib/module/handler/useChannelHandler.js +4 -3
  56. package/lib/module/handler/useChannelHandler.js.map +1 -1
  57. package/lib/module/handler/useConnectionHandler.js +4 -3
  58. package/lib/module/handler/useConnectionHandler.js.map +1 -1
  59. package/lib/module/handler/useUserEventHandler.js +19 -7
  60. package/lib/module/handler/useUserEventHandler.js.map +1 -1
  61. package/lib/module/types.js.map +1 -1
  62. package/lib/typescript/src/channel/useActiveGroupChannel.d.ts +2 -2
  63. package/lib/typescript/src/channel/useGroupChannelList/reducer.d.ts +1 -1
  64. package/lib/typescript/src/channel/useGroupChannelMessages/reducer.d.ts +4 -4
  65. package/lib/typescript/src/common/useMessageOutgoingStatus.d.ts +2 -2
  66. package/lib/typescript/src/common/usePushTrigger.d.ts +9 -3
  67. package/lib/typescript/src/common/useTotalUnreadMessageCount.d.ts +4 -4
  68. package/lib/typescript/src/common/useUserList.d.ts +1 -1
  69. package/lib/typescript/src/handler/useChannelHandler.d.ts +2 -2
  70. package/lib/typescript/src/handler/useConnectionHandler.d.ts +2 -2
  71. package/lib/typescript/src/handler/useUserEventHandler.d.ts +2 -3
  72. package/lib/typescript/src/types.d.ts +7 -8
  73. package/package.json +5 -5
  74. package/src/channel/useActiveGroupChannel.ts +1 -1
  75. package/src/channel/useGroupChannelList/index.ts +3 -0
  76. package/src/channel/useGroupChannelList/useGroupChannelListWithCollection.ts +22 -25
  77. package/src/channel/useGroupChannelList/useGroupChannelListWithQuery.ts +10 -15
  78. package/src/channel/useGroupChannelMessages/index.ts +3 -0
  79. package/src/channel/useGroupChannelMessages/reducer.ts +4 -9
  80. package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.ts +79 -78
  81. package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.ts +59 -34
  82. package/src/common/useMessageOutgoingStatus.ts +8 -13
  83. package/src/common/usePushTrigger.ts +13 -7
  84. package/src/common/useTotalUnreadChannelCount.ts +4 -2
  85. package/src/common/useTotalUnreadMessageCount.ts +14 -25
  86. package/src/handler/useChannelHandler.ts +5 -5
  87. package/src/handler/useConnectionHandler.ts +5 -5
  88. package/src/handler/useUserEventHandler.ts +15 -8
  89. package/src/types.ts +10 -10
@@ -7,6 +7,8 @@ exports.useGroupChannelMessagesWithCollection = void 0;
7
7
 
8
8
  var _react = require("react");
9
9
 
10
+ var _groupChannel = require("@sendbird/chat/groupChannel");
11
+
10
12
  var _uikitUtils = require("@sendbird/uikit-utils");
11
13
 
12
14
  var _useAppFeatures = require("../../common/useAppFeatures");
@@ -17,22 +19,18 @@ var _useActiveGroupChannel = require("../useActiveGroupChannel");
17
19
 
18
20
  var _reducer = require("./reducer");
19
21
 
20
- const createMessageCollection = (sdk, channel, creator) => {
22
+ const createMessageCollection = (channel, creator) => {
21
23
  if (creator) return creator();
22
- const collection = channel.createMessageCollection();
23
- const filter = new sdk.MessageFilter();
24
- return collection.setLimit(100).setFilter(filter).build();
24
+ const filter = new _groupChannel.MessageFilter();
25
+ return channel.createMessageCollection({
26
+ filter,
27
+ limit: 100
28
+ });
25
29
  };
26
30
 
27
- const HOOK_NAME = 'useGroupChannelMessagesWithCollection'; // FIXME: MessageCollection event handler bug, initialize(run async addObserver) -> dispose -> removeObserver -> addObserver called
31
+ const HOOK_NAME = 'useGroupChannelMessagesWithCollection';
28
32
 
29
33
  const useGroupChannelMessagesWithCollection = (sdk, channel, userId, options) => {
30
- const isMounted = (0, _uikitUtils.useIsMountedRef)();
31
-
32
- const disposeManuallyAfterUnmounted = () => {
33
- if (!isMounted.current && collectionRef.current) collectionRef.current.dispose();
34
- };
35
-
36
34
  const {
37
35
  deliveryReceiptEnabled
38
36
  } = (0, _useAppFeatures.useAppFeatures)(sdk);
@@ -59,13 +57,13 @@ const useGroupChannelMessagesWithCollection = (sdk, channel, userId, options) =>
59
57
 
60
58
  const channelMarkAs = async () => {
61
59
  try {
62
- if (deliveryReceiptEnabled) sdk.markAsDelivered(activeChannel.url);
60
+ if (deliveryReceiptEnabled) await (0, _uikitUtils.confirmAndMarkAsDelivered)(sdk, activeChannel);
63
61
  } catch (e) {
64
62
  _uikitUtils.Logger.warn(`[${HOOK_NAME}/channelMarkAs/Delivered]`, e);
65
63
  }
66
64
 
67
65
  try {
68
- await sdk.markAsReadWithChannelUrls([activeChannel.url]);
66
+ await (0, _uikitUtils.confirmAndMarkAsRead)(sdk, [activeChannel]);
69
67
  } catch (e) {
70
68
  _uikitUtils.Logger.warn(`[${HOOK_NAME}/channelMarkAs/Read]`, e);
71
69
  }
@@ -83,82 +81,68 @@ const useGroupChannelMessagesWithCollection = (sdk, channel, userId, options) =>
83
81
  if (collectionRef.current) (_collectionRef$curren = collectionRef.current) === null || _collectionRef$curren === void 0 ? void 0 : _collectionRef$curren.dispose();
84
82
 
85
83
  if (uid) {
86
- collectionRef.current = createMessageCollection(sdk, activeChannel, options === null || options === void 0 ? void 0 : options.collectionCreator);
84
+ var _collectionRef$curren2;
85
+
86
+ collectionRef.current = createMessageCollection(activeChannel, options === null || options === void 0 ? void 0 : options.collectionCreator);
87
87
  updateNextMessages([], true, sdk.currentUser.userId);
88
88
  channelMarkAs();
89
- collectionRef.current.initialize(sdk.MessageCollection.MessageCollectionInitPolicy.CACHE_AND_REPLACE_BY_API).onCacheResult((err, messages) => {
90
- if (err) sdk.isCacheEnabled && _uikitUtils.Logger.error(`[${HOOK_NAME}/onCacheResult]`, err);else {
91
- var _collectionRef$curren2, _collectionRef$curren3;
92
-
93
- _uikitUtils.Logger.debug(`[${HOOK_NAME}/onCacheResult]`, 'message length:', messages.length);
94
-
95
- updateMessages(messages, true, sdk.currentUser.userId);
96
- updateMessages(((_collectionRef$curren2 = collectionRef.current) === null || _collectionRef$curren2 === void 0 ? void 0 : _collectionRef$curren2.pendingMessages) ?? [], false, sdk.currentUser.userId);
97
- updateMessages(((_collectionRef$curren3 = collectionRef.current) === null || _collectionRef$curren3 === void 0 ? void 0 : _collectionRef$curren3.failedMessages) ?? [], false, sdk.currentUser.userId);
98
- if (messages !== null && messages !== void 0 && messages.length) callback === null || callback === void 0 ? void 0 : callback();
99
- }
100
- }).onApiResult((err, messages) => {
101
- if (err) _uikitUtils.Logger.warn(`[${HOOK_NAME}/onApiResult]`, err);else {
102
- _uikitUtils.Logger.debug(`[${HOOK_NAME}/onApiResult]`, 'message length:', messages.length);
103
-
104
- updateMessages(messages, true, sdk.currentUser.userId);
105
-
106
- if (sdk.isCacheEnabled) {
107
- var _collectionRef$curren4, _collectionRef$curren5;
108
-
109
- updateMessages(((_collectionRef$curren4 = collectionRef.current) === null || _collectionRef$curren4 === void 0 ? void 0 : _collectionRef$curren4.pendingMessages) ?? [], false, sdk.currentUser.userId);
110
- updateMessages(((_collectionRef$curren5 = collectionRef.current) === null || _collectionRef$curren5 === void 0 ? void 0 : _collectionRef$curren5.failedMessages) ?? [], false, sdk.currentUser.userId);
111
- }
112
- }
113
- callback === null || callback === void 0 ? void 0 : callback();
114
- });
115
- collectionRef.current.setMessageCollectionHandler({
116
- onMessagesAdded(_, channel, messages) {
117
- disposeManuallyAfterUnmounted();
89
+ (_collectionRef$curren2 = collectionRef.current) === null || _collectionRef$curren2 === void 0 ? void 0 : _collectionRef$curren2.setMessageCollectionHandler({
90
+ onMessagesAdded: (_, channel, messages) => {
118
91
  channelMarkAs();
119
92
  updateNextMessages(messages, false, sdk.currentUser.userId);
120
93
  updateChannel(channel);
121
94
  },
122
-
123
- onMessagesUpdated(_, channel, messages) {
124
- disposeManuallyAfterUnmounted();
95
+ onMessagesUpdated: (_, channel, messages) => {
125
96
  updateMessages(messages, false, sdk.currentUser.userId);
126
97
  updateChannel(channel);
127
98
  },
128
-
129
- onMessagesDeleted(_, channel, messages) {
130
- disposeManuallyAfterUnmounted();
131
- const msgIds = messages.map(m => m.messageId);
132
- const reqIds = messages.filter(m => 'reqId' in m).map(m => m.reqId);
133
- deleteMessages(msgIds, reqIds);
134
- deleteNextMessages(msgIds, reqIds);
99
+ onMessagesDeleted: (_, channel, messageIds) => {
100
+ deleteMessages(messageIds, []);
101
+ deleteNextMessages(messageIds, []);
135
102
  updateChannel(channel);
136
103
  },
137
-
138
- onChannelDeleted() {
104
+ onChannelDeleted: () => {
139
105
  var _options$onChannelDel;
140
106
 
141
- disposeManuallyAfterUnmounted();
142
107
  options === null || options === void 0 ? void 0 : (_options$onChannelDel = options.onChannelDeleted) === null || _options$onChannelDel === void 0 ? void 0 : _options$onChannelDel.call(options);
143
108
  },
144
-
145
- onChannelUpdated(_, channel) {
146
- disposeManuallyAfterUnmounted();
109
+ onChannelUpdated: (_, channel) => {
147
110
  updateChannel(channel);
148
111
  },
149
-
150
- onHugeGapDetected() {
151
- disposeManuallyAfterUnmounted();
112
+ onHugeGapDetected: () => {
152
113
  init(uid);
153
114
  }
115
+ });
116
+ collectionRef.current.initialize(_groupChannel.MessageCollectionInitPolicy.CACHE_AND_REPLACE_BY_API).onCacheResult((err, messages) => {
117
+ if (err) sdk.isCacheEnabled && _uikitUtils.Logger.error(`[${HOOK_NAME}/onCacheResult]`, err);else {
118
+ var _collectionRef$curren3, _collectionRef$curren4;
119
+
120
+ _uikitUtils.Logger.debug(`[${HOOK_NAME}/onCacheResult]`, 'message length:', messages.length);
121
+
122
+ updateMessages(messages, true, sdk.currentUser.userId);
123
+ updateMessages(((_collectionRef$curren3 = collectionRef.current) === null || _collectionRef$curren3 === void 0 ? void 0 : _collectionRef$curren3.pendingMessages) ?? [], false, sdk.currentUser.userId);
124
+ updateMessages(((_collectionRef$curren4 = collectionRef.current) === null || _collectionRef$curren4 === void 0 ? void 0 : _collectionRef$curren4.failedMessages) ?? [], false, sdk.currentUser.userId);
125
+ if (messages !== null && messages !== void 0 && messages.length) callback === null || callback === void 0 ? void 0 : callback();
126
+ }
127
+ }).onApiResult((err, messages) => {
128
+ if (err) _uikitUtils.Logger.warn(`[${HOOK_NAME}/onApiResult]`, err);else {
129
+ _uikitUtils.Logger.debug(`[${HOOK_NAME}/onApiResult]`, 'message length:', messages.length);
154
130
 
131
+ updateMessages(messages, true, sdk.currentUser.userId);
132
+
133
+ if (sdk.isCacheEnabled) {
134
+ var _collectionRef$curren5, _collectionRef$curren6;
135
+
136
+ updateMessages(((_collectionRef$curren5 = collectionRef.current) === null || _collectionRef$curren5 === void 0 ? void 0 : _collectionRef$curren5.pendingMessages) ?? [], false, sdk.currentUser.userId);
137
+ updateMessages(((_collectionRef$curren6 = collectionRef.current) === null || _collectionRef$curren6 === void 0 ? void 0 : _collectionRef$curren6.failedMessages) ?? [], false, sdk.currentUser.userId);
138
+ }
139
+ }
140
+ callback === null || callback === void 0 ? void 0 : callback();
155
141
  });
156
142
  }
157
143
  }, [sdk, activeChannel.url, options === null || options === void 0 ? void 0 : options.collectionCreator]);
158
144
  (0, _useChannelHandler.useChannelHandler)(sdk, HOOK_NAME, {
159
145
  onUserBanned(channel, bannedUser) {
160
- disposeManuallyAfterUnmounted();
161
-
162
146
  if (channel.isGroupChannel() && !(0, _uikitUtils.isDifferentChannel)(channel, activeChannel)) {
163
147
  if (bannedUser.userId === sdk.currentUser.userId) {
164
148
  var _options$onChannelDel2;
@@ -181,9 +165,9 @@ const useGroupChannelMessagesWithCollection = (sdk, channel, userId, options) =>
181
165
  }, [init, userId]);
182
166
  (0, _react.useEffect)(() => {
183
167
  return () => {
184
- var _collectionRef$curren6;
168
+ var _collectionRef$curren7;
185
169
 
186
- if (collectionRef.current) (_collectionRef$curren6 = collectionRef.current) === null || _collectionRef$curren6 === void 0 ? void 0 : _collectionRef$curren6.dispose();
170
+ if (collectionRef.current) (_collectionRef$curren7 = collectionRef.current) === null || _collectionRef$curren7 === void 0 ? void 0 : _collectionRef$curren7.dispose();
187
171
  };
188
172
  }, []);
189
173
  const refresh = (0, _react.useCallback)(async () => {
@@ -191,27 +175,27 @@ const useGroupChannelMessagesWithCollection = (sdk, channel, userId, options) =>
191
175
  init(userId, () => updateRefreshing(false));
192
176
  }, [init, userId]);
193
177
  const prev = (0, _react.useCallback)(async () => {
194
- var _collectionRef$curren7;
178
+ var _collectionRef$curren8;
195
179
 
196
- if (collectionRef.current && (_collectionRef$curren7 = collectionRef.current) !== null && _collectionRef$curren7 !== void 0 && _collectionRef$curren7.hasPrevious) {
180
+ if (collectionRef.current && (_collectionRef$curren8 = collectionRef.current) !== null && _collectionRef$curren8 !== void 0 && _collectionRef$curren8.hasPrevious) {
197
181
  try {
198
- var _collectionRef$curren8;
182
+ var _collectionRef$curren9;
199
183
 
200
- const list = await ((_collectionRef$curren8 = collectionRef.current) === null || _collectionRef$curren8 === void 0 ? void 0 : _collectionRef$curren8.loadPrevious());
184
+ const list = await ((_collectionRef$curren9 = collectionRef.current) === null || _collectionRef$curren9 === void 0 ? void 0 : _collectionRef$curren9.loadPrevious());
201
185
  updateMessages(list, false, sdk.currentUser.userId);
202
186
  } catch {}
203
187
  }
204
188
  }, []);
205
189
  const next = (0, _react.useCallback)(async () => {
206
- var _collectionRef$curren9;
190
+ var _collectionRef$curren10;
207
191
 
208
192
  const list = [];
209
193
 
210
- if (collectionRef.current && (_collectionRef$curren9 = collectionRef.current) !== null && _collectionRef$curren9 !== void 0 && _collectionRef$curren9.hasNext) {
194
+ if (collectionRef.current && (_collectionRef$curren10 = collectionRef.current) !== null && _collectionRef$curren10 !== void 0 && _collectionRef$curren10.hasNext) {
211
195
  try {
212
- var _collectionRef$curren10;
196
+ var _collectionRef$curren11;
213
197
 
214
- const fetchedList = await ((_collectionRef$curren10 = collectionRef.current) === null || _collectionRef$curren10 === void 0 ? void 0 : _collectionRef$curren10.loadNext());
198
+ const fetchedList = await ((_collectionRef$curren11 = collectionRef.current) === null || _collectionRef$curren11 === void 0 ? void 0 : _collectionRef$curren11.loadNext());
215
199
  list.push(...fetchedList);
216
200
  } catch {}
217
201
  }
@@ -227,41 +211,53 @@ const useGroupChannelMessagesWithCollection = (sdk, channel, userId, options) =>
227
211
  }, [nextMessages.length]);
228
212
  const sendUserMessage = (0, _react.useCallback)((params, onPending) => {
229
213
  return new Promise((resolve, reject) => {
230
- const pendingMessage = activeChannel.sendUserMessage(params, (sentMessage, error) => {
231
- if (error) reject(error);else {
214
+ activeChannel.sendUserMessage(params).onPending(pendingMessage => {
215
+ if (pendingMessage.isUserMessage()) {
216
+ onPending === null || onPending === void 0 ? void 0 : onPending(pendingMessage);
217
+ updateMessages([pendingMessage], false, sdk.currentUser.userId);
218
+ }
219
+ }).onSucceeded(sentMessage => {
220
+ if (sentMessage.isUserMessage()) {
232
221
  updateMessages([sentMessage], false, sdk.currentUser.userId);
233
222
  resolve(sentMessage);
234
223
  }
224
+ }).onFailed(err => {
225
+ reject(err);
235
226
  });
236
- onPending === null || onPending === void 0 ? void 0 : onPending(pendingMessage);
237
- updateMessages([pendingMessage], false, sdk.currentUser.userId);
238
227
  });
239
228
  }, [activeChannel]);
240
229
  const sendFileMessage = (0, _react.useCallback)((params, onPending) => {
241
230
  return new Promise((resolve, reject) => {
242
- const pendingMessage = activeChannel.sendFileMessage(params, (sentMessage, error) => {
243
- if (error) reject(error);else {
231
+ activeChannel.sendFileMessage(params).onPending(pendingMessage => {
232
+ if (pendingMessage.isFileMessage()) {
233
+ updateMessages([pendingMessage], false, sdk.currentUser.userId);
234
+ onPending === null || onPending === void 0 ? void 0 : onPending(pendingMessage);
235
+ }
236
+ }).onSucceeded(sentMessage => {
237
+ if (sentMessage.isFileMessage()) {
244
238
  updateMessages([sentMessage], false, sdk.currentUser.userId);
245
239
  resolve(sentMessage);
246
240
  }
241
+ }).onFailed(err => {
242
+ reject(err);
247
243
  });
248
- updateMessages([pendingMessage], false, sdk.currentUser.userId);
249
- onPending === null || onPending === void 0 ? void 0 : onPending(pendingMessage);
250
244
  });
251
245
  }, [activeChannel]);
252
246
  const updateUserMessage = (0, _react.useCallback)(async (messageId, params) => {
253
- const updatedMessage = await activeChannel.updateUserMessage(messageId, params, _uikitUtils.NOOP);
247
+ const updatedMessage = await activeChannel.updateUserMessage(messageId, params);
254
248
  updateMessages([updatedMessage], false, sdk.currentUser.userId);
255
249
  return updatedMessage;
256
250
  }, [activeChannel]);
257
251
  const updateFileMessage = (0, _react.useCallback)(async (messageId, params) => {
258
- const updatedMessage = await activeChannel.updateFileMessage(messageId, params, _uikitUtils.NOOP);
252
+ const updatedMessage = await activeChannel.updateFileMessage(messageId, params);
259
253
  updateMessages([updatedMessage], false, sdk.currentUser.userId);
260
254
  return updatedMessage;
261
255
  }, [activeChannel]);
262
256
  const resendMessage = (0, _react.useCallback)(async failedMessage => {
263
257
  const message = await (() => {
264
- if (failedMessage.isUserMessage()) return activeChannel.resendUserMessage(failedMessage);
258
+ if (failedMessage.isUserMessage()) return activeChannel.resendUserMessage(failedMessage); // FIXME: v4 bugs
259
+ // @ts-ignore
260
+
265
261
  if (failedMessage.isFileMessage()) return activeChannel.resendFileMessage(failedMessage);
266
262
  return null;
267
263
  })();
@@ -273,9 +269,9 @@ const useGroupChannelMessagesWithCollection = (sdk, channel, userId, options) =>
273
269
  if (message.isFileMessage()) await activeChannel.deleteMessage(message);
274
270
  } else {
275
271
  try {
276
- var _collectionRef$curren11;
272
+ var _collectionRef$curren12;
277
273
 
278
- await ((_collectionRef$curren11 = collectionRef.current) === null || _collectionRef$curren11 === void 0 ? void 0 : _collectionRef$curren11.removeFailedMessages([message]));
274
+ await ((_collectionRef$curren12 = collectionRef.current) === null || _collectionRef$curren12 === void 0 ? void 0 : _collectionRef$curren12.removeFailedMessage(message.reqId));
279
275
  } finally {
280
276
  deleteMessages([message.messageId], [message.reqId]);
281
277
  }
@@ -1 +1 @@
1
- {"version":3,"names":["createMessageCollection","sdk","channel","creator","collection","filter","MessageFilter","setLimit","setFilter","build","HOOK_NAME","useGroupChannelMessagesWithCollection","userId","options","isMounted","useIsMountedRef","disposeManuallyAfterUnmounted","current","collectionRef","dispose","deliveryReceiptEnabled","useAppFeatures","useRef","activeChannel","setActiveChannel","useActiveGroupChannel","forceUpdate","useForceUpdate","loading","refreshing","messages","nextMessages","newMessagesFromMembers","updateMessages","updateNextMessages","deleteNextMessages","deleteMessages","updateLoading","updateRefreshing","useGroupChannelMessagesReducer","sortComparator","channelMarkAs","markAsDelivered","url","e","Logger","warn","markAsReadWithChannelUrls","updateChannel","isGroupChannel","isDifferentChannel","init","useCallback","uid","callback","collectionCreator","currentUser","initialize","MessageCollection","MessageCollectionInitPolicy","CACHE_AND_REPLACE_BY_API","onCacheResult","err","isCacheEnabled","error","debug","length","pendingMessages","failedMessages","onApiResult","setMessageCollectionHandler","onMessagesAdded","_","onMessagesUpdated","onMessagesDeleted","msgIds","map","m","messageId","reqIds","reqId","onChannelDeleted","onChannelUpdated","onHugeGapDetected","useChannelHandler","onUserBanned","bannedUser","useEffect","setTimeout","refresh","prev","hasPrevious","list","loadPrevious","next","hasNext","fetchedList","loadNext","push","sendUserMessage","params","onPending","Promise","resolve","reject","pendingMessage","sentMessage","sendFileMessage","updateUserMessage","updatedMessage","NOOP","updateFileMessage","resendMessage","failedMessage","message","isUserMessage","resendUserMessage","isFileMessage","resendFileMessage","deleteMessage","sendingStatus","removeFailedMessages"],"sources":["useGroupChannelMessagesWithCollection.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\n\nimport type {\n SendbirdChannel,\n SendbirdChatSDK,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessageCollection,\n SendbirdUserMessage,\n} from '@sendbird/uikit-utils';\nimport { Logger, NOOP, isDifferentChannel, useForceUpdate, useIsMountedRef } from '@sendbird/uikit-utils';\n\nimport { useAppFeatures } from '../../common/useAppFeatures';\nimport { useChannelHandler } from '../../handler/useChannelHandler';\nimport type { UseGroupChannelMessages, UseGroupChannelMessagesOptions } from '../../types';\nimport { useActiveGroupChannel } from '../useActiveGroupChannel';\nimport { useGroupChannelMessagesReducer } from './reducer';\n\nconst createMessageCollection = (\n sdk: SendbirdChatSDK,\n channel: SendbirdGroupChannel,\n creator?: UseGroupChannelMessagesOptions['collectionCreator'],\n) => {\n if (creator) return creator();\n const collection = channel.createMessageCollection();\n const filter = new sdk.MessageFilter();\n return collection.setLimit(100).setFilter(filter).build();\n};\n\nconst HOOK_NAME = 'useGroupChannelMessagesWithCollection';\n\n// FIXME: MessageCollection event handler bug, initialize(run async addObserver) -> dispose -> removeObserver -> addObserver called\nexport const useGroupChannelMessagesWithCollection: UseGroupChannelMessages = (sdk, channel, userId, options) => {\n const isMounted = useIsMountedRef();\n const disposeManuallyAfterUnmounted = () => {\n if (!isMounted.current && collectionRef.current) collectionRef.current.dispose();\n };\n\n const { deliveryReceiptEnabled } = useAppFeatures(sdk);\n\n const collectionRef = useRef<SendbirdMessageCollection>();\n\n // NOTE: We cannot determine the channel object of Sendbird SDK is stale or not, so force update af\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 if (deliveryReceiptEnabled) sdk.markAsDelivered(activeChannel.url);\n } catch (e) {\n Logger.warn(`[${HOOK_NAME}/channelMarkAs/Delivered]`, e);\n }\n try {\n await sdk.markAsReadWithChannelUrls([activeChannel.url]);\n } catch (e) {\n Logger.warn(`[${HOOK_NAME}/channelMarkAs/Read]`, e);\n }\n };\n\n const updateChannel = (channel: SendbirdChannel) => {\n if (channel.isGroupChannel() && !isDifferentChannel(channel, activeChannel)) {\n forceUpdate();\n }\n };\n\n const init = useCallback(\n async (uid?: string, callback?: () => void) => {\n if (collectionRef.current) collectionRef.current?.dispose();\n\n if (uid) {\n collectionRef.current = createMessageCollection(sdk, activeChannel, options?.collectionCreator);\n updateNextMessages([], true, sdk.currentUser.userId);\n channelMarkAs();\n\n collectionRef.current\n .initialize(sdk.MessageCollection.MessageCollectionInitPolicy.CACHE_AND_REPLACE_BY_API)\n .onCacheResult((err, messages) => {\n if (err) sdk.isCacheEnabled && Logger.error(`[${HOOK_NAME}/onCacheResult]`, err);\n else {\n Logger.debug(`[${HOOK_NAME}/onCacheResult]`, 'message length:', messages.length);\n updateMessages(messages, true, sdk.currentUser.userId);\n updateMessages(collectionRef.current?.pendingMessages ?? [], false, sdk.currentUser.userId);\n updateMessages(collectionRef.current?.failedMessages ?? [], false, sdk.currentUser.userId);\n if (messages?.length) callback?.();\n }\n })\n .onApiResult((err, messages) => {\n if (err) Logger.warn(`[${HOOK_NAME}/onApiResult]`, err);\n else {\n Logger.debug(`[${HOOK_NAME}/onApiResult]`, 'message length:', messages.length);\n updateMessages(messages, true, sdk.currentUser.userId);\n if (sdk.isCacheEnabled) {\n updateMessages(collectionRef.current?.pendingMessages ?? [], false, sdk.currentUser.userId);\n updateMessages(collectionRef.current?.failedMessages ?? [], false, sdk.currentUser.userId);\n }\n }\n callback?.();\n });\n\n collectionRef.current.setMessageCollectionHandler({\n onMessagesAdded(_, channel, messages) {\n disposeManuallyAfterUnmounted();\n channelMarkAs();\n updateNextMessages(messages, false, sdk.currentUser.userId);\n updateChannel(channel);\n },\n onMessagesUpdated(_, channel, messages) {\n disposeManuallyAfterUnmounted();\n updateMessages(messages, false, sdk.currentUser.userId);\n updateChannel(channel);\n },\n onMessagesDeleted(_, channel, messages) {\n disposeManuallyAfterUnmounted();\n const msgIds = messages.map((m) => m.messageId);\n const reqIds = messages\n .filter((m): m is SendbirdUserMessage | SendbirdFileMessage => 'reqId' in m)\n .map((m) => m.reqId);\n\n deleteMessages(msgIds, reqIds);\n deleteNextMessages(msgIds, reqIds);\n updateChannel(channel);\n },\n onChannelDeleted() {\n disposeManuallyAfterUnmounted();\n options?.onChannelDeleted?.();\n },\n onChannelUpdated(_, channel) {\n disposeManuallyAfterUnmounted();\n updateChannel(channel);\n },\n onHugeGapDetected() {\n disposeManuallyAfterUnmounted();\n init(uid);\n },\n });\n }\n },\n [sdk, activeChannel.url, options?.collectionCreator],\n );\n\n useChannelHandler(sdk, HOOK_NAME, {\n onUserBanned(channel, bannedUser) {\n disposeManuallyAfterUnmounted();\n if (channel.isGroupChannel() && !isDifferentChannel(channel, activeChannel)) {\n if (bannedUser.userId === sdk.currentUser.userId) {\n options?.onChannelDeleted?.();\n } else {\n setActiveChannel(channel);\n forceUpdate();\n }\n }\n },\n });\n\n useEffect(() => {\n // NOTE: Cache read is heavy synchronous task, and it prevents smooth ui transition\n setTimeout(async () => {\n updateLoading(true);\n init(userId, () => updateLoading(false));\n }, 0);\n }, [init, userId]);\n\n useEffect(() => {\n return () => {\n if (collectionRef.current) collectionRef.current?.dispose();\n };\n }, []);\n\n const refresh: ReturnType<UseGroupChannelMessages>['refresh'] = useCallback(async () => {\n updateRefreshing(true);\n init(userId, () => updateRefreshing(false));\n }, [init, userId]);\n\n const prev: ReturnType<UseGroupChannelMessages>['prev'] = useCallback(async () => {\n if (collectionRef.current && collectionRef.current?.hasPrevious) {\n try {\n const list = await collectionRef.current?.loadPrevious();\n updateMessages(list, false, sdk.currentUser.userId);\n } catch {}\n }\n }, []);\n\n const next: ReturnType<UseGroupChannelMessages>['next'] = useCallback(async () => {\n const list = [];\n if (collectionRef.current && collectionRef.current?.hasNext) {\n try {\n const fetchedList = await collectionRef.current?.loadNext();\n list.push(...fetchedList);\n } catch {}\n }\n if (nextMessages.length > 0) {\n list.push(...nextMessages);\n }\n if (list.length > 0) {\n updateMessages(list, 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 const pendingMessage = activeChannel.sendUserMessage(params, (sentMessage, error) => {\n if (error) reject(error);\n else {\n updateMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage);\n }\n });\n\n onPending?.(pendingMessage);\n updateMessages([pendingMessage], false, sdk.currentUser.userId);\n });\n },\n [activeChannel],\n );\n const sendFileMessage: ReturnType<UseGroupChannelMessages>['sendFileMessage'] = useCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n const pendingMessage = activeChannel.sendFileMessage(params, (sentMessage, error) => {\n if (error) reject(error);\n else {\n updateMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage as SendbirdFileMessage);\n }\n });\n\n updateMessages([pendingMessage], false, sdk.currentUser.userId);\n onPending?.(pendingMessage);\n });\n },\n [activeChannel],\n );\n const updateUserMessage: ReturnType<UseGroupChannelMessages>['updateUserMessage'] = useCallback(\n async (messageId, params) => {\n const updatedMessage = await activeChannel.updateUserMessage(messageId, params, NOOP);\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, NOOP);\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 if (failedMessage.isFileMessage()) return activeChannel.resendFileMessage(failedMessage);\n return null;\n })();\n\n if (message) updateMessages([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 try {\n await collectionRef.current?.removeFailedMessages([message]);\n } finally {\n deleteMessages([message.messageId], [message.reqId]);\n }\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":["createMessageCollection","channel","creator","filter","MessageFilter","limit","HOOK_NAME","useGroupChannelMessagesWithCollection","sdk","userId","options","deliveryReceiptEnabled","useAppFeatures","collectionRef","useRef","activeChannel","setActiveChannel","useActiveGroupChannel","forceUpdate","useForceUpdate","loading","refreshing","messages","nextMessages","newMessagesFromMembers","updateMessages","updateNextMessages","deleteNextMessages","deleteMessages","updateLoading","updateRefreshing","useGroupChannelMessagesReducer","sortComparator","channelMarkAs","confirmAndMarkAsDelivered","e","Logger","warn","confirmAndMarkAsRead","updateChannel","isGroupChannel","isDifferentChannel","init","useCallback","uid","callback","current","dispose","collectionCreator","currentUser","setMessageCollectionHandler","onMessagesAdded","_","onMessagesUpdated","onMessagesDeleted","messageIds","onChannelDeleted","onChannelUpdated","onHugeGapDetected","initialize","MessageCollectionInitPolicy","CACHE_AND_REPLACE_BY_API","onCacheResult","err","isCacheEnabled","error","debug","length","pendingMessages","failedMessages","onApiResult","url","useChannelHandler","onUserBanned","bannedUser","useEffect","setTimeout","refresh","prev","hasPrevious","list","loadPrevious","next","hasNext","fetchedList","loadNext","push","sendUserMessage","params","onPending","Promise","resolve","reject","pendingMessage","isUserMessage","onSucceeded","sentMessage","onFailed","sendFileMessage","isFileMessage","updateUserMessage","messageId","updatedMessage","updateFileMessage","resendMessage","failedMessage","message","resendUserMessage","resendFileMessage","deleteMessage","sendingStatus","removeFailedMessage","reqId"],"sources":["useGroupChannelMessagesWithCollection.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\n\nimport { MessageCollectionInitPolicy, MessageFilter } from '@sendbird/chat/groupChannel';\nimport type {\n SendbirdChannel,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessageCollection,\n} from '@sendbird/uikit-utils';\nimport {\n Logger,\n confirmAndMarkAsDelivered,\n confirmAndMarkAsRead,\n isDifferentChannel,\n useForceUpdate,\n} from '@sendbird/uikit-utils';\n\nimport { useAppFeatures } from '../../common/useAppFeatures';\nimport { useChannelHandler } from '../../handler/useChannelHandler';\nimport type { UseGroupChannelMessages, UseGroupChannelMessagesOptions } from '../../types';\nimport { useActiveGroupChannel } from '../useActiveGroupChannel';\nimport { useGroupChannelMessagesReducer } from './reducer';\n\nconst createMessageCollection = (\n channel: SendbirdGroupChannel,\n creator?: UseGroupChannelMessagesOptions['collectionCreator'],\n) => {\n if (creator) return creator();\n const filter = new MessageFilter();\n return channel.createMessageCollection({ filter, limit: 100 });\n};\n\nconst HOOK_NAME = 'useGroupChannelMessagesWithCollection';\n\nexport const useGroupChannelMessagesWithCollection: UseGroupChannelMessages = (sdk, channel, userId, options) => {\n const { deliveryReceiptEnabled } = useAppFeatures(sdk);\n\n const collectionRef = useRef<SendbirdMessageCollection>();\n\n // NOTE: We cannot determine the channel object of Sendbird SDK is stale or not, so force update af\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 if (deliveryReceiptEnabled) await confirmAndMarkAsDelivered(sdk, activeChannel);\n } catch (e) {\n Logger.warn(`[${HOOK_NAME}/channelMarkAs/Delivered]`, e);\n }\n try {\n await confirmAndMarkAsRead(sdk, [activeChannel]);\n } catch (e) {\n Logger.warn(`[${HOOK_NAME}/channelMarkAs/Read]`, e);\n }\n };\n\n const updateChannel = (channel: SendbirdChannel) => {\n if (channel.isGroupChannel() && !isDifferentChannel(channel, activeChannel)) {\n forceUpdate();\n }\n };\n\n const init = useCallback(\n async (uid?: string, callback?: () => void) => {\n if (collectionRef.current) collectionRef.current?.dispose();\n\n if (uid) {\n collectionRef.current = createMessageCollection(activeChannel, options?.collectionCreator);\n updateNextMessages([], true, sdk.currentUser.userId);\n channelMarkAs();\n\n collectionRef.current?.setMessageCollectionHandler({\n onMessagesAdded: (_, channel, messages) => {\n channelMarkAs();\n updateNextMessages(messages, false, sdk.currentUser.userId);\n updateChannel(channel);\n },\n onMessagesUpdated: (_, channel, messages) => {\n updateMessages(messages, false, sdk.currentUser.userId);\n updateChannel(channel);\n },\n onMessagesDeleted: (_, channel, messageIds) => {\n deleteMessages(messageIds, []);\n deleteNextMessages(messageIds, []);\n updateChannel(channel);\n },\n onChannelDeleted: () => {\n options?.onChannelDeleted?.();\n },\n onChannelUpdated: (_, channel) => {\n updateChannel(channel);\n },\n onHugeGapDetected: () => {\n init(uid);\n },\n });\n\n collectionRef.current\n .initialize(MessageCollectionInitPolicy.CACHE_AND_REPLACE_BY_API)\n .onCacheResult((err, messages) => {\n if (err) sdk.isCacheEnabled && Logger.error(`[${HOOK_NAME}/onCacheResult]`, err);\n else {\n Logger.debug(`[${HOOK_NAME}/onCacheResult]`, 'message length:', messages.length);\n updateMessages(messages, true, sdk.currentUser.userId);\n updateMessages(collectionRef.current?.pendingMessages ?? [], false, sdk.currentUser.userId);\n updateMessages(collectionRef.current?.failedMessages ?? [], false, sdk.currentUser.userId);\n if (messages?.length) callback?.();\n }\n })\n .onApiResult((err, messages) => {\n if (err) Logger.warn(`[${HOOK_NAME}/onApiResult]`, err);\n else {\n Logger.debug(`[${HOOK_NAME}/onApiResult]`, 'message length:', messages.length);\n updateMessages(messages, true, sdk.currentUser.userId);\n if (sdk.isCacheEnabled) {\n updateMessages(collectionRef.current?.pendingMessages ?? [], false, sdk.currentUser.userId);\n updateMessages(collectionRef.current?.failedMessages ?? [], false, sdk.currentUser.userId);\n }\n }\n callback?.();\n });\n }\n },\n [sdk, activeChannel.url, options?.collectionCreator],\n );\n\n useChannelHandler(sdk, HOOK_NAME, {\n onUserBanned(channel, bannedUser) {\n if (channel.isGroupChannel() && !isDifferentChannel(channel, activeChannel)) {\n if (bannedUser.userId === sdk.currentUser.userId) {\n options?.onChannelDeleted?.();\n } else {\n setActiveChannel(channel);\n forceUpdate();\n }\n }\n },\n });\n\n useEffect(() => {\n // NOTE: Cache read is heavy synchronous task, and it prevents smooth ui transition\n setTimeout(async () => {\n updateLoading(true);\n init(userId, () => updateLoading(false));\n }, 0);\n }, [init, userId]);\n\n useEffect(() => {\n return () => {\n if (collectionRef.current) collectionRef.current?.dispose();\n };\n }, []);\n\n const refresh: ReturnType<UseGroupChannelMessages>['refresh'] = useCallback(async () => {\n updateRefreshing(true);\n init(userId, () => updateRefreshing(false));\n }, [init, userId]);\n\n const prev: ReturnType<UseGroupChannelMessages>['prev'] = useCallback(async () => {\n if (collectionRef.current && collectionRef.current?.hasPrevious) {\n try {\n const list = await collectionRef.current?.loadPrevious();\n updateMessages(list, false, sdk.currentUser.userId);\n } catch {}\n }\n }, []);\n\n const next: ReturnType<UseGroupChannelMessages>['next'] = useCallback(async () => {\n const list = [];\n if (collectionRef.current && collectionRef.current?.hasNext) {\n try {\n const fetchedList = await collectionRef.current?.loadNext();\n list.push(...fetchedList);\n } catch {}\n }\n if (nextMessages.length > 0) {\n list.push(...nextMessages);\n }\n if (list.length > 0) {\n updateMessages(list, 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 onPending?.(pendingMessage);\n updateMessages([pendingMessage], false, sdk.currentUser.userId);\n }\n })\n .onSucceeded((sentMessage) => {\n if (sentMessage.isUserMessage()) {\n updateMessages([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 updateMessages([pendingMessage], false, sdk.currentUser.userId);\n onPending?.(pendingMessage);\n }\n })\n .onSucceeded((sentMessage) => {\n if (sentMessage.isFileMessage()) {\n updateMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage as SendbirdFileMessage);\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) updateMessages([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 try {\n await collectionRef.current?.removeFailedMessage(message.reqId);\n } finally {\n deleteMessages([message.messageId], [message.reqId]);\n }\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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"}
@@ -19,10 +19,10 @@ var _reducer = require("./reducer");
19
19
 
20
20
  const createMessageQuery = (channel, creator) => {
21
21
  if (creator) return creator();
22
- const query = channel.createPreviousMessageListQuery();
23
- query.limit = 100;
24
- query.reverse = true;
25
- return query;
22
+ return channel.createPreviousMessageListQuery({
23
+ limit: 100,
24
+ reverse: true
25
+ });
26
26
  };
27
27
 
28
28
  const HOOK_NAME = 'useGroupChannelMessagesWithQuery';
@@ -54,13 +54,13 @@ const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options) => {
54
54
 
55
55
  const channelMarkAs = async () => {
56
56
  try {
57
- if (deliveryReceiptEnabled) sdk.markAsDelivered(activeChannel.url);
57
+ if (deliveryReceiptEnabled) await (0, _uikitUtils.confirmAndMarkAsDelivered)(sdk, activeChannel);
58
58
  } catch (e) {
59
59
  _uikitUtils.Logger.warn(`[${HOOK_NAME}/channelMarkAs/Delivered]`, e);
60
60
  }
61
61
 
62
62
  try {
63
- await sdk.markAsReadWithChannelUrls([activeChannel.url]);
63
+ await (0, _uikitUtils.confirmAndMarkAsRead)(sdk, [activeChannel]);
64
64
  } catch (e) {
65
65
  _uikitUtils.Logger.warn(`[${HOOK_NAME}/channelMarkAs/Read]`, e);
66
66
  }
@@ -71,9 +71,9 @@ const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options) => {
71
71
  var _queryRef$current;
72
72
 
73
73
  queryRef.current = createMessageQuery(activeChannel, options === null || options === void 0 ? void 0 : options.queryCreator);
74
- channelMarkAs();
74
+ channelMarkAs().catch();
75
75
 
76
- if ((_queryRef$current = queryRef.current) !== null && _queryRef$current !== void 0 && _queryRef$current.hasMore) {
76
+ if ((_queryRef$current = queryRef.current) !== null && _queryRef$current !== void 0 && _queryRef$current.hasNext) {
77
77
  var _queryRef$current2;
78
78
 
79
79
  const list = await ((_queryRef$current2 = queryRef.current) === null || _queryRef$current2 === void 0 ? void 0 : _queryRef$current2.load());
@@ -130,8 +130,8 @@ const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options) => {
130
130
  // Users
131
131
  onOperatorUpdated: channelUpdater,
132
132
  onUserLeft: channelUpdater,
133
- onUserEntered: channelUpdater,
134
- onUserExited: channelUpdater,
133
+ // onUserEntered: channelUpdater,
134
+ // onUserExited: channelUpdater,
135
135
  onUserJoined: channelUpdater,
136
136
  onUserUnbanned: channelUpdater,
137
137
  onUserMuted: channelUpdater,
@@ -163,7 +163,7 @@ const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options) => {
163
163
  const prev = (0, _react.useCallback)(async () => {
164
164
  var _queryRef$current3;
165
165
 
166
- if (queryRef.current && (_queryRef$current3 = queryRef.current) !== null && _queryRef$current3 !== void 0 && _queryRef$current3.hasMore) {
166
+ if (queryRef.current && (_queryRef$current3 = queryRef.current) !== null && _queryRef$current3 !== void 0 && _queryRef$current3.hasNext) {
167
167
  var _queryRef$current4;
168
168
 
169
169
  const list = await ((_queryRef$current4 = queryRef.current) === null || _queryRef$current4 === void 0 ? void 0 : _queryRef$current4.load());
@@ -178,26 +178,36 @@ const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options) => {
178
178
  }, [nextMessages.length]);
179
179
  const sendUserMessage = (0, _react.useCallback)((params, onPending) => {
180
180
  return new Promise((resolve, reject) => {
181
- const pendingMessage = activeChannel.sendUserMessage(params, (sentMessage, error) => {
182
- if (error) reject(error);else {
181
+ activeChannel.sendUserMessage(params).onPending(pendingMessage => {
182
+ if (pendingMessage.isUserMessage()) {
183
+ updateNextMessages([pendingMessage], false, sdk.currentUser.userId);
184
+ onPending === null || onPending === void 0 ? void 0 : onPending(pendingMessage);
185
+ }
186
+ }).onSucceeded(sentMessage => {
187
+ if (sentMessage.isUserMessage()) {
183
188
  updateNextMessages([sentMessage], false, sdk.currentUser.userId);
184
189
  resolve(sentMessage);
185
190
  }
191
+ }).onFailed(err => {
192
+ reject(err);
186
193
  });
187
- updateNextMessages([pendingMessage], false, sdk.currentUser.userId);
188
- onPending === null || onPending === void 0 ? void 0 : onPending(pendingMessage);
189
194
  });
190
195
  }, [activeChannel]);
191
196
  const sendFileMessage = (0, _react.useCallback)((params, onPending) => {
192
197
  return new Promise((resolve, reject) => {
193
- const pendingMessage = activeChannel.sendFileMessage(params, (sentMessage, error) => {
194
- if (error) reject(error);else {
198
+ activeChannel.sendFileMessage(params).onPending(pendingMessage => {
199
+ if (pendingMessage.isFileMessage()) {
200
+ updateNextMessages([pendingMessage], false, sdk.currentUser.userId);
201
+ onPending === null || onPending === void 0 ? void 0 : onPending(pendingMessage);
202
+ }
203
+ }).onSucceeded(sentMessage => {
204
+ if (sentMessage.isFileMessage()) {
195
205
  updateNextMessages([sentMessage], false, sdk.currentUser.userId);
196
206
  resolve(sentMessage);
197
207
  }
208
+ }).onFailed(err => {
209
+ reject(err);
198
210
  });
199
- updateNextMessages([pendingMessage], false, sdk.currentUser.userId);
200
- onPending === null || onPending === void 0 ? void 0 : onPending(pendingMessage);
201
211
  });
202
212
  }, [activeChannel]);
203
213
  const updateUserMessage = (0, _react.useCallback)(async (messageId, params) => {
@@ -212,7 +222,9 @@ const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options) => {
212
222
  }, [activeChannel]);
213
223
  const resendMessage = (0, _react.useCallback)(async failedMessage => {
214
224
  const message = await (() => {
215
- if (failedMessage.isUserMessage()) return activeChannel.resendUserMessage(failedMessage);
225
+ if (failedMessage.isUserMessage()) return activeChannel.resendUserMessage(failedMessage); // FIXME: v4 bugs
226
+ // @ts-ignore
227
+
216
228
  if (failedMessage.isFileMessage()) return activeChannel.resendFileMessage(failedMessage);
217
229
  return null;
218
230
  })();
@@ -1 +1 @@
1
- {"version":3,"names":["createMessageQuery","channel","creator","query","createPreviousMessageListQuery","limit","reverse","HOOK_NAME","useGroupChannelMessagesWithQuery","sdk","userId","options","deliveryReceiptEnabled","useAppFeatures","queryRef","useRef","activeChannel","setActiveChannel","useActiveGroupChannel","forceUpdate","useForceUpdate","loading","refreshing","messages","nextMessages","newMessagesFromMembers","updateMessages","updateNextMessages","deleteNextMessages","deleteMessages","updateLoading","updateRefreshing","useGroupChannelMessagesReducer","sortComparator","channelMarkAs","markAsDelivered","url","e","Logger","warn","markAsReadWithChannelUrls","init","useCallback","uid","current","queryCreator","hasMore","list","load","currentUser","channelUpdater","isGroupChannel","isDifferentChannel","useChannelHandler","onMessageReceived","eventChannel","message","onMessageUpdated","onMessageDeleted","messageId","onChannelChanged","onChannelFrozen","onChannelUnfrozen","onChannelHidden","onChannelMemberCountChanged","channels","find","c","onChannelDeleted","channelUrl","onOperatorUpdated","onUserLeft","onUserEntered","onUserExited","onUserJoined","onUserUnbanned","onUserMuted","onUserUnmuted","onUserBanned","bannedUser","useAsyncEffect","refresh","prev","next","length","sendUserMessage","params","onPending","Promise","resolve","reject","pendingMessage","sentMessage","error","sendFileMessage","updateUserMessage","updatedMessage","updateFileMessage","resendMessage","failedMessage","isUserMessage","resendUserMessage","isFileMessage","resendFileMessage","deleteMessage","sendingStatus","reqId"],"sources":["useGroupChannelMessagesWithQuery.ts"],"sourcesContent":["import { useCallback, useRef } from 'react';\nimport type Sendbird from 'sendbird';\n\nimport type { SendbirdFileMessage, SendbirdGroupChannel, SendbirdOpenChannel } from '@sendbird/uikit-utils';\nimport { Logger, isDifferentChannel, useAsyncEffect, useForceUpdate } from '@sendbird/uikit-utils';\n\nimport { useAppFeatures } from '../../common/useAppFeatures';\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 const query = channel.createPreviousMessageListQuery();\n query.limit = 100;\n query.reverse = true;\n return query;\n};\n\nconst HOOK_NAME = 'useGroupChannelMessagesWithQuery';\nexport const useGroupChannelMessagesWithQuery: UseGroupChannelMessages = (sdk, channel, userId, options) => {\n const { deliveryReceiptEnabled } = useAppFeatures(sdk);\n\n const queryRef = useRef<Sendbird.PreviousMessageListQuery>();\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 if (deliveryReceiptEnabled) sdk.markAsDelivered(activeChannel.url);\n } catch (e) {\n Logger.warn(`[${HOOK_NAME}/channelMarkAs/Delivered]`, e);\n }\n try {\n await sdk.markAsReadWithChannelUrls([activeChannel.url]);\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();\n if (queryRef.current?.hasMore) {\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: SendbirdGroupChannel | SendbirdOpenChannel) => {\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?.hasMore) {\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 const pendingMessage = activeChannel.sendUserMessage(params, (sentMessage, error) => {\n if (error) reject(error);\n else {\n updateNextMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage);\n }\n });\n updateNextMessages([pendingMessage], false, sdk.currentUser.userId);\n onPending?.(pendingMessage);\n });\n },\n [activeChannel],\n );\n const sendFileMessage: ReturnType<UseGroupChannelMessages>['sendFileMessage'] = useCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n const pendingMessage = activeChannel.sendFileMessage(params, (sentMessage, error) => {\n if (error) reject(error);\n else {\n updateNextMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage as SendbirdFileMessage);\n }\n });\n updateNextMessages([pendingMessage], false, sdk.currentUser.userId);\n onPending?.(pendingMessage);\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 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","deliveryReceiptEnabled","useAppFeatures","queryRef","useRef","activeChannel","setActiveChannel","useActiveGroupChannel","forceUpdate","useForceUpdate","loading","refreshing","messages","nextMessages","newMessagesFromMembers","updateMessages","updateNextMessages","deleteNextMessages","deleteMessages","updateLoading","updateRefreshing","useGroupChannelMessagesReducer","sortComparator","channelMarkAs","confirmAndMarkAsDelivered","e","Logger","warn","confirmAndMarkAsRead","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 confirmAndMarkAsDelivered,\n confirmAndMarkAsRead,\n isDifferentChannel,\n useAsyncEffect,\n useForceUpdate,\n} from '@sendbird/uikit-utils';\nimport type { SendbirdPreviousMessageListQuery } from '@sendbird/uikit-utils';\n\nimport { useAppFeatures } from '../../common/useAppFeatures';\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 { deliveryReceiptEnabled } = useAppFeatures(sdk);\n\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 if (deliveryReceiptEnabled) await confirmAndMarkAsDelivered(sdk, activeChannel);\n } catch (e) {\n Logger.warn(`[${HOOK_NAME}/channelMarkAs/Delivered]`, e);\n }\n try {\n await confirmAndMarkAsRead(sdk, [activeChannel]);\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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"}