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