@sendbird/uikit-chat-hooks 2.0.2 → 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.
- package/lib/commonjs/channel/useGroupChannel.js +33 -0
- package/lib/commonjs/channel/useGroupChannel.js.map +1 -0
- package/lib/commonjs/channel/useGroupChannelMessages/reducer.js +3 -3
- package/lib/commonjs/channel/useGroupChannelMessages/reducer.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +56 -68
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +26 -35
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
- package/lib/commonjs/common/useAppFeatures.js +4 -4
- package/lib/commonjs/common/useAppFeatures.js.map +1 -1
- package/lib/commonjs/common/useMessageOutgoingStatus.js +1 -1
- package/lib/commonjs/common/useMessageOutgoingStatus.js.map +1 -1
- package/lib/commonjs/common/useUserList.js +25 -7
- package/lib/commonjs/common/useUserList.js.map +1 -1
- package/lib/commonjs/index.js +8 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/types.js.map +1 -1
- package/lib/module/channel/useGroupChannel.js +22 -0
- package/lib/module/channel/useGroupChannel.js.map +1 -0
- package/lib/module/channel/useGroupChannelMessages/reducer.js +3 -3
- package/lib/module/channel/useGroupChannelMessages/reducer.js.map +1 -1
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +57 -68
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +26 -34
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
- package/lib/module/common/useAppFeatures.js +4 -4
- package/lib/module/common/useAppFeatures.js.map +1 -1
- package/lib/module/common/useMessageOutgoingStatus.js +1 -1
- package/lib/module/common/useMessageOutgoingStatus.js.map +1 -1
- package/lib/module/common/useUserList.js +27 -9
- package/lib/module/common/useUserList.js.map +1 -1
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/types.js.map +1 -1
- package/lib/typescript/src/channel/useGroupChannel.d.ts +6 -0
- package/lib/typescript/src/common/useUserList.d.ts +2 -2
- package/lib/typescript/src/index.d.ts +2 -1
- package/lib/typescript/src/types.d.ts +13 -6
- package/package.json +3 -3
- package/src/channel/useGroupChannel.ts +21 -0
- package/src/channel/useGroupChannelMessages/reducer.ts +4 -4
- package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.ts +70 -76
- package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.ts +29 -31
- package/src/common/useAppFeatures.ts +4 -4
- package/src/common/useMessageOutgoingStatus.ts +2 -1
- package/src/common/useUserList.ts +38 -12
- package/src/index.ts +3 -1
- package/src/types.ts +16 -7
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { useCallback, useEffect, useRef } from 'react';
|
|
2
2
|
import { MessageCollectionInitPolicy, MessageEventSource, MessageFilter } from '@sendbird/chat/groupChannel';
|
|
3
|
-
import { Logger, confirmAndMarkAsRead, isDifferentChannel, useForceUpdate } from '@sendbird/uikit-utils';
|
|
3
|
+
import { Logger, confirmAndMarkAsRead, isDifferentChannel, useForceUpdate, useFreshCallback } from '@sendbird/uikit-utils';
|
|
4
4
|
import { useChannelHandler } from '../../handler/useChannelHandler';
|
|
5
|
-
import { useActiveGroupChannel } from '../useActiveGroupChannel';
|
|
6
5
|
import { useGroupChannelMessagesReducer } from './reducer';
|
|
7
6
|
|
|
8
7
|
const createMessageCollection = (channel, creator) => {
|
|
@@ -16,13 +15,8 @@ const createMessageCollection = (channel, creator) => {
|
|
|
16
15
|
|
|
17
16
|
const HOOK_NAME = 'useGroupChannelMessagesWithCollection';
|
|
18
17
|
export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, options) => {
|
|
19
|
-
const collectionRef = useRef(); // NOTE: We cannot determine the channel object of Sendbird SDK is stale or not, so force update af
|
|
20
|
-
|
|
21
|
-
const {
|
|
22
|
-
activeChannel,
|
|
23
|
-
setActiveChannel
|
|
24
|
-
} = useActiveGroupChannel(sdk, channel);
|
|
25
18
|
const forceUpdate = useForceUpdate();
|
|
19
|
+
const collectionRef = useRef();
|
|
26
20
|
const {
|
|
27
21
|
loading,
|
|
28
22
|
refreshing,
|
|
@@ -39,18 +33,12 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
39
33
|
|
|
40
34
|
const channelMarkAs = async () => {
|
|
41
35
|
try {
|
|
42
|
-
await confirmAndMarkAsRead([
|
|
36
|
+
await confirmAndMarkAsRead([channel]);
|
|
43
37
|
} catch (e) {
|
|
44
38
|
Logger.warn(`[${HOOK_NAME}/channelMarkAs/Read]`, e);
|
|
45
39
|
}
|
|
46
40
|
};
|
|
47
41
|
|
|
48
|
-
const updateChannel = channel => {
|
|
49
|
-
if (channel.isGroupChannel() && !isDifferentChannel(channel, activeChannel)) {
|
|
50
|
-
forceUpdate();
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
|
|
54
42
|
const init = useCallback(async (uid, callback) => {
|
|
55
43
|
var _collectionRef$curren;
|
|
56
44
|
|
|
@@ -59,7 +47,7 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
59
47
|
if (uid) {
|
|
60
48
|
var _collectionRef$curren2;
|
|
61
49
|
|
|
62
|
-
collectionRef.current = createMessageCollection(
|
|
50
|
+
collectionRef.current = createMessageCollection(channel, options === null || options === void 0 ? void 0 : options.collectionCreator);
|
|
63
51
|
updateNextMessages([], true, sdk.currentUser.userId);
|
|
64
52
|
channelMarkAs();
|
|
65
53
|
(_collectionRef$curren2 = collectionRef.current) === null || _collectionRef$curren2 === void 0 ? void 0 : _collectionRef$curren2.setMessageCollectionHandler({
|
|
@@ -73,24 +61,27 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
73
61
|
}
|
|
74
62
|
|
|
75
63
|
updateNextMessages(messages, false, sdk.currentUser.userId);
|
|
76
|
-
updateChannel(channel);
|
|
77
64
|
},
|
|
78
|
-
onMessagesUpdated: (_,
|
|
79
|
-
|
|
80
|
-
|
|
65
|
+
onMessagesUpdated: (_, __, messages) => {
|
|
66
|
+
// NOTE: v4 MESSAGE_RECEIVED is called twice from onMessagesAdded and onMessagesUpdated when receiving new message.
|
|
67
|
+
// This is not intended behavior but not bugs.
|
|
68
|
+
if (_.source !== MessageEventSource.EVENT_MESSAGE_RECEIVED) {
|
|
69
|
+
updateMessages(messages, false, sdk.currentUser.userId);
|
|
70
|
+
}
|
|
81
71
|
},
|
|
82
|
-
onMessagesDeleted: (_,
|
|
72
|
+
onMessagesDeleted: (_, __, messageIds) => {
|
|
83
73
|
deleteMessages(messageIds, []);
|
|
84
74
|
deleteNextMessages(messageIds, []);
|
|
85
|
-
updateChannel(channel);
|
|
86
75
|
},
|
|
87
76
|
onChannelDeleted: () => {
|
|
88
77
|
var _options$onChannelDel;
|
|
89
78
|
|
|
90
79
|
options === null || options === void 0 ? void 0 : (_options$onChannelDel = options.onChannelDeleted) === null || _options$onChannelDel === void 0 ? void 0 : _options$onChannelDel.call(options);
|
|
91
80
|
},
|
|
92
|
-
onChannelUpdated: (_,
|
|
93
|
-
|
|
81
|
+
onChannelUpdated: (_, eventChannel) => {
|
|
82
|
+
if (eventChannel.isGroupChannel() && !isDifferentChannel(eventChannel, channel)) {
|
|
83
|
+
forceUpdate();
|
|
84
|
+
}
|
|
94
85
|
},
|
|
95
86
|
onHugeGapDetected: () => {
|
|
96
87
|
init(uid);
|
|
@@ -104,8 +95,8 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
104
95
|
updateMessages(messages, true, sdk.currentUser.userId);
|
|
105
96
|
updateMessages(((_collectionRef$curren3 = collectionRef.current) === null || _collectionRef$curren3 === void 0 ? void 0 : _collectionRef$curren3.pendingMessages) ?? [], false, sdk.currentUser.userId);
|
|
106
97
|
updateMessages(((_collectionRef$curren4 = collectionRef.current) === null || _collectionRef$curren4 === void 0 ? void 0 : _collectionRef$curren4.failedMessages) ?? [], false, sdk.currentUser.userId);
|
|
107
|
-
if (messages !== null && messages !== void 0 && messages.length) callback === null || callback === void 0 ? void 0 : callback();
|
|
108
98
|
}
|
|
99
|
+
callback === null || callback === void 0 ? void 0 : callback();
|
|
109
100
|
}).onApiResult((err, messages) => {
|
|
110
101
|
if (err) Logger.warn(`[${HOOK_NAME}/onApiResult]`, err);else {
|
|
111
102
|
Logger.debug(`[${HOOK_NAME}/onApiResult]`, 'message length:', messages.length);
|
|
@@ -121,16 +112,15 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
121
112
|
callback === null || callback === void 0 ? void 0 : callback();
|
|
122
113
|
});
|
|
123
114
|
}
|
|
124
|
-
}, [sdk,
|
|
115
|
+
}, [sdk, channel.url, options === null || options === void 0 ? void 0 : options.collectionCreator]);
|
|
125
116
|
useChannelHandler(sdk, HOOK_NAME, {
|
|
126
117
|
onUserBanned(channel, bannedUser) {
|
|
127
|
-
if (channel.isGroupChannel() && !isDifferentChannel(channel,
|
|
118
|
+
if (channel.isGroupChannel() && !isDifferentChannel(channel, channel)) {
|
|
128
119
|
if (bannedUser.userId === sdk.currentUser.userId) {
|
|
129
120
|
var _options$onChannelDel2;
|
|
130
121
|
|
|
131
122
|
options === null || options === void 0 ? void 0 : (_options$onChannelDel2 = options.onChannelDeleted) === null || _options$onChannelDel2 === void 0 ? void 0 : _options$onChannelDel2.call(options);
|
|
132
123
|
} else {
|
|
133
|
-
setActiveChannel(channel);
|
|
134
124
|
forceUpdate();
|
|
135
125
|
}
|
|
136
126
|
}
|
|
@@ -138,7 +128,7 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
138
128
|
|
|
139
129
|
});
|
|
140
130
|
useEffect(() => {
|
|
141
|
-
// NOTE: Cache read is heavy
|
|
131
|
+
// NOTE: Cache read is heavy task, and it prevents smooth ui transition
|
|
142
132
|
setTimeout(async () => {
|
|
143
133
|
updateLoading(true);
|
|
144
134
|
init(userId, () => updateLoading(false));
|
|
@@ -151,11 +141,11 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
151
141
|
if (collectionRef.current) (_collectionRef$curren7 = collectionRef.current) === null || _collectionRef$curren7 === void 0 ? void 0 : _collectionRef$curren7.dispose();
|
|
152
142
|
};
|
|
153
143
|
}, []);
|
|
154
|
-
const refresh =
|
|
144
|
+
const refresh = useFreshCallback(async () => {
|
|
155
145
|
updateRefreshing(true);
|
|
156
146
|
init(userId, () => updateRefreshing(false));
|
|
157
|
-
}
|
|
158
|
-
const prev =
|
|
147
|
+
});
|
|
148
|
+
const prev = useFreshCallback(async () => {
|
|
159
149
|
var _collectionRef$curren8;
|
|
160
150
|
|
|
161
151
|
if (collectionRef.current && (_collectionRef$curren8 = collectionRef.current) !== null && _collectionRef$curren8 !== void 0 && _collectionRef$curren8.hasPrevious) {
|
|
@@ -166,33 +156,33 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
166
156
|
updateMessages(list, false, sdk.currentUser.userId);
|
|
167
157
|
} catch {}
|
|
168
158
|
}
|
|
169
|
-
}
|
|
170
|
-
const next =
|
|
159
|
+
});
|
|
160
|
+
const next = useFreshCallback(async () => {
|
|
171
161
|
var _collectionRef$curren10;
|
|
172
162
|
|
|
173
|
-
const
|
|
163
|
+
const messageCandidates = [];
|
|
174
164
|
|
|
175
165
|
if (collectionRef.current && (_collectionRef$curren10 = collectionRef.current) !== null && _collectionRef$curren10 !== void 0 && _collectionRef$curren10.hasNext) {
|
|
176
166
|
try {
|
|
177
167
|
var _collectionRef$curren11;
|
|
178
168
|
|
|
179
169
|
const fetchedList = await ((_collectionRef$curren11 = collectionRef.current) === null || _collectionRef$curren11 === void 0 ? void 0 : _collectionRef$curren11.loadNext());
|
|
180
|
-
|
|
170
|
+
messageCandidates.push(...fetchedList);
|
|
181
171
|
} catch {}
|
|
182
172
|
}
|
|
183
173
|
|
|
184
174
|
if (nextMessages.length > 0) {
|
|
185
|
-
|
|
175
|
+
messageCandidates.push(...nextMessages);
|
|
186
176
|
}
|
|
187
177
|
|
|
188
|
-
if (
|
|
189
|
-
updateMessages(
|
|
178
|
+
if (messageCandidates.length > 0) {
|
|
179
|
+
updateMessages(messageCandidates, false, sdk.currentUser.userId);
|
|
190
180
|
updateNextMessages([], true, sdk.currentUser.userId);
|
|
191
181
|
}
|
|
192
|
-
}
|
|
193
|
-
const sendUserMessage =
|
|
182
|
+
});
|
|
183
|
+
const sendUserMessage = useFreshCallback((params, onPending) => {
|
|
194
184
|
return new Promise((resolve, reject) => {
|
|
195
|
-
|
|
185
|
+
channel.sendUserMessage(params).onPending(pendingMessage => {
|
|
196
186
|
if (pendingMessage.isUserMessage()) {
|
|
197
187
|
onPending === null || onPending === void 0 ? void 0 : onPending(pendingMessage);
|
|
198
188
|
updateMessages([pendingMessage], false, sdk.currentUser.userId);
|
|
@@ -202,14 +192,15 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
202
192
|
updateMessages([sentMessage], false, sdk.currentUser.userId);
|
|
203
193
|
resolve(sentMessage);
|
|
204
194
|
}
|
|
205
|
-
}).onFailed(err => {
|
|
195
|
+
}).onFailed((err, _failedMessage) => {
|
|
196
|
+
// updateMessages([failedMessage], false, sdk.currentUser.userId);
|
|
206
197
|
reject(err);
|
|
207
198
|
});
|
|
208
199
|
});
|
|
209
|
-
}
|
|
210
|
-
const sendFileMessage =
|
|
200
|
+
});
|
|
201
|
+
const sendFileMessage = useFreshCallback((params, onPending) => {
|
|
211
202
|
return new Promise((resolve, reject) => {
|
|
212
|
-
|
|
203
|
+
channel.sendFileMessage(params).onPending(pendingMessage => {
|
|
213
204
|
if (pendingMessage.isFileMessage()) {
|
|
214
205
|
updateMessages([pendingMessage], false, sdk.currentUser.userId);
|
|
215
206
|
onPending === null || onPending === void 0 ? void 0 : onPending(pendingMessage);
|
|
@@ -219,35 +210,34 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
219
210
|
updateMessages([sentMessage], false, sdk.currentUser.userId);
|
|
220
211
|
resolve(sentMessage);
|
|
221
212
|
}
|
|
222
|
-
}).onFailed(err => {
|
|
213
|
+
}).onFailed((err, _failedMessage) => {
|
|
214
|
+
// updateMessages([failedMessage], false, sdk.currentUser.userId);
|
|
223
215
|
reject(err);
|
|
224
216
|
});
|
|
225
217
|
});
|
|
226
|
-
}
|
|
227
|
-
const updateUserMessage =
|
|
228
|
-
const updatedMessage = await
|
|
218
|
+
});
|
|
219
|
+
const updateUserMessage = useFreshCallback(async (messageId, params) => {
|
|
220
|
+
const updatedMessage = await channel.updateUserMessage(messageId, params);
|
|
229
221
|
updateMessages([updatedMessage], false, sdk.currentUser.userId);
|
|
230
222
|
return updatedMessage;
|
|
231
|
-
}
|
|
232
|
-
const updateFileMessage =
|
|
233
|
-
const updatedMessage = await
|
|
223
|
+
});
|
|
224
|
+
const updateFileMessage = useFreshCallback(async (messageId, params) => {
|
|
225
|
+
const updatedMessage = await channel.updateFileMessage(messageId, params);
|
|
234
226
|
updateMessages([updatedMessage], false, sdk.currentUser.userId);
|
|
235
227
|
return updatedMessage;
|
|
236
|
-
}
|
|
237
|
-
const resendMessage =
|
|
238
|
-
const
|
|
239
|
-
if (failedMessage.isUserMessage()) return
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
if (failedMessage.isFileMessage()) return activeChannel.resendFileMessage(failedMessage);
|
|
228
|
+
});
|
|
229
|
+
const resendMessage = useFreshCallback(async failedMessage => {
|
|
230
|
+
const resentMessage = await (() => {
|
|
231
|
+
if (failedMessage.isUserMessage()) return channel.resendUserMessage(failedMessage);
|
|
232
|
+
if (failedMessage.isFileMessage()) return channel.resendFileMessage(failedMessage);
|
|
243
233
|
return null;
|
|
244
234
|
})();
|
|
245
|
-
if (
|
|
246
|
-
}
|
|
247
|
-
const deleteMessage =
|
|
235
|
+
if (resentMessage) updateMessages([resentMessage], false, sdk.currentUser.userId);
|
|
236
|
+
});
|
|
237
|
+
const deleteMessage = useFreshCallback(async message => {
|
|
248
238
|
if (message.sendingStatus === 'succeeded') {
|
|
249
|
-
if (message.isUserMessage()) await
|
|
250
|
-
if (message.isFileMessage()) await
|
|
239
|
+
if (message.isUserMessage()) await channel.deleteMessage(message);
|
|
240
|
+
if (message.isFileMessage()) await channel.deleteMessage(message);
|
|
251
241
|
} else {
|
|
252
242
|
try {
|
|
253
243
|
var _collectionRef$curren12;
|
|
@@ -257,7 +247,7 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
257
247
|
deleteMessages([message.messageId], [message.reqId]);
|
|
258
248
|
}
|
|
259
249
|
}
|
|
260
|
-
}
|
|
250
|
+
});
|
|
261
251
|
return {
|
|
262
252
|
loading,
|
|
263
253
|
refreshing,
|
|
@@ -272,8 +262,7 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
272
262
|
updateUserMessage,
|
|
273
263
|
updateFileMessage,
|
|
274
264
|
resendMessage,
|
|
275
|
-
deleteMessage
|
|
276
|
-
activeChannel
|
|
265
|
+
deleteMessage
|
|
277
266
|
};
|
|
278
267
|
};
|
|
279
268
|
//# sourceMappingURL=useGroupChannelMessagesWithCollection.js.map
|
package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useEffect","useRef","MessageCollectionInitPolicy","MessageEventSource","MessageFilter","Logger","confirmAndMarkAsRead","isDifferentChannel","useForceUpdate","useChannelHandler","useActiveGroupChannel","useGroupChannelMessagesReducer","createMessageCollection","channel","creator","filter","limit","HOOK_NAME","useGroupChannelMessagesWithCollection","sdk","userId","options","collectionRef","activeChannel","setActiveChannel","forceUpdate","loading","refreshing","messages","nextMessages","newMessagesFromMembers","updateMessages","updateNextMessages","deleteNextMessages","deleteMessages","updateLoading","updateRefreshing","sortComparator","channelMarkAs","e","warn","updateChannel","isGroupChannel","init","uid","callback","current","dispose","collectionCreator","currentUser","setMessageCollectionHandler","onMessagesAdded","_","__","source","EVENT_MESSAGE_RECEIVED","EVENT_MESSAGE_SENT_SUCCESS","SYNC_MESSAGE_FILL","onMessagesUpdated","onMessagesDeleted","messageIds","onChannelDeleted","onChannelUpdated","onHugeGapDetected","initialize","CACHE_AND_REPLACE_BY_API","onCacheResult","err","isCacheEnabled","error","debug","length","pendingMessages","failedMessages","onApiResult","url","onUserBanned","bannedUser","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, MessageEventSource, MessageFilter } from '@sendbird/chat/groupChannel';\nimport type {\n SendbirdChannel,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessageCollection,\n} from '@sendbird/uikit-utils';\nimport { Logger, confirmAndMarkAsRead, isDifferentChannel, useForceUpdate } 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 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 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 await confirmAndMarkAsRead([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: (_, __, messages) => {\n switch (_.source) {\n case MessageEventSource.EVENT_MESSAGE_RECEIVED:\n case MessageEventSource.EVENT_MESSAGE_SENT_SUCCESS:\n case MessageEventSource.SYNC_MESSAGE_FILL:\n channelMarkAs();\n break;\n }\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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"}
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useRef","MessageCollectionInitPolicy","MessageEventSource","MessageFilter","Logger","confirmAndMarkAsRead","isDifferentChannel","useForceUpdate","useFreshCallback","useChannelHandler","useGroupChannelMessagesReducer","createMessageCollection","channel","creator","filter","limit","HOOK_NAME","useGroupChannelMessagesWithCollection","sdk","userId","options","forceUpdate","collectionRef","loading","refreshing","messages","nextMessages","newMessagesFromMembers","updateMessages","updateNextMessages","deleteNextMessages","deleteMessages","updateLoading","updateRefreshing","sortComparator","channelMarkAs","e","warn","init","uid","callback","current","dispose","collectionCreator","currentUser","setMessageCollectionHandler","onMessagesAdded","_","__","source","EVENT_MESSAGE_RECEIVED","EVENT_MESSAGE_SENT_SUCCESS","SYNC_MESSAGE_FILL","onMessagesUpdated","onMessagesDeleted","messageIds","onChannelDeleted","onChannelUpdated","eventChannel","isGroupChannel","onHugeGapDetected","initialize","CACHE_AND_REPLACE_BY_API","onCacheResult","err","isCacheEnabled","error","debug","length","pendingMessages","failedMessages","onApiResult","url","onUserBanned","bannedUser","setTimeout","refresh","prev","hasPrevious","list","loadPrevious","next","messageCandidates","hasNext","fetchedList","loadNext","push","sendUserMessage","params","onPending","Promise","resolve","reject","pendingMessage","isUserMessage","onSucceeded","sentMessage","onFailed","_failedMessage","sendFileMessage","isFileMessage","updateUserMessage","messageId","updatedMessage","updateFileMessage","resendMessage","failedMessage","resentMessage","resendUserMessage","resendFileMessage","deleteMessage","message","sendingStatus","removeFailedMessage","reqId"],"sources":["useGroupChannelMessagesWithCollection.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\n\nimport { MessageCollectionInitPolicy, MessageEventSource, MessageFilter } from '@sendbird/chat/groupChannel';\nimport type {\n SendbirdBaseMessage,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessageCollection,\n} from '@sendbird/uikit-utils';\nimport {\n Logger,\n confirmAndMarkAsRead,\n isDifferentChannel,\n useForceUpdate,\n useFreshCallback,\n} from '@sendbird/uikit-utils';\n\nimport { useChannelHandler } from '../../handler/useChannelHandler';\nimport type { UseGroupChannelMessages, UseGroupChannelMessagesOptions } from '../../types';\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 forceUpdate = useForceUpdate();\n const collectionRef = useRef<SendbirdMessageCollection>();\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, callback?: () => void) => {\n if (collectionRef.current) collectionRef.current?.dispose();\n\n if (uid) {\n collectionRef.current = createMessageCollection(channel, options?.collectionCreator);\n updateNextMessages([], true, sdk.currentUser.userId);\n channelMarkAs();\n\n collectionRef.current?.setMessageCollectionHandler({\n onMessagesAdded: (_, __, messages) => {\n switch (_.source) {\n case MessageEventSource.EVENT_MESSAGE_RECEIVED:\n case MessageEventSource.EVENT_MESSAGE_SENT_SUCCESS:\n case MessageEventSource.SYNC_MESSAGE_FILL:\n channelMarkAs();\n break;\n }\n updateNextMessages(messages, false, sdk.currentUser.userId);\n },\n onMessagesUpdated: (_, __, messages) => {\n // NOTE: v4 MESSAGE_RECEIVED is called twice from onMessagesAdded and onMessagesUpdated when receiving new message.\n // This is not intended behavior but not bugs.\n if (_.source !== MessageEventSource.EVENT_MESSAGE_RECEIVED) {\n updateMessages(messages, false, sdk.currentUser.userId);\n }\n },\n onMessagesDeleted: (_, __, messageIds) => {\n deleteMessages(messageIds, []);\n deleteNextMessages(messageIds, []);\n },\n onChannelDeleted: () => {\n options?.onChannelDeleted?.();\n },\n onChannelUpdated: (_, eventChannel) => {\n if (eventChannel.isGroupChannel() && !isDifferentChannel(eventChannel, channel)) {\n forceUpdate();\n }\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\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 }\n callback?.();\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\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, channel.url, options?.collectionCreator],\n );\n\n useChannelHandler(sdk, HOOK_NAME, {\n onUserBanned(channel, bannedUser) {\n if (channel.isGroupChannel() && !isDifferentChannel(channel, channel)) {\n if (bannedUser.userId === sdk.currentUser.userId) {\n options?.onChannelDeleted?.();\n } else {\n forceUpdate();\n }\n }\n },\n });\n\n useEffect(() => {\n // NOTE: Cache read is heavy 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'] = useFreshCallback(async () => {\n updateRefreshing(true);\n init(userId, () => updateRefreshing(false));\n });\n\n const prev: ReturnType<UseGroupChannelMessages>['prev'] = useFreshCallback(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'] = useFreshCallback(async () => {\n const messageCandidates: SendbirdBaseMessage[] = [];\n\n if (collectionRef.current && collectionRef.current?.hasNext) {\n try {\n const fetchedList = await collectionRef.current?.loadNext();\n messageCandidates.push(...fetchedList);\n } catch {}\n }\n\n if (nextMessages.length > 0) {\n messageCandidates.push(...nextMessages);\n }\n\n if (messageCandidates.length > 0) {\n updateMessages(messageCandidates, false, sdk.currentUser.userId);\n updateNextMessages([], true, sdk.currentUser.userId);\n }\n });\n\n const sendUserMessage: ReturnType<UseGroupChannelMessages>['sendUserMessage'] = useFreshCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n channel\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, _failedMessage) => {\n // updateMessages([failedMessage], false, sdk.currentUser.userId);\n reject(err);\n });\n });\n },\n );\n const sendFileMessage: ReturnType<UseGroupChannelMessages>['sendFileMessage'] = useFreshCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n channel\n .sendFileMessage(params)\n .onPending((pendingMessage) => {\n if (pendingMessage.isFileMessage()) {\n updateMessages([pendingMessage], false, sdk.currentUser.userId);\n onPending?.(pendingMessage);\n }\n })\n .onSucceeded((sentMessage) => {\n if (sentMessage.isFileMessage()) {\n updateMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage as SendbirdFileMessage);\n }\n })\n .onFailed((err, _failedMessage) => {\n // updateMessages([failedMessage], false, sdk.currentUser.userId);\n reject(err);\n });\n });\n },\n );\n const updateUserMessage: ReturnType<UseGroupChannelMessages>['updateUserMessage'] = useFreshCallback(\n async (messageId, params) => {\n const updatedMessage = await channel.updateUserMessage(messageId, params);\n updateMessages([updatedMessage], false, sdk.currentUser.userId);\n return updatedMessage;\n },\n );\n const updateFileMessage: ReturnType<UseGroupChannelMessages>['updateFileMessage'] = useFreshCallback(\n async (messageId, params) => {\n const updatedMessage = await channel.updateFileMessage(messageId, params);\n updateMessages([updatedMessage], false, sdk.currentUser.userId);\n return updatedMessage;\n },\n );\n const resendMessage: ReturnType<UseGroupChannelMessages>['resendMessage'] = useFreshCallback(\n async (failedMessage) => {\n const resentMessage = await (() => {\n if (failedMessage.isUserMessage()) return channel.resendUserMessage(failedMessage);\n if (failedMessage.isFileMessage()) return channel.resendFileMessage(failedMessage);\n return null;\n })();\n\n if (resentMessage) updateMessages([resentMessage], false, sdk.currentUser.userId);\n },\n );\n const deleteMessage: ReturnType<UseGroupChannelMessages>['deleteMessage'] = useFreshCallback(async (message) => {\n if (message.sendingStatus === 'succeeded') {\n if (message.isUserMessage()) await channel.deleteMessage(message);\n if (message.isFileMessage()) await channel.deleteMessage(message);\n } else {\n try {\n await collectionRef.current?.removeFailedMessage(message.reqId);\n } finally {\n deleteMessages([message.messageId], [message.reqId]);\n }\n }\n });\n\n return {\n loading,\n refreshing,\n refresh,\n messages,\n nextMessages,\n newMessagesFromMembers,\n next,\n prev,\n sendUserMessage,\n sendFileMessage,\n updateUserMessage,\n updateFileMessage,\n resendMessage,\n deleteMessage,\n };\n};\n"],"mappings":"AAAA,SAASA,WAAT,EAAsBC,SAAtB,EAAiCC,MAAjC,QAA+C,OAA/C;AAEA,SAASC,2BAAT,EAAsCC,kBAAtC,EAA0DC,aAA1D,QAA+E,6BAA/E;AAOA,SACEC,MADF,EAEEC,oBAFF,EAGEC,kBAHF,EAIEC,cAJF,EAKEC,gBALF,QAMO,uBANP;AAQA,SAASC,iBAAT,QAAkC,iCAAlC;AAEA,SAASC,8BAAT,QAA+C,WAA/C;;AAEA,MAAMC,uBAAuB,GAAG,CAC9BC,OAD8B,EAE9BC,OAF8B,KAG3B;EACH,IAAIA,OAAJ,EAAa,OAAOA,OAAO,EAAd;EACb,MAAMC,MAAM,GAAG,IAAIX,aAAJ,EAAf;EACA,OAAOS,OAAO,CAACD,uBAAR,CAAgC;IAAEG,MAAF;IAAUC,KAAK,EAAE;EAAjB,CAAhC,CAAP;AACD,CAPD;;AASA,MAAMC,SAAS,GAAG,uCAAlB;AAEA,OAAO,MAAMC,qCAA8D,GAAG,CAACC,GAAD,EAAMN,OAAN,EAAeO,MAAf,EAAuBC,OAAvB,KAAmC;EAC/G,MAAMC,WAAW,GAAGd,cAAc,EAAlC;EACA,MAAMe,aAAa,GAAGtB,MAAM,EAA5B;EAEA,MAAM;IACJuB,OADI;IAEJC,UAFI;IAGJC,QAHI;IAIJC,YAJI;IAKJC,sBALI;IAMJC,cANI;IAOJC,kBAPI;IAQJC,kBARI;IASJC,cATI;IAUJC,aAVI;IAWJC;EAXI,IAYFvB,8BAA8B,CAACS,MAAD,EAASC,OAAT,aAASA,OAAT,uBAASA,OAAO,CAAEc,cAAlB,CAZlC;;EAcA,MAAMC,aAAa,GAAG,YAAY;IAChC,IAAI;MACF,MAAM9B,oBAAoB,CAAC,CAACO,OAAD,CAAD,CAA1B;IACD,CAFD,CAEE,OAAOwB,CAAP,EAAU;MACVhC,MAAM,CAACiC,IAAP,CAAa,IAAGrB,SAAU,sBAA1B,EAAiDoB,CAAjD;IACD;EACF,CAND;;EAQA,MAAME,IAAI,GAAGxC,WAAW,CACtB,OAAOyC,GAAP,EAAqBC,QAArB,KAA+C;IAAA;;IAC7C,IAAIlB,aAAa,CAACmB,OAAlB,EAA2B,yBAAAnB,aAAa,CAACmB,OAAd,gFAAuBC,OAAvB;;IAE3B,IAAIH,GAAJ,EAAS;MAAA;;MACPjB,aAAa,CAACmB,OAAd,GAAwB9B,uBAAuB,CAACC,OAAD,EAAUQ,OAAV,aAAUA,OAAV,uBAAUA,OAAO,CAAEuB,iBAAnB,CAA/C;MACAd,kBAAkB,CAAC,EAAD,EAAK,IAAL,EAAWX,GAAG,CAAC0B,WAAJ,CAAgBzB,MAA3B,CAAlB;MACAgB,aAAa;MAEb,0BAAAb,aAAa,CAACmB,OAAd,kFAAuBI,2BAAvB,CAAmD;QACjDC,eAAe,EAAE,CAACC,CAAD,EAAIC,EAAJ,EAAQvB,QAAR,KAAqB;UACpC,QAAQsB,CAAC,CAACE,MAAV;YACE,KAAK/C,kBAAkB,CAACgD,sBAAxB;YACA,KAAKhD,kBAAkB,CAACiD,0BAAxB;YACA,KAAKjD,kBAAkB,CAACkD,iBAAxB;cACEjB,aAAa;cACb;UALJ;;UAOAN,kBAAkB,CAACJ,QAAD,EAAW,KAAX,EAAkBP,GAAG,CAAC0B,WAAJ,CAAgBzB,MAAlC,CAAlB;QACD,CAVgD;QAWjDkC,iBAAiB,EAAE,CAACN,CAAD,EAAIC,EAAJ,EAAQvB,QAAR,KAAqB;UACtC;UACA;UACA,IAAIsB,CAAC,CAACE,MAAF,KAAa/C,kBAAkB,CAACgD,sBAApC,EAA4D;YAC1DtB,cAAc,CAACH,QAAD,EAAW,KAAX,EAAkBP,GAAG,CAAC0B,WAAJ,CAAgBzB,MAAlC,CAAd;UACD;QACF,CAjBgD;QAkBjDmC,iBAAiB,EAAE,CAACP,CAAD,EAAIC,EAAJ,EAAQO,UAAR,KAAuB;UACxCxB,cAAc,CAACwB,UAAD,EAAa,EAAb,CAAd;UACAzB,kBAAkB,CAACyB,UAAD,EAAa,EAAb,CAAlB;QACD,CArBgD;QAsBjDC,gBAAgB,EAAE,MAAM;UAAA;;UACtBpC,OAAO,SAAP,IAAAA,OAAO,WAAP,qCAAAA,OAAO,CAAEoC,gBAAT,qFAAApC,OAAO;QACR,CAxBgD;QAyBjDqC,gBAAgB,EAAE,CAACV,CAAD,EAAIW,YAAJ,KAAqB;UACrC,IAAIA,YAAY,CAACC,cAAb,MAAiC,CAACrD,kBAAkB,CAACoD,YAAD,EAAe9C,OAAf,CAAxD,EAAiF;YAC/ES,WAAW;UACZ;QACF,CA7BgD;QA8BjDuC,iBAAiB,EAAE,MAAM;UACvBtB,IAAI,CAACC,GAAD,CAAJ;QACD;MAhCgD,CAAnD;MAmCAjB,aAAa,CAACmB,OAAd,CACGoB,UADH,CACc5D,2BAA2B,CAAC6D,wBAD1C,EAEGC,aAFH,CAEiB,CAACC,GAAD,EAAMvC,QAAN,KAAmB;QAChC,IAAIuC,GAAJ,EAAS9C,GAAG,CAAC+C,cAAJ,IAAsB7D,MAAM,CAAC8D,KAAP,CAAc,IAAGlD,SAAU,iBAA3B,EAA6CgD,GAA7C,CAAtB,CAAT,KACK;UAAA;;UACH5D,MAAM,CAAC+D,KAAP,CAAc,IAAGnD,SAAU,iBAA3B,EAA6C,iBAA7C,EAAgES,QAAQ,CAAC2C,MAAzE;UAEAxC,cAAc,CAACH,QAAD,EAAW,IAAX,EAAiBP,GAAG,CAAC0B,WAAJ,CAAgBzB,MAAjC,CAAd;UACAS,cAAc,CAAC,2BAAAN,aAAa,CAACmB,OAAd,kFAAuB4B,eAAvB,KAA0C,EAA3C,EAA+C,KAA/C,EAAsDnD,GAAG,CAAC0B,WAAJ,CAAgBzB,MAAtE,CAAd;UACAS,cAAc,CAAC,2BAAAN,aAAa,CAACmB,OAAd,kFAAuB6B,cAAvB,KAAyC,EAA1C,EAA8C,KAA9C,EAAqDpD,GAAG,CAAC0B,WAAJ,CAAgBzB,MAArE,CAAd;QACD;QACDqB,QAAQ,SAAR,IAAAA,QAAQ,WAAR,YAAAA,QAAQ;MACT,CAZH,EAaG+B,WAbH,CAae,CAACP,GAAD,EAAMvC,QAAN,KAAmB;QAC9B,IAAIuC,GAAJ,EAAS5D,MAAM,CAACiC,IAAP,CAAa,IAAGrB,SAAU,eAA1B,EAA0CgD,GAA1C,EAAT,KACK;UACH5D,MAAM,CAAC+D,KAAP,CAAc,IAAGnD,SAAU,eAA3B,EAA2C,iBAA3C,EAA8DS,QAAQ,CAAC2C,MAAvE;UAEAxC,cAAc,CAACH,QAAD,EAAW,IAAX,EAAiBP,GAAG,CAAC0B,WAAJ,CAAgBzB,MAAjC,CAAd;;UACA,IAAID,GAAG,CAAC+C,cAAR,EAAwB;YAAA;;YACtBrC,cAAc,CAAC,2BAAAN,aAAa,CAACmB,OAAd,kFAAuB4B,eAAvB,KAA0C,EAA3C,EAA+C,KAA/C,EAAsDnD,GAAG,CAAC0B,WAAJ,CAAgBzB,MAAtE,CAAd;YACAS,cAAc,CAAC,2BAAAN,aAAa,CAACmB,OAAd,kFAAuB6B,cAAvB,KAAyC,EAA1C,EAA8C,KAA9C,EAAqDpD,GAAG,CAAC0B,WAAJ,CAAgBzB,MAArE,CAAd;UACD;QACF;QACDqB,QAAQ,SAAR,IAAAA,QAAQ,WAAR,YAAAA,QAAQ;MACT,CAzBH;IA0BD;EACF,CAvEqB,EAwEtB,CAACtB,GAAD,EAAMN,OAAO,CAAC4D,GAAd,EAAmBpD,OAAnB,aAAmBA,OAAnB,uBAAmBA,OAAO,CAAEuB,iBAA5B,CAxEsB,CAAxB;EA2EAlC,iBAAiB,CAACS,GAAD,EAAMF,SAAN,EAAiB;IAChCyD,YAAY,CAAC7D,OAAD,EAAU8D,UAAV,EAAsB;MAChC,IAAI9D,OAAO,CAAC+C,cAAR,MAA4B,CAACrD,kBAAkB,CAACM,OAAD,EAAUA,OAAV,CAAnD,EAAuE;QACrE,IAAI8D,UAAU,CAACvD,MAAX,KAAsBD,GAAG,CAAC0B,WAAJ,CAAgBzB,MAA1C,EAAkD;UAAA;;UAChDC,OAAO,SAAP,IAAAA,OAAO,WAAP,sCAAAA,OAAO,CAAEoC,gBAAT,uFAAApC,OAAO;QACR,CAFD,MAEO;UACLC,WAAW;QACZ;MACF;IACF;;EAT+B,CAAjB,CAAjB;EAYAtB,SAAS,CAAC,MAAM;IACd;IACA4E,UAAU,CAAC,YAAY;MACrB3C,aAAa,CAAC,IAAD,CAAb;MACAM,IAAI,CAACnB,MAAD,EAAS,MAAMa,aAAa,CAAC,KAAD,CAA5B,CAAJ;IACD,CAHS,EAGP,CAHO,CAAV;EAID,CANQ,EAMN,CAACM,IAAD,EAAOnB,MAAP,CANM,CAAT;EAQApB,SAAS,CAAC,MAAM;IACd,OAAO,MAAM;MAAA;;MACX,IAAIuB,aAAa,CAACmB,OAAlB,EAA2B,0BAAAnB,aAAa,CAACmB,OAAd,kFAAuBC,OAAvB;IAC5B,CAFD;EAGD,CAJQ,EAIN,EAJM,CAAT;EAMA,MAAMkC,OAAuD,GAAGpE,gBAAgB,CAAC,YAAY;IAC3FyB,gBAAgB,CAAC,IAAD,CAAhB;IACAK,IAAI,CAACnB,MAAD,EAAS,MAAMc,gBAAgB,CAAC,KAAD,CAA/B,CAAJ;EACD,CAH+E,CAAhF;EAKA,MAAM4C,IAAiD,GAAGrE,gBAAgB,CAAC,YAAY;IAAA;;IACrF,IAAIc,aAAa,CAACmB,OAAd,8BAAyBnB,aAAa,CAACmB,OAAvC,mDAAyB,uBAAuBqC,WAApD,EAAiE;MAC/D,IAAI;QAAA;;QACF,MAAMC,IAAI,GAAG,iCAAMzD,aAAa,CAACmB,OAApB,2DAAM,uBAAuBuC,YAAvB,EAAN,CAAb;QACApD,cAAc,CAACmD,IAAD,EAAO,KAAP,EAAc7D,GAAG,CAAC0B,WAAJ,CAAgBzB,MAA9B,CAAd;MACD,CAHD,CAGE,MAAM,CAAE;IACX;EACF,CAPyE,CAA1E;EASA,MAAM8D,IAAiD,GAAGzE,gBAAgB,CAAC,YAAY;IAAA;;IACrF,MAAM0E,iBAAwC,GAAG,EAAjD;;IAEA,IAAI5D,aAAa,CAACmB,OAAd,+BAAyBnB,aAAa,CAACmB,OAAvC,oDAAyB,wBAAuB0C,OAApD,EAA6D;MAC3D,IAAI;QAAA;;QACF,MAAMC,WAAW,GAAG,kCAAM9D,aAAa,CAACmB,OAApB,4DAAM,wBAAuB4C,QAAvB,EAAN,CAApB;QACAH,iBAAiB,CAACI,IAAlB,CAAuB,GAAGF,WAA1B;MACD,CAHD,CAGE,MAAM,CAAE;IACX;;IAED,IAAI1D,YAAY,CAAC0C,MAAb,GAAsB,CAA1B,EAA6B;MAC3Bc,iBAAiB,CAACI,IAAlB,CAAuB,GAAG5D,YAA1B;IACD;;IAED,IAAIwD,iBAAiB,CAACd,MAAlB,GAA2B,CAA/B,EAAkC;MAChCxC,cAAc,CAACsD,iBAAD,EAAoB,KAApB,EAA2BhE,GAAG,CAAC0B,WAAJ,CAAgBzB,MAA3C,CAAd;MACAU,kBAAkB,CAAC,EAAD,EAAK,IAAL,EAAWX,GAAG,CAAC0B,WAAJ,CAAgBzB,MAA3B,CAAlB;IACD;EACF,CAlByE,CAA1E;EAoBA,MAAMoE,eAAuE,GAAG/E,gBAAgB,CAC9F,CAACgF,MAAD,EAASC,SAAT,KAAuB;IACrB,OAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;MACtChF,OAAO,CACJ2E,eADH,CACmBC,MADnB,EAEGC,SAFH,CAEcI,cAAD,IAAoB;QAC7B,IAAIA,cAAc,CAACC,aAAf,EAAJ,EAAoC;UAClCL,SAAS,SAAT,IAAAA,SAAS,WAAT,YAAAA,SAAS,CAAGI,cAAH,CAAT;UACAjE,cAAc,CAAC,CAACiE,cAAD,CAAD,EAAmB,KAAnB,EAA0B3E,GAAG,CAAC0B,WAAJ,CAAgBzB,MAA1C,CAAd;QACD;MACF,CAPH,EAQG4E,WARH,CAQgBC,WAAD,IAAiB;QAC5B,IAAIA,WAAW,CAACF,aAAZ,EAAJ,EAAiC;UAC/BlE,cAAc,CAAC,CAACoE,WAAD,CAAD,EAAgB,KAAhB,EAAuB9E,GAAG,CAAC0B,WAAJ,CAAgBzB,MAAvC,CAAd;UACAwE,OAAO,CAACK,WAAD,CAAP;QACD;MACF,CAbH,EAcGC,QAdH,CAcY,CAACjC,GAAD,EAAMkC,cAAN,KAAyB;QACjC;QACAN,MAAM,CAAC5B,GAAD,CAAN;MACD,CAjBH;IAkBD,CAnBM,CAAP;EAoBD,CAtB6F,CAAhG;EAwBA,MAAMmC,eAAuE,GAAG3F,gBAAgB,CAC9F,CAACgF,MAAD,EAASC,SAAT,KAAuB;IACrB,OAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;MACtChF,OAAO,CACJuF,eADH,CACmBX,MADnB,EAEGC,SAFH,CAEcI,cAAD,IAAoB;QAC7B,IAAIA,cAAc,CAACO,aAAf,EAAJ,EAAoC;UAClCxE,cAAc,CAAC,CAACiE,cAAD,CAAD,EAAmB,KAAnB,EAA0B3E,GAAG,CAAC0B,WAAJ,CAAgBzB,MAA1C,CAAd;UACAsE,SAAS,SAAT,IAAAA,SAAS,WAAT,YAAAA,SAAS,CAAGI,cAAH,CAAT;QACD;MACF,CAPH,EAQGE,WARH,CAQgBC,WAAD,IAAiB;QAC5B,IAAIA,WAAW,CAACI,aAAZ,EAAJ,EAAiC;UAC/BxE,cAAc,CAAC,CAACoE,WAAD,CAAD,EAAgB,KAAhB,EAAuB9E,GAAG,CAAC0B,WAAJ,CAAgBzB,MAAvC,CAAd;UACAwE,OAAO,CAACK,WAAD,CAAP;QACD;MACF,CAbH,EAcGC,QAdH,CAcY,CAACjC,GAAD,EAAMkC,cAAN,KAAyB;QACjC;QACAN,MAAM,CAAC5B,GAAD,CAAN;MACD,CAjBH;IAkBD,CAnBM,CAAP;EAoBD,CAtB6F,CAAhG;EAwBA,MAAMqC,iBAA2E,GAAG7F,gBAAgB,CAClG,OAAO8F,SAAP,EAAkBd,MAAlB,KAA6B;IAC3B,MAAMe,cAAc,GAAG,MAAM3F,OAAO,CAACyF,iBAAR,CAA0BC,SAA1B,EAAqCd,MAArC,CAA7B;IACA5D,cAAc,CAAC,CAAC2E,cAAD,CAAD,EAAmB,KAAnB,EAA0BrF,GAAG,CAAC0B,WAAJ,CAAgBzB,MAA1C,CAAd;IACA,OAAOoF,cAAP;EACD,CALiG,CAApG;EAOA,MAAMC,iBAA2E,GAAGhG,gBAAgB,CAClG,OAAO8F,SAAP,EAAkBd,MAAlB,KAA6B;IAC3B,MAAMe,cAAc,GAAG,MAAM3F,OAAO,CAAC4F,iBAAR,CAA0BF,SAA1B,EAAqCd,MAArC,CAA7B;IACA5D,cAAc,CAAC,CAAC2E,cAAD,CAAD,EAAmB,KAAnB,EAA0BrF,GAAG,CAAC0B,WAAJ,CAAgBzB,MAA1C,CAAd;IACA,OAAOoF,cAAP;EACD,CALiG,CAApG;EAOA,MAAME,aAAmE,GAAGjG,gBAAgB,CAC1F,MAAOkG,aAAP,IAAyB;IACvB,MAAMC,aAAa,GAAG,MAAM,CAAC,MAAM;MACjC,IAAID,aAAa,CAACZ,aAAd,EAAJ,EAAmC,OAAOlF,OAAO,CAACgG,iBAAR,CAA0BF,aAA1B,CAAP;MACnC,IAAIA,aAAa,CAACN,aAAd,EAAJ,EAAmC,OAAOxF,OAAO,CAACiG,iBAAR,CAA0BH,aAA1B,CAAP;MACnC,OAAO,IAAP;IACD,CAJ2B,GAA5B;IAMA,IAAIC,aAAJ,EAAmB/E,cAAc,CAAC,CAAC+E,aAAD,CAAD,EAAkB,KAAlB,EAAyBzF,GAAG,CAAC0B,WAAJ,CAAgBzB,MAAzC,CAAd;EACpB,CATyF,CAA5F;EAWA,MAAM2F,aAAmE,GAAGtG,gBAAgB,CAAC,MAAOuG,OAAP,IAAmB;IAC9G,IAAIA,OAAO,CAACC,aAAR,KAA0B,WAA9B,EAA2C;MACzC,IAAID,OAAO,CAACjB,aAAR,EAAJ,EAA6B,MAAMlF,OAAO,CAACkG,aAAR,CAAsBC,OAAtB,CAAN;MAC7B,IAAIA,OAAO,CAACX,aAAR,EAAJ,EAA6B,MAAMxF,OAAO,CAACkG,aAAR,CAAsBC,OAAtB,CAAN;IAC9B,CAHD,MAGO;MACL,IAAI;QAAA;;QACF,kCAAMzF,aAAa,CAACmB,OAApB,4DAAM,wBAAuBwE,mBAAvB,CAA2CF,OAAO,CAACG,KAAnD,CAAN;MACD,CAFD,SAEU;QACRnF,cAAc,CAAC,CAACgF,OAAO,CAACT,SAAT,CAAD,EAAsB,CAACS,OAAO,CAACG,KAAT,CAAtB,CAAd;MACD;IACF;EACF,CAX2F,CAA5F;EAaA,OAAO;IACL3F,OADK;IAELC,UAFK;IAGLoD,OAHK;IAILnD,QAJK;IAKLC,YALK;IAMLC,sBANK;IAOLsD,IAPK;IAQLJ,IARK;IASLU,eATK;IAULY,eAVK;IAWLE,iBAXK;IAYLG,iBAZK;IAaLC,aAbK;IAcLK;EAdK,CAAP;AAgBD,CAvQM"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { useCallback, useRef } from 'react';
|
|
2
2
|
import { Logger, confirmAndMarkAsRead, isDifferentChannel, useAsyncEffect, useForceUpdate } from '@sendbird/uikit-utils';
|
|
3
3
|
import { useChannelHandler } from '../../handler/useChannelHandler';
|
|
4
|
-
import { useActiveGroupChannel } from '../useActiveGroupChannel';
|
|
5
4
|
import { useGroupChannelMessagesReducer } from './reducer';
|
|
6
5
|
|
|
7
6
|
const createMessageQuery = (channel, creator) => {
|
|
@@ -14,12 +13,7 @@ const createMessageQuery = (channel, creator) => {
|
|
|
14
13
|
|
|
15
14
|
const HOOK_NAME = 'useGroupChannelMessagesWithQuery';
|
|
16
15
|
export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options) => {
|
|
17
|
-
const queryRef = useRef();
|
|
18
|
-
|
|
19
|
-
const {
|
|
20
|
-
activeChannel,
|
|
21
|
-
setActiveChannel
|
|
22
|
-
} = useActiveGroupChannel(sdk, channel);
|
|
16
|
+
const queryRef = useRef();
|
|
23
17
|
const forceUpdate = useForceUpdate();
|
|
24
18
|
const {
|
|
25
19
|
loading,
|
|
@@ -47,7 +41,7 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
|
|
|
47
41
|
if (uid) {
|
|
48
42
|
var _queryRef$current;
|
|
49
43
|
|
|
50
|
-
queryRef.current = createMessageQuery(
|
|
44
|
+
queryRef.current = createMessageQuery(channel, options === null || options === void 0 ? void 0 : options.queryCreator);
|
|
51
45
|
channelMarkAs().catch();
|
|
52
46
|
|
|
53
47
|
if ((_queryRef$current = queryRef.current) !== null && _queryRef$current !== void 0 && _queryRef$current.hasNext) {
|
|
@@ -59,11 +53,10 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
|
|
|
59
53
|
|
|
60
54
|
updateNextMessages([], true, sdk.currentUser.userId);
|
|
61
55
|
}
|
|
62
|
-
}, [sdk,
|
|
56
|
+
}, [sdk, channel.url, options === null || options === void 0 ? void 0 : options.queryCreator]);
|
|
63
57
|
|
|
64
58
|
const channelUpdater = channel => {
|
|
65
|
-
if (channel.isGroupChannel() && !isDifferentChannel(channel,
|
|
66
|
-
setActiveChannel(channel);
|
|
59
|
+
if (channel.isGroupChannel() && !isDifferentChannel(channel, channel)) {
|
|
67
60
|
forceUpdate();
|
|
68
61
|
}
|
|
69
62
|
};
|
|
@@ -71,18 +64,18 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
|
|
|
71
64
|
useChannelHandler(sdk, HOOK_NAME, {
|
|
72
65
|
// Messages
|
|
73
66
|
onMessageReceived(eventChannel, message) {
|
|
74
|
-
if (isDifferentChannel(
|
|
67
|
+
if (isDifferentChannel(channel, eventChannel)) return;
|
|
75
68
|
channelMarkAs();
|
|
76
69
|
updateNextMessages([message], false, sdk.currentUser.userId);
|
|
77
70
|
},
|
|
78
71
|
|
|
79
72
|
onMessageUpdated(eventChannel, message) {
|
|
80
|
-
if (isDifferentChannel(
|
|
73
|
+
if (isDifferentChannel(channel, eventChannel)) return;
|
|
81
74
|
updateMessages([message], false, sdk.currentUser.userId);
|
|
82
75
|
},
|
|
83
76
|
|
|
84
77
|
onMessageDeleted(eventChannel, messageId) {
|
|
85
|
-
if (isDifferentChannel(
|
|
78
|
+
if (isDifferentChannel(channel, eventChannel)) return;
|
|
86
79
|
deleteMessages([messageId], []);
|
|
87
80
|
deleteNextMessages([messageId], []);
|
|
88
81
|
},
|
|
@@ -94,14 +87,14 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
|
|
|
94
87
|
onChannelHidden: channelUpdater,
|
|
95
88
|
|
|
96
89
|
onChannelMemberCountChanged(channels) {
|
|
97
|
-
const
|
|
98
|
-
if (
|
|
90
|
+
const foundChannel = channels.find(c => !isDifferentChannel(c, channel));
|
|
91
|
+
if (foundChannel) channelUpdater(foundChannel);
|
|
99
92
|
},
|
|
100
93
|
|
|
101
94
|
onChannelDeleted(channelUrl) {
|
|
102
95
|
var _options$onChannelDel;
|
|
103
96
|
|
|
104
|
-
if (
|
|
97
|
+
if (channel.url === channelUrl) options === null || options === void 0 ? void 0 : (_options$onChannelDel = options.onChannelDeleted) === null || _options$onChannelDel === void 0 ? void 0 : _options$onChannelDel.call(options);
|
|
105
98
|
},
|
|
106
99
|
|
|
107
100
|
// Users
|
|
@@ -115,7 +108,7 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
|
|
|
115
108
|
onUserUnmuted: channelUpdater,
|
|
116
109
|
|
|
117
110
|
onUserBanned(eventChannel, bannedUser) {
|
|
118
|
-
if (isDifferentChannel(
|
|
111
|
+
if (isDifferentChannel(channel, eventChannel)) return;
|
|
119
112
|
|
|
120
113
|
if (bannedUser.userId === sdk.currentUser.userId) {
|
|
121
114
|
var _options$onChannelDel2;
|
|
@@ -155,7 +148,7 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
|
|
|
155
148
|
}, [nextMessages.length]);
|
|
156
149
|
const sendUserMessage = useCallback((params, onPending) => {
|
|
157
150
|
return new Promise((resolve, reject) => {
|
|
158
|
-
|
|
151
|
+
channel.sendUserMessage(params).onPending(pendingMessage => {
|
|
159
152
|
if (pendingMessage.isUserMessage()) {
|
|
160
153
|
updateNextMessages([pendingMessage], false, sdk.currentUser.userId);
|
|
161
154
|
onPending === null || onPending === void 0 ? void 0 : onPending(pendingMessage);
|
|
@@ -169,10 +162,10 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
|
|
|
169
162
|
reject(err);
|
|
170
163
|
});
|
|
171
164
|
});
|
|
172
|
-
}, [
|
|
165
|
+
}, [channel]);
|
|
173
166
|
const sendFileMessage = useCallback((params, onPending) => {
|
|
174
167
|
return new Promise((resolve, reject) => {
|
|
175
|
-
|
|
168
|
+
channel.sendFileMessage(params).onPending(pendingMessage => {
|
|
176
169
|
if (pendingMessage.isFileMessage()) {
|
|
177
170
|
updateNextMessages([pendingMessage], false, sdk.currentUser.userId);
|
|
178
171
|
onPending === null || onPending === void 0 ? void 0 : onPending(pendingMessage);
|
|
@@ -186,35 +179,35 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
|
|
|
186
179
|
reject(err);
|
|
187
180
|
});
|
|
188
181
|
});
|
|
189
|
-
}, [
|
|
182
|
+
}, [channel]);
|
|
190
183
|
const updateUserMessage = useCallback(async (messageId, params) => {
|
|
191
|
-
const updatedMessage = await
|
|
184
|
+
const updatedMessage = await channel.updateUserMessage(messageId, params);
|
|
192
185
|
updateMessages([updatedMessage], false, sdk.currentUser.userId);
|
|
193
186
|
return updatedMessage;
|
|
194
|
-
}, [
|
|
187
|
+
}, [channel]);
|
|
195
188
|
const updateFileMessage = useCallback(async (messageId, params) => {
|
|
196
|
-
const updatedMessage = await
|
|
189
|
+
const updatedMessage = await channel.updateFileMessage(messageId, params);
|
|
197
190
|
updateMessages([updatedMessage], false, sdk.currentUser.userId);
|
|
198
191
|
return updatedMessage;
|
|
199
|
-
}, [
|
|
192
|
+
}, [channel]);
|
|
200
193
|
const resendMessage = useCallback(async failedMessage => {
|
|
201
194
|
const message = await (() => {
|
|
202
|
-
if (failedMessage.isUserMessage()) return
|
|
195
|
+
if (failedMessage.isUserMessage()) return channel.resendUserMessage(failedMessage); // FIXME: v4 bugs
|
|
203
196
|
// @ts-ignore
|
|
204
197
|
|
|
205
|
-
if (failedMessage.isFileMessage()) return
|
|
198
|
+
if (failedMessage.isFileMessage()) return channel.resendFileMessage(failedMessage);
|
|
206
199
|
return null;
|
|
207
200
|
})();
|
|
208
201
|
if (message) updateNextMessages([message], false, sdk.currentUser.userId);
|
|
209
|
-
}, [
|
|
202
|
+
}, [channel]);
|
|
210
203
|
const deleteMessage = useCallback(async message => {
|
|
211
204
|
if (message.sendingStatus === 'succeeded') {
|
|
212
|
-
if (message.isUserMessage()) await
|
|
213
|
-
if (message.isFileMessage()) await
|
|
205
|
+
if (message.isUserMessage()) await channel.deleteMessage(message);
|
|
206
|
+
if (message.isFileMessage()) await channel.deleteMessage(message);
|
|
214
207
|
} else {
|
|
215
208
|
deleteMessages([message.messageId], [message.reqId]);
|
|
216
209
|
}
|
|
217
|
-
}, [
|
|
210
|
+
}, [channel]);
|
|
218
211
|
return {
|
|
219
212
|
loading,
|
|
220
213
|
refreshing,
|
|
@@ -229,8 +222,7 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
|
|
|
229
222
|
updateUserMessage,
|
|
230
223
|
updateFileMessage,
|
|
231
224
|
resendMessage,
|
|
232
|
-
deleteMessage
|
|
233
|
-
activeChannel
|
|
225
|
+
deleteMessage
|
|
234
226
|
};
|
|
235
227
|
};
|
|
236
228
|
//# sourceMappingURL=useGroupChannelMessagesWithQuery.js.map
|