@sendbird/uikit-chat-hooks 2.4.1 → 2.5.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/lib/commonjs/channel/useChannelMessagesReducer.js +153 -0
- package/lib/commonjs/channel/useChannelMessagesReducer.js.map +1 -0
- package/lib/commonjs/channel/useGroupChannel.js +0 -4
- package/lib/commonjs/channel/useGroupChannel.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelList/index.js +0 -5
- package/lib/commonjs/channel/useGroupChannelList/index.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelList/reducer.js +12 -29
- package/lib/commonjs/channel/useGroupChannelList/reducer.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithCollection.js +1 -22
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithCollection.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithQuery.js +1 -18
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithQuery.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelMessages/index.js +0 -5
- package/lib/commonjs/channel/useGroupChannelMessages/index.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +172 -131
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +76 -73
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
- package/lib/commonjs/channel/useOpenChannel.js +0 -4
- package/lib/commonjs/channel/useOpenChannel.js.map +1 -1
- package/lib/commonjs/channel/useOpenChannelList/index.js +0 -3
- package/lib/commonjs/channel/useOpenChannelList/index.js.map +1 -1
- package/lib/commonjs/channel/useOpenChannelList/reducer.js +2 -21
- package/lib/commonjs/channel/useOpenChannelList/reducer.js.map +1 -1
- package/lib/commonjs/channel/useOpenChannelList/useOpenChannelListWithQuery.js +1 -22
- package/lib/commonjs/channel/useOpenChannelList/useOpenChannelListWithQuery.js.map +1 -1
- package/lib/commonjs/channel/useOpenChannelMessages/index.js +0 -3
- package/lib/commonjs/channel/useOpenChannelMessages/index.js.map +1 -1
- package/lib/commonjs/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js +128 -57
- package/lib/commonjs/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js.map +1 -1
- package/lib/commonjs/common/useAppFeatures.js +0 -3
- package/lib/commonjs/common/useAppFeatures.js.map +1 -1
- package/lib/commonjs/common/useMessageOutgoingStatus.js +0 -11
- package/lib/commonjs/common/useMessageOutgoingStatus.js.map +1 -1
- package/lib/commonjs/common/usePushTrigger.js +0 -6
- package/lib/commonjs/common/usePushTrigger.js.map +1 -1
- package/lib/commonjs/common/useTotalUnreadMessageCount.js +0 -7
- package/lib/commonjs/common/useTotalUnreadMessageCount.js.map +1 -1
- package/lib/commonjs/common/useUserList.js +5 -20
- package/lib/commonjs/common/useUserList.js.map +1 -1
- package/lib/commonjs/handler/useChannelHandler.js +15 -41
- package/lib/commonjs/handler/useChannelHandler.js.map +1 -1
- package/lib/commonjs/handler/useConnectionHandler.js +14 -11
- package/lib/commonjs/handler/useConnectionHandler.js.map +1 -1
- package/lib/commonjs/handler/useUserEventHandler.js +0 -8
- package/lib/commonjs/handler/useUserEventHandler.js.map +1 -1
- package/lib/commonjs/index.js +0 -23
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/model/CustomQuery.js +0 -6
- package/lib/commonjs/model/CustomQuery.js.map +1 -1
- package/lib/commonjs/types.js.map +1 -1
- package/lib/module/channel/useChannelMessagesReducer.js +146 -0
- package/lib/module/channel/useChannelMessagesReducer.js.map +1 -0
- package/lib/module/channel/useGroupChannel.js.map +1 -1
- package/lib/module/channel/useGroupChannelList/index.js.map +1 -1
- package/lib/module/channel/useGroupChannelList/reducer.js +12 -26
- package/lib/module/channel/useGroupChannelList/reducer.js.map +1 -1
- package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js +1 -15
- package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js.map +1 -1
- package/lib/module/channel/useGroupChannelList/useGroupChannelListWithQuery.js +1 -11
- package/lib/module/channel/useGroupChannelList/useGroupChannelListWithQuery.js.map +1 -1
- package/lib/module/channel/useGroupChannelMessages/index.js.map +1 -1
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +174 -125
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +78 -70
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
- package/lib/module/channel/useOpenChannel.js.map +1 -1
- package/lib/module/channel/useOpenChannelList/index.js.map +1 -1
- package/lib/module/channel/useOpenChannelList/reducer.js +2 -18
- package/lib/module/channel/useOpenChannelList/reducer.js.map +1 -1
- package/lib/module/channel/useOpenChannelList/useOpenChannelListWithQuery.js +1 -17
- package/lib/module/channel/useOpenChannelList/useOpenChannelListWithQuery.js.map +1 -1
- package/lib/module/channel/useOpenChannelMessages/index.js.map +1 -1
- package/lib/module/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js +129 -53
- package/lib/module/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js.map +1 -1
- package/lib/module/common/useAppFeatures.js.map +1 -1
- package/lib/module/common/useMessageOutgoingStatus.js +0 -6
- package/lib/module/common/useMessageOutgoingStatus.js.map +1 -1
- package/lib/module/common/usePushTrigger.js.map +1 -1
- package/lib/module/common/useTotalUnreadMessageCount.js +0 -1
- package/lib/module/common/useTotalUnreadMessageCount.js.map +1 -1
- package/lib/module/common/useUserList.js +5 -15
- package/lib/module/common/useUserList.js.map +1 -1
- package/lib/module/handler/useChannelHandler.js +15 -35
- package/lib/module/handler/useChannelHandler.js.map +1 -1
- package/lib/module/handler/useConnectionHandler.js +15 -6
- package/lib/module/handler/useConnectionHandler.js.map +1 -1
- package/lib/module/handler/useUserEventHandler.js +0 -2
- package/lib/module/handler/useUserEventHandler.js.map +1 -1
- package/lib/module/index.js +0 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/model/CustomQuery.js +0 -4
- package/lib/module/model/CustomQuery.js.map +1 -1
- package/lib/module/types.js.map +1 -1
- package/lib/typescript/src/channel/useChannelMessagesReducer.d.ts +18 -0
- package/lib/typescript/src/channel/useGroupChannelList/reducer.d.ts +1 -1
- package/lib/typescript/src/common/useUserList.d.ts +1 -1
- package/lib/typescript/src/handler/useChannelHandler.d.ts +1 -1
- package/lib/typescript/src/handler/useConnectionHandler.d.ts +1 -2
- package/lib/typescript/src/index.d.ts +0 -1
- package/lib/typescript/src/types.d.ts +51 -20
- package/package.json +15 -10
- package/src/channel/useChannelMessagesReducer.ts +143 -0
- package/src/channel/useGroupChannelList/reducer.ts +11 -7
- package/src/channel/useGroupChannelList/useGroupChannelListWithCollection.ts +1 -1
- package/src/channel/useGroupChannelList/useGroupChannelListWithQuery.ts +1 -1
- package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.ts +174 -105
- package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.ts +90 -63
- package/src/channel/useOpenChannelList/useOpenChannelListWithQuery.ts +1 -5
- package/src/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.ts +143 -26
- package/src/common/useUserList.ts +4 -4
- package/src/handler/useChannelHandler.ts +11 -24
- package/src/handler/useConnectionHandler.ts +11 -5
- package/src/index.ts +0 -1
- package/src/types.ts +58 -20
- package/lib/commonjs/channel/useGroupChannelMessages/reducer.js +0 -154
- package/lib/commonjs/channel/useGroupChannelMessages/reducer.js.map +0 -1
- package/lib/commonjs/channel/useOpenChannelMessages/reducer.js +0 -154
- package/lib/commonjs/channel/useOpenChannelMessages/reducer.js.map +0 -1
- package/lib/commonjs/common/useTotalUnreadChannelCount.js +0 -29
- package/lib/commonjs/common/useTotalUnreadChannelCount.js.map +0 -1
- package/lib/module/channel/useGroupChannelMessages/reducer.js +0 -144
- package/lib/module/channel/useGroupChannelMessages/reducer.js.map +0 -1
- package/lib/module/channel/useOpenChannelMessages/reducer.js +0 -144
- package/lib/module/channel/useOpenChannelMessages/reducer.js.map +0 -1
- package/lib/module/common/useTotalUnreadChannelCount.js +0 -17
- package/lib/module/common/useTotalUnreadChannelCount.js.map +0 -1
- package/lib/typescript/src/channel/useGroupChannelMessages/reducer.d.ts +0 -15
- package/lib/typescript/src/channel/useOpenChannelMessages/reducer.d.ts +0 -15
- package/lib/typescript/src/common/useTotalUnreadChannelCount.d.ts +0 -6
- package/src/channel/useGroupChannelMessages/reducer.ts +0 -125
- package/src/channel/useOpenChannelMessages/reducer.ts +0 -125
- package/src/common/useTotalUnreadChannelCount.ts +0 -26
|
@@ -1,16 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useEffect, useRef } from 'react';
|
|
2
2
|
|
|
3
3
|
import { MessageCollectionInitPolicy, MessageEventSource, MessageFilter } from '@sendbird/chat/groupChannel';
|
|
4
|
-
import type {
|
|
5
|
-
SendbirdBaseMessage,
|
|
6
|
-
SendbirdFileMessage,
|
|
7
|
-
SendbirdGroupChannel,
|
|
8
|
-
SendbirdMessageCollection,
|
|
9
|
-
} from '@sendbird/uikit-utils';
|
|
4
|
+
import type { SendbirdFileMessage, SendbirdGroupChannel, SendbirdMessageCollection } from '@sendbird/uikit-utils';
|
|
10
5
|
import {
|
|
11
6
|
Logger,
|
|
12
7
|
confirmAndMarkAsRead,
|
|
13
8
|
isDifferentChannel,
|
|
9
|
+
isMyMessage,
|
|
14
10
|
useForceUpdate,
|
|
15
11
|
useFreshCallback,
|
|
16
12
|
useUniqHandlerId,
|
|
@@ -18,35 +14,49 @@ import {
|
|
|
18
14
|
|
|
19
15
|
import { useChannelHandler } from '../../handler/useChannelHandler';
|
|
20
16
|
import type { UseGroupChannelMessages, UseGroupChannelMessagesOptions } from '../../types';
|
|
21
|
-
import {
|
|
17
|
+
import { useChannelMessagesReducer } from '../useChannelMessagesReducer';
|
|
18
|
+
|
|
19
|
+
const MESSAGE_LIMIT = {
|
|
20
|
+
DEFAULT: 50,
|
|
21
|
+
SEARCH: 20,
|
|
22
|
+
};
|
|
22
23
|
|
|
23
24
|
const createMessageCollection = (
|
|
24
25
|
channel: SendbirdGroupChannel,
|
|
25
|
-
|
|
26
|
+
limit: number,
|
|
27
|
+
options?: UseGroupChannelMessagesOptions,
|
|
26
28
|
) => {
|
|
27
|
-
if (
|
|
29
|
+
if (options?.collectionCreator) return options?.collectionCreator({ startingPoint: options?.startingPoint });
|
|
28
30
|
const filter = new MessageFilter();
|
|
29
|
-
return channel.createMessageCollection({ filter, limit:
|
|
31
|
+
return channel.createMessageCollection({ filter, limit, startingPoint: options?.startingPoint });
|
|
30
32
|
};
|
|
31
33
|
|
|
34
|
+
function isNotEmpty(arr?: unknown[]): arr is unknown[] {
|
|
35
|
+
if (!arr) return false;
|
|
36
|
+
return arr.length !== 0;
|
|
37
|
+
}
|
|
38
|
+
|
|
32
39
|
export const useGroupChannelMessagesWithCollection: UseGroupChannelMessages = (sdk, channel, userId, options) => {
|
|
40
|
+
const initialStartingPoint = options?.startingPoint ?? Number.MAX_SAFE_INTEGER;
|
|
41
|
+
const initialLimit = typeof options?.startingPoint === 'number' ? MESSAGE_LIMIT.SEARCH : MESSAGE_LIMIT.DEFAULT;
|
|
42
|
+
|
|
33
43
|
const forceUpdate = useForceUpdate();
|
|
34
44
|
const collectionRef = useRef<SendbirdMessageCollection>();
|
|
45
|
+
const collectionInitializedRef = useRef(false);
|
|
35
46
|
const handlerId = useUniqHandlerId('useGroupChannelMessagesWithCollection');
|
|
36
47
|
|
|
37
48
|
const {
|
|
38
49
|
loading,
|
|
39
50
|
refreshing,
|
|
40
51
|
messages,
|
|
41
|
-
|
|
42
|
-
newMessagesFromMembers,
|
|
52
|
+
newMessages,
|
|
43
53
|
updateMessages,
|
|
44
|
-
|
|
45
|
-
|
|
54
|
+
updateNewMessages,
|
|
55
|
+
deleteNewMessages,
|
|
46
56
|
deleteMessages,
|
|
47
57
|
updateLoading,
|
|
48
58
|
updateRefreshing,
|
|
49
|
-
} =
|
|
59
|
+
} = useChannelMessagesReducer(options?.sortComparator);
|
|
50
60
|
|
|
51
61
|
const channelMarkAsRead = async (source?: MessageEventSource) => {
|
|
52
62
|
try {
|
|
@@ -63,85 +73,121 @@ export const useGroupChannelMessagesWithCollection: UseGroupChannelMessages = (s
|
|
|
63
73
|
}
|
|
64
74
|
};
|
|
65
75
|
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
76
|
+
const updateUnsendMessages = () => {
|
|
77
|
+
const { pendingMessages, failedMessages } = collectionRef.current ?? {};
|
|
78
|
+
if (isNotEmpty(pendingMessages)) updateMessages(pendingMessages, false, sdk.currentUser.userId);
|
|
79
|
+
if (isNotEmpty(failedMessages)) updateMessages(failedMessages, false, sdk.currentUser.userId);
|
|
80
|
+
};
|
|
69
81
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
updateNextMessages([], true, sdk.currentUser.userId);
|
|
73
|
-
channelMarkAsRead();
|
|
82
|
+
const init = useFreshCallback(async (startingPoint: number, limit: number, callback?: () => void) => {
|
|
83
|
+
if (collectionRef.current) collectionRef.current?.dispose();
|
|
74
84
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
channelMarkAsRead(_.source);
|
|
78
|
-
updateNextMessages(messages, false, sdk.currentUser.userId);
|
|
79
|
-
},
|
|
80
|
-
onMessagesUpdated: (_, __, messages) => {
|
|
81
|
-
channelMarkAsRead(_.source);
|
|
85
|
+
channelMarkAsRead();
|
|
86
|
+
updateNewMessages([], true, sdk.currentUser.userId);
|
|
82
87
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
);
|
|
89
|
-
updateNextMessages(nonAddedMessagesFromReceivedEvent, false, sdk.currentUser.userId);
|
|
90
|
-
}
|
|
88
|
+
collectionInitializedRef.current = false;
|
|
89
|
+
collectionRef.current = createMessageCollection(channel, limit, {
|
|
90
|
+
collectionCreator: options?.collectionCreator,
|
|
91
|
+
startingPoint,
|
|
92
|
+
});
|
|
91
93
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}
|
|
105
|
-
onChannelUpdated: (_, eventChannel) => {
|
|
106
|
-
if (eventChannel.isGroupChannel() && !isDifferentChannel(eventChannel, channel)) {
|
|
107
|
-
forceUpdate();
|
|
108
|
-
}
|
|
109
|
-
},
|
|
110
|
-
onHugeGapDetected: () => {
|
|
111
|
-
init(uid);
|
|
112
|
-
},
|
|
94
|
+
collectionRef.current?.setMessageCollectionHandler({
|
|
95
|
+
onMessagesAdded: (_, __, messages) => {
|
|
96
|
+
channelMarkAsRead(_.source);
|
|
97
|
+
|
|
98
|
+
const incomingMessages = messages.filter((it) => {
|
|
99
|
+
switch (_.source) {
|
|
100
|
+
case MessageEventSource.EVENT_MESSAGE_SENT_PENDING:
|
|
101
|
+
case MessageEventSource.EVENT_MESSAGE_SENT_SUCCESS:
|
|
102
|
+
case MessageEventSource.EVENT_MESSAGE_SENT_FAILED:
|
|
103
|
+
return !isMyMessage(it, sdk.currentUser.userId);
|
|
104
|
+
default:
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
113
107
|
});
|
|
114
108
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
109
|
+
if (incomingMessages.length > 0) {
|
|
110
|
+
updateMessages(incomingMessages, false, sdk.currentUser.userId);
|
|
111
|
+
|
|
112
|
+
if (options?.shouldCountNewMessages?.()) {
|
|
113
|
+
updateNewMessages(incomingMessages, false, sdk.currentUser.userId);
|
|
114
|
+
}
|
|
121
115
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
116
|
+
switch (_.source) {
|
|
117
|
+
case MessageEventSource.EVENT_MESSAGE_RECEIVED:
|
|
118
|
+
case MessageEventSource.SYNC_MESSAGE_FILL: {
|
|
119
|
+
options?.onMessagesReceived?.(incomingMessages);
|
|
125
120
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
onMessagesUpdated: (_, __, messages) => {
|
|
125
|
+
channelMarkAsRead(_.source);
|
|
126
|
+
|
|
127
|
+
const incomingMessages = messages.filter((it) => {
|
|
128
|
+
switch (_.source) {
|
|
129
|
+
case MessageEventSource.EVENT_MESSAGE_UPDATED:
|
|
130
|
+
return !isMyMessage(it, sdk.currentUser.userId);
|
|
131
|
+
default:
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
if (incomingMessages.length > 0) {
|
|
137
|
+
// NOTE: admin message is not added via onMessagesAdded handler, not checked yet is this a bug.
|
|
138
|
+
updateMessages(messages, false, sdk.currentUser.userId);
|
|
139
|
+
|
|
140
|
+
if (options?.shouldCountNewMessages?.()) {
|
|
141
|
+
if (_.source === MessageEventSource.EVENT_MESSAGE_RECEIVED) {
|
|
142
|
+
updateNewMessages(messages, false, sdk.currentUser.userId);
|
|
138
143
|
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
onMessagesDeleted: (_, __, messageIds) => {
|
|
148
|
+
deleteMessages(messageIds, []);
|
|
149
|
+
deleteNewMessages(messageIds, []);
|
|
150
|
+
},
|
|
151
|
+
onChannelDeleted: () => {
|
|
152
|
+
options?.onChannelDeleted?.();
|
|
153
|
+
},
|
|
154
|
+
onChannelUpdated: (_, eventChannel) => {
|
|
155
|
+
if (eventChannel.isGroupChannel() && !isDifferentChannel(eventChannel, channel)) {
|
|
156
|
+
forceUpdate();
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
onHugeGapDetected: () => {
|
|
160
|
+
init(Number.MAX_SAFE_INTEGER, MESSAGE_LIMIT.DEFAULT);
|
|
161
|
+
},
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
collectionRef.current
|
|
165
|
+
.initialize(MessageCollectionInitPolicy.CACHE_AND_REPLACE_BY_API)
|
|
166
|
+
.onCacheResult((err, messages) => {
|
|
167
|
+
if (err) sdk.isCacheEnabled && Logger.error('[useGroupChannelMessagesWithCollection/onCacheResult]', err);
|
|
168
|
+
else {
|
|
169
|
+
Logger.debug('[useGroupChannelMessagesWithCollection/onCacheResult]', 'message length:', messages.length);
|
|
170
|
+
|
|
171
|
+
updateMessages(messages, true, sdk.currentUser.userId);
|
|
172
|
+
updateUnsendMessages();
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
callback?.();
|
|
176
|
+
})
|
|
177
|
+
.onApiResult((err, messages) => {
|
|
178
|
+
if (err) Logger.warn('[useGroupChannelMessagesWithCollection/onApiResult]', err);
|
|
179
|
+
else {
|
|
180
|
+
Logger.debug('[useGroupChannelMessagesWithCollection/onApiResult]', 'message length:', messages.length);
|
|
181
|
+
|
|
182
|
+
updateMessages(messages, true, sdk.currentUser.userId);
|
|
183
|
+
if (!options?.startingPoint) options?.onMessagesReceived?.(messages);
|
|
184
|
+
if (sdk.isCacheEnabled) updateUnsendMessages();
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
collectionInitializedRef.current = true;
|
|
188
|
+
callback?.();
|
|
189
|
+
});
|
|
190
|
+
});
|
|
145
191
|
|
|
146
192
|
useChannelHandler(sdk, handlerId, {
|
|
147
193
|
onUserBanned(channel, bannedUser) {
|
|
@@ -159,9 +205,9 @@ export const useGroupChannelMessagesWithCollection: UseGroupChannelMessages = (s
|
|
|
159
205
|
// NOTE: Cache read is heavy task, and it prevents smooth ui transition
|
|
160
206
|
setTimeout(async () => {
|
|
161
207
|
updateLoading(true);
|
|
162
|
-
init(
|
|
208
|
+
init(initialStartingPoint, initialLimit, () => updateLoading(false));
|
|
163
209
|
}, 0);
|
|
164
|
-
}, [
|
|
210
|
+
}, [channel.url, userId]);
|
|
165
211
|
|
|
166
212
|
useEffect(() => {
|
|
167
213
|
return () => {
|
|
@@ -171,7 +217,7 @@ export const useGroupChannelMessagesWithCollection: UseGroupChannelMessages = (s
|
|
|
171
217
|
|
|
172
218
|
const refresh: ReturnType<UseGroupChannelMessages>['refresh'] = useFreshCallback(async () => {
|
|
173
219
|
updateRefreshing(true);
|
|
174
|
-
init(
|
|
220
|
+
init(Number.MAX_SAFE_INTEGER, MESSAGE_LIMIT.DEFAULT, () => updateRefreshing(false));
|
|
175
221
|
});
|
|
176
222
|
|
|
177
223
|
const prev: ReturnType<UseGroupChannelMessages>['prev'] = useFreshCallback(async () => {
|
|
@@ -183,23 +229,28 @@ export const useGroupChannelMessagesWithCollection: UseGroupChannelMessages = (s
|
|
|
183
229
|
}
|
|
184
230
|
});
|
|
185
231
|
|
|
186
|
-
const
|
|
187
|
-
|
|
232
|
+
const hasPrev: ReturnType<UseGroupChannelMessages>['hasPrev'] = useFreshCallback(() => {
|
|
233
|
+
if (collectionInitializedRef.current && collectionRef.current) {
|
|
234
|
+
return collectionRef.current.hasPrevious;
|
|
235
|
+
} else {
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
238
|
+
});
|
|
188
239
|
|
|
240
|
+
const next: ReturnType<UseGroupChannelMessages>['next'] = useFreshCallback(async () => {
|
|
189
241
|
if (collectionRef.current && collectionRef.current?.hasNext) {
|
|
190
242
|
try {
|
|
191
243
|
const fetchedList = await collectionRef.current?.loadNext();
|
|
192
|
-
|
|
244
|
+
updateMessages(fetchedList, false, sdk.currentUser.userId);
|
|
193
245
|
} catch {}
|
|
194
246
|
}
|
|
247
|
+
});
|
|
195
248
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
updateMessages(messageCandidates, false, sdk.currentUser.userId);
|
|
202
|
-
updateNextMessages([], true, sdk.currentUser.userId);
|
|
249
|
+
const hasNext: ReturnType<UseGroupChannelMessages>['hasNext'] = useFreshCallback(() => {
|
|
250
|
+
if (collectionInitializedRef.current && collectionRef.current) {
|
|
251
|
+
return collectionRef.current.hasNext;
|
|
252
|
+
} else {
|
|
253
|
+
return false;
|
|
203
254
|
}
|
|
204
255
|
});
|
|
205
256
|
|
|
@@ -220,8 +271,8 @@ export const useGroupChannelMessagesWithCollection: UseGroupChannelMessages = (s
|
|
|
220
271
|
resolve(sentMessage);
|
|
221
272
|
}
|
|
222
273
|
})
|
|
223
|
-
.onFailed((err,
|
|
224
|
-
|
|
274
|
+
.onFailed((err, failedMessage) => {
|
|
275
|
+
updateMessages([failedMessage], false, sdk.currentUser.userId);
|
|
225
276
|
reject(err);
|
|
226
277
|
});
|
|
227
278
|
});
|
|
@@ -244,8 +295,8 @@ export const useGroupChannelMessagesWithCollection: UseGroupChannelMessages = (s
|
|
|
244
295
|
resolve(sentMessage as SendbirdFileMessage);
|
|
245
296
|
}
|
|
246
297
|
})
|
|
247
|
-
.onFailed((err,
|
|
248
|
-
|
|
298
|
+
.onFailed((err, failedMessage) => {
|
|
299
|
+
updateMessages([failedMessage], false, sdk.currentUser.userId);
|
|
249
300
|
reject(err);
|
|
250
301
|
});
|
|
251
302
|
});
|
|
@@ -288,21 +339,39 @@ export const useGroupChannelMessagesWithCollection: UseGroupChannelMessages = (s
|
|
|
288
339
|
}
|
|
289
340
|
}
|
|
290
341
|
});
|
|
342
|
+
const resetNewMessages: ReturnType<UseGroupChannelMessages>['resetNewMessages'] = useFreshCallback(() => {
|
|
343
|
+
updateNewMessages([], true, sdk.currentUser.userId);
|
|
344
|
+
});
|
|
345
|
+
const resetWithStartingPoint: ReturnType<UseGroupChannelMessages>['resetWithStartingPoint'] = useFreshCallback(
|
|
346
|
+
(startingPoint, callback) => {
|
|
347
|
+
updateLoading(true);
|
|
348
|
+
updateMessages([], true, sdk.currentUser.userId);
|
|
349
|
+
init(startingPoint, MESSAGE_LIMIT.DEFAULT, () => {
|
|
350
|
+
updateLoading(false);
|
|
351
|
+
callback?.();
|
|
352
|
+
});
|
|
353
|
+
},
|
|
354
|
+
);
|
|
291
355
|
|
|
292
356
|
return {
|
|
293
357
|
loading,
|
|
294
358
|
refreshing,
|
|
295
359
|
refresh,
|
|
296
360
|
messages,
|
|
297
|
-
nextMessages,
|
|
298
|
-
newMessagesFromMembers,
|
|
299
361
|
next,
|
|
362
|
+
hasNext,
|
|
300
363
|
prev,
|
|
364
|
+
hasPrev,
|
|
365
|
+
newMessages,
|
|
366
|
+
resetNewMessages,
|
|
301
367
|
sendUserMessage,
|
|
302
368
|
sendFileMessage,
|
|
303
369
|
updateUserMessage,
|
|
304
370
|
updateFileMessage,
|
|
305
371
|
resendMessage,
|
|
306
372
|
deleteMessage,
|
|
373
|
+
resetWithStartingPoint,
|
|
374
|
+
nextMessages: newMessages,
|
|
375
|
+
newMessagesFromMembers: newMessages,
|
|
307
376
|
};
|
|
308
377
|
};
|