@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.
Files changed (134) hide show
  1. package/README.md +2 -2
  2. package/lib/commonjs/channel/useChannelMessagesReducer.js +153 -0
  3. package/lib/commonjs/channel/useChannelMessagesReducer.js.map +1 -0
  4. package/lib/commonjs/channel/useGroupChannel.js +0 -4
  5. package/lib/commonjs/channel/useGroupChannel.js.map +1 -1
  6. package/lib/commonjs/channel/useGroupChannelList/index.js +0 -5
  7. package/lib/commonjs/channel/useGroupChannelList/index.js.map +1 -1
  8. package/lib/commonjs/channel/useGroupChannelList/reducer.js +12 -29
  9. package/lib/commonjs/channel/useGroupChannelList/reducer.js.map +1 -1
  10. package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithCollection.js +1 -22
  11. package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithCollection.js.map +1 -1
  12. package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithQuery.js +1 -18
  13. package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithQuery.js.map +1 -1
  14. package/lib/commonjs/channel/useGroupChannelMessages/index.js +0 -5
  15. package/lib/commonjs/channel/useGroupChannelMessages/index.js.map +1 -1
  16. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +172 -131
  17. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
  18. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +76 -73
  19. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
  20. package/lib/commonjs/channel/useOpenChannel.js +0 -4
  21. package/lib/commonjs/channel/useOpenChannel.js.map +1 -1
  22. package/lib/commonjs/channel/useOpenChannelList/index.js +0 -3
  23. package/lib/commonjs/channel/useOpenChannelList/index.js.map +1 -1
  24. package/lib/commonjs/channel/useOpenChannelList/reducer.js +2 -21
  25. package/lib/commonjs/channel/useOpenChannelList/reducer.js.map +1 -1
  26. package/lib/commonjs/channel/useOpenChannelList/useOpenChannelListWithQuery.js +1 -22
  27. package/lib/commonjs/channel/useOpenChannelList/useOpenChannelListWithQuery.js.map +1 -1
  28. package/lib/commonjs/channel/useOpenChannelMessages/index.js +0 -3
  29. package/lib/commonjs/channel/useOpenChannelMessages/index.js.map +1 -1
  30. package/lib/commonjs/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js +128 -57
  31. package/lib/commonjs/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js.map +1 -1
  32. package/lib/commonjs/common/useAppFeatures.js +0 -3
  33. package/lib/commonjs/common/useAppFeatures.js.map +1 -1
  34. package/lib/commonjs/common/useMessageOutgoingStatus.js +0 -11
  35. package/lib/commonjs/common/useMessageOutgoingStatus.js.map +1 -1
  36. package/lib/commonjs/common/usePushTrigger.js +0 -6
  37. package/lib/commonjs/common/usePushTrigger.js.map +1 -1
  38. package/lib/commonjs/common/useTotalUnreadMessageCount.js +0 -7
  39. package/lib/commonjs/common/useTotalUnreadMessageCount.js.map +1 -1
  40. package/lib/commonjs/common/useUserList.js +5 -20
  41. package/lib/commonjs/common/useUserList.js.map +1 -1
  42. package/lib/commonjs/handler/useChannelHandler.js +15 -41
  43. package/lib/commonjs/handler/useChannelHandler.js.map +1 -1
  44. package/lib/commonjs/handler/useConnectionHandler.js +14 -11
  45. package/lib/commonjs/handler/useConnectionHandler.js.map +1 -1
  46. package/lib/commonjs/handler/useUserEventHandler.js +0 -8
  47. package/lib/commonjs/handler/useUserEventHandler.js.map +1 -1
  48. package/lib/commonjs/index.js +0 -23
  49. package/lib/commonjs/index.js.map +1 -1
  50. package/lib/commonjs/model/CustomQuery.js +0 -6
  51. package/lib/commonjs/model/CustomQuery.js.map +1 -1
  52. package/lib/commonjs/types.js.map +1 -1
  53. package/lib/module/channel/useChannelMessagesReducer.js +146 -0
  54. package/lib/module/channel/useChannelMessagesReducer.js.map +1 -0
  55. package/lib/module/channel/useGroupChannel.js.map +1 -1
  56. package/lib/module/channel/useGroupChannelList/index.js.map +1 -1
  57. package/lib/module/channel/useGroupChannelList/reducer.js +12 -26
  58. package/lib/module/channel/useGroupChannelList/reducer.js.map +1 -1
  59. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js +1 -15
  60. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js.map +1 -1
  61. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithQuery.js +1 -11
  62. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithQuery.js.map +1 -1
  63. package/lib/module/channel/useGroupChannelMessages/index.js.map +1 -1
  64. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +174 -125
  65. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
  66. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +78 -70
  67. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
  68. package/lib/module/channel/useOpenChannel.js.map +1 -1
  69. package/lib/module/channel/useOpenChannelList/index.js.map +1 -1
  70. package/lib/module/channel/useOpenChannelList/reducer.js +2 -18
  71. package/lib/module/channel/useOpenChannelList/reducer.js.map +1 -1
  72. package/lib/module/channel/useOpenChannelList/useOpenChannelListWithQuery.js +1 -17
  73. package/lib/module/channel/useOpenChannelList/useOpenChannelListWithQuery.js.map +1 -1
  74. package/lib/module/channel/useOpenChannelMessages/index.js.map +1 -1
  75. package/lib/module/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js +129 -53
  76. package/lib/module/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js.map +1 -1
  77. package/lib/module/common/useAppFeatures.js.map +1 -1
  78. package/lib/module/common/useMessageOutgoingStatus.js +0 -6
  79. package/lib/module/common/useMessageOutgoingStatus.js.map +1 -1
  80. package/lib/module/common/usePushTrigger.js.map +1 -1
  81. package/lib/module/common/useTotalUnreadMessageCount.js +0 -1
  82. package/lib/module/common/useTotalUnreadMessageCount.js.map +1 -1
  83. package/lib/module/common/useUserList.js +5 -15
  84. package/lib/module/common/useUserList.js.map +1 -1
  85. package/lib/module/handler/useChannelHandler.js +15 -35
  86. package/lib/module/handler/useChannelHandler.js.map +1 -1
  87. package/lib/module/handler/useConnectionHandler.js +15 -6
  88. package/lib/module/handler/useConnectionHandler.js.map +1 -1
  89. package/lib/module/handler/useUserEventHandler.js +0 -2
  90. package/lib/module/handler/useUserEventHandler.js.map +1 -1
  91. package/lib/module/index.js +0 -1
  92. package/lib/module/index.js.map +1 -1
  93. package/lib/module/model/CustomQuery.js +0 -4
  94. package/lib/module/model/CustomQuery.js.map +1 -1
  95. package/lib/module/types.js.map +1 -1
  96. package/lib/typescript/src/channel/useChannelMessagesReducer.d.ts +18 -0
  97. package/lib/typescript/src/channel/useGroupChannelList/reducer.d.ts +1 -1
  98. package/lib/typescript/src/common/useUserList.d.ts +1 -1
  99. package/lib/typescript/src/handler/useChannelHandler.d.ts +1 -1
  100. package/lib/typescript/src/handler/useConnectionHandler.d.ts +1 -2
  101. package/lib/typescript/src/index.d.ts +0 -1
  102. package/lib/typescript/src/types.d.ts +51 -20
  103. package/package.json +15 -10
  104. package/src/channel/useChannelMessagesReducer.ts +143 -0
  105. package/src/channel/useGroupChannelList/reducer.ts +11 -7
  106. package/src/channel/useGroupChannelList/useGroupChannelListWithCollection.ts +1 -1
  107. package/src/channel/useGroupChannelList/useGroupChannelListWithQuery.ts +1 -1
  108. package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.ts +174 -105
  109. package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.ts +90 -63
  110. package/src/channel/useOpenChannelList/useOpenChannelListWithQuery.ts +1 -5
  111. package/src/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.ts +143 -26
  112. package/src/common/useUserList.ts +4 -4
  113. package/src/handler/useChannelHandler.ts +11 -24
  114. package/src/handler/useConnectionHandler.ts +11 -5
  115. package/src/index.ts +0 -1
  116. package/src/types.ts +58 -20
  117. package/lib/commonjs/channel/useGroupChannelMessages/reducer.js +0 -154
  118. package/lib/commonjs/channel/useGroupChannelMessages/reducer.js.map +0 -1
  119. package/lib/commonjs/channel/useOpenChannelMessages/reducer.js +0 -154
  120. package/lib/commonjs/channel/useOpenChannelMessages/reducer.js.map +0 -1
  121. package/lib/commonjs/common/useTotalUnreadChannelCount.js +0 -29
  122. package/lib/commonjs/common/useTotalUnreadChannelCount.js.map +0 -1
  123. package/lib/module/channel/useGroupChannelMessages/reducer.js +0 -144
  124. package/lib/module/channel/useGroupChannelMessages/reducer.js.map +0 -1
  125. package/lib/module/channel/useOpenChannelMessages/reducer.js +0 -144
  126. package/lib/module/channel/useOpenChannelMessages/reducer.js.map +0 -1
  127. package/lib/module/common/useTotalUnreadChannelCount.js +0 -17
  128. package/lib/module/common/useTotalUnreadChannelCount.js.map +0 -1
  129. package/lib/typescript/src/channel/useGroupChannelMessages/reducer.d.ts +0 -15
  130. package/lib/typescript/src/channel/useOpenChannelMessages/reducer.d.ts +0 -15
  131. package/lib/typescript/src/common/useTotalUnreadChannelCount.d.ts +0 -6
  132. package/src/channel/useGroupChannelMessages/reducer.ts +0 -125
  133. package/src/channel/useOpenChannelMessages/reducer.ts +0 -125
  134. 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 { Logger, SendbirdChatSDK } from '@sendbird/uikit-utils';
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
- Logger.debug('[useChannelHandler] hook called by', handlerId);
33
-
34
- const handler = getChannelHandler(type);
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, handler);
31
+ sdk.groupChannel.addGroupChannelHandler(handlerId, handlerMapper(new GroupChannelHandler()));
45
32
  } else if (type === 'open') {
46
- sdk.openChannel.addOpenChannelHandler(handlerId, handler);
33
+ sdk.openChannel.addOpenChannelHandler(handlerId, handlerMapper(new OpenChannelHandler()));
47
34
  }
48
35
 
49
36
  return () => {
@@ -1,4 +1,4 @@
1
- import React, { useEffect } from 'react';
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
- // @ts-ignore
19
- if (hookHandler[key]) handler[key] = hookHandler[key];
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, ...deps]);
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(nextMessages)
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() -> nextMessages append to state(messages)
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
- * Get messages, this state is for temporary data before render
115
- * For example, if a user receives a new messages while searching for an old message
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
- nextMessages: SendbirdMessage[];
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
- newMessagesFromMembers: SendbirdMessage[];
137
+ newMessages: SendbirdMessage[];
128
138
 
129
139
  /**
130
- * Fetch next messages to state
131
- * @return {Promise<void>}
140
+ * reset message list with starting point
132
141
  * */
133
- next: () => Promise<void>;
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(nextMessages)
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 -> next() -> nextMessages append to state(messages)
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
- * Get messages, this state is for temporary data before render
281
- * For example, if a user receives a new messages while searching for an old message
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
- nextMessages: SendbirdMessage[];
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
- newMessagesFromMembers: SendbirdMessage[];
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":"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"}
@@ -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"}