@sendbird/uikit-chat-hooks 2.1.0 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/channel/useGroupChannelMessages/reducer.js +0 -4
- package/lib/commonjs/channel/useGroupChannelMessages/reducer.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +21 -13
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +5 -7
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
- package/lib/commonjs/common/useTotalUnreadChannelCount.js +1 -1
- package/lib/commonjs/common/useTotalUnreadChannelCount.js.map +1 -1
- package/lib/commonjs/common/useTotalUnreadMessageCount.js +1 -1
- package/lib/commonjs/common/useTotalUnreadMessageCount.js.map +1 -1
- package/lib/commonjs/common/useUserList.js +8 -8
- package/lib/commonjs/common/useUserList.js.map +1 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/types.js.map +1 -1
- package/lib/module/channel/useGroupChannelMessages/reducer.js +0 -4
- package/lib/module/channel/useGroupChannelMessages/reducer.js.map +1 -1
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +21 -13
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +5 -7
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
- package/lib/module/common/useTotalUnreadChannelCount.js +2 -2
- package/lib/module/common/useTotalUnreadChannelCount.js.map +1 -1
- package/lib/module/common/useTotalUnreadMessageCount.js +2 -2
- package/lib/module/common/useTotalUnreadMessageCount.js.map +1 -1
- package/lib/module/common/useUserList.js +8 -8
- package/lib/module/common/useUserList.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/types.js.map +1 -1
- package/lib/typescript/src/channel/useGroupChannelList/reducer.d.ts +1 -1
- package/lib/typescript/src/common/useMessageOutgoingStatus.d.ts +1 -1
- package/lib/typescript/src/common/useTotalUnreadChannelCount.d.ts +1 -1
- package/lib/typescript/src/common/useTotalUnreadMessageCount.d.ts +1 -1
- package/lib/typescript/src/common/useUserList.d.ts +2 -2
- package/lib/typescript/src/index.d.ts +1 -1
- package/lib/typescript/src/model/CustomQuery.d.ts +1 -1
- package/lib/typescript/src/types.d.ts +4 -7
- package/package.json +4 -4
- package/src/channel/useGroupChannelMessages/reducer.ts +0 -4
- package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.ts +23 -11
- package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.ts +4 -6
- package/src/common/useTotalUnreadChannelCount.ts +2 -2
- package/src/common/useTotalUnreadMessageCount.ts +2 -2
- package/src/common/useUserList.ts +10 -10
- package/src/index.ts +0 -1
- package/src/types.ts +1 -4
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { SendbirdChatSDK, SendbirdError, SendbirdFileMessage, SendbirdFileMessageCreateParams, SendbirdGroupChannel, SendbirdGroupChannelCollection, SendbirdGroupChannelListQuery, SendbirdMessage, SendbirdMessageCollection, SendbirdPreviousMessageListQuery, SendbirdUserMessage, SendbirdUserMessageCreateParams } from '@sendbird/uikit-utils';
|
|
1
|
+
import type { SendbirdChatSDK, SendbirdError, SendbirdFileMessage, SendbirdFileMessageCreateParams, SendbirdGroupChannel, SendbirdGroupChannelCollection, SendbirdGroupChannelListQuery, SendbirdMessage, SendbirdMessageCollection, SendbirdPreviousMessageListQuery, SendbirdUserMessage, SendbirdUserMessageCreateParams, UserStruct } from '@sendbird/uikit-utils';
|
|
2
2
|
export interface CustomQueryInterface<Data> {
|
|
3
3
|
isLoading: boolean;
|
|
4
4
|
next: () => Promise<Data[]>;
|
|
@@ -41,7 +41,7 @@ export interface UseGroupChannelList {
|
|
|
41
41
|
next: () => Promise<void>;
|
|
42
42
|
};
|
|
43
43
|
}
|
|
44
|
-
export
|
|
44
|
+
export type UseGroupChannelListOptions = {
|
|
45
45
|
queryCreator?: () => SendbirdGroupChannelListQuery;
|
|
46
46
|
collectionCreator?: () => SendbirdGroupChannelCollection;
|
|
47
47
|
enableCollectionWithoutLocalCache?: boolean;
|
|
@@ -141,16 +141,13 @@ export interface UseGroupChannelMessages {
|
|
|
141
141
|
deleteMessage: (message: SendbirdFileMessage | SendbirdUserMessage) => Promise<void>;
|
|
142
142
|
};
|
|
143
143
|
}
|
|
144
|
-
export
|
|
144
|
+
export type UseGroupChannelMessagesOptions = {
|
|
145
145
|
sortComparator?: (a: SendbirdMessage, b: SendbirdMessage) => number;
|
|
146
146
|
queryCreator?: () => SendbirdPreviousMessageListQuery;
|
|
147
147
|
collectionCreator?: () => SendbirdMessageCollection;
|
|
148
148
|
enableCollectionWithoutLocalCache?: boolean;
|
|
149
149
|
onChannelDeleted?: () => void;
|
|
150
150
|
};
|
|
151
|
-
export interface UserStruct {
|
|
152
|
-
userId: string;
|
|
153
|
-
}
|
|
154
151
|
/**
|
|
155
152
|
* @interface UseUserListReturn
|
|
156
153
|
* @description interface for user list hook return value
|
|
@@ -191,7 +188,7 @@ export interface UseUserListReturn<User extends UserStruct> {
|
|
|
191
188
|
* */
|
|
192
189
|
next: () => Promise<void>;
|
|
193
190
|
}
|
|
194
|
-
export
|
|
191
|
+
export type UseUserListOptions<User extends UserStruct> = {
|
|
195
192
|
sortComparator?: (a: User, b: User) => number;
|
|
196
193
|
queryCreator?: () => CustomQueryInterface<User>;
|
|
197
194
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sendbird/uikit-chat-hooks",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0",
|
|
4
4
|
"description": "React hooks that built with SendbirdChat SDK",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
@@ -38,13 +38,13 @@
|
|
|
38
38
|
"access": "public"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@sendbird/uikit-utils": "2.
|
|
41
|
+
"@sendbird/uikit-utils": "2.3.0"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@types/react": "*",
|
|
45
45
|
"react": "^16.13.1",
|
|
46
46
|
"react-native-builder-bob": "^0.18.0",
|
|
47
|
-
"typescript": "
|
|
47
|
+
"typescript": "4.9.4"
|
|
48
48
|
},
|
|
49
49
|
"peerDependencies": {
|
|
50
50
|
"@sendbird/chat": "^4.0.13",
|
|
@@ -69,5 +69,5 @@
|
|
|
69
69
|
"readmeFile": "./README.md",
|
|
70
70
|
"displayName": "@sendbird/uikit-chat-hooks"
|
|
71
71
|
},
|
|
72
|
-
"gitHead": "
|
|
72
|
+
"gitHead": "a9bf41fd7919436db99f6cc3bacd0f8d791b7729"
|
|
73
73
|
}
|
|
@@ -57,10 +57,6 @@ const defaultReducer = ({ ...draft }: State, action: Action) => {
|
|
|
57
57
|
.forEach((m) => delete draft[key][m.reqId]);
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
if (action.type === 'update_messages') {
|
|
61
|
-
draft['nextMessageMap'] = {};
|
|
62
|
-
}
|
|
63
|
-
|
|
64
60
|
return draft;
|
|
65
61
|
}
|
|
66
62
|
case 'delete_messages':
|
|
@@ -48,11 +48,18 @@ export const useGroupChannelMessagesWithCollection: UseGroupChannelMessages = (s
|
|
|
48
48
|
updateRefreshing,
|
|
49
49
|
} = useGroupChannelMessagesReducer(userId, options?.sortComparator);
|
|
50
50
|
|
|
51
|
-
const
|
|
51
|
+
const channelMarkAsRead = async (source?: MessageEventSource) => {
|
|
52
52
|
try {
|
|
53
|
-
|
|
53
|
+
switch (source) {
|
|
54
|
+
case MessageEventSource.EVENT_MESSAGE_RECEIVED:
|
|
55
|
+
case MessageEventSource.EVENT_MESSAGE_SENT_SUCCESS:
|
|
56
|
+
case MessageEventSource.SYNC_MESSAGE_FILL:
|
|
57
|
+
case undefined:
|
|
58
|
+
await confirmAndMarkAsRead([channel]);
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
54
61
|
} catch (e) {
|
|
55
|
-
Logger.warn(`[${HOOK_NAME}/
|
|
62
|
+
Logger.warn(`[${HOOK_NAME}/channelMarkAsRead]`, e);
|
|
56
63
|
}
|
|
57
64
|
};
|
|
58
65
|
|
|
@@ -63,20 +70,25 @@ export const useGroupChannelMessagesWithCollection: UseGroupChannelMessages = (s
|
|
|
63
70
|
if (uid) {
|
|
64
71
|
collectionRef.current = createMessageCollection(channel, options?.collectionCreator);
|
|
65
72
|
updateNextMessages([], true, sdk.currentUser.userId);
|
|
66
|
-
|
|
73
|
+
channelMarkAsRead();
|
|
67
74
|
|
|
68
75
|
collectionRef.current?.setMessageCollectionHandler({
|
|
69
76
|
onMessagesAdded: (_, __, messages) => {
|
|
70
|
-
|
|
71
|
-
case MessageEventSource.EVENT_MESSAGE_RECEIVED:
|
|
72
|
-
case MessageEventSource.EVENT_MESSAGE_SENT_SUCCESS:
|
|
73
|
-
case MessageEventSource.SYNC_MESSAGE_FILL:
|
|
74
|
-
channelMarkAs();
|
|
75
|
-
break;
|
|
76
|
-
}
|
|
77
|
+
channelMarkAsRead(_.source);
|
|
77
78
|
updateNextMessages(messages, false, sdk.currentUser.userId);
|
|
78
79
|
},
|
|
79
80
|
onMessagesUpdated: (_, __, messages) => {
|
|
81
|
+
channelMarkAsRead(_.source);
|
|
82
|
+
|
|
83
|
+
// NOTE: admin message is not added via onMessagesAdded handler, not checked yet is this a bug.
|
|
84
|
+
if (_.source === MessageEventSource.EVENT_MESSAGE_RECEIVED) {
|
|
85
|
+
const nextMessageIds = nextMessages.map((it) => it.messageId);
|
|
86
|
+
const nonAddedMessagesFromReceivedEvent = messages.filter(
|
|
87
|
+
(it) => nextMessageIds.indexOf(it.messageId) === -1,
|
|
88
|
+
);
|
|
89
|
+
updateNextMessages(nonAddedMessagesFromReceivedEvent, false, sdk.currentUser.userId);
|
|
90
|
+
}
|
|
91
|
+
|
|
80
92
|
// NOTE: v4 MESSAGE_RECEIVED is called twice from onMessagesAdded and onMessagesUpdated when receiving new message.
|
|
81
93
|
// This is not intended behavior but not bugs.
|
|
82
94
|
if (_.source !== MessageEventSource.EVENT_MESSAGE_RECEIVED) {
|
|
@@ -48,11 +48,11 @@ export const useGroupChannelMessagesWithQuery: UseGroupChannelMessages = (sdk, c
|
|
|
48
48
|
updateRefreshing,
|
|
49
49
|
} = useGroupChannelMessagesReducer(userId, options?.sortComparator);
|
|
50
50
|
|
|
51
|
-
const
|
|
51
|
+
const channelMarkAsRead = async () => {
|
|
52
52
|
try {
|
|
53
53
|
await confirmAndMarkAsRead([channel]);
|
|
54
54
|
} catch (e) {
|
|
55
|
-
Logger.warn(`[${HOOK_NAME}/
|
|
55
|
+
Logger.warn(`[${HOOK_NAME}/channelMarkAsRead]`, e);
|
|
56
56
|
}
|
|
57
57
|
};
|
|
58
58
|
|
|
@@ -60,7 +60,7 @@ export const useGroupChannelMessagesWithQuery: UseGroupChannelMessages = (sdk, c
|
|
|
60
60
|
async (uid?: string) => {
|
|
61
61
|
if (uid) {
|
|
62
62
|
queryRef.current = createMessageQuery(channel, options?.queryCreator);
|
|
63
|
-
|
|
63
|
+
channelMarkAsRead().catch();
|
|
64
64
|
if (queryRef.current?.hasNext) {
|
|
65
65
|
const list = await queryRef.current?.load();
|
|
66
66
|
updateMessages(list, true, sdk.currentUser.userId);
|
|
@@ -81,7 +81,7 @@ export const useGroupChannelMessagesWithQuery: UseGroupChannelMessages = (sdk, c
|
|
|
81
81
|
// Messages
|
|
82
82
|
onMessageReceived(eventChannel, message) {
|
|
83
83
|
if (isDifferentChannel(channel, eventChannel)) return;
|
|
84
|
-
|
|
84
|
+
channelMarkAsRead();
|
|
85
85
|
updateNextMessages([message], false, sdk.currentUser.userId);
|
|
86
86
|
},
|
|
87
87
|
onMessageUpdated(eventChannel, message) {
|
|
@@ -219,8 +219,6 @@ export const useGroupChannelMessagesWithQuery: UseGroupChannelMessages = (sdk, c
|
|
|
219
219
|
async (failedMessage) => {
|
|
220
220
|
const message = await (() => {
|
|
221
221
|
if (failedMessage.isUserMessage()) return channel.resendUserMessage(failedMessage);
|
|
222
|
-
// FIXME: v4 bugs
|
|
223
|
-
// @ts-ignore
|
|
224
222
|
if (failedMessage.isFileMessage()) return channel.resendFileMessage(failedMessage);
|
|
225
223
|
return null;
|
|
226
224
|
})();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useState } from 'react';
|
|
2
2
|
|
|
3
3
|
import type { SendbirdChatSDK } from '@sendbird/uikit-utils';
|
|
4
|
-
import {
|
|
4
|
+
import { truncatedCount, useAsyncEffect } from '@sendbird/uikit-utils';
|
|
5
5
|
import { useUniqId } from '@sendbird/uikit-utils';
|
|
6
6
|
|
|
7
7
|
import { useUserEventHandler } from '../handler/useUserEventHandler';
|
|
@@ -24,5 +24,5 @@ export const useTotalUnreadChannelCount = (sdk: SendbirdChatSDK, params?: Params
|
|
|
24
24
|
},
|
|
25
25
|
});
|
|
26
26
|
|
|
27
|
-
return
|
|
27
|
+
return truncatedCount(unreadChannelCount, params?.maxCount);
|
|
28
28
|
};
|
|
@@ -2,7 +2,7 @@ import { useState } from 'react';
|
|
|
2
2
|
|
|
3
3
|
import { SuperChannelFilter, TotalUnreadMessageCountParams } from '@sendbird/chat/groupChannel';
|
|
4
4
|
import type { SendbirdChatSDK } from '@sendbird/uikit-utils';
|
|
5
|
-
import {
|
|
5
|
+
import { truncatedCount, useAsyncEffect, useUniqId } from '@sendbird/uikit-utils';
|
|
6
6
|
|
|
7
7
|
import { useUserEventHandler } from '../handler/useUserEventHandler';
|
|
8
8
|
|
|
@@ -28,5 +28,5 @@ export const useTotalUnreadMessageCount = (sdk: SendbirdChatSDK, options?: Optio
|
|
|
28
28
|
onTotalUnreadMessageCountUpdated: (totalCount: number) => setUnreadMessageCount(totalCount),
|
|
29
29
|
});
|
|
30
30
|
|
|
31
|
-
return
|
|
31
|
+
return truncatedCount(unreadMessageCount, options?.maxCount);
|
|
32
32
|
};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { useMemo, useRef, useState } from 'react';
|
|
2
2
|
|
|
3
|
-
import type { Optional, SendbirdChatSDK, SendbirdUser } from '@sendbird/uikit-utils';
|
|
3
|
+
import type { Optional, SendbirdChatSDK, SendbirdUser, UserStruct } from '@sendbird/uikit-utils';
|
|
4
4
|
import { Logger, SBErrorCode, SBErrorMessage, useAsyncEffect, useFreshCallback } from '@sendbird/uikit-utils';
|
|
5
5
|
|
|
6
|
-
import type { CustomQueryInterface, UseUserListOptions, UseUserListReturn
|
|
6
|
+
import type { CustomQueryInterface, UseUserListOptions, UseUserListReturn } from '../types';
|
|
7
7
|
|
|
8
8
|
const createUserQuery = <User extends UserStruct>(
|
|
9
9
|
sdk: SendbirdChatSDK,
|
|
@@ -83,10 +83,10 @@ export const useUserList = <
|
|
|
83
83
|
const init = useFreshCallback(async () => {
|
|
84
84
|
query.current = createUserQuery<QueriedUser>(sdk, options?.queryCreator);
|
|
85
85
|
if (query.current?.hasNext) {
|
|
86
|
-
const users = await query.current?.next().catch((
|
|
87
|
-
Logger.error(
|
|
88
|
-
if (
|
|
89
|
-
throw
|
|
86
|
+
const users = await query.current?.next().catch((e) => {
|
|
87
|
+
Logger.error(e);
|
|
88
|
+
if (e.code === SBErrorCode.NON_AUTHORIZED) Logger.warn(SBErrorMessage.ACL);
|
|
89
|
+
throw e;
|
|
90
90
|
});
|
|
91
91
|
updateUsers(users, true);
|
|
92
92
|
}
|
|
@@ -118,10 +118,10 @@ export const useUserList = <
|
|
|
118
118
|
|
|
119
119
|
const next = useFreshCallback(async () => {
|
|
120
120
|
if (query.current && query.current?.hasNext) {
|
|
121
|
-
const nextUsers = await query.current.next().catch((
|
|
122
|
-
Logger.error(
|
|
123
|
-
if (
|
|
124
|
-
throw
|
|
121
|
+
const nextUsers = await query.current.next().catch((e) => {
|
|
122
|
+
Logger.error(e);
|
|
123
|
+
if (e.code === SBErrorCode.NON_AUTHORIZED) Logger.warn(SBErrorMessage.ACL);
|
|
124
|
+
throw e;
|
|
125
125
|
});
|
|
126
126
|
updateUsers(nextUsers, false);
|
|
127
127
|
}
|
package/src/index.ts
CHANGED
package/src/types.ts
CHANGED
|
@@ -11,6 +11,7 @@ import type {
|
|
|
11
11
|
SendbirdPreviousMessageListQuery,
|
|
12
12
|
SendbirdUserMessage,
|
|
13
13
|
SendbirdUserMessageCreateParams,
|
|
14
|
+
UserStruct,
|
|
14
15
|
} from '@sendbird/uikit-utils';
|
|
15
16
|
|
|
16
17
|
export interface CustomQueryInterface<Data> {
|
|
@@ -189,10 +190,6 @@ export type UseGroupChannelMessagesOptions = {
|
|
|
189
190
|
onChannelDeleted?: () => void;
|
|
190
191
|
};
|
|
191
192
|
|
|
192
|
-
export interface UserStruct {
|
|
193
|
-
userId: string;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
193
|
/**
|
|
197
194
|
* @interface UseUserListReturn
|
|
198
195
|
* @description interface for user list hook return value
|