@sendbird/uikit-chat-hooks 2.0.0 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithCollection.js +14 -6
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithCollection.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithQuery.js +11 -7
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithQuery.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +10 -14
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +1 -12
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
- package/lib/commonjs/common/useMessageOutgoingStatus.js +1 -0
- package/lib/commonjs/common/useMessageOutgoingStatus.js.map +1 -1
- package/lib/commonjs/common/useUserList.js +14 -4
- package/lib/commonjs/common/useUserList.js.map +1 -1
- package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js +15 -7
- package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js.map +1 -1
- package/lib/module/channel/useGroupChannelList/useGroupChannelListWithQuery.js +11 -7
- package/lib/module/channel/useGroupChannelList/useGroupChannelListWithQuery.js.map +1 -1
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +12 -15
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +2 -12
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
- package/lib/module/common/useMessageOutgoingStatus.js +1 -0
- package/lib/module/common/useMessageOutgoingStatus.js.map +1 -1
- package/lib/module/common/useUserList.js +14 -6
- package/lib/module/common/useUserList.js.map +1 -1
- package/lib/typescript/src/common/useUserList.d.ts +1 -1
- package/package.json +3 -3
- package/src/channel/useGroupChannelList/useGroupChannelListWithCollection.ts +20 -8
- package/src/channel/useGroupChannelList/useGroupChannelListWithQuery.ts +10 -7
- package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.ts +11 -19
- package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.ts +1 -10
- package/src/common/useMessageOutgoingStatus.ts +1 -0
- package/src/common/useUserList.ts +14 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sendbird/uikit-chat-hooks",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.2",
|
|
4
4
|
"description": "React hooks that built with SendbirdChat SDK",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"access": "public"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@sendbird/uikit-utils": "2.0.
|
|
41
|
+
"@sendbird/uikit-utils": "2.0.2"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@types/react": "*",
|
|
@@ -69,5 +69,5 @@
|
|
|
69
69
|
"readmeFile": "./README.md",
|
|
70
70
|
"displayName": "@sendbird/uikit-chat-hooks"
|
|
71
71
|
},
|
|
72
|
-
"gitHead": "
|
|
72
|
+
"gitHead": "95323825da753f20b931b4a8b7e187cd8dc6284e"
|
|
73
73
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useEffect, useRef } from 'react';
|
|
2
2
|
|
|
3
|
-
import { GroupChannelFilter, GroupChannelListOrder } from '@sendbird/chat/groupChannel';
|
|
4
|
-
import type { SendbirdChatSDK, SendbirdGroupChannelCollection } from '@sendbird/uikit-utils';
|
|
3
|
+
import { GroupChannelEventSource, GroupChannelFilter, GroupChannelListOrder } from '@sendbird/chat/groupChannel';
|
|
4
|
+
import type { SendbirdBaseChannel, SendbirdChatSDK, SendbirdGroupChannelCollection } from '@sendbird/uikit-utils';
|
|
5
5
|
import { confirmAndMarkAsDelivered, useAsyncEffect, useFreshCallback, useUniqId } from '@sendbird/uikit-utils';
|
|
6
6
|
|
|
7
7
|
import { useAppFeatures } from '../../common/useAppFeatures';
|
|
@@ -37,11 +37,23 @@ export const useGroupChannelListWithCollection: UseGroupChannelList = (sdk, user
|
|
|
37
37
|
const { loading, groupChannels, refreshing, setChannels, deleteChannels, updateRefreshing, updateLoading } =
|
|
38
38
|
useGroupChannelListReducer();
|
|
39
39
|
|
|
40
|
-
const updateChannelsAndMarkAsDelivered = (
|
|
40
|
+
const updateChannelsAndMarkAsDelivered = (
|
|
41
|
+
markAsDelivered: boolean,
|
|
42
|
+
source?: GroupChannelEventSource,
|
|
43
|
+
updatedChannels?: SendbirdBaseChannel[],
|
|
44
|
+
) => {
|
|
41
45
|
const channels = collectionRef.current?.channels ?? [];
|
|
42
46
|
setChannels(channels, true);
|
|
43
47
|
if (markAsDelivered && deliveryReceiptEnabled) {
|
|
44
|
-
|
|
48
|
+
switch (source) {
|
|
49
|
+
case GroupChannelEventSource.EVENT_MESSAGE_RECEIVED:
|
|
50
|
+
case GroupChannelEventSource.EVENT_MESSAGE_SENT:
|
|
51
|
+
case GroupChannelEventSource.SYNC_CHANNEL_BACKGROUND:
|
|
52
|
+
case GroupChannelEventSource.SYNC_CHANNEL_CHANGELOGS:
|
|
53
|
+
case undefined:
|
|
54
|
+
confirmAndMarkAsDelivered(updatedChannels ?? channels);
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
45
57
|
}
|
|
46
58
|
};
|
|
47
59
|
|
|
@@ -52,11 +64,11 @@ export const useGroupChannelListWithCollection: UseGroupChannelList = (sdk, user
|
|
|
52
64
|
collectionRef.current = createGroupChannelListCollection(sdk, options?.collectionCreator);
|
|
53
65
|
|
|
54
66
|
collectionRef.current?.setGroupChannelCollectionHandler({
|
|
55
|
-
onChannelsAdded: () => {
|
|
56
|
-
updateChannelsAndMarkAsDelivered(true);
|
|
67
|
+
onChannelsAdded: (context, channels) => {
|
|
68
|
+
updateChannelsAndMarkAsDelivered(true, context.source, channels);
|
|
57
69
|
},
|
|
58
|
-
onChannelsUpdated: () => {
|
|
59
|
-
updateChannelsAndMarkAsDelivered(true);
|
|
70
|
+
onChannelsUpdated: (context, channels) => {
|
|
71
|
+
updateChannelsAndMarkAsDelivered(true, context.source, channels);
|
|
60
72
|
},
|
|
61
73
|
onChannelsDeleted: () => {
|
|
62
74
|
updateChannelsAndMarkAsDelivered(false);
|
|
@@ -43,7 +43,7 @@ export const useGroupChannelListWithQuery: UseGroupChannelList = (sdk, userId, o
|
|
|
43
43
|
|
|
44
44
|
const updateChannelsAndMarkAsDelivered = (channels: SendbirdChannel[]) => {
|
|
45
45
|
updateChannels(channels);
|
|
46
|
-
if (deliveryReceiptEnabled)
|
|
46
|
+
if (deliveryReceiptEnabled) confirmAndMarkAsDelivered(channels);
|
|
47
47
|
};
|
|
48
48
|
|
|
49
49
|
const init = useFreshCallback(async (uid?: string) => {
|
|
@@ -55,7 +55,7 @@ export const useGroupChannelListWithQuery: UseGroupChannelList = (sdk, userId, o
|
|
|
55
55
|
const channels = await queryRef.current.next();
|
|
56
56
|
|
|
57
57
|
setChannels(channels, true);
|
|
58
|
-
if (deliveryReceiptEnabled)
|
|
58
|
+
if (deliveryReceiptEnabled) confirmAndMarkAsDelivered(channels);
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
});
|
|
@@ -67,21 +67,24 @@ export const useGroupChannelListWithQuery: UseGroupChannelList = (sdk, userId, o
|
|
|
67
67
|
}, [init, userId]);
|
|
68
68
|
|
|
69
69
|
useChannelHandler(sdk, HOOK_NAME, {
|
|
70
|
-
onChannelChanged: (channel) =>
|
|
70
|
+
onChannelChanged: (channel) => updateChannels([channel]),
|
|
71
71
|
onChannelFrozen: (channel) => updateChannels([channel]),
|
|
72
72
|
onChannelUnfrozen: (channel) => updateChannels([channel]),
|
|
73
73
|
onChannelMemberCountChanged: (channels) => updateChannels(channels),
|
|
74
74
|
onChannelDeleted: (url) => deleteChannels([url]),
|
|
75
|
-
onUserJoined: (channel) =>
|
|
75
|
+
onUserJoined: (channel) => updateChannels([channel]),
|
|
76
76
|
onUserLeft: (channel, user) => {
|
|
77
77
|
const isMe = user.userId === userId;
|
|
78
78
|
if (isMe) deleteChannels([channel.url]);
|
|
79
|
-
else
|
|
79
|
+
else updateChannels([channel]);
|
|
80
80
|
},
|
|
81
81
|
onUserBanned(channel, user) {
|
|
82
82
|
const isMe = user.userId === userId;
|
|
83
83
|
if (isMe) deleteChannels([channel.url]);
|
|
84
|
-
else
|
|
84
|
+
else updateChannels([channel]);
|
|
85
|
+
},
|
|
86
|
+
onMessageReceived(channel) {
|
|
87
|
+
updateChannelsAndMarkAsDelivered([channel]);
|
|
85
88
|
},
|
|
86
89
|
});
|
|
87
90
|
|
|
@@ -95,7 +98,7 @@ export const useGroupChannelListWithQuery: UseGroupChannelList = (sdk, userId, o
|
|
|
95
98
|
if (queryRef.current?.hasNext) {
|
|
96
99
|
const channels = await queryRef.current.next();
|
|
97
100
|
setChannels(channels, false);
|
|
98
|
-
if (deliveryReceiptEnabled)
|
|
101
|
+
if (deliveryReceiptEnabled) confirmAndMarkAsDelivered(channels);
|
|
99
102
|
}
|
|
100
103
|
});
|
|
101
104
|
|
|
@@ -1,21 +1,14 @@
|
|
|
1
1
|
import { useCallback, useEffect, useRef } from 'react';
|
|
2
2
|
|
|
3
|
-
import { MessageCollectionInitPolicy, MessageFilter } from '@sendbird/chat/groupChannel';
|
|
3
|
+
import { MessageCollectionInitPolicy, MessageEventSource, MessageFilter } from '@sendbird/chat/groupChannel';
|
|
4
4
|
import type {
|
|
5
5
|
SendbirdChannel,
|
|
6
6
|
SendbirdFileMessage,
|
|
7
7
|
SendbirdGroupChannel,
|
|
8
8
|
SendbirdMessageCollection,
|
|
9
9
|
} from '@sendbird/uikit-utils';
|
|
10
|
-
import {
|
|
11
|
-
Logger,
|
|
12
|
-
confirmAndMarkAsDelivered,
|
|
13
|
-
confirmAndMarkAsRead,
|
|
14
|
-
isDifferentChannel,
|
|
15
|
-
useForceUpdate,
|
|
16
|
-
} from '@sendbird/uikit-utils';
|
|
10
|
+
import { Logger, confirmAndMarkAsRead, isDifferentChannel, useForceUpdate } from '@sendbird/uikit-utils';
|
|
17
11
|
|
|
18
|
-
import { useAppFeatures } from '../../common/useAppFeatures';
|
|
19
12
|
import { useChannelHandler } from '../../handler/useChannelHandler';
|
|
20
13
|
import type { UseGroupChannelMessages, UseGroupChannelMessagesOptions } from '../../types';
|
|
21
14
|
import { useActiveGroupChannel } from '../useActiveGroupChannel';
|
|
@@ -33,8 +26,6 @@ const createMessageCollection = (
|
|
|
33
26
|
const HOOK_NAME = 'useGroupChannelMessagesWithCollection';
|
|
34
27
|
|
|
35
28
|
export const useGroupChannelMessagesWithCollection: UseGroupChannelMessages = (sdk, channel, userId, options) => {
|
|
36
|
-
const { deliveryReceiptEnabled } = useAppFeatures(sdk);
|
|
37
|
-
|
|
38
29
|
const collectionRef = useRef<SendbirdMessageCollection>();
|
|
39
30
|
|
|
40
31
|
// NOTE: We cannot determine the channel object of Sendbird SDK is stale or not, so force update af
|
|
@@ -57,12 +48,7 @@ export const useGroupChannelMessagesWithCollection: UseGroupChannelMessages = (s
|
|
|
57
48
|
|
|
58
49
|
const channelMarkAs = async () => {
|
|
59
50
|
try {
|
|
60
|
-
|
|
61
|
-
} catch (e) {
|
|
62
|
-
Logger.warn(`[${HOOK_NAME}/channelMarkAs/Delivered]`, e);
|
|
63
|
-
}
|
|
64
|
-
try {
|
|
65
|
-
await confirmAndMarkAsRead(sdk, [activeChannel]);
|
|
51
|
+
await confirmAndMarkAsRead([activeChannel]);
|
|
66
52
|
} catch (e) {
|
|
67
53
|
Logger.warn(`[${HOOK_NAME}/channelMarkAs/Read]`, e);
|
|
68
54
|
}
|
|
@@ -84,8 +70,14 @@ export const useGroupChannelMessagesWithCollection: UseGroupChannelMessages = (s
|
|
|
84
70
|
channelMarkAs();
|
|
85
71
|
|
|
86
72
|
collectionRef.current?.setMessageCollectionHandler({
|
|
87
|
-
onMessagesAdded: (_,
|
|
88
|
-
|
|
73
|
+
onMessagesAdded: (_, __, messages) => {
|
|
74
|
+
switch (_.source) {
|
|
75
|
+
case MessageEventSource.EVENT_MESSAGE_RECEIVED:
|
|
76
|
+
case MessageEventSource.EVENT_MESSAGE_SENT_SUCCESS:
|
|
77
|
+
case MessageEventSource.SYNC_MESSAGE_FILL:
|
|
78
|
+
channelMarkAs();
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
89
81
|
updateNextMessages(messages, false, sdk.currentUser.userId);
|
|
90
82
|
updateChannel(channel);
|
|
91
83
|
},
|
|
@@ -3,7 +3,6 @@ import { useCallback, useRef } from 'react';
|
|
|
3
3
|
import type { SendbirdBaseChannel, SendbirdGroupChannel } from '@sendbird/uikit-utils';
|
|
4
4
|
import {
|
|
5
5
|
Logger,
|
|
6
|
-
confirmAndMarkAsDelivered,
|
|
7
6
|
confirmAndMarkAsRead,
|
|
8
7
|
isDifferentChannel,
|
|
9
8
|
useAsyncEffect,
|
|
@@ -11,7 +10,6 @@ import {
|
|
|
11
10
|
} from '@sendbird/uikit-utils';
|
|
12
11
|
import type { SendbirdPreviousMessageListQuery } from '@sendbird/uikit-utils';
|
|
13
12
|
|
|
14
|
-
import { useAppFeatures } from '../../common/useAppFeatures';
|
|
15
13
|
import { useChannelHandler } from '../../handler/useChannelHandler';
|
|
16
14
|
import type { UseGroupChannelMessages, UseGroupChannelMessagesOptions } from '../../types';
|
|
17
15
|
import { useActiveGroupChannel } from '../useActiveGroupChannel';
|
|
@@ -30,8 +28,6 @@ const createMessageQuery = (
|
|
|
30
28
|
|
|
31
29
|
const HOOK_NAME = 'useGroupChannelMessagesWithQuery';
|
|
32
30
|
export const useGroupChannelMessagesWithQuery: UseGroupChannelMessages = (sdk, channel, userId, options) => {
|
|
33
|
-
const { deliveryReceiptEnabled } = useAppFeatures(sdk);
|
|
34
|
-
|
|
35
31
|
const queryRef = useRef<SendbirdPreviousMessageListQuery>();
|
|
36
32
|
|
|
37
33
|
// NOTE: We cannot determine the channel object of Sendbird SDK is stale or not, so force update after setActiveChannel
|
|
@@ -54,12 +50,7 @@ export const useGroupChannelMessagesWithQuery: UseGroupChannelMessages = (sdk, c
|
|
|
54
50
|
|
|
55
51
|
const channelMarkAs = async () => {
|
|
56
52
|
try {
|
|
57
|
-
|
|
58
|
-
} catch (e) {
|
|
59
|
-
Logger.warn(`[${HOOK_NAME}/channelMarkAs/Delivered]`, e);
|
|
60
|
-
}
|
|
61
|
-
try {
|
|
62
|
-
await confirmAndMarkAsRead(sdk, [activeChannel]);
|
|
53
|
+
await confirmAndMarkAsRead([channel]);
|
|
63
54
|
} catch (e) {
|
|
64
55
|
Logger.warn(`[${HOOK_NAME}/channelMarkAs/Read]`, e);
|
|
65
56
|
}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { useCallback, useMemo, useRef, useState } from 'react';
|
|
2
2
|
|
|
3
|
-
import { Optional, SendbirdChatSDK, SendbirdUser
|
|
3
|
+
import type { Optional, SendbirdChatSDK, SendbirdUser } from '@sendbird/uikit-utils';
|
|
4
|
+
import { Logger, SBErrorCode, SBErrorMessage, useAsyncEffect } from '@sendbird/uikit-utils';
|
|
4
5
|
|
|
5
6
|
import type { CustomQueryInterface, UseUserListOptions, UseUserListReturn } from '../types';
|
|
6
7
|
|
|
7
8
|
const createUserQuery = <User>(sdk: SendbirdChatSDK, queryCreator?: UseUserListOptions<User>['queryCreator']) => {
|
|
8
9
|
if (queryCreator) return queryCreator();
|
|
10
|
+
// In order to use the API, the option must be turned on in the dashboard.
|
|
9
11
|
return sdk.createApplicationUserListQuery() as unknown as CustomQueryInterface<User>;
|
|
10
12
|
};
|
|
11
13
|
|
|
@@ -57,7 +59,11 @@ export const useUserList = <
|
|
|
57
59
|
const init = useCallback(async () => {
|
|
58
60
|
query.current = createUserQuery<QueriedUser>(sdk, options?.queryCreator);
|
|
59
61
|
if (query.current?.hasNext) {
|
|
60
|
-
const users = await query.current?.next()
|
|
62
|
+
const users = await query.current?.next().catch((err) => {
|
|
63
|
+
Logger.error(error);
|
|
64
|
+
if (err.code === SBErrorCode.NON_AUTHORIZED) Logger.warn(SBErrorMessage.ACL);
|
|
65
|
+
throw error;
|
|
66
|
+
});
|
|
61
67
|
updateUsers(users, true);
|
|
62
68
|
}
|
|
63
69
|
}, [sdk, options?.queryCreator]);
|
|
@@ -88,7 +94,12 @@ export const useUserList = <
|
|
|
88
94
|
|
|
89
95
|
const next = useCallback(async () => {
|
|
90
96
|
if (query.current && query.current?.hasNext) {
|
|
91
|
-
|
|
97
|
+
const nextUsers = await query.current.next().catch((err) => {
|
|
98
|
+
Logger.error(error);
|
|
99
|
+
if (err.code === SBErrorCode.NON_AUTHORIZED) Logger.warn(SBErrorMessage.ACL);
|
|
100
|
+
throw error;
|
|
101
|
+
});
|
|
102
|
+
updateUsers(nextUsers, false);
|
|
92
103
|
}
|
|
93
104
|
}, []);
|
|
94
105
|
|