@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
@@ -1,144 +0,0 @@
1
- import { useReducer } from 'react';
2
- import { arrayToMapWithGetter, getMessageUniqId, isMyMessage, isNewMessage, useIIFE } from '@sendbird/uikit-utils';
3
-
4
- const defaultReducer = (_ref, action) => {
5
- let { ...draft
6
- } = _ref;
7
-
8
- switch (action.type) {
9
- case 'update_refreshing':
10
- case 'update_loading':
11
- {
12
- const key = action.type === 'update_loading' ? 'loading' : 'refreshing';
13
- draft[key] = action.value.status;
14
- return draft;
15
- }
16
-
17
- case 'update_messages':
18
- case 'update_next_messages':
19
- {
20
- const key = action.type === 'update_messages' ? 'messageMap' : 'nextMessageMap';
21
- const receivedMessagesAsMap = arrayToMapWithGetter(action.value.messages, getMessageUniqId);
22
-
23
- if (action.value.clearPrev) {
24
- draft[key] = receivedMessagesAsMap;
25
- } else {
26
- draft[key] = { ...draft[key],
27
- ...receivedMessagesAsMap
28
- }; // NOTE: Replace pending message to succeeded message
29
-
30
- action.value.messages.filter(m => {
31
- return (m.isFileMessage() || m.isUserMessage()) && Boolean(draft[key][m.reqId]) && m.sendingStatus === 'succeeded' && isMyMessage(m, action.value.currentUserId);
32
- }).forEach(m => delete draft[key][m.reqId]);
33
- }
34
-
35
- return draft;
36
- }
37
-
38
- case 'delete_messages':
39
- case 'delete_next_messages':
40
- {
41
- const key = action.type === 'delete_messages' ? 'messageMap' : 'nextMessageMap';
42
- draft[key] = { ...draft[key]
43
- };
44
- action.value.messageIds.forEach(msgId => delete draft[key][msgId]);
45
- action.value.reqIds.forEach(reqId => delete draft[key][reqId]);
46
- return draft;
47
- }
48
- }
49
- };
50
-
51
- export const useGroupChannelMessagesReducer = (userId, sortComparator) => {
52
- const [{
53
- loading,
54
- refreshing,
55
- messageMap,
56
- nextMessageMap
57
- }, dispatch] = useReducer(defaultReducer, {
58
- loading: true,
59
- refreshing: false,
60
- messageMap: {},
61
- nextMessageMap: {}
62
- });
63
-
64
- const updateMessages = (messages, clearPrev, currentUserId) => {
65
- dispatch({
66
- type: 'update_messages',
67
- value: {
68
- messages,
69
- clearPrev,
70
- currentUserId
71
- }
72
- });
73
- };
74
-
75
- const deleteMessages = (messageIds, reqIds) => {
76
- dispatch({
77
- type: 'delete_messages',
78
- value: {
79
- messageIds,
80
- reqIds
81
- }
82
- });
83
- };
84
-
85
- const updateNextMessages = (messages, clearPrev, currentUserId) => {
86
- dispatch({
87
- type: 'update_next_messages',
88
- value: {
89
- messages,
90
- clearPrev,
91
- currentUserId
92
- }
93
- });
94
- };
95
-
96
- const deleteNextMessages = (messageIds, reqIds) => {
97
- dispatch({
98
- type: 'delete_next_messages',
99
- value: {
100
- messageIds,
101
- reqIds
102
- }
103
- });
104
- };
105
-
106
- const updateLoading = status => {
107
- dispatch({
108
- type: 'update_loading',
109
- value: {
110
- status
111
- }
112
- });
113
- };
114
-
115
- const updateRefreshing = status => {
116
- dispatch({
117
- type: 'update_refreshing',
118
- value: {
119
- status
120
- }
121
- });
122
- };
123
-
124
- const messages = useIIFE(() => {
125
- if (sortComparator) return Object.values(messageMap).sort(sortComparator);
126
- return Object.values(messageMap);
127
- });
128
- const nextMessages = Object.values(nextMessageMap);
129
- const newMessagesFromMembers = nextMessages.filter(msg => isNewMessage(msg, userId));
130
- return {
131
- updateLoading,
132
- updateRefreshing,
133
- updateMessages,
134
- updateNextMessages,
135
- deleteMessages,
136
- deleteNextMessages,
137
- loading,
138
- refreshing,
139
- messages,
140
- nextMessages,
141
- newMessagesFromMembers
142
- };
143
- };
144
- //# sourceMappingURL=reducer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["useReducer","arrayToMapWithGetter","getMessageUniqId","isMyMessage","isNewMessage","useIIFE","defaultReducer","action","draft","type","key","value","status","receivedMessagesAsMap","messages","clearPrev","filter","m","isFileMessage","isUserMessage","Boolean","reqId","sendingStatus","currentUserId","forEach","messageIds","msgId","reqIds","useGroupChannelMessagesReducer","userId","sortComparator","loading","refreshing","messageMap","nextMessageMap","dispatch","updateMessages","deleteMessages","updateNextMessages","deleteNextMessages","updateLoading","updateRefreshing","Object","values","sort","nextMessages","newMessagesFromMembers","msg"],"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,144 +0,0 @@
1
- import { useReducer } from 'react';
2
- import { arrayToMapWithGetter, getMessageUniqId, isMyMessage, isNewMessage, useIIFE } from '@sendbird/uikit-utils';
3
-
4
- const defaultReducer = (_ref, action) => {
5
- let { ...draft
6
- } = _ref;
7
-
8
- switch (action.type) {
9
- case 'update_refreshing':
10
- case 'update_loading':
11
- {
12
- const key = action.type === 'update_loading' ? 'loading' : 'refreshing';
13
- draft[key] = action.value.status;
14
- return draft;
15
- }
16
-
17
- case 'update_messages':
18
- case 'update_next_messages':
19
- {
20
- const key = action.type === 'update_messages' ? 'messageMap' : 'nextMessageMap';
21
- const receivedMessagesAsMap = arrayToMapWithGetter(action.value.messages, getMessageUniqId);
22
-
23
- if (action.value.clearPrev) {
24
- draft[key] = receivedMessagesAsMap;
25
- } else {
26
- draft[key] = { ...draft[key],
27
- ...receivedMessagesAsMap
28
- }; // NOTE: Replace pending message to succeeded message
29
-
30
- action.value.messages.filter(m => {
31
- return (m.isFileMessage() || m.isUserMessage()) && Boolean(draft[key][m.reqId]) && m.sendingStatus === 'succeeded' && isMyMessage(m, action.value.currentUserId);
32
- }).forEach(m => delete draft[key][m.reqId]);
33
- }
34
-
35
- return draft;
36
- }
37
-
38
- case 'delete_messages':
39
- case 'delete_next_messages':
40
- {
41
- const key = action.type === 'delete_messages' ? 'messageMap' : 'nextMessageMap';
42
- draft[key] = { ...draft[key]
43
- };
44
- action.value.messageIds.forEach(msgId => delete draft[key][msgId]);
45
- action.value.reqIds.forEach(reqId => delete draft[key][reqId]);
46
- return draft;
47
- }
48
- }
49
- };
50
-
51
- export const useOpenChannelMessagesReducer = (userId, sortComparator) => {
52
- const [{
53
- loading,
54
- refreshing,
55
- messageMap,
56
- nextMessageMap
57
- }, dispatch] = useReducer(defaultReducer, {
58
- loading: true,
59
- refreshing: false,
60
- messageMap: {},
61
- nextMessageMap: {}
62
- });
63
-
64
- const updateMessages = (messages, clearPrev, currentUserId) => {
65
- dispatch({
66
- type: 'update_messages',
67
- value: {
68
- messages,
69
- clearPrev,
70
- currentUserId
71
- }
72
- });
73
- };
74
-
75
- const deleteMessages = (messageIds, reqIds) => {
76
- dispatch({
77
- type: 'delete_messages',
78
- value: {
79
- messageIds,
80
- reqIds
81
- }
82
- });
83
- };
84
-
85
- const updateNextMessages = (messages, clearPrev, currentUserId) => {
86
- dispatch({
87
- type: 'update_next_messages',
88
- value: {
89
- messages,
90
- clearPrev,
91
- currentUserId
92
- }
93
- });
94
- };
95
-
96
- const deleteNextMessages = (messageIds, reqIds) => {
97
- dispatch({
98
- type: 'delete_next_messages',
99
- value: {
100
- messageIds,
101
- reqIds
102
- }
103
- });
104
- };
105
-
106
- const updateLoading = status => {
107
- dispatch({
108
- type: 'update_loading',
109
- value: {
110
- status
111
- }
112
- });
113
- };
114
-
115
- const updateRefreshing = status => {
116
- dispatch({
117
- type: 'update_refreshing',
118
- value: {
119
- status
120
- }
121
- });
122
- };
123
-
124
- const messages = useIIFE(() => {
125
- if (sortComparator) return Object.values(messageMap).sort(sortComparator);
126
- return Object.values(messageMap);
127
- });
128
- const nextMessages = Object.values(nextMessageMap);
129
- const newMessagesFromMembers = nextMessages.filter(msg => isNewMessage(msg, userId));
130
- return {
131
- updateLoading,
132
- updateRefreshing,
133
- updateMessages,
134
- updateNextMessages,
135
- deleteMessages,
136
- deleteNextMessages,
137
- loading,
138
- refreshing,
139
- messages,
140
- nextMessages,
141
- newMessagesFromMembers
142
- };
143
- };
144
- //# sourceMappingURL=reducer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["useReducer","arrayToMapWithGetter","getMessageUniqId","isMyMessage","isNewMessage","useIIFE","defaultReducer","action","draft","type","key","value","status","receivedMessagesAsMap","messages","clearPrev","filter","m","isFileMessage","isUserMessage","Boolean","reqId","sendingStatus","currentUserId","forEach","messageIds","msgId","reqIds","useOpenChannelMessagesReducer","userId","sortComparator","loading","refreshing","messageMap","nextMessageMap","dispatch","updateMessages","deleteMessages","updateNextMessages","deleteNextMessages","updateLoading","updateRefreshing","Object","values","sort","nextMessages","newMessagesFromMembers","msg"],"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,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,15 +0,0 @@
1
- import type { SendbirdBaseMessage } from '@sendbird/uikit-utils';
2
- import type { UseGroupChannelMessagesOptions } from '../../types';
3
- export declare const useGroupChannelMessagesReducer: (userId?: string, sortComparator?: UseGroupChannelMessagesOptions['sortComparator']) => {
4
- updateLoading: (status: boolean) => void;
5
- updateRefreshing: (status: boolean) => void;
6
- updateMessages: (messages: SendbirdBaseMessage[], clearPrev: boolean, currentUserId?: string) => void;
7
- updateNextMessages: (messages: SendbirdBaseMessage[], clearPrev: boolean, currentUserId?: string) => void;
8
- deleteMessages: (messageIds: number[], reqIds: string[]) => void;
9
- deleteNextMessages: (messageIds: number[], reqIds: string[]) => void;
10
- loading: boolean;
11
- refreshing: boolean;
12
- messages: import("@sendbird/chat/message").BaseMessage[];
13
- nextMessages: import("@sendbird/chat/message").BaseMessage[];
14
- newMessagesFromMembers: import("@sendbird/chat/message").BaseMessage[];
15
- };
@@ -1,15 +0,0 @@
1
- import type { SendbirdBaseMessage } from '@sendbird/uikit-utils';
2
- import type { UseOpenChannelMessagesOptions } from '../../types';
3
- export declare const useOpenChannelMessagesReducer: (userId?: string, sortComparator?: UseOpenChannelMessagesOptions['sortComparator']) => {
4
- updateLoading: (status: boolean) => void;
5
- updateRefreshing: (status: boolean) => void;
6
- updateMessages: (messages: SendbirdBaseMessage[], clearPrev: boolean, currentUserId?: string) => void;
7
- updateNextMessages: (messages: SendbirdBaseMessage[], clearPrev: boolean, currentUserId?: string) => void;
8
- deleteMessages: (messageIds: number[], reqIds: string[]) => void;
9
- deleteNextMessages: (messageIds: number[], reqIds: string[]) => void;
10
- loading: boolean;
11
- refreshing: boolean;
12
- messages: import("@sendbird/chat/message").BaseMessage[];
13
- nextMessages: import("@sendbird/chat/message").BaseMessage[];
14
- newMessagesFromMembers: import("@sendbird/chat/message").BaseMessage[];
15
- };
@@ -1,6 +0,0 @@
1
- import type { SendbirdChatSDK } from '@sendbird/uikit-utils';
2
- type Params = {
3
- maxCount?: number;
4
- };
5
- export declare const useTotalUnreadChannelCount: (sdk: SendbirdChatSDK, params?: Params) => string;
6
- export {};
@@ -1,125 +0,0 @@
1
- import { useReducer } from 'react';
2
-
3
- import type { SendbirdBaseMessage, SendbirdFileMessage, SendbirdUserMessage } from '@sendbird/uikit-utils';
4
- import { arrayToMapWithGetter, getMessageUniqId, isMyMessage, isNewMessage, useIIFE } from '@sendbird/uikit-utils';
5
-
6
- import type { UseGroupChannelMessagesOptions } from '../../types';
7
-
8
- type Action =
9
- | {
10
- type: 'update_loading' | 'update_refreshing';
11
- value: { status: boolean };
12
- }
13
- | {
14
- type: 'update_messages' | 'update_next_messages';
15
- value: { messages: SendbirdBaseMessage[]; clearPrev: boolean; currentUserId?: string };
16
- }
17
- | {
18
- type: 'delete_messages' | 'delete_next_messages';
19
- value: { messageIds: number[]; reqIds: string[] };
20
- };
21
-
22
- type State = {
23
- loading: boolean;
24
- refreshing: boolean;
25
- messageMap: Record<string, SendbirdBaseMessage>;
26
- nextMessageMap: Record<string, SendbirdBaseMessage>;
27
- };
28
-
29
- const defaultReducer = ({ ...draft }: State, action: Action) => {
30
- switch (action.type) {
31
- case 'update_refreshing':
32
- case 'update_loading': {
33
- const key = action.type === 'update_loading' ? 'loading' : 'refreshing';
34
- draft[key] = action.value.status;
35
-
36
- return draft;
37
- }
38
- case 'update_messages':
39
- case 'update_next_messages': {
40
- const key = action.type === 'update_messages' ? 'messageMap' : 'nextMessageMap';
41
- const receivedMessagesAsMap = arrayToMapWithGetter(action.value.messages, getMessageUniqId);
42
- if (action.value.clearPrev) {
43
- draft[key] = receivedMessagesAsMap;
44
- } else {
45
- draft[key] = { ...draft[key], ...receivedMessagesAsMap };
46
-
47
- // NOTE: Replace pending message to succeeded message
48
- action.value.messages
49
- .filter((m): m is SendbirdUserMessage | SendbirdFileMessage => {
50
- return (
51
- (m.isFileMessage() || m.isUserMessage()) &&
52
- Boolean(draft[key][m.reqId]) &&
53
- m.sendingStatus === 'succeeded' &&
54
- isMyMessage(m, action.value.currentUserId)
55
- );
56
- })
57
- .forEach((m) => delete draft[key][m.reqId]);
58
- }
59
-
60
- return draft;
61
- }
62
- case 'delete_messages':
63
- case 'delete_next_messages': {
64
- const key = action.type === 'delete_messages' ? 'messageMap' : 'nextMessageMap';
65
- draft[key] = { ...draft[key] };
66
- action.value.messageIds.forEach((msgId) => delete draft[key][msgId]);
67
- action.value.reqIds.forEach((reqId) => delete draft[key][reqId]);
68
-
69
- return draft;
70
- }
71
- }
72
- };
73
-
74
- export const useGroupChannelMessagesReducer = (
75
- userId?: string,
76
- sortComparator?: UseGroupChannelMessagesOptions['sortComparator'],
77
- ) => {
78
- const [{ loading, refreshing, messageMap, nextMessageMap }, dispatch] = useReducer(defaultReducer, {
79
- loading: true,
80
- refreshing: false,
81
- messageMap: {},
82
- nextMessageMap: {},
83
- });
84
-
85
- const updateMessages = (messages: SendbirdBaseMessage[], clearPrev: boolean, currentUserId?: string) => {
86
- dispatch({ type: 'update_messages', value: { messages, clearPrev, currentUserId } });
87
- };
88
- const deleteMessages = (messageIds: number[], reqIds: string[]) => {
89
- dispatch({ type: 'delete_messages', value: { messageIds, reqIds } });
90
- };
91
- const updateNextMessages = (messages: SendbirdBaseMessage[], clearPrev: boolean, currentUserId?: string) => {
92
- dispatch({ type: 'update_next_messages', value: { messages, clearPrev, currentUserId } });
93
- };
94
- const deleteNextMessages = (messageIds: number[], reqIds: string[]) => {
95
- dispatch({ type: 'delete_next_messages', value: { messageIds, reqIds } });
96
- };
97
- const updateLoading = (status: boolean) => {
98
- dispatch({ type: 'update_loading', value: { status } });
99
- };
100
- const updateRefreshing = (status: boolean) => {
101
- dispatch({ type: 'update_refreshing', value: { status } });
102
- };
103
-
104
- const messages = useIIFE(() => {
105
- if (sortComparator) return Object.values(messageMap).sort(sortComparator);
106
- return Object.values(messageMap);
107
- });
108
- const nextMessages = Object.values(nextMessageMap);
109
- const newMessagesFromMembers = nextMessages.filter((msg) => isNewMessage(msg, userId));
110
-
111
- return {
112
- updateLoading,
113
- updateRefreshing,
114
- updateMessages,
115
- updateNextMessages,
116
- deleteMessages,
117
- deleteNextMessages,
118
-
119
- loading,
120
- refreshing,
121
- messages,
122
- nextMessages,
123
- newMessagesFromMembers,
124
- };
125
- };
@@ -1,125 +0,0 @@
1
- import { useReducer } from 'react';
2
-
3
- import type { SendbirdBaseMessage, SendbirdFileMessage, SendbirdUserMessage } from '@sendbird/uikit-utils';
4
- import { arrayToMapWithGetter, getMessageUniqId, isMyMessage, isNewMessage, useIIFE } from '@sendbird/uikit-utils';
5
-
6
- import type { UseOpenChannelMessagesOptions } from '../../types';
7
-
8
- type Action =
9
- | {
10
- type: 'update_loading' | 'update_refreshing';
11
- value: { status: boolean };
12
- }
13
- | {
14
- type: 'update_messages' | 'update_next_messages';
15
- value: { messages: SendbirdBaseMessage[]; clearPrev: boolean; currentUserId?: string };
16
- }
17
- | {
18
- type: 'delete_messages' | 'delete_next_messages';
19
- value: { messageIds: number[]; reqIds: string[] };
20
- };
21
-
22
- type State = {
23
- loading: boolean;
24
- refreshing: boolean;
25
- messageMap: Record<string, SendbirdBaseMessage>;
26
- nextMessageMap: Record<string, SendbirdBaseMessage>;
27
- };
28
-
29
- const defaultReducer = ({ ...draft }: State, action: Action) => {
30
- switch (action.type) {
31
- case 'update_refreshing':
32
- case 'update_loading': {
33
- const key = action.type === 'update_loading' ? 'loading' : 'refreshing';
34
- draft[key] = action.value.status;
35
-
36
- return draft;
37
- }
38
- case 'update_messages':
39
- case 'update_next_messages': {
40
- const key = action.type === 'update_messages' ? 'messageMap' : 'nextMessageMap';
41
- const receivedMessagesAsMap = arrayToMapWithGetter(action.value.messages, getMessageUniqId);
42
- if (action.value.clearPrev) {
43
- draft[key] = receivedMessagesAsMap;
44
- } else {
45
- draft[key] = { ...draft[key], ...receivedMessagesAsMap };
46
-
47
- // NOTE: Replace pending message to succeeded message
48
- action.value.messages
49
- .filter((m): m is SendbirdUserMessage | SendbirdFileMessage => {
50
- return (
51
- (m.isFileMessage() || m.isUserMessage()) &&
52
- Boolean(draft[key][m.reqId]) &&
53
- m.sendingStatus === 'succeeded' &&
54
- isMyMessage(m, action.value.currentUserId)
55
- );
56
- })
57
- .forEach((m) => delete draft[key][m.reqId]);
58
- }
59
-
60
- return draft;
61
- }
62
- case 'delete_messages':
63
- case 'delete_next_messages': {
64
- const key = action.type === 'delete_messages' ? 'messageMap' : 'nextMessageMap';
65
- draft[key] = { ...draft[key] };
66
- action.value.messageIds.forEach((msgId) => delete draft[key][msgId]);
67
- action.value.reqIds.forEach((reqId) => delete draft[key][reqId]);
68
-
69
- return draft;
70
- }
71
- }
72
- };
73
-
74
- export const useOpenChannelMessagesReducer = (
75
- userId?: string,
76
- sortComparator?: UseOpenChannelMessagesOptions['sortComparator'],
77
- ) => {
78
- const [{ loading, refreshing, messageMap, nextMessageMap }, dispatch] = useReducer(defaultReducer, {
79
- loading: true,
80
- refreshing: false,
81
- messageMap: {},
82
- nextMessageMap: {},
83
- });
84
-
85
- const updateMessages = (messages: SendbirdBaseMessage[], clearPrev: boolean, currentUserId?: string) => {
86
- dispatch({ type: 'update_messages', value: { messages, clearPrev, currentUserId } });
87
- };
88
- const deleteMessages = (messageIds: number[], reqIds: string[]) => {
89
- dispatch({ type: 'delete_messages', value: { messageIds, reqIds } });
90
- };
91
- const updateNextMessages = (messages: SendbirdBaseMessage[], clearPrev: boolean, currentUserId?: string) => {
92
- dispatch({ type: 'update_next_messages', value: { messages, clearPrev, currentUserId } });
93
- };
94
- const deleteNextMessages = (messageIds: number[], reqIds: string[]) => {
95
- dispatch({ type: 'delete_next_messages', value: { messageIds, reqIds } });
96
- };
97
- const updateLoading = (status: boolean) => {
98
- dispatch({ type: 'update_loading', value: { status } });
99
- };
100
- const updateRefreshing = (status: boolean) => {
101
- dispatch({ type: 'update_refreshing', value: { status } });
102
- };
103
-
104
- const messages = useIIFE(() => {
105
- if (sortComparator) return Object.values(messageMap).sort(sortComparator);
106
- return Object.values(messageMap);
107
- });
108
- const nextMessages = Object.values(nextMessageMap);
109
- const newMessagesFromMembers = nextMessages.filter((msg) => isNewMessage(msg, userId));
110
-
111
- return {
112
- updateLoading,
113
- updateRefreshing,
114
- updateMessages,
115
- updateNextMessages,
116
- deleteMessages,
117
- deleteNextMessages,
118
-
119
- loading,
120
- refreshing,
121
- messages,
122
- nextMessages,
123
- newMessagesFromMembers,
124
- };
125
- };
@@ -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
- };