@sendbird/uikit-chat-hooks 2.1.0 → 2.2.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.
Files changed (40) hide show
  1. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +21 -13
  2. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
  3. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +5 -7
  4. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
  5. package/lib/commonjs/common/useTotalUnreadChannelCount.js +1 -1
  6. package/lib/commonjs/common/useTotalUnreadChannelCount.js.map +1 -1
  7. package/lib/commonjs/common/useTotalUnreadMessageCount.js +1 -1
  8. package/lib/commonjs/common/useTotalUnreadMessageCount.js.map +1 -1
  9. package/lib/commonjs/common/useUserList.js +8 -8
  10. package/lib/commonjs/common/useUserList.js.map +1 -1
  11. package/lib/commonjs/index.js.map +1 -1
  12. package/lib/commonjs/types.js.map +1 -1
  13. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +21 -13
  14. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
  15. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +5 -7
  16. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
  17. package/lib/module/common/useTotalUnreadChannelCount.js +2 -2
  18. package/lib/module/common/useTotalUnreadChannelCount.js.map +1 -1
  19. package/lib/module/common/useTotalUnreadMessageCount.js +2 -2
  20. package/lib/module/common/useTotalUnreadMessageCount.js.map +1 -1
  21. package/lib/module/common/useUserList.js +8 -8
  22. package/lib/module/common/useUserList.js.map +1 -1
  23. package/lib/module/index.js.map +1 -1
  24. package/lib/module/types.js.map +1 -1
  25. package/lib/typescript/src/channel/useGroupChannelList/reducer.d.ts +1 -1
  26. package/lib/typescript/src/common/useMessageOutgoingStatus.d.ts +1 -1
  27. package/lib/typescript/src/common/useTotalUnreadChannelCount.d.ts +1 -1
  28. package/lib/typescript/src/common/useTotalUnreadMessageCount.d.ts +1 -1
  29. package/lib/typescript/src/common/useUserList.d.ts +2 -2
  30. package/lib/typescript/src/index.d.ts +1 -1
  31. package/lib/typescript/src/model/CustomQuery.d.ts +1 -1
  32. package/lib/typescript/src/types.d.ts +4 -7
  33. package/package.json +4 -4
  34. package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.ts +23 -11
  35. package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.ts +4 -6
  36. package/src/common/useTotalUnreadChannelCount.ts +2 -2
  37. package/src/common/useTotalUnreadMessageCount.ts +2 -2
  38. package/src/common/useUserList.ts +10 -10
  39. package/src/index.ts +0 -1
  40. package/src/types.ts +1 -4
@@ -48,11 +48,18 @@ export const useGroupChannelMessagesWithCollection: UseGroupChannelMessages = (s
48
48
  updateRefreshing,
49
49
  } = useGroupChannelMessagesReducer(userId, options?.sortComparator);
50
50
 
51
- const channelMarkAs = async () => {
51
+ const channelMarkAsRead = async (source?: MessageEventSource) => {
52
52
  try {
53
- await confirmAndMarkAsRead([channel]);
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}/channelMarkAs/Read]`, e);
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
- channelMarkAs();
73
+ channelMarkAsRead();
67
74
 
68
75
  collectionRef.current?.setMessageCollectionHandler({
69
76
  onMessagesAdded: (_, __, messages) => {
70
- switch (_.source) {
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 channelMarkAs = async () => {
51
+ const channelMarkAsRead = async () => {
52
52
  try {
53
53
  await confirmAndMarkAsRead([channel]);
54
54
  } catch (e) {
55
- Logger.warn(`[${HOOK_NAME}/channelMarkAs/Read]`, e);
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
- channelMarkAs().catch();
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
- channelMarkAs();
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 { truncatedBadgeCount, useAsyncEffect } from '@sendbird/uikit-utils';
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 truncatedBadgeCount(unreadChannelCount, params?.maxCount);
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 { truncatedBadgeCount, useAsyncEffect, useUniqId } from '@sendbird/uikit-utils';
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 truncatedBadgeCount(unreadMessageCount, options?.maxCount);
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, UserStruct } from '../types';
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((err) => {
87
- Logger.error(error);
88
- if (err.code === SBErrorCode.NON_AUTHORIZED) Logger.warn(SBErrorMessage.ACL);
89
- throw error;
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((err) => {
122
- Logger.error(error);
123
- if (err.code === SBErrorCode.NON_AUTHORIZED) Logger.warn(SBErrorMessage.ACL);
124
- throw error;
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
@@ -21,7 +21,6 @@ export type {
21
21
  UseGroupChannelListOptions,
22
22
  UseGroupChannelMessages,
23
23
  UseGroupChannelMessagesOptions,
24
- UserStruct,
25
24
  UseUserListOptions,
26
25
  UseUserListReturn,
27
26
  CustomQueryInterface,
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