@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
|
@@ -2,26 +2,15 @@ import { useEffect, useLayoutEffect, useRef } from 'react';
|
|
|
2
2
|
|
|
3
3
|
import { GroupChannelHandler } from '@sendbird/chat/groupChannel';
|
|
4
4
|
import { OpenChannelHandler } from '@sendbird/chat/openChannel';
|
|
5
|
-
import {
|
|
5
|
+
import type { SendbirdChatSDK } from '@sendbird/uikit-utils';
|
|
6
6
|
|
|
7
7
|
type ChannelType = 'open' | 'group';
|
|
8
8
|
|
|
9
|
-
function getChannelHandler(type: ChannelType) {
|
|
10
|
-
switch (type) {
|
|
11
|
-
case 'open': {
|
|
12
|
-
return new OpenChannelHandler();
|
|
13
|
-
}
|
|
14
|
-
case 'group':
|
|
15
|
-
default: {
|
|
16
|
-
return new GroupChannelHandler();
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
9
|
export const useChannelHandler = <T extends ChannelType = 'group'>(
|
|
21
10
|
sdk: SendbirdChatSDK,
|
|
22
11
|
handlerId: string,
|
|
23
12
|
hookHandler: Partial<T extends 'group' ? GroupChannelHandler : OpenChannelHandler>,
|
|
24
|
-
type = 'group' as T,
|
|
13
|
+
type: T = 'group' as T,
|
|
25
14
|
) => {
|
|
26
15
|
const handlerRef = useRef(hookHandler);
|
|
27
16
|
useLayoutEffect(() => {
|
|
@@ -29,21 +18,19 @@ export const useChannelHandler = <T extends ChannelType = 'group'>(
|
|
|
29
18
|
});
|
|
30
19
|
|
|
31
20
|
useEffect(() => {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
const handlerKeys = Object.keys(handler) as (keyof typeof handler)[];
|
|
36
|
-
handlerKeys.forEach((key) => {
|
|
37
|
-
handler[key] = (...args: unknown[]) => {
|
|
21
|
+
const handlerMapper = <T extends GroupChannelHandler | OpenChannelHandler>(handler: T): T => {
|
|
22
|
+
const handlerKeys = Object.keys(handler) as (keyof T)[];
|
|
23
|
+
handlerKeys.forEach((key) => {
|
|
38
24
|
// @ts-ignore
|
|
39
|
-
handlerRef.current[key]?.(...args);
|
|
40
|
-
};
|
|
41
|
-
|
|
25
|
+
handler[key] = (...args: unknown[]) => handlerRef.current?.[key]?.(...args);
|
|
26
|
+
});
|
|
27
|
+
return handler;
|
|
28
|
+
};
|
|
42
29
|
|
|
43
30
|
if (type === 'group') {
|
|
44
|
-
sdk.groupChannel.addGroupChannelHandler(handlerId,
|
|
31
|
+
sdk.groupChannel.addGroupChannelHandler(handlerId, handlerMapper(new GroupChannelHandler()));
|
|
45
32
|
} else if (type === 'open') {
|
|
46
|
-
sdk.openChannel.addOpenChannelHandler(handlerId,
|
|
33
|
+
sdk.openChannel.addOpenChannelHandler(handlerId, handlerMapper(new OpenChannelHandler()));
|
|
47
34
|
}
|
|
48
35
|
|
|
49
36
|
return () => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { useEffect, useLayoutEffect, useRef } from 'react';
|
|
2
2
|
|
|
3
3
|
import { ConnectionHandler } from '@sendbird/chat';
|
|
4
4
|
import { Logger, SendbirdChatSDK } from '@sendbird/uikit-utils';
|
|
@@ -7,19 +7,25 @@ export const useConnectionHandler = (
|
|
|
7
7
|
sdk: SendbirdChatSDK,
|
|
8
8
|
handlerId: string,
|
|
9
9
|
hookHandler: Partial<ConnectionHandler>,
|
|
10
|
-
deps: React.DependencyList = [],
|
|
11
10
|
) => {
|
|
11
|
+
const handlerRef = useRef<Partial<ConnectionHandler>>();
|
|
12
|
+
useLayoutEffect(() => {
|
|
13
|
+
handlerRef.current = hookHandler;
|
|
14
|
+
});
|
|
15
|
+
|
|
12
16
|
useEffect(() => {
|
|
13
17
|
Logger.info('[useConnectionHandler]', handlerId);
|
|
14
18
|
|
|
15
19
|
const handler = new ConnectionHandler();
|
|
16
20
|
const handlerKeys = Object.keys(handler) as (keyof typeof handler)[];
|
|
17
21
|
handlerKeys.forEach((key) => {
|
|
18
|
-
|
|
19
|
-
|
|
22
|
+
handler[key] = (...args: unknown[]) => {
|
|
23
|
+
// @ts-ignore
|
|
24
|
+
handlerRef.current[key]?.(...args);
|
|
25
|
+
};
|
|
20
26
|
});
|
|
21
27
|
|
|
22
28
|
sdk.addConnectionHandler(handlerId, handler);
|
|
23
29
|
return () => sdk.removeConnectionHandler(handlerId);
|
|
24
|
-
}, [sdk, handlerId
|
|
30
|
+
}, [sdk, handlerId]);
|
|
25
31
|
};
|
package/src/index.ts
CHANGED
|
@@ -9,7 +9,6 @@ export { useOpenChannel } from './channel/useOpenChannel';
|
|
|
9
9
|
export { useAppFeatures } from './common/useAppFeatures';
|
|
10
10
|
export { useMessageOutgoingStatus } from './common/useMessageOutgoingStatus';
|
|
11
11
|
export { usePushTrigger } from './common/usePushTrigger';
|
|
12
|
-
export { useTotalUnreadChannelCount } from './common/useTotalUnreadChannelCount';
|
|
13
12
|
export { useTotalUnreadMessageCount } from './common/useTotalUnreadMessageCount';
|
|
14
13
|
export { useUserList } from './common/useUserList';
|
|
15
14
|
|
package/src/types.ts
CHANGED
|
@@ -74,9 +74,9 @@ export type UseGroupChannelListOptions = {
|
|
|
74
74
|
/**
|
|
75
75
|
* @interface UseGroupChannelMessages
|
|
76
76
|
* @description interface for group channel messages hook
|
|
77
|
-
* - Receive new messages from other users -> append to state(
|
|
77
|
+
* - Receive new messages from other users & should count new messages -> append to state(newMessages)
|
|
78
78
|
* - onTopReached -> prev() -> fetch prev messages and append to state(messages)
|
|
79
|
-
* - onBottomReached -> next() ->
|
|
79
|
+
* - onBottomReached -> next() -> fetch next messages and append to state(messages)
|
|
80
80
|
* */
|
|
81
81
|
export interface UseGroupChannelMessages {
|
|
82
82
|
(sdk: SendbirdChatSDK, channel: SendbirdGroupChannel, userId?: string, options?: UseGroupChannelMessagesOptions): {
|
|
@@ -111,26 +111,40 @@ export interface UseGroupChannelMessages {
|
|
|
111
111
|
prev: () => Promise<void>;
|
|
112
112
|
|
|
113
113
|
/**
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
* for this case, new messages will be included here.
|
|
114
|
+
* Check if there are more prev messages to fetch
|
|
115
|
+
* @return {boolean}
|
|
117
116
|
* */
|
|
118
|
-
|
|
117
|
+
hasPrev: () => boolean;
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Fetch next messages to state
|
|
121
|
+
* @return {Promise<void>}
|
|
122
|
+
* */
|
|
123
|
+
next: () => Promise<void>;
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Check if there are more next messages to fetch
|
|
127
|
+
* @return {boolean}
|
|
128
|
+
* */
|
|
129
|
+
hasNext: () => boolean;
|
|
119
130
|
|
|
120
131
|
/**
|
|
121
|
-
* Get new messages from nextMessages
|
|
122
132
|
* A new message means a message that meets the below conditions
|
|
123
133
|
* - Not admin message
|
|
124
134
|
* - Not updated message
|
|
125
135
|
* - Not current user's message
|
|
126
136
|
* */
|
|
127
|
-
|
|
137
|
+
newMessages: SendbirdMessage[];
|
|
128
138
|
|
|
129
139
|
/**
|
|
130
|
-
*
|
|
131
|
-
* @return {Promise<void>}
|
|
140
|
+
* reset message list with starting point
|
|
132
141
|
* */
|
|
133
|
-
|
|
142
|
+
resetWithStartingPoint: (startingPoint: number, callback?: () => void) => void;
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Reset new messages
|
|
146
|
+
* */
|
|
147
|
+
resetNewMessages: () => void;
|
|
134
148
|
|
|
135
149
|
/**
|
|
136
150
|
* Send file message
|
|
@@ -183,15 +197,23 @@ export interface UseGroupChannelMessages {
|
|
|
183
197
|
* @return {Promise<void>}
|
|
184
198
|
* */
|
|
185
199
|
deleteMessage: (message: SendbirdFileMessage | SendbirdUserMessage) => Promise<void>;
|
|
200
|
+
|
|
201
|
+
/** @deprecated Please use `newMessages` instead **/
|
|
202
|
+
newMessagesFromMembers: SendbirdMessage[];
|
|
203
|
+
/** @deprecated Please use `newMessages` instead **/
|
|
204
|
+
nextMessages: SendbirdMessage[];
|
|
186
205
|
};
|
|
187
206
|
}
|
|
188
207
|
|
|
189
208
|
export type UseGroupChannelMessagesOptions = {
|
|
190
209
|
sortComparator?: (a: SendbirdMessage, b: SendbirdMessage) => number;
|
|
191
210
|
queryCreator?: () => SendbirdPreviousMessageListQuery;
|
|
192
|
-
collectionCreator?: () => SendbirdMessageCollection;
|
|
211
|
+
collectionCreator?: (options?: Pick<UseGroupChannelMessagesOptions, 'startingPoint'>) => SendbirdMessageCollection;
|
|
193
212
|
enableCollectionWithoutLocalCache?: boolean;
|
|
194
213
|
onChannelDeleted?: () => void;
|
|
214
|
+
shouldCountNewMessages?: () => boolean;
|
|
215
|
+
startingPoint?: number;
|
|
216
|
+
onMessagesReceived?: (messages: SendbirdMessage[]) => void;
|
|
195
217
|
};
|
|
196
218
|
|
|
197
219
|
/**
|
|
@@ -240,9 +262,9 @@ export type UseOpenChannelListOptions = {
|
|
|
240
262
|
/**
|
|
241
263
|
* @interface UseOpenChannelMessages
|
|
242
264
|
* @description interface for open channel messages hook
|
|
243
|
-
* - Receive new messages from other users -> append to state(
|
|
265
|
+
* - Receive new messages from other users & should count new messages -> append to state(newMessages)
|
|
244
266
|
* - onTopReached -> prev() -> fetch prev messages and append to state(messages)
|
|
245
|
-
* - onBottomReached ->
|
|
267
|
+
* - onBottomReached -> noop
|
|
246
268
|
* */
|
|
247
269
|
export interface UseOpenChannelMessages {
|
|
248
270
|
(sdk: SendbirdChatSDK, channel: SendbirdOpenChannel, userId?: string, options?: UseOpenChannelMessagesOptions): {
|
|
@@ -277,20 +299,23 @@ export interface UseOpenChannelMessages {
|
|
|
277
299
|
prev: () => Promise<void>;
|
|
278
300
|
|
|
279
301
|
/**
|
|
280
|
-
*
|
|
281
|
-
*
|
|
282
|
-
* for this case, new messages will be included here.
|
|
302
|
+
* Check if there are more prev messages to fetch
|
|
303
|
+
* @return {boolean}
|
|
283
304
|
* */
|
|
284
|
-
|
|
305
|
+
hasPrev: () => boolean;
|
|
285
306
|
|
|
286
307
|
/**
|
|
287
|
-
* Get new messages from nextMessages
|
|
288
308
|
* A new message means a message that meets the below conditions
|
|
289
309
|
* - Not admin message
|
|
290
310
|
* - Not updated message
|
|
291
311
|
* - Not current user's message
|
|
292
312
|
* */
|
|
293
|
-
|
|
313
|
+
newMessages: SendbirdMessage[];
|
|
314
|
+
|
|
315
|
+
/**
|
|
316
|
+
* Reset new messages
|
|
317
|
+
* */
|
|
318
|
+
resetNewMessages: () => void;
|
|
294
319
|
|
|
295
320
|
/**
|
|
296
321
|
* Fetch next messages to state
|
|
@@ -298,6 +323,12 @@ export interface UseOpenChannelMessages {
|
|
|
298
323
|
* */
|
|
299
324
|
next: () => Promise<void>;
|
|
300
325
|
|
|
326
|
+
/**
|
|
327
|
+
* Check if there are more next messages to fetch
|
|
328
|
+
* @return {boolean}
|
|
329
|
+
* */
|
|
330
|
+
hasNext: () => boolean;
|
|
331
|
+
|
|
301
332
|
/**
|
|
302
333
|
* Send file message
|
|
303
334
|
* @param params file message params
|
|
@@ -349,6 +380,11 @@ export interface UseOpenChannelMessages {
|
|
|
349
380
|
* @return {Promise<void>}
|
|
350
381
|
* */
|
|
351
382
|
deleteMessage: (message: SendbirdFileMessage | SendbirdUserMessage) => Promise<void>;
|
|
383
|
+
|
|
384
|
+
/** @deprecated Please use `newMessages` instead **/
|
|
385
|
+
newMessagesFromMembers: SendbirdMessage[];
|
|
386
|
+
/** @deprecated Please use `newMessages` instead **/
|
|
387
|
+
nextMessages: SendbirdMessage[];
|
|
352
388
|
};
|
|
353
389
|
}
|
|
354
390
|
|
|
@@ -357,6 +393,8 @@ export type UseOpenChannelMessagesOptions = {
|
|
|
357
393
|
queryCreator?: () => SendbirdPreviousMessageListQuery;
|
|
358
394
|
onChannelDeleted?: () => void;
|
|
359
395
|
onError?: (error?: unknown) => void;
|
|
396
|
+
shouldCountNewMessages?: () => boolean;
|
|
397
|
+
onMessagesReceived?: (messages: SendbirdMessage[]) => void;
|
|
360
398
|
};
|
|
361
399
|
|
|
362
400
|
/**
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.useGroupChannelMessagesReducer = void 0;
|
|
7
|
-
|
|
8
|
-
var _react = require("react");
|
|
9
|
-
|
|
10
|
-
var _uikitUtils = require("@sendbird/uikit-utils");
|
|
11
|
-
|
|
12
|
-
const defaultReducer = (_ref, action) => {
|
|
13
|
-
let { ...draft
|
|
14
|
-
} = _ref;
|
|
15
|
-
|
|
16
|
-
switch (action.type) {
|
|
17
|
-
case 'update_refreshing':
|
|
18
|
-
case 'update_loading':
|
|
19
|
-
{
|
|
20
|
-
const key = action.type === 'update_loading' ? 'loading' : 'refreshing';
|
|
21
|
-
draft[key] = action.value.status;
|
|
22
|
-
return draft;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
case 'update_messages':
|
|
26
|
-
case 'update_next_messages':
|
|
27
|
-
{
|
|
28
|
-
const key = action.type === 'update_messages' ? 'messageMap' : 'nextMessageMap';
|
|
29
|
-
const receivedMessagesAsMap = (0, _uikitUtils.arrayToMapWithGetter)(action.value.messages, _uikitUtils.getMessageUniqId);
|
|
30
|
-
|
|
31
|
-
if (action.value.clearPrev) {
|
|
32
|
-
draft[key] = receivedMessagesAsMap;
|
|
33
|
-
} else {
|
|
34
|
-
draft[key] = { ...draft[key],
|
|
35
|
-
...receivedMessagesAsMap
|
|
36
|
-
}; // NOTE: Replace pending message to succeeded message
|
|
37
|
-
|
|
38
|
-
action.value.messages.filter(m => {
|
|
39
|
-
return (m.isFileMessage() || m.isUserMessage()) && Boolean(draft[key][m.reqId]) && m.sendingStatus === 'succeeded' && (0, _uikitUtils.isMyMessage)(m, action.value.currentUserId);
|
|
40
|
-
}).forEach(m => delete draft[key][m.reqId]);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return draft;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
case 'delete_messages':
|
|
47
|
-
case 'delete_next_messages':
|
|
48
|
-
{
|
|
49
|
-
const key = action.type === 'delete_messages' ? 'messageMap' : 'nextMessageMap';
|
|
50
|
-
draft[key] = { ...draft[key]
|
|
51
|
-
};
|
|
52
|
-
action.value.messageIds.forEach(msgId => delete draft[key][msgId]);
|
|
53
|
-
action.value.reqIds.forEach(reqId => delete draft[key][reqId]);
|
|
54
|
-
return draft;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
const useGroupChannelMessagesReducer = (userId, sortComparator) => {
|
|
60
|
-
const [{
|
|
61
|
-
loading,
|
|
62
|
-
refreshing,
|
|
63
|
-
messageMap,
|
|
64
|
-
nextMessageMap
|
|
65
|
-
}, dispatch] = (0, _react.useReducer)(defaultReducer, {
|
|
66
|
-
loading: true,
|
|
67
|
-
refreshing: false,
|
|
68
|
-
messageMap: {},
|
|
69
|
-
nextMessageMap: {}
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
const updateMessages = (messages, clearPrev, currentUserId) => {
|
|
73
|
-
dispatch({
|
|
74
|
-
type: 'update_messages',
|
|
75
|
-
value: {
|
|
76
|
-
messages,
|
|
77
|
-
clearPrev,
|
|
78
|
-
currentUserId
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
const deleteMessages = (messageIds, reqIds) => {
|
|
84
|
-
dispatch({
|
|
85
|
-
type: 'delete_messages',
|
|
86
|
-
value: {
|
|
87
|
-
messageIds,
|
|
88
|
-
reqIds
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
const updateNextMessages = (messages, clearPrev, currentUserId) => {
|
|
94
|
-
dispatch({
|
|
95
|
-
type: 'update_next_messages',
|
|
96
|
-
value: {
|
|
97
|
-
messages,
|
|
98
|
-
clearPrev,
|
|
99
|
-
currentUserId
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
const deleteNextMessages = (messageIds, reqIds) => {
|
|
105
|
-
dispatch({
|
|
106
|
-
type: 'delete_next_messages',
|
|
107
|
-
value: {
|
|
108
|
-
messageIds,
|
|
109
|
-
reqIds
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
};
|
|
113
|
-
|
|
114
|
-
const updateLoading = status => {
|
|
115
|
-
dispatch({
|
|
116
|
-
type: 'update_loading',
|
|
117
|
-
value: {
|
|
118
|
-
status
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
const updateRefreshing = status => {
|
|
124
|
-
dispatch({
|
|
125
|
-
type: 'update_refreshing',
|
|
126
|
-
value: {
|
|
127
|
-
status
|
|
128
|
-
}
|
|
129
|
-
});
|
|
130
|
-
};
|
|
131
|
-
|
|
132
|
-
const messages = (0, _uikitUtils.useIIFE)(() => {
|
|
133
|
-
if (sortComparator) return Object.values(messageMap).sort(sortComparator);
|
|
134
|
-
return Object.values(messageMap);
|
|
135
|
-
});
|
|
136
|
-
const nextMessages = Object.values(nextMessageMap);
|
|
137
|
-
const newMessagesFromMembers = nextMessages.filter(msg => (0, _uikitUtils.isNewMessage)(msg, userId));
|
|
138
|
-
return {
|
|
139
|
-
updateLoading,
|
|
140
|
-
updateRefreshing,
|
|
141
|
-
updateMessages,
|
|
142
|
-
updateNextMessages,
|
|
143
|
-
deleteMessages,
|
|
144
|
-
deleteNextMessages,
|
|
145
|
-
loading,
|
|
146
|
-
refreshing,
|
|
147
|
-
messages,
|
|
148
|
-
nextMessages,
|
|
149
|
-
newMessagesFromMembers
|
|
150
|
-
};
|
|
151
|
-
};
|
|
152
|
-
|
|
153
|
-
exports.useGroupChannelMessagesReducer = useGroupChannelMessagesReducer;
|
|
154
|
-
//# sourceMappingURL=reducer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["defaultReducer","action","draft","type","key","value","status","receivedMessagesAsMap","arrayToMapWithGetter","messages","getMessageUniqId","clearPrev","filter","m","isFileMessage","isUserMessage","Boolean","reqId","sendingStatus","isMyMessage","currentUserId","forEach","messageIds","msgId","reqIds","useGroupChannelMessagesReducer","userId","sortComparator","loading","refreshing","messageMap","nextMessageMap","dispatch","useReducer","updateMessages","deleteMessages","updateNextMessages","deleteNextMessages","updateLoading","updateRefreshing","useIIFE","Object","values","sort","nextMessages","newMessagesFromMembers","msg","isNewMessage"],"sources":["reducer.ts"],"sourcesContent":["import { useReducer } from 'react';\n\nimport type { SendbirdBaseMessage, SendbirdFileMessage, SendbirdUserMessage } from '@sendbird/uikit-utils';\nimport { arrayToMapWithGetter, getMessageUniqId, isMyMessage, isNewMessage, useIIFE } from '@sendbird/uikit-utils';\n\nimport type { UseGroupChannelMessagesOptions } from '../../types';\n\ntype Action =\n | {\n type: 'update_loading' | 'update_refreshing';\n value: { status: boolean };\n }\n | {\n type: 'update_messages' | 'update_next_messages';\n value: { messages: SendbirdBaseMessage[]; clearPrev: boolean; currentUserId?: string };\n }\n | {\n type: 'delete_messages' | 'delete_next_messages';\n value: { messageIds: number[]; reqIds: string[] };\n };\n\ntype State = {\n loading: boolean;\n refreshing: boolean;\n messageMap: Record<string, SendbirdBaseMessage>;\n nextMessageMap: Record<string, SendbirdBaseMessage>;\n};\n\nconst defaultReducer = ({ ...draft }: State, action: Action) => {\n switch (action.type) {\n case 'update_refreshing':\n case 'update_loading': {\n const key = action.type === 'update_loading' ? 'loading' : 'refreshing';\n draft[key] = action.value.status;\n\n return draft;\n }\n case 'update_messages':\n case 'update_next_messages': {\n const key = action.type === 'update_messages' ? 'messageMap' : 'nextMessageMap';\n const receivedMessagesAsMap = arrayToMapWithGetter(action.value.messages, getMessageUniqId);\n if (action.value.clearPrev) {\n draft[key] = receivedMessagesAsMap;\n } else {\n draft[key] = { ...draft[key], ...receivedMessagesAsMap };\n\n // NOTE: Replace pending message to succeeded message\n action.value.messages\n .filter((m): m is SendbirdUserMessage | SendbirdFileMessage => {\n return (\n (m.isFileMessage() || m.isUserMessage()) &&\n Boolean(draft[key][m.reqId]) &&\n m.sendingStatus === 'succeeded' &&\n isMyMessage(m, action.value.currentUserId)\n );\n })\n .forEach((m) => delete draft[key][m.reqId]);\n }\n\n return draft;\n }\n case 'delete_messages':\n case 'delete_next_messages': {\n const key = action.type === 'delete_messages' ? 'messageMap' : 'nextMessageMap';\n draft[key] = { ...draft[key] };\n action.value.messageIds.forEach((msgId) => delete draft[key][msgId]);\n action.value.reqIds.forEach((reqId) => delete draft[key][reqId]);\n\n return draft;\n }\n }\n};\n\nexport const useGroupChannelMessagesReducer = (\n userId?: string,\n sortComparator?: UseGroupChannelMessagesOptions['sortComparator'],\n) => {\n const [{ loading, refreshing, messageMap, nextMessageMap }, dispatch] = useReducer(defaultReducer, {\n loading: true,\n refreshing: false,\n messageMap: {},\n nextMessageMap: {},\n });\n\n const updateMessages = (messages: SendbirdBaseMessage[], clearPrev: boolean, currentUserId?: string) => {\n dispatch({ type: 'update_messages', value: { messages, clearPrev, currentUserId } });\n };\n const deleteMessages = (messageIds: number[], reqIds: string[]) => {\n dispatch({ type: 'delete_messages', value: { messageIds, reqIds } });\n };\n const updateNextMessages = (messages: SendbirdBaseMessage[], clearPrev: boolean, currentUserId?: string) => {\n dispatch({ type: 'update_next_messages', value: { messages, clearPrev, currentUserId } });\n };\n const deleteNextMessages = (messageIds: number[], reqIds: string[]) => {\n dispatch({ type: 'delete_next_messages', value: { messageIds, reqIds } });\n };\n const updateLoading = (status: boolean) => {\n dispatch({ type: 'update_loading', value: { status } });\n };\n const updateRefreshing = (status: boolean) => {\n dispatch({ type: 'update_refreshing', value: { status } });\n };\n\n const messages = useIIFE(() => {\n if (sortComparator) return Object.values(messageMap).sort(sortComparator);\n return Object.values(messageMap);\n });\n const nextMessages = Object.values(nextMessageMap);\n const newMessagesFromMembers = nextMessages.filter((msg) => isNewMessage(msg, userId));\n\n return {\n updateLoading,\n updateRefreshing,\n updateMessages,\n updateNextMessages,\n deleteMessages,\n deleteNextMessages,\n\n loading,\n refreshing,\n messages,\n nextMessages,\n newMessagesFromMembers,\n };\n};\n"],"mappings":"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"}
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.useOpenChannelMessagesReducer = void 0;
|
|
7
|
-
|
|
8
|
-
var _react = require("react");
|
|
9
|
-
|
|
10
|
-
var _uikitUtils = require("@sendbird/uikit-utils");
|
|
11
|
-
|
|
12
|
-
const defaultReducer = (_ref, action) => {
|
|
13
|
-
let { ...draft
|
|
14
|
-
} = _ref;
|
|
15
|
-
|
|
16
|
-
switch (action.type) {
|
|
17
|
-
case 'update_refreshing':
|
|
18
|
-
case 'update_loading':
|
|
19
|
-
{
|
|
20
|
-
const key = action.type === 'update_loading' ? 'loading' : 'refreshing';
|
|
21
|
-
draft[key] = action.value.status;
|
|
22
|
-
return draft;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
case 'update_messages':
|
|
26
|
-
case 'update_next_messages':
|
|
27
|
-
{
|
|
28
|
-
const key = action.type === 'update_messages' ? 'messageMap' : 'nextMessageMap';
|
|
29
|
-
const receivedMessagesAsMap = (0, _uikitUtils.arrayToMapWithGetter)(action.value.messages, _uikitUtils.getMessageUniqId);
|
|
30
|
-
|
|
31
|
-
if (action.value.clearPrev) {
|
|
32
|
-
draft[key] = receivedMessagesAsMap;
|
|
33
|
-
} else {
|
|
34
|
-
draft[key] = { ...draft[key],
|
|
35
|
-
...receivedMessagesAsMap
|
|
36
|
-
}; // NOTE: Replace pending message to succeeded message
|
|
37
|
-
|
|
38
|
-
action.value.messages.filter(m => {
|
|
39
|
-
return (m.isFileMessage() || m.isUserMessage()) && Boolean(draft[key][m.reqId]) && m.sendingStatus === 'succeeded' && (0, _uikitUtils.isMyMessage)(m, action.value.currentUserId);
|
|
40
|
-
}).forEach(m => delete draft[key][m.reqId]);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return draft;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
case 'delete_messages':
|
|
47
|
-
case 'delete_next_messages':
|
|
48
|
-
{
|
|
49
|
-
const key = action.type === 'delete_messages' ? 'messageMap' : 'nextMessageMap';
|
|
50
|
-
draft[key] = { ...draft[key]
|
|
51
|
-
};
|
|
52
|
-
action.value.messageIds.forEach(msgId => delete draft[key][msgId]);
|
|
53
|
-
action.value.reqIds.forEach(reqId => delete draft[key][reqId]);
|
|
54
|
-
return draft;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
const useOpenChannelMessagesReducer = (userId, sortComparator) => {
|
|
60
|
-
const [{
|
|
61
|
-
loading,
|
|
62
|
-
refreshing,
|
|
63
|
-
messageMap,
|
|
64
|
-
nextMessageMap
|
|
65
|
-
}, dispatch] = (0, _react.useReducer)(defaultReducer, {
|
|
66
|
-
loading: true,
|
|
67
|
-
refreshing: false,
|
|
68
|
-
messageMap: {},
|
|
69
|
-
nextMessageMap: {}
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
const updateMessages = (messages, clearPrev, currentUserId) => {
|
|
73
|
-
dispatch({
|
|
74
|
-
type: 'update_messages',
|
|
75
|
-
value: {
|
|
76
|
-
messages,
|
|
77
|
-
clearPrev,
|
|
78
|
-
currentUserId
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
const deleteMessages = (messageIds, reqIds) => {
|
|
84
|
-
dispatch({
|
|
85
|
-
type: 'delete_messages',
|
|
86
|
-
value: {
|
|
87
|
-
messageIds,
|
|
88
|
-
reqIds
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
const updateNextMessages = (messages, clearPrev, currentUserId) => {
|
|
94
|
-
dispatch({
|
|
95
|
-
type: 'update_next_messages',
|
|
96
|
-
value: {
|
|
97
|
-
messages,
|
|
98
|
-
clearPrev,
|
|
99
|
-
currentUserId
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
const deleteNextMessages = (messageIds, reqIds) => {
|
|
105
|
-
dispatch({
|
|
106
|
-
type: 'delete_next_messages',
|
|
107
|
-
value: {
|
|
108
|
-
messageIds,
|
|
109
|
-
reqIds
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
};
|
|
113
|
-
|
|
114
|
-
const updateLoading = status => {
|
|
115
|
-
dispatch({
|
|
116
|
-
type: 'update_loading',
|
|
117
|
-
value: {
|
|
118
|
-
status
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
const updateRefreshing = status => {
|
|
124
|
-
dispatch({
|
|
125
|
-
type: 'update_refreshing',
|
|
126
|
-
value: {
|
|
127
|
-
status
|
|
128
|
-
}
|
|
129
|
-
});
|
|
130
|
-
};
|
|
131
|
-
|
|
132
|
-
const messages = (0, _uikitUtils.useIIFE)(() => {
|
|
133
|
-
if (sortComparator) return Object.values(messageMap).sort(sortComparator);
|
|
134
|
-
return Object.values(messageMap);
|
|
135
|
-
});
|
|
136
|
-
const nextMessages = Object.values(nextMessageMap);
|
|
137
|
-
const newMessagesFromMembers = nextMessages.filter(msg => (0, _uikitUtils.isNewMessage)(msg, userId));
|
|
138
|
-
return {
|
|
139
|
-
updateLoading,
|
|
140
|
-
updateRefreshing,
|
|
141
|
-
updateMessages,
|
|
142
|
-
updateNextMessages,
|
|
143
|
-
deleteMessages,
|
|
144
|
-
deleteNextMessages,
|
|
145
|
-
loading,
|
|
146
|
-
refreshing,
|
|
147
|
-
messages,
|
|
148
|
-
nextMessages,
|
|
149
|
-
newMessagesFromMembers
|
|
150
|
-
};
|
|
151
|
-
};
|
|
152
|
-
|
|
153
|
-
exports.useOpenChannelMessagesReducer = useOpenChannelMessagesReducer;
|
|
154
|
-
//# sourceMappingURL=reducer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["defaultReducer","action","draft","type","key","value","status","receivedMessagesAsMap","arrayToMapWithGetter","messages","getMessageUniqId","clearPrev","filter","m","isFileMessage","isUserMessage","Boolean","reqId","sendingStatus","isMyMessage","currentUserId","forEach","messageIds","msgId","reqIds","useOpenChannelMessagesReducer","userId","sortComparator","loading","refreshing","messageMap","nextMessageMap","dispatch","useReducer","updateMessages","deleteMessages","updateNextMessages","deleteNextMessages","updateLoading","updateRefreshing","useIIFE","Object","values","sort","nextMessages","newMessagesFromMembers","msg","isNewMessage"],"sources":["reducer.ts"],"sourcesContent":["import { useReducer } from 'react';\n\nimport type { SendbirdBaseMessage, SendbirdFileMessage, SendbirdUserMessage } from '@sendbird/uikit-utils';\nimport { arrayToMapWithGetter, getMessageUniqId, isMyMessage, isNewMessage, useIIFE } from '@sendbird/uikit-utils';\n\nimport type { UseOpenChannelMessagesOptions } from '../../types';\n\ntype Action =\n | {\n type: 'update_loading' | 'update_refreshing';\n value: { status: boolean };\n }\n | {\n type: 'update_messages' | 'update_next_messages';\n value: { messages: SendbirdBaseMessage[]; clearPrev: boolean; currentUserId?: string };\n }\n | {\n type: 'delete_messages' | 'delete_next_messages';\n value: { messageIds: number[]; reqIds: string[] };\n };\n\ntype State = {\n loading: boolean;\n refreshing: boolean;\n messageMap: Record<string, SendbirdBaseMessage>;\n nextMessageMap: Record<string, SendbirdBaseMessage>;\n};\n\nconst defaultReducer = ({ ...draft }: State, action: Action) => {\n switch (action.type) {\n case 'update_refreshing':\n case 'update_loading': {\n const key = action.type === 'update_loading' ? 'loading' : 'refreshing';\n draft[key] = action.value.status;\n\n return draft;\n }\n case 'update_messages':\n case 'update_next_messages': {\n const key = action.type === 'update_messages' ? 'messageMap' : 'nextMessageMap';\n const receivedMessagesAsMap = arrayToMapWithGetter(action.value.messages, getMessageUniqId);\n if (action.value.clearPrev) {\n draft[key] = receivedMessagesAsMap;\n } else {\n draft[key] = { ...draft[key], ...receivedMessagesAsMap };\n\n // NOTE: Replace pending message to succeeded message\n action.value.messages\n .filter((m): m is SendbirdUserMessage | SendbirdFileMessage => {\n return (\n (m.isFileMessage() || m.isUserMessage()) &&\n Boolean(draft[key][m.reqId]) &&\n m.sendingStatus === 'succeeded' &&\n isMyMessage(m, action.value.currentUserId)\n );\n })\n .forEach((m) => delete draft[key][m.reqId]);\n }\n\n return draft;\n }\n case 'delete_messages':\n case 'delete_next_messages': {\n const key = action.type === 'delete_messages' ? 'messageMap' : 'nextMessageMap';\n draft[key] = { ...draft[key] };\n action.value.messageIds.forEach((msgId) => delete draft[key][msgId]);\n action.value.reqIds.forEach((reqId) => delete draft[key][reqId]);\n\n return draft;\n }\n }\n};\n\nexport const useOpenChannelMessagesReducer = (\n userId?: string,\n sortComparator?: UseOpenChannelMessagesOptions['sortComparator'],\n) => {\n const [{ loading, refreshing, messageMap, nextMessageMap }, dispatch] = useReducer(defaultReducer, {\n loading: true,\n refreshing: false,\n messageMap: {},\n nextMessageMap: {},\n });\n\n const updateMessages = (messages: SendbirdBaseMessage[], clearPrev: boolean, currentUserId?: string) => {\n dispatch({ type: 'update_messages', value: { messages, clearPrev, currentUserId } });\n };\n const deleteMessages = (messageIds: number[], reqIds: string[]) => {\n dispatch({ type: 'delete_messages', value: { messageIds, reqIds } });\n };\n const updateNextMessages = (messages: SendbirdBaseMessage[], clearPrev: boolean, currentUserId?: string) => {\n dispatch({ type: 'update_next_messages', value: { messages, clearPrev, currentUserId } });\n };\n const deleteNextMessages = (messageIds: number[], reqIds: string[]) => {\n dispatch({ type: 'delete_next_messages', value: { messageIds, reqIds } });\n };\n const updateLoading = (status: boolean) => {\n dispatch({ type: 'update_loading', value: { status } });\n };\n const updateRefreshing = (status: boolean) => {\n dispatch({ type: 'update_refreshing', value: { status } });\n };\n\n const messages = useIIFE(() => {\n if (sortComparator) return Object.values(messageMap).sort(sortComparator);\n return Object.values(messageMap);\n });\n const nextMessages = Object.values(nextMessageMap);\n const newMessagesFromMembers = nextMessages.filter((msg) => isNewMessage(msg, userId));\n\n return {\n updateLoading,\n updateRefreshing,\n updateMessages,\n updateNextMessages,\n deleteMessages,\n deleteNextMessages,\n\n loading,\n refreshing,\n messages,\n nextMessages,\n newMessagesFromMembers,\n };\n};\n"],"mappings":";;;;;;;AAAA;;AAGA;;AAyBA,MAAMA,cAAc,GAAG,OAAsBC,MAAtB,KAAyC;EAAA,IAAxC,EAAE,GAAGC;EAAL,CAAwC;;EAC9D,QAAQD,MAAM,CAACE,IAAf;IACE,KAAK,mBAAL;IACA,KAAK,gBAAL;MAAuB;QACrB,MAAMC,GAAG,GAAGH,MAAM,CAACE,IAAP,KAAgB,gBAAhB,GAAmC,SAAnC,GAA+C,YAA3D;QACAD,KAAK,CAACE,GAAD,CAAL,GAAaH,MAAM,CAACI,KAAP,CAAaC,MAA1B;QAEA,OAAOJ,KAAP;MACD;;IACD,KAAK,iBAAL;IACA,KAAK,sBAAL;MAA6B;QAC3B,MAAME,GAAG,GAAGH,MAAM,CAACE,IAAP,KAAgB,iBAAhB,GAAoC,YAApC,GAAmD,gBAA/D;QACA,MAAMI,qBAAqB,GAAG,IAAAC,gCAAA,EAAqBP,MAAM,CAACI,KAAP,CAAaI,QAAlC,EAA4CC,4BAA5C,CAA9B;;QACA,IAAIT,MAAM,CAACI,KAAP,CAAaM,SAAjB,EAA4B;UAC1BT,KAAK,CAACE,GAAD,CAAL,GAAaG,qBAAb;QACD,CAFD,MAEO;UACLL,KAAK,CAACE,GAAD,CAAL,GAAa,EAAE,GAAGF,KAAK,CAACE,GAAD,CAAV;YAAiB,GAAGG;UAApB,CAAb,CADK,CAGL;;UACAN,MAAM,CAACI,KAAP,CAAaI,QAAb,CACGG,MADH,CACWC,CAAD,IAAuD;YAC7D,OACE,CAACA,CAAC,CAACC,aAAF,MAAqBD,CAAC,CAACE,aAAF,EAAtB,KACAC,OAAO,CAACd,KAAK,CAACE,GAAD,CAAL,CAAWS,CAAC,CAACI,KAAb,CAAD,CADP,IAEAJ,CAAC,CAACK,aAAF,KAAoB,WAFpB,IAGA,IAAAC,uBAAA,EAAYN,CAAZ,EAAeZ,MAAM,CAACI,KAAP,CAAae,aAA5B,CAJF;UAMD,CARH,EASGC,OATH,CASYR,CAAD,IAAO,OAAOX,KAAK,CAACE,GAAD,CAAL,CAAWS,CAAC,CAACI,KAAb,CATzB;QAUD;;QAED,OAAOf,KAAP;MACD;;IACD,KAAK,iBAAL;IACA,KAAK,sBAAL;MAA6B;QAC3B,MAAME,GAAG,GAAGH,MAAM,CAACE,IAAP,KAAgB,iBAAhB,GAAoC,YAApC,GAAmD,gBAA/D;QACAD,KAAK,CAACE,GAAD,CAAL,GAAa,EAAE,GAAGF,KAAK,CAACE,GAAD;QAAV,CAAb;QACAH,MAAM,CAACI,KAAP,CAAaiB,UAAb,CAAwBD,OAAxB,CAAiCE,KAAD,IAAW,OAAOrB,KAAK,CAACE,GAAD,CAAL,CAAWmB,KAAX,CAAlD;QACAtB,MAAM,CAACI,KAAP,CAAamB,MAAb,CAAoBH,OAApB,CAA6BJ,KAAD,IAAW,OAAOf,KAAK,CAACE,GAAD,CAAL,CAAWa,KAAX,CAA9C;QAEA,OAAOf,KAAP;MACD;EAxCH;AA0CD,CA3CD;;AA6CO,MAAMuB,6BAA6B,GAAG,CAC3CC,MAD2C,EAE3CC,cAF2C,KAGxC;EACH,MAAM,CAAC;IAAEC,OAAF;IAAWC,UAAX;IAAuBC,UAAvB;IAAmCC;EAAnC,CAAD,EAAsDC,QAAtD,IAAkE,IAAAC,iBAAA,EAAWjC,cAAX,EAA2B;IACjG4B,OAAO,EAAE,IADwF;IAEjGC,UAAU,EAAE,KAFqF;IAGjGC,UAAU,EAAE,EAHqF;IAIjGC,cAAc,EAAE;EAJiF,CAA3B,CAAxE;;EAOA,MAAMG,cAAc,GAAG,CAACzB,QAAD,EAAkCE,SAAlC,EAAsDS,aAAtD,KAAiF;IACtGY,QAAQ,CAAC;MAAE7B,IAAI,EAAE,iBAAR;MAA2BE,KAAK,EAAE;QAAEI,QAAF;QAAYE,SAAZ;QAAuBS;MAAvB;IAAlC,CAAD,CAAR;EACD,CAFD;;EAGA,MAAMe,cAAc,GAAG,CAACb,UAAD,EAAuBE,MAAvB,KAA4C;IACjEQ,QAAQ,CAAC;MAAE7B,IAAI,EAAE,iBAAR;MAA2BE,KAAK,EAAE;QAAEiB,UAAF;QAAcE;MAAd;IAAlC,CAAD,CAAR;EACD,CAFD;;EAGA,MAAMY,kBAAkB,GAAG,CAAC3B,QAAD,EAAkCE,SAAlC,EAAsDS,aAAtD,KAAiF;IAC1GY,QAAQ,CAAC;MAAE7B,IAAI,EAAE,sBAAR;MAAgCE,KAAK,EAAE;QAAEI,QAAF;QAAYE,SAAZ;QAAuBS;MAAvB;IAAvC,CAAD,CAAR;EACD,CAFD;;EAGA,MAAMiB,kBAAkB,GAAG,CAACf,UAAD,EAAuBE,MAAvB,KAA4C;IACrEQ,QAAQ,CAAC;MAAE7B,IAAI,EAAE,sBAAR;MAAgCE,KAAK,EAAE;QAAEiB,UAAF;QAAcE;MAAd;IAAvC,CAAD,CAAR;EACD,CAFD;;EAGA,MAAMc,aAAa,GAAIhC,MAAD,IAAqB;IACzC0B,QAAQ,CAAC;MAAE7B,IAAI,EAAE,gBAAR;MAA0BE,KAAK,EAAE;QAAEC;MAAF;IAAjC,CAAD,CAAR;EACD,CAFD;;EAGA,MAAMiC,gBAAgB,GAAIjC,MAAD,IAAqB;IAC5C0B,QAAQ,CAAC;MAAE7B,IAAI,EAAE,mBAAR;MAA6BE,KAAK,EAAE;QAAEC;MAAF;IAApC,CAAD,CAAR;EACD,CAFD;;EAIA,MAAMG,QAAQ,GAAG,IAAA+B,mBAAA,EAAQ,MAAM;IAC7B,IAAIb,cAAJ,EAAoB,OAAOc,MAAM,CAACC,MAAP,CAAcZ,UAAd,EAA0Ba,IAA1B,CAA+BhB,cAA/B,CAAP;IACpB,OAAOc,MAAM,CAACC,MAAP,CAAcZ,UAAd,CAAP;EACD,CAHgB,CAAjB;EAIA,MAAMc,YAAY,GAAGH,MAAM,CAACC,MAAP,CAAcX,cAAd,CAArB;EACA,MAAMc,sBAAsB,GAAGD,YAAY,CAAChC,MAAb,CAAqBkC,GAAD,IAAS,IAAAC,wBAAA,EAAaD,GAAb,EAAkBpB,MAAlB,CAA7B,CAA/B;EAEA,OAAO;IACLY,aADK;IAELC,gBAFK;IAGLL,cAHK;IAILE,kBAJK;IAKLD,cALK;IAMLE,kBANK;IAQLT,OARK;IASLC,UATK;IAULpB,QAVK;IAWLmC,YAXK;IAYLC;EAZK,CAAP;AAcD,CAnDM"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.useTotalUnreadChannelCount = void 0;
|
|
7
|
-
|
|
8
|
-
var _react = require("react");
|
|
9
|
-
|
|
10
|
-
var _uikitUtils = require("@sendbird/uikit-utils");
|
|
11
|
-
|
|
12
|
-
var _useUserEventHandler = require("../handler/useUserEventHandler");
|
|
13
|
-
|
|
14
|
-
const useTotalUnreadChannelCount = (sdk, params) => {
|
|
15
|
-
const handlerId = (0, _uikitUtils.useUniqHandlerId)('useTotalUnreadChannelCount');
|
|
16
|
-
const [unreadChannelCount, setUnreadChannelCount] = (0, _react.useState)(0);
|
|
17
|
-
(0, _uikitUtils.useAsyncEffect)(async () => {
|
|
18
|
-
setUnreadChannelCount(await sdk.groupChannel.getTotalUnreadChannelCount());
|
|
19
|
-
}, [sdk]);
|
|
20
|
-
(0, _useUserEventHandler.useUserEventHandler)(sdk, handlerId, {
|
|
21
|
-
onTotalUnreadMessageCountUpdated: async () => {
|
|
22
|
-
setUnreadChannelCount(await sdk.groupChannel.getTotalUnreadChannelCount());
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
return (0, _uikitUtils.truncatedCount)(unreadChannelCount, params === null || params === void 0 ? void 0 : params.maxCount);
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
exports.useTotalUnreadChannelCount = useTotalUnreadChannelCount;
|
|
29
|
-
//# sourceMappingURL=useTotalUnreadChannelCount.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["useTotalUnreadChannelCount","sdk","params","handlerId","useUniqHandlerId","unreadChannelCount","setUnreadChannelCount","useState","useAsyncEffect","groupChannel","getTotalUnreadChannelCount","useUserEventHandler","onTotalUnreadMessageCountUpdated","truncatedCount","maxCount"],"sources":["useTotalUnreadChannelCount.ts"],"sourcesContent":["import { useState } from 'react';\n\nimport type { SendbirdChatSDK } from '@sendbird/uikit-utils';\nimport { truncatedCount, useAsyncEffect, useUniqHandlerId } from '@sendbird/uikit-utils';\n\nimport { useUserEventHandler } from '../handler/useUserEventHandler';\n\ntype Params = {\n maxCount?: number;\n};\nexport const useTotalUnreadChannelCount = (sdk: SendbirdChatSDK, params?: Params) => {\n const handlerId = useUniqHandlerId('useTotalUnreadChannelCount');\n const [unreadChannelCount, setUnreadChannelCount] = useState(0);\n\n useAsyncEffect(async () => {\n setUnreadChannelCount(await sdk.groupChannel.getTotalUnreadChannelCount());\n }, [sdk]);\n\n useUserEventHandler(sdk, handlerId, {\n onTotalUnreadMessageCountUpdated: async () => {\n setUnreadChannelCount(await sdk.groupChannel.getTotalUnreadChannelCount());\n },\n });\n\n return truncatedCount(unreadChannelCount, params?.maxCount);\n};\n"],"mappings":";;;;;;;AAAA;;AAGA;;AAEA;;AAKO,MAAMA,0BAA0B,GAAG,CAACC,GAAD,EAAuBC,MAAvB,KAA2C;EACnF,MAAMC,SAAS,GAAG,IAAAC,4BAAA,EAAiB,4BAAjB,CAAlB;EACA,MAAM,CAACC,kBAAD,EAAqBC,qBAArB,IAA8C,IAAAC,eAAA,EAAS,CAAT,CAApD;EAEA,IAAAC,0BAAA,EAAe,YAAY;IACzBF,qBAAqB,CAAC,MAAML,GAAG,CAACQ,YAAJ,CAAiBC,0BAAjB,EAAP,CAArB;EACD,CAFD,EAEG,CAACT,GAAD,CAFH;EAIA,IAAAU,wCAAA,EAAoBV,GAApB,EAAyBE,SAAzB,EAAoC;IAClCS,gCAAgC,EAAE,YAAY;MAC5CN,qBAAqB,CAAC,MAAML,GAAG,CAACQ,YAAJ,CAAiBC,0BAAjB,EAAP,CAArB;IACD;EAHiC,CAApC;EAMA,OAAO,IAAAG,0BAAA,EAAeR,kBAAf,EAAmCH,MAAnC,aAAmCA,MAAnC,uBAAmCA,MAAM,CAAEY,QAA3C,CAAP;AACD,CAfM"}
|