@sendbird/uikit-chat-hooks 2.4.0 → 2.4.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/README.md +2 -2
- 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/reducer.js +18 -28
- package/lib/commonjs/channel/useGroupChannelMessages/reducer.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +8 -37
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +21 -49
- 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 -18
- 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/reducer.js +18 -28
- package/lib/commonjs/channel/useOpenChannelMessages/reducer.js.map +1 -1
- package/lib/commonjs/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js +1 -30
- 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 +3 -18
- 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/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/reducer.js +18 -25
- package/lib/module/channel/useGroupChannelMessages/reducer.js.map +1 -1
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +9 -30
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +23 -46
- 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 -13
- 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/reducer.js +18 -25
- package/lib/module/channel/useOpenChannelMessages/reducer.js.map +1 -1
- package/lib/module/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js +1 -25
- 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 +3 -13
- 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/typescript/src/channel/useGroupChannelList/reducer.d.ts +1 -1
- package/lib/typescript/src/channel/useGroupChannelMessages/reducer.d.ts +2 -2
- package/lib/typescript/src/channel/useOpenChannelMessages/reducer.d.ts +2 -2
- 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/package.json +15 -9
- 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/reducer.ts +11 -10
- package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.ts +69 -72
- package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.ts +32 -42
- package/src/channel/useOpenChannelList/useOpenChannelListWithQuery.ts +1 -1
- package/src/channel/useOpenChannelMessages/reducer.ts +11 -10
- package/src/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.ts +1 -1
- package/src/common/useUserList.ts +2 -2
- package/src/handler/useChannelHandler.ts +11 -24
- package/src/handler/useConnectionHandler.ts +11 -5
- package/src/index.ts +0 -1
- package/lib/commonjs/common/useTotalUnreadChannelCount.js +0 -29
- package/lib/commonjs/common/useTotalUnreadChannelCount.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/common/useTotalUnreadChannelCount.d.ts +0 -6
- package/src/common/useTotalUnreadChannelCount.ts +0 -26
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useRef } from 'react';
|
|
2
2
|
|
|
3
3
|
import type {
|
|
4
4
|
SendbirdBaseChannel,
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
isDifferentChannel,
|
|
12
12
|
useAsyncEffect,
|
|
13
13
|
useForceUpdate,
|
|
14
|
+
useFreshCallback,
|
|
14
15
|
useUniqHandlerId,
|
|
15
16
|
} from '@sendbird/uikit-utils';
|
|
16
17
|
|
|
@@ -57,20 +58,17 @@ export const useGroupChannelMessagesWithQuery: UseGroupChannelMessages = (sdk, c
|
|
|
57
58
|
}
|
|
58
59
|
};
|
|
59
60
|
|
|
60
|
-
const init =
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
updateMessages(list, true, sdk.currentUser.userId);
|
|
68
|
-
}
|
|
69
|
-
updateNextMessages([], true, sdk.currentUser.userId);
|
|
61
|
+
const init = useFreshCallback(async (uid?: string) => {
|
|
62
|
+
if (uid) {
|
|
63
|
+
queryRef.current = createMessageQuery(channel, options?.queryCreator);
|
|
64
|
+
channelMarkAsRead();
|
|
65
|
+
if (queryRef.current?.hasNext) {
|
|
66
|
+
const list = await queryRef.current?.load();
|
|
67
|
+
updateMessages(list, true, sdk.currentUser.userId);
|
|
70
68
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
);
|
|
69
|
+
updateNextMessages([], true, sdk.currentUser.userId);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
74
72
|
|
|
75
73
|
const channelUpdater = (channel: SendbirdBaseChannel) => {
|
|
76
74
|
if (channel.isGroupChannel() && !isDifferentChannel(channel, channel)) {
|
|
@@ -130,29 +128,29 @@ export const useGroupChannelMessagesWithQuery: UseGroupChannelMessages = (sdk, c
|
|
|
130
128
|
updateLoading(true);
|
|
131
129
|
await init(userId);
|
|
132
130
|
updateLoading(false);
|
|
133
|
-
}, [
|
|
131
|
+
}, [channel.url, userId]);
|
|
134
132
|
|
|
135
|
-
const refresh: ReturnType<UseGroupChannelMessages>['refresh'] =
|
|
133
|
+
const refresh: ReturnType<UseGroupChannelMessages>['refresh'] = useFreshCallback(async () => {
|
|
136
134
|
updateRefreshing(true);
|
|
137
135
|
await init(userId);
|
|
138
136
|
updateRefreshing(false);
|
|
139
|
-
}
|
|
137
|
+
});
|
|
140
138
|
|
|
141
|
-
const prev: ReturnType<UseGroupChannelMessages>['prev'] =
|
|
139
|
+
const prev: ReturnType<UseGroupChannelMessages>['prev'] = useFreshCallback(async () => {
|
|
142
140
|
if (queryRef.current && queryRef.current?.hasNext) {
|
|
143
141
|
const list = await queryRef.current?.load();
|
|
144
142
|
updateMessages(list, false, sdk.currentUser.userId);
|
|
145
143
|
}
|
|
146
|
-
}
|
|
144
|
+
});
|
|
147
145
|
|
|
148
|
-
const next: ReturnType<UseGroupChannelMessages>['next'] =
|
|
146
|
+
const next: ReturnType<UseGroupChannelMessages>['next'] = useFreshCallback(async () => {
|
|
149
147
|
if (nextMessages.length > 0) {
|
|
150
148
|
updateMessages(nextMessages, false, sdk.currentUser.userId);
|
|
151
149
|
updateNextMessages([], true, sdk.currentUser.userId);
|
|
152
150
|
}
|
|
153
|
-
}
|
|
151
|
+
});
|
|
154
152
|
|
|
155
|
-
const sendUserMessage: ReturnType<UseGroupChannelMessages>['sendUserMessage'] =
|
|
153
|
+
const sendUserMessage: ReturnType<UseGroupChannelMessages>['sendUserMessage'] = useFreshCallback(
|
|
156
154
|
(params, onPending) => {
|
|
157
155
|
return new Promise((resolve, reject) => {
|
|
158
156
|
channel
|
|
@@ -175,9 +173,8 @@ export const useGroupChannelMessagesWithQuery: UseGroupChannelMessages = (sdk, c
|
|
|
175
173
|
});
|
|
176
174
|
});
|
|
177
175
|
},
|
|
178
|
-
[channel],
|
|
179
176
|
);
|
|
180
|
-
const sendFileMessage: ReturnType<UseGroupChannelMessages>['sendFileMessage'] =
|
|
177
|
+
const sendFileMessage: ReturnType<UseGroupChannelMessages>['sendFileMessage'] = useFreshCallback(
|
|
181
178
|
(params, onPending) => {
|
|
182
179
|
return new Promise((resolve, reject) => {
|
|
183
180
|
channel
|
|
@@ -200,25 +197,22 @@ export const useGroupChannelMessagesWithQuery: UseGroupChannelMessages = (sdk, c
|
|
|
200
197
|
});
|
|
201
198
|
});
|
|
202
199
|
},
|
|
203
|
-
[channel],
|
|
204
200
|
);
|
|
205
|
-
const updateUserMessage: ReturnType<UseGroupChannelMessages>['updateUserMessage'] =
|
|
201
|
+
const updateUserMessage: ReturnType<UseGroupChannelMessages>['updateUserMessage'] = useFreshCallback(
|
|
206
202
|
async (messageId, params) => {
|
|
207
203
|
const updatedMessage = await channel.updateUserMessage(messageId, params);
|
|
208
204
|
updateMessages([updatedMessage], false, sdk.currentUser.userId);
|
|
209
205
|
return updatedMessage;
|
|
210
206
|
},
|
|
211
|
-
[channel],
|
|
212
207
|
);
|
|
213
|
-
const updateFileMessage: ReturnType<UseGroupChannelMessages>['updateFileMessage'] =
|
|
208
|
+
const updateFileMessage: ReturnType<UseGroupChannelMessages>['updateFileMessage'] = useFreshCallback(
|
|
214
209
|
async (messageId, params) => {
|
|
215
210
|
const updatedMessage = await channel.updateFileMessage(messageId, params);
|
|
216
211
|
updateMessages([updatedMessage], false, sdk.currentUser.userId);
|
|
217
212
|
return updatedMessage;
|
|
218
213
|
},
|
|
219
|
-
[channel],
|
|
220
214
|
);
|
|
221
|
-
const resendMessage: ReturnType<UseGroupChannelMessages>['resendMessage'] =
|
|
215
|
+
const resendMessage: ReturnType<UseGroupChannelMessages>['resendMessage'] = useFreshCallback(
|
|
222
216
|
async (failedMessage) => {
|
|
223
217
|
const message = await (() => {
|
|
224
218
|
if (failedMessage.isUserMessage()) return channel.resendUserMessage(failedMessage);
|
|
@@ -228,19 +222,15 @@ export const useGroupChannelMessagesWithQuery: UseGroupChannelMessages = (sdk, c
|
|
|
228
222
|
|
|
229
223
|
if (message) updateNextMessages([message], false, sdk.currentUser.userId);
|
|
230
224
|
},
|
|
231
|
-
[channel],
|
|
232
|
-
);
|
|
233
|
-
const deleteMessage: ReturnType<UseGroupChannelMessages>['deleteMessage'] = useCallback(
|
|
234
|
-
async (message) => {
|
|
235
|
-
if (message.sendingStatus === 'succeeded') {
|
|
236
|
-
if (message.isUserMessage()) await channel.deleteMessage(message);
|
|
237
|
-
if (message.isFileMessage()) await channel.deleteMessage(message);
|
|
238
|
-
} else {
|
|
239
|
-
deleteMessages([message.messageId], [message.reqId]);
|
|
240
|
-
}
|
|
241
|
-
},
|
|
242
|
-
[channel],
|
|
243
225
|
);
|
|
226
|
+
const deleteMessage: ReturnType<UseGroupChannelMessages>['deleteMessage'] = useFreshCallback(async (message) => {
|
|
227
|
+
if (message.sendingStatus === 'succeeded') {
|
|
228
|
+
if (message.isUserMessage()) await channel.deleteMessage(message);
|
|
229
|
+
if (message.isFileMessage()) await channel.deleteMessage(message);
|
|
230
|
+
} else {
|
|
231
|
+
deleteMessages([message.messageId], [message.reqId]);
|
|
232
|
+
}
|
|
233
|
+
});
|
|
244
234
|
|
|
245
235
|
return {
|
|
246
236
|
loading,
|
|
@@ -12,7 +12,7 @@ type Action =
|
|
|
12
12
|
}
|
|
13
13
|
| {
|
|
14
14
|
type: 'update_messages' | 'update_next_messages';
|
|
15
|
-
value: { messages: SendbirdBaseMessage[];
|
|
15
|
+
value: { messages: SendbirdBaseMessage[]; clearBeforeAction: boolean; currentUserId?: string };
|
|
16
16
|
}
|
|
17
17
|
| {
|
|
18
18
|
type: 'delete_messages' | 'delete_next_messages';
|
|
@@ -28,18 +28,19 @@ type State = {
|
|
|
28
28
|
|
|
29
29
|
const defaultReducer = ({ ...draft }: State, action: Action) => {
|
|
30
30
|
switch (action.type) {
|
|
31
|
-
case 'update_refreshing':
|
|
31
|
+
case 'update_refreshing': {
|
|
32
|
+
draft['refreshing'] = action.value.status;
|
|
33
|
+
return draft;
|
|
34
|
+
}
|
|
32
35
|
case 'update_loading': {
|
|
33
|
-
|
|
34
|
-
draft[key] = action.value.status;
|
|
35
|
-
|
|
36
|
+
draft['loading'] = action.value.status;
|
|
36
37
|
return draft;
|
|
37
38
|
}
|
|
38
39
|
case 'update_messages':
|
|
39
40
|
case 'update_next_messages': {
|
|
40
41
|
const key = action.type === 'update_messages' ? 'messageMap' : 'nextMessageMap';
|
|
41
42
|
const receivedMessagesAsMap = arrayToMapWithGetter(action.value.messages, getMessageUniqId);
|
|
42
|
-
if (action.value.
|
|
43
|
+
if (action.value.clearBeforeAction) {
|
|
43
44
|
draft[key] = receivedMessagesAsMap;
|
|
44
45
|
} else {
|
|
45
46
|
draft[key] = { ...draft[key], ...receivedMessagesAsMap };
|
|
@@ -82,14 +83,14 @@ export const useOpenChannelMessagesReducer = (
|
|
|
82
83
|
nextMessageMap: {},
|
|
83
84
|
});
|
|
84
85
|
|
|
85
|
-
const updateMessages = (messages: SendbirdBaseMessage[],
|
|
86
|
-
dispatch({ type: 'update_messages', value: { messages,
|
|
86
|
+
const updateMessages = (messages: SendbirdBaseMessage[], clearBeforeAction: boolean, currentUserId?: string) => {
|
|
87
|
+
dispatch({ type: 'update_messages', value: { messages, clearBeforeAction, currentUserId } });
|
|
87
88
|
};
|
|
88
89
|
const deleteMessages = (messageIds: number[], reqIds: string[]) => {
|
|
89
90
|
dispatch({ type: 'delete_messages', value: { messageIds, reqIds } });
|
|
90
91
|
};
|
|
91
|
-
const updateNextMessages = (messages: SendbirdBaseMessage[],
|
|
92
|
-
dispatch({ type: 'update_next_messages', value: { messages,
|
|
92
|
+
const updateNextMessages = (messages: SendbirdBaseMessage[], clearBeforeAction: boolean, currentUserId?: string) => {
|
|
93
|
+
dispatch({ type: 'update_next_messages', value: { messages, clearBeforeAction, currentUserId } });
|
|
93
94
|
};
|
|
94
95
|
const deleteNextMessages = (messageIds: number[], reqIds: string[]) => {
|
|
95
96
|
dispatch({ type: 'delete_next_messages', value: { messageIds, reqIds } });
|
|
@@ -124,7 +124,7 @@ export const useOpenChannelMessagesWithQuery: UseOpenChannelMessages = (sdk, cha
|
|
|
124
124
|
return () => {
|
|
125
125
|
channel.exit().catch(NOOP);
|
|
126
126
|
};
|
|
127
|
-
}, [
|
|
127
|
+
}, [channel.url, userId]);
|
|
128
128
|
|
|
129
129
|
const refresh: ReturnType<UseOpenChannelMessages>['refresh'] = useFreshCallback(async () => {
|
|
130
130
|
updateRefreshing(true);
|
|
@@ -36,7 +36,7 @@ const createUserQuery = <User extends UserStruct>(
|
|
|
36
36
|
* ```
|
|
37
37
|
* */
|
|
38
38
|
export const useUserList = <
|
|
39
|
-
Options extends UseUserListOptions<
|
|
39
|
+
Options extends UseUserListOptions<UserStruct>,
|
|
40
40
|
QueriedUser extends UserStruct = Options['queryCreator'] extends Optional<
|
|
41
41
|
() => CustomQueryInterface<infer User extends UserStruct>
|
|
42
42
|
>
|
|
@@ -44,7 +44,7 @@ export const useUserList = <
|
|
|
44
44
|
: SendbirdUser,
|
|
45
45
|
>(
|
|
46
46
|
sdk: SendbirdChatSDK,
|
|
47
|
-
options?:
|
|
47
|
+
options?: UseUserListOptions<QueriedUser>,
|
|
48
48
|
): UseUserListReturn<QueriedUser> => {
|
|
49
49
|
const query = useRef<CustomQueryInterface<QueriedUser>>();
|
|
50
50
|
|
|
@@ -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
|
|
|
@@ -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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { useState } from 'react';
|
|
2
|
-
import { truncatedCount, useAsyncEffect, useUniqHandlerId } from '@sendbird/uikit-utils';
|
|
3
|
-
import { useUserEventHandler } from '../handler/useUserEventHandler';
|
|
4
|
-
export const useTotalUnreadChannelCount = (sdk, params) => {
|
|
5
|
-
const handlerId = useUniqHandlerId('useTotalUnreadChannelCount');
|
|
6
|
-
const [unreadChannelCount, setUnreadChannelCount] = useState(0);
|
|
7
|
-
useAsyncEffect(async () => {
|
|
8
|
-
setUnreadChannelCount(await sdk.groupChannel.getTotalUnreadChannelCount());
|
|
9
|
-
}, [sdk]);
|
|
10
|
-
useUserEventHandler(sdk, handlerId, {
|
|
11
|
-
onTotalUnreadMessageCountUpdated: async () => {
|
|
12
|
-
setUnreadChannelCount(await sdk.groupChannel.getTotalUnreadChannelCount());
|
|
13
|
-
}
|
|
14
|
-
});
|
|
15
|
-
return truncatedCount(unreadChannelCount, params === null || params === void 0 ? void 0 : params.maxCount);
|
|
16
|
-
};
|
|
17
|
-
//# sourceMappingURL=useTotalUnreadChannelCount.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["useState","truncatedCount","useAsyncEffect","useUniqHandlerId","useUserEventHandler","useTotalUnreadChannelCount","sdk","params","handlerId","unreadChannelCount","setUnreadChannelCount","groupChannel","getTotalUnreadChannelCount","onTotalUnreadMessageCountUpdated","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,SAASA,QAAT,QAAyB,OAAzB;AAGA,SAASC,cAAT,EAAyBC,cAAzB,EAAyCC,gBAAzC,QAAiE,uBAAjE;AAEA,SAASC,mBAAT,QAAoC,gCAApC;AAKA,OAAO,MAAMC,0BAA0B,GAAG,CAACC,GAAD,EAAuBC,MAAvB,KAA2C;EACnF,MAAMC,SAAS,GAAGL,gBAAgB,CAAC,4BAAD,CAAlC;EACA,MAAM,CAACM,kBAAD,EAAqBC,qBAArB,IAA8CV,QAAQ,CAAC,CAAD,CAA5D;EAEAE,cAAc,CAAC,YAAY;IACzBQ,qBAAqB,CAAC,MAAMJ,GAAG,CAACK,YAAJ,CAAiBC,0BAAjB,EAAP,CAArB;EACD,CAFa,EAEX,CAACN,GAAD,CAFW,CAAd;EAIAF,mBAAmB,CAACE,GAAD,EAAME,SAAN,EAAiB;IAClCK,gCAAgC,EAAE,YAAY;MAC5CH,qBAAqB,CAAC,MAAMJ,GAAG,CAACK,YAAJ,CAAiBC,0BAAjB,EAAP,CAArB;IACD;EAHiC,CAAjB,CAAnB;EAMA,OAAOX,cAAc,CAACQ,kBAAD,EAAqBF,MAArB,aAAqBA,MAArB,uBAAqBA,MAAM,CAAEO,QAA7B,CAArB;AACD,CAfM"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { useState } from 'react';
|
|
2
|
-
|
|
3
|
-
import type { SendbirdChatSDK } from '@sendbird/uikit-utils';
|
|
4
|
-
import { truncatedCount, useAsyncEffect, useUniqHandlerId } from '@sendbird/uikit-utils';
|
|
5
|
-
|
|
6
|
-
import { useUserEventHandler } from '../handler/useUserEventHandler';
|
|
7
|
-
|
|
8
|
-
type Params = {
|
|
9
|
-
maxCount?: number;
|
|
10
|
-
};
|
|
11
|
-
export const useTotalUnreadChannelCount = (sdk: SendbirdChatSDK, params?: Params) => {
|
|
12
|
-
const handlerId = useUniqHandlerId('useTotalUnreadChannelCount');
|
|
13
|
-
const [unreadChannelCount, setUnreadChannelCount] = useState(0);
|
|
14
|
-
|
|
15
|
-
useAsyncEffect(async () => {
|
|
16
|
-
setUnreadChannelCount(await sdk.groupChannel.getTotalUnreadChannelCount());
|
|
17
|
-
}, [sdk]);
|
|
18
|
-
|
|
19
|
-
useUserEventHandler(sdk, handlerId, {
|
|
20
|
-
onTotalUnreadMessageCountUpdated: async () => {
|
|
21
|
-
setUnreadChannelCount(await sdk.groupChannel.getTotalUnreadChannelCount());
|
|
22
|
-
},
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
return truncatedCount(unreadChannelCount, params?.maxCount);
|
|
26
|
-
};
|