@sendbird/uikit-chat-hooks 2.4.1 → 2.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/lib/commonjs/channel/useGroupChannel.js +0 -4
- package/lib/commonjs/channel/useGroupChannel.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelList/index.js +0 -5
- package/lib/commonjs/channel/useGroupChannelList/index.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelList/reducer.js +12 -29
- package/lib/commonjs/channel/useGroupChannelList/reducer.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithCollection.js +1 -22
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithCollection.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithQuery.js +1 -18
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithQuery.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelMessages/index.js +0 -5
- package/lib/commonjs/channel/useGroupChannelMessages/index.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelMessages/reducer.js +18 -28
- package/lib/commonjs/channel/useGroupChannelMessages/reducer.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +8 -37
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +21 -49
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
- package/lib/commonjs/channel/useOpenChannel.js +0 -4
- package/lib/commonjs/channel/useOpenChannel.js.map +1 -1
- package/lib/commonjs/channel/useOpenChannelList/index.js +0 -3
- package/lib/commonjs/channel/useOpenChannelList/index.js.map +1 -1
- package/lib/commonjs/channel/useOpenChannelList/reducer.js +2 -21
- package/lib/commonjs/channel/useOpenChannelList/reducer.js.map +1 -1
- package/lib/commonjs/channel/useOpenChannelList/useOpenChannelListWithQuery.js +1 -18
- package/lib/commonjs/channel/useOpenChannelList/useOpenChannelListWithQuery.js.map +1 -1
- package/lib/commonjs/channel/useOpenChannelMessages/index.js +0 -3
- package/lib/commonjs/channel/useOpenChannelMessages/index.js.map +1 -1
- package/lib/commonjs/channel/useOpenChannelMessages/reducer.js +18 -28
- package/lib/commonjs/channel/useOpenChannelMessages/reducer.js.map +1 -1
- package/lib/commonjs/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js +1 -30
- package/lib/commonjs/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js.map +1 -1
- package/lib/commonjs/common/useAppFeatures.js +0 -3
- package/lib/commonjs/common/useAppFeatures.js.map +1 -1
- package/lib/commonjs/common/useMessageOutgoingStatus.js +0 -11
- package/lib/commonjs/common/useMessageOutgoingStatus.js.map +1 -1
- package/lib/commonjs/common/usePushTrigger.js +0 -6
- package/lib/commonjs/common/usePushTrigger.js.map +1 -1
- package/lib/commonjs/common/useTotalUnreadMessageCount.js +0 -7
- package/lib/commonjs/common/useTotalUnreadMessageCount.js.map +1 -1
- package/lib/commonjs/common/useUserList.js +3 -18
- package/lib/commonjs/common/useUserList.js.map +1 -1
- package/lib/commonjs/handler/useChannelHandler.js +15 -41
- package/lib/commonjs/handler/useChannelHandler.js.map +1 -1
- package/lib/commonjs/handler/useConnectionHandler.js +14 -11
- package/lib/commonjs/handler/useConnectionHandler.js.map +1 -1
- package/lib/commonjs/handler/useUserEventHandler.js +0 -8
- package/lib/commonjs/handler/useUserEventHandler.js.map +1 -1
- package/lib/commonjs/index.js +0 -23
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/model/CustomQuery.js +0 -6
- package/lib/commonjs/model/CustomQuery.js.map +1 -1
- package/lib/module/channel/useGroupChannel.js.map +1 -1
- package/lib/module/channel/useGroupChannelList/index.js.map +1 -1
- package/lib/module/channel/useGroupChannelList/reducer.js +12 -26
- package/lib/module/channel/useGroupChannelList/reducer.js.map +1 -1
- package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js +1 -15
- package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js.map +1 -1
- package/lib/module/channel/useGroupChannelList/useGroupChannelListWithQuery.js +1 -11
- package/lib/module/channel/useGroupChannelList/useGroupChannelListWithQuery.js.map +1 -1
- package/lib/module/channel/useGroupChannelMessages/index.js.map +1 -1
- package/lib/module/channel/useGroupChannelMessages/reducer.js +18 -25
- package/lib/module/channel/useGroupChannelMessages/reducer.js.map +1 -1
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +9 -30
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +23 -46
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
- package/lib/module/channel/useOpenChannel.js.map +1 -1
- package/lib/module/channel/useOpenChannelList/index.js.map +1 -1
- package/lib/module/channel/useOpenChannelList/reducer.js +2 -18
- package/lib/module/channel/useOpenChannelList/reducer.js.map +1 -1
- package/lib/module/channel/useOpenChannelList/useOpenChannelListWithQuery.js +1 -13
- package/lib/module/channel/useOpenChannelList/useOpenChannelListWithQuery.js.map +1 -1
- package/lib/module/channel/useOpenChannelMessages/index.js.map +1 -1
- package/lib/module/channel/useOpenChannelMessages/reducer.js +18 -25
- package/lib/module/channel/useOpenChannelMessages/reducer.js.map +1 -1
- package/lib/module/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js +1 -25
- package/lib/module/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js.map +1 -1
- package/lib/module/common/useAppFeatures.js.map +1 -1
- package/lib/module/common/useMessageOutgoingStatus.js +0 -6
- package/lib/module/common/useMessageOutgoingStatus.js.map +1 -1
- package/lib/module/common/usePushTrigger.js.map +1 -1
- package/lib/module/common/useTotalUnreadMessageCount.js +0 -1
- package/lib/module/common/useTotalUnreadMessageCount.js.map +1 -1
- package/lib/module/common/useUserList.js +3 -13
- package/lib/module/common/useUserList.js.map +1 -1
- package/lib/module/handler/useChannelHandler.js +15 -35
- package/lib/module/handler/useChannelHandler.js.map +1 -1
- package/lib/module/handler/useConnectionHandler.js +15 -6
- package/lib/module/handler/useConnectionHandler.js.map +1 -1
- package/lib/module/handler/useUserEventHandler.js +0 -2
- package/lib/module/handler/useUserEventHandler.js.map +1 -1
- package/lib/module/index.js +0 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/model/CustomQuery.js +0 -4
- package/lib/module/model/CustomQuery.js.map +1 -1
- package/lib/typescript/src/channel/useGroupChannelList/reducer.d.ts +1 -1
- package/lib/typescript/src/channel/useGroupChannelMessages/reducer.d.ts +2 -2
- package/lib/typescript/src/channel/useOpenChannelMessages/reducer.d.ts +2 -2
- package/lib/typescript/src/common/useUserList.d.ts +1 -1
- package/lib/typescript/src/handler/useChannelHandler.d.ts +1 -1
- package/lib/typescript/src/handler/useConnectionHandler.d.ts +1 -2
- package/lib/typescript/src/index.d.ts +0 -1
- package/package.json +15 -9
- package/src/channel/useGroupChannelList/reducer.ts +11 -7
- package/src/channel/useGroupChannelList/useGroupChannelListWithCollection.ts +1 -1
- package/src/channel/useGroupChannelList/useGroupChannelListWithQuery.ts +1 -1
- package/src/channel/useGroupChannelMessages/reducer.ts +11 -10
- package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.ts +69 -72
- package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.ts +32 -42
- package/src/channel/useOpenChannelList/useOpenChannelListWithQuery.ts +1 -1
- package/src/channel/useOpenChannelMessages/reducer.ts +11 -10
- package/src/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.ts +1 -1
- package/src/common/useUserList.ts +2 -2
- package/src/handler/useChannelHandler.ts +11 -24
- package/src/handler/useConnectionHandler.ts +11 -5
- package/src/index.ts +0 -1
- package/lib/commonjs/common/useTotalUnreadChannelCount.js +0 -29
- package/lib/commonjs/common/useTotalUnreadChannelCount.js.map +0 -1
- package/lib/module/common/useTotalUnreadChannelCount.js +0 -17
- package/lib/module/common/useTotalUnreadChannelCount.js.map +0 -1
- package/lib/typescript/src/common/useTotalUnreadChannelCount.d.ts +0 -6
- package/src/common/useTotalUnreadChannelCount.ts +0 -26
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useReducer","arrayToMapWithGetter","getMessageUniqId","isMyMessage","isNewMessage","useIIFE","defaultReducer","action","draft","type","
|
|
1
|
+
{"version":3,"names":["useReducer","arrayToMapWithGetter","getMessageUniqId","isMyMessage","isNewMessage","useIIFE","defaultReducer","_ref","action","draft","type","value","status","key","receivedMessagesAsMap","messages","clearBeforeAction","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[]; clearBeforeAction: 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 draft['refreshing'] = action.value.status;\n return draft;\n }\n case 'update_loading': {\n draft['loading'] = action.value.status;\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.clearBeforeAction) {\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[], clearBeforeAction: boolean, currentUserId?: string) => {\n dispatch({ type: 'update_messages', value: { messages, clearBeforeAction, currentUserId } });\n };\n const deleteMessages = (messageIds: number[], reqIds: string[]) => {\n dispatch({ type: 'delete_messages', value: { messageIds, reqIds } });\n };\n const updateNextMessages = (messages: SendbirdBaseMessage[], clearBeforeAction: boolean, currentUserId?: string) => {\n dispatch({ type: 'update_next_messages', value: { messages, clearBeforeAction, 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,9 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useEffect, useRef } from 'react';
|
|
2
2
|
import { MessageCollectionInitPolicy, MessageEventSource, MessageFilter } from '@sendbird/chat/groupChannel';
|
|
3
3
|
import { Logger, confirmAndMarkAsRead, isDifferentChannel, useForceUpdate, useFreshCallback, useUniqHandlerId } from '@sendbird/uikit-utils';
|
|
4
4
|
import { useChannelHandler } from '../../handler/useChannelHandler';
|
|
5
5
|
import { useGroupChannelMessagesReducer } from './reducer';
|
|
6
|
-
|
|
7
6
|
const createMessageCollection = (channel, creator) => {
|
|
8
7
|
if (creator) return creator();
|
|
9
8
|
const filter = new MessageFilter();
|
|
@@ -12,7 +11,6 @@ const createMessageCollection = (channel, creator) => {
|
|
|
12
11
|
limit: 100
|
|
13
12
|
});
|
|
14
13
|
};
|
|
15
|
-
|
|
16
14
|
export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, options) => {
|
|
17
15
|
const forceUpdate = useForceUpdate();
|
|
18
16
|
const collectionRef = useRef();
|
|
@@ -30,7 +28,6 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
30
28
|
updateLoading,
|
|
31
29
|
updateRefreshing
|
|
32
30
|
} = useGroupChannelMessagesReducer(userId, options === null || options === void 0 ? void 0 : options.sortComparator);
|
|
33
|
-
|
|
34
31
|
const channelMarkAsRead = async source => {
|
|
35
32
|
try {
|
|
36
33
|
switch (source) {
|
|
@@ -45,15 +42,11 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
45
42
|
Logger.warn('[useGroupChannelMessagesWithCollection/channelMarkAsRead]', e);
|
|
46
43
|
}
|
|
47
44
|
};
|
|
48
|
-
|
|
49
|
-
const init = useCallback(async (uid, callback) => {
|
|
45
|
+
const init = useFreshCallback(async (uid, callback) => {
|
|
50
46
|
var _collectionRef$curren;
|
|
51
|
-
|
|
52
47
|
if (collectionRef.current) (_collectionRef$curren = collectionRef.current) === null || _collectionRef$curren === void 0 ? void 0 : _collectionRef$curren.dispose();
|
|
53
|
-
|
|
54
48
|
if (uid) {
|
|
55
49
|
var _collectionRef$curren2;
|
|
56
|
-
|
|
57
50
|
collectionRef.current = createMessageCollection(channel, options === null || options === void 0 ? void 0 : options.collectionCreator);
|
|
58
51
|
updateNextMessages([], true, sdk.currentUser.userId);
|
|
59
52
|
channelMarkAsRead();
|
|
@@ -63,16 +56,17 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
63
56
|
updateNextMessages(messages, false, sdk.currentUser.userId);
|
|
64
57
|
},
|
|
65
58
|
onMessagesUpdated: (_, __, messages) => {
|
|
66
|
-
channelMarkAsRead(_.source);
|
|
59
|
+
channelMarkAsRead(_.source);
|
|
67
60
|
|
|
61
|
+
// NOTE: admin message is not added via onMessagesAdded handler, not checked yet is this a bug.
|
|
68
62
|
if (_.source === MessageEventSource.EVENT_MESSAGE_RECEIVED) {
|
|
69
63
|
const nextMessageIds = nextMessages.map(it => it.messageId);
|
|
70
64
|
const nonAddedMessagesFromReceivedEvent = messages.filter(it => nextMessageIds.indexOf(it.messageId) === -1);
|
|
71
65
|
updateNextMessages(nonAddedMessagesFromReceivedEvent, false, sdk.currentUser.userId);
|
|
72
|
-
}
|
|
73
|
-
// This is not intended behavior but not bugs.
|
|
74
|
-
|
|
66
|
+
}
|
|
75
67
|
|
|
68
|
+
// NOTE: v4 MESSAGE_RECEIVED is called twice from onMessagesAdded and onMessagesUpdated when receiving new message.
|
|
69
|
+
// This is not intended behavior but not bugs.
|
|
76
70
|
if (_.source !== MessageEventSource.EVENT_MESSAGE_RECEIVED) {
|
|
77
71
|
updateMessages(messages, false, sdk.currentUser.userId);
|
|
78
72
|
}
|
|
@@ -83,7 +77,6 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
83
77
|
},
|
|
84
78
|
onChannelDeleted: () => {
|
|
85
79
|
var _options$onChannelDel;
|
|
86
|
-
|
|
87
80
|
options === null || options === void 0 ? void 0 : (_options$onChannelDel = options.onChannelDeleted) === null || _options$onChannelDel === void 0 ? void 0 : _options$onChannelDel.call(options);
|
|
88
81
|
},
|
|
89
82
|
onChannelUpdated: (_, eventChannel) => {
|
|
@@ -98,7 +91,6 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
98
91
|
collectionRef.current.initialize(MessageCollectionInitPolicy.CACHE_AND_REPLACE_BY_API).onCacheResult((err, messages) => {
|
|
99
92
|
if (err) sdk.isCacheEnabled && Logger.error('[useGroupChannelMessagesWithCollection/onCacheResult]', err);else {
|
|
100
93
|
var _collectionRef$curren3, _collectionRef$curren4;
|
|
101
|
-
|
|
102
94
|
Logger.debug('[useGroupChannelMessagesWithCollection/onCacheResult]', 'message length:', messages.length);
|
|
103
95
|
updateMessages(messages, true, sdk.currentUser.userId);
|
|
104
96
|
updateMessages(((_collectionRef$curren3 = collectionRef.current) === null || _collectionRef$curren3 === void 0 ? void 0 : _collectionRef$curren3.pendingMessages) ?? [], false, sdk.currentUser.userId);
|
|
@@ -109,10 +101,8 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
109
101
|
if (err) Logger.warn('[useGroupChannelMessagesWithCollection/onApiResult]', err);else {
|
|
110
102
|
Logger.debug('[useGroupChannelMessagesWithCollection/onApiResult]', 'message length:', messages.length);
|
|
111
103
|
updateMessages(messages, true, sdk.currentUser.userId);
|
|
112
|
-
|
|
113
104
|
if (sdk.isCacheEnabled) {
|
|
114
105
|
var _collectionRef$curren5, _collectionRef$curren6;
|
|
115
|
-
|
|
116
106
|
updateMessages(((_collectionRef$curren5 = collectionRef.current) === null || _collectionRef$curren5 === void 0 ? void 0 : _collectionRef$curren5.pendingMessages) ?? [], false, sdk.currentUser.userId);
|
|
117
107
|
updateMessages(((_collectionRef$curren6 = collectionRef.current) === null || _collectionRef$curren6 === void 0 ? void 0 : _collectionRef$curren6.failedMessages) ?? [], false, sdk.currentUser.userId);
|
|
118
108
|
}
|
|
@@ -120,20 +110,18 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
120
110
|
callback === null || callback === void 0 ? void 0 : callback();
|
|
121
111
|
});
|
|
122
112
|
}
|
|
123
|
-
}
|
|
113
|
+
});
|
|
124
114
|
useChannelHandler(sdk, handlerId, {
|
|
125
115
|
onUserBanned(channel, bannedUser) {
|
|
126
116
|
if (channel.isGroupChannel() && !isDifferentChannel(channel, channel)) {
|
|
127
117
|
if (bannedUser.userId === sdk.currentUser.userId) {
|
|
128
118
|
var _options$onChannelDel2;
|
|
129
|
-
|
|
130
119
|
options === null || options === void 0 ? void 0 : (_options$onChannelDel2 = options.onChannelDeleted) === null || _options$onChannelDel2 === void 0 ? void 0 : _options$onChannelDel2.call(options);
|
|
131
120
|
} else {
|
|
132
121
|
forceUpdate();
|
|
133
122
|
}
|
|
134
123
|
}
|
|
135
124
|
}
|
|
136
|
-
|
|
137
125
|
});
|
|
138
126
|
useEffect(() => {
|
|
139
127
|
// NOTE: Cache read is heavy task, and it prevents smooth ui transition
|
|
@@ -141,11 +129,10 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
141
129
|
updateLoading(true);
|
|
142
130
|
init(userId, () => updateLoading(false));
|
|
143
131
|
}, 0);
|
|
144
|
-
}, [
|
|
132
|
+
}, [channel.url, userId]);
|
|
145
133
|
useEffect(() => {
|
|
146
134
|
return () => {
|
|
147
135
|
var _collectionRef$curren7;
|
|
148
|
-
|
|
149
136
|
if (collectionRef.current) (_collectionRef$curren7 = collectionRef.current) === null || _collectionRef$curren7 === void 0 ? void 0 : _collectionRef$curren7.dispose();
|
|
150
137
|
};
|
|
151
138
|
}, []);
|
|
@@ -155,11 +142,9 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
155
142
|
});
|
|
156
143
|
const prev = useFreshCallback(async () => {
|
|
157
144
|
var _collectionRef$curren8;
|
|
158
|
-
|
|
159
145
|
if (collectionRef.current && (_collectionRef$curren8 = collectionRef.current) !== null && _collectionRef$curren8 !== void 0 && _collectionRef$curren8.hasPrevious) {
|
|
160
146
|
try {
|
|
161
147
|
var _collectionRef$curren9;
|
|
162
|
-
|
|
163
148
|
const list = await ((_collectionRef$curren9 = collectionRef.current) === null || _collectionRef$curren9 === void 0 ? void 0 : _collectionRef$curren9.loadPrevious());
|
|
164
149
|
updateMessages(list, false, sdk.currentUser.userId);
|
|
165
150
|
} catch {}
|
|
@@ -167,22 +152,17 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
167
152
|
});
|
|
168
153
|
const next = useFreshCallback(async () => {
|
|
169
154
|
var _collectionRef$curren10;
|
|
170
|
-
|
|
171
155
|
const messageCandidates = [];
|
|
172
|
-
|
|
173
156
|
if (collectionRef.current && (_collectionRef$curren10 = collectionRef.current) !== null && _collectionRef$curren10 !== void 0 && _collectionRef$curren10.hasNext) {
|
|
174
157
|
try {
|
|
175
158
|
var _collectionRef$curren11;
|
|
176
|
-
|
|
177
159
|
const fetchedList = await ((_collectionRef$curren11 = collectionRef.current) === null || _collectionRef$curren11 === void 0 ? void 0 : _collectionRef$curren11.loadNext());
|
|
178
160
|
messageCandidates.push(...fetchedList);
|
|
179
161
|
} catch {}
|
|
180
162
|
}
|
|
181
|
-
|
|
182
163
|
if (nextMessages.length > 0) {
|
|
183
164
|
messageCandidates.push(...nextMessages);
|
|
184
165
|
}
|
|
185
|
-
|
|
186
166
|
if (messageCandidates.length > 0) {
|
|
187
167
|
updateMessages(messageCandidates, false, sdk.currentUser.userId);
|
|
188
168
|
updateNextMessages([], true, sdk.currentUser.userId);
|
|
@@ -249,7 +229,6 @@ export const useGroupChannelMessagesWithCollection = (sdk, channel, userId, opti
|
|
|
249
229
|
} else {
|
|
250
230
|
try {
|
|
251
231
|
var _collectionRef$curren12;
|
|
252
|
-
|
|
253
232
|
await ((_collectionRef$curren12 = collectionRef.current) === null || _collectionRef$curren12 === void 0 ? void 0 : _collectionRef$curren12.removeFailedMessage(message.reqId));
|
|
254
233
|
} finally {
|
|
255
234
|
deleteMessages([message.messageId], [message.reqId]);
|
package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useEffect","useRef","MessageCollectionInitPolicy","MessageEventSource","MessageFilter","Logger","confirmAndMarkAsRead","isDifferentChannel","useForceUpdate","useFreshCallback","useUniqHandlerId","useChannelHandler","useGroupChannelMessagesReducer","createMessageCollection","channel","creator","filter","limit","useGroupChannelMessagesWithCollection","sdk","userId","options","forceUpdate","collectionRef","handlerId","loading","refreshing","messages","nextMessages","newMessagesFromMembers","updateMessages","updateNextMessages","deleteNextMessages","deleteMessages","updateLoading","updateRefreshing","sortComparator","channelMarkAsRead","source","EVENT_MESSAGE_RECEIVED","EVENT_MESSAGE_SENT_SUCCESS","SYNC_MESSAGE_FILL","undefined","e","warn","init","uid","callback","current","dispose","collectionCreator","currentUser","setMessageCollectionHandler","onMessagesAdded","_","__","onMessagesUpdated","nextMessageIds","map","it","messageId","nonAddedMessagesFromReceivedEvent","indexOf","onMessagesDeleted","messageIds","onChannelDeleted","onChannelUpdated","eventChannel","isGroupChannel","onHugeGapDetected","initialize","CACHE_AND_REPLACE_BY_API","onCacheResult","err","isCacheEnabled","error","debug","length","pendingMessages","failedMessages","onApiResult","url","onUserBanned","bannedUser","setTimeout","refresh","prev","hasPrevious","list","loadPrevious","next","messageCandidates","hasNext","fetchedList","loadNext","push","sendUserMessage","params","onPending","Promise","resolve","reject","pendingMessage","isUserMessage","onSucceeded","sentMessage","onFailed","_failedMessage","sendFileMessage","isFileMessage","updateUserMessage","updatedMessage","updateFileMessage","resendMessage","failedMessage","resentMessage","resendUserMessage","resendFileMessage","deleteMessage","message","sendingStatus","removeFailedMessage","reqId"],"sources":["useGroupChannelMessagesWithCollection.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\n\nimport { MessageCollectionInitPolicy, MessageEventSource, MessageFilter } from '@sendbird/chat/groupChannel';\nimport type {\n SendbirdBaseMessage,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessageCollection,\n} from '@sendbird/uikit-utils';\nimport {\n Logger,\n confirmAndMarkAsRead,\n isDifferentChannel,\n useForceUpdate,\n useFreshCallback,\n useUniqHandlerId,\n} from '@sendbird/uikit-utils';\n\nimport { useChannelHandler } from '../../handler/useChannelHandler';\nimport type { UseGroupChannelMessages, UseGroupChannelMessagesOptions } from '../../types';\nimport { useGroupChannelMessagesReducer } from './reducer';\n\nconst createMessageCollection = (\n channel: SendbirdGroupChannel,\n creator?: UseGroupChannelMessagesOptions['collectionCreator'],\n) => {\n if (creator) return creator();\n const filter = new MessageFilter();\n return channel.createMessageCollection({ filter, limit: 100 });\n};\n\nexport const useGroupChannelMessagesWithCollection: UseGroupChannelMessages = (sdk, channel, userId, options) => {\n const forceUpdate = useForceUpdate();\n const collectionRef = useRef<SendbirdMessageCollection>();\n const handlerId = useUniqHandlerId('useGroupChannelMessagesWithCollection');\n\n const {\n loading,\n refreshing,\n messages,\n nextMessages,\n newMessagesFromMembers,\n updateMessages,\n updateNextMessages,\n deleteNextMessages,\n deleteMessages,\n updateLoading,\n updateRefreshing,\n } = useGroupChannelMessagesReducer(userId, options?.sortComparator);\n\n const channelMarkAsRead = async (source?: MessageEventSource) => {\n try {\n switch (source) {\n case MessageEventSource.EVENT_MESSAGE_RECEIVED:\n case MessageEventSource.EVENT_MESSAGE_SENT_SUCCESS:\n case MessageEventSource.SYNC_MESSAGE_FILL:\n case undefined:\n await confirmAndMarkAsRead([channel]);\n break;\n }\n } catch (e) {\n Logger.warn('[useGroupChannelMessagesWithCollection/channelMarkAsRead]', e);\n }\n };\n\n const init = useCallback(\n async (uid?: string, callback?: () => void) => {\n if (collectionRef.current) collectionRef.current?.dispose();\n\n if (uid) {\n collectionRef.current = createMessageCollection(channel, options?.collectionCreator);\n updateNextMessages([], true, sdk.currentUser.userId);\n channelMarkAsRead();\n\n collectionRef.current?.setMessageCollectionHandler({\n onMessagesAdded: (_, __, messages) => {\n channelMarkAsRead(_.source);\n updateNextMessages(messages, false, sdk.currentUser.userId);\n },\n onMessagesUpdated: (_, __, messages) => {\n channelMarkAsRead(_.source);\n\n // NOTE: admin message is not added via onMessagesAdded handler, not checked yet is this a bug.\n if (_.source === MessageEventSource.EVENT_MESSAGE_RECEIVED) {\n const nextMessageIds = nextMessages.map((it) => it.messageId);\n const nonAddedMessagesFromReceivedEvent = messages.filter(\n (it) => nextMessageIds.indexOf(it.messageId) === -1,\n );\n updateNextMessages(nonAddedMessagesFromReceivedEvent, false, sdk.currentUser.userId);\n }\n\n // NOTE: v4 MESSAGE_RECEIVED is called twice from onMessagesAdded and onMessagesUpdated when receiving new message.\n // This is not intended behavior but not bugs.\n if (_.source !== MessageEventSource.EVENT_MESSAGE_RECEIVED) {\n updateMessages(messages, false, sdk.currentUser.userId);\n }\n },\n onMessagesDeleted: (_, __, messageIds) => {\n deleteMessages(messageIds, []);\n deleteNextMessages(messageIds, []);\n },\n onChannelDeleted: () => {\n options?.onChannelDeleted?.();\n },\n onChannelUpdated: (_, eventChannel) => {\n if (eventChannel.isGroupChannel() && !isDifferentChannel(eventChannel, channel)) {\n forceUpdate();\n }\n },\n onHugeGapDetected: () => {\n init(uid);\n },\n });\n\n collectionRef.current\n .initialize(MessageCollectionInitPolicy.CACHE_AND_REPLACE_BY_API)\n .onCacheResult((err, messages) => {\n if (err) sdk.isCacheEnabled && Logger.error('[useGroupChannelMessagesWithCollection/onCacheResult]', err);\n else {\n Logger.debug('[useGroupChannelMessagesWithCollection/onCacheResult]', 'message length:', messages.length);\n\n updateMessages(messages, true, sdk.currentUser.userId);\n updateMessages(collectionRef.current?.pendingMessages ?? [], false, sdk.currentUser.userId);\n updateMessages(collectionRef.current?.failedMessages ?? [], false, sdk.currentUser.userId);\n }\n callback?.();\n })\n .onApiResult((err, messages) => {\n if (err) Logger.warn('[useGroupChannelMessagesWithCollection/onApiResult]', err);\n else {\n Logger.debug('[useGroupChannelMessagesWithCollection/onApiResult]', 'message length:', messages.length);\n\n updateMessages(messages, true, sdk.currentUser.userId);\n if (sdk.isCacheEnabled) {\n updateMessages(collectionRef.current?.pendingMessages ?? [], false, sdk.currentUser.userId);\n updateMessages(collectionRef.current?.failedMessages ?? [], false, sdk.currentUser.userId);\n }\n }\n callback?.();\n });\n }\n },\n [sdk, channel.url, options?.collectionCreator],\n );\n\n useChannelHandler(sdk, handlerId, {\n onUserBanned(channel, bannedUser) {\n if (channel.isGroupChannel() && !isDifferentChannel(channel, channel)) {\n if (bannedUser.userId === sdk.currentUser.userId) {\n options?.onChannelDeleted?.();\n } else {\n forceUpdate();\n }\n }\n },\n });\n\n useEffect(() => {\n // NOTE: Cache read is heavy task, and it prevents smooth ui transition\n setTimeout(async () => {\n updateLoading(true);\n init(userId, () => updateLoading(false));\n }, 0);\n }, [init, userId]);\n\n useEffect(() => {\n return () => {\n if (collectionRef.current) collectionRef.current?.dispose();\n };\n }, []);\n\n const refresh: ReturnType<UseGroupChannelMessages>['refresh'] = useFreshCallback(async () => {\n updateRefreshing(true);\n init(userId, () => updateRefreshing(false));\n });\n\n const prev: ReturnType<UseGroupChannelMessages>['prev'] = useFreshCallback(async () => {\n if (collectionRef.current && collectionRef.current?.hasPrevious) {\n try {\n const list = await collectionRef.current?.loadPrevious();\n updateMessages(list, false, sdk.currentUser.userId);\n } catch {}\n }\n });\n\n const next: ReturnType<UseGroupChannelMessages>['next'] = useFreshCallback(async () => {\n const messageCandidates: SendbirdBaseMessage[] = [];\n\n if (collectionRef.current && collectionRef.current?.hasNext) {\n try {\n const fetchedList = await collectionRef.current?.loadNext();\n messageCandidates.push(...fetchedList);\n } catch {}\n }\n\n if (nextMessages.length > 0) {\n messageCandidates.push(...nextMessages);\n }\n\n if (messageCandidates.length > 0) {\n updateMessages(messageCandidates, false, sdk.currentUser.userId);\n updateNextMessages([], true, sdk.currentUser.userId);\n }\n });\n\n const sendUserMessage: ReturnType<UseGroupChannelMessages>['sendUserMessage'] = useFreshCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n channel\n .sendUserMessage(params)\n .onPending((pendingMessage) => {\n if (pendingMessage.isUserMessage()) {\n onPending?.(pendingMessage);\n updateMessages([pendingMessage], false, sdk.currentUser.userId);\n }\n })\n .onSucceeded((sentMessage) => {\n if (sentMessage.isUserMessage()) {\n updateMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage);\n }\n })\n .onFailed((err, _failedMessage) => {\n // updateMessages([failedMessage], false, sdk.currentUser.userId);\n reject(err);\n });\n });\n },\n );\n const sendFileMessage: ReturnType<UseGroupChannelMessages>['sendFileMessage'] = useFreshCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n channel\n .sendFileMessage(params)\n .onPending((pendingMessage) => {\n if (pendingMessage.isFileMessage()) {\n updateMessages([pendingMessage], false, sdk.currentUser.userId);\n onPending?.(pendingMessage);\n }\n })\n .onSucceeded((sentMessage) => {\n if (sentMessage.isFileMessage()) {\n updateMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage as SendbirdFileMessage);\n }\n })\n .onFailed((err, _failedMessage) => {\n // updateMessages([failedMessage], false, sdk.currentUser.userId);\n reject(err);\n });\n });\n },\n );\n const updateUserMessage: ReturnType<UseGroupChannelMessages>['updateUserMessage'] = useFreshCallback(\n async (messageId, params) => {\n const updatedMessage = await channel.updateUserMessage(messageId, params);\n updateMessages([updatedMessage], false, sdk.currentUser.userId);\n return updatedMessage;\n },\n );\n const updateFileMessage: ReturnType<UseGroupChannelMessages>['updateFileMessage'] = useFreshCallback(\n async (messageId, params) => {\n const updatedMessage = await channel.updateFileMessage(messageId, params);\n updateMessages([updatedMessage], false, sdk.currentUser.userId);\n return updatedMessage;\n },\n );\n const resendMessage: ReturnType<UseGroupChannelMessages>['resendMessage'] = useFreshCallback(\n async (failedMessage) => {\n const resentMessage = await (() => {\n if (failedMessage.isUserMessage()) return channel.resendUserMessage(failedMessage);\n if (failedMessage.isFileMessage()) return channel.resendFileMessage(failedMessage);\n return null;\n })();\n\n if (resentMessage) updateMessages([resentMessage], false, sdk.currentUser.userId);\n },\n );\n const deleteMessage: ReturnType<UseGroupChannelMessages>['deleteMessage'] = useFreshCallback(async (message) => {\n if (message.sendingStatus === 'succeeded') {\n if (message.isUserMessage()) await channel.deleteMessage(message);\n if (message.isFileMessage()) await channel.deleteMessage(message);\n } else {\n try {\n await collectionRef.current?.removeFailedMessage(message.reqId);\n } finally {\n deleteMessages([message.messageId], [message.reqId]);\n }\n }\n });\n\n return {\n loading,\n refreshing,\n refresh,\n messages,\n nextMessages,\n newMessagesFromMembers,\n next,\n prev,\n sendUserMessage,\n sendFileMessage,\n updateUserMessage,\n updateFileMessage,\n resendMessage,\n deleteMessage,\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","MessageCollectionInitPolicy","MessageEventSource","MessageFilter","Logger","confirmAndMarkAsRead","isDifferentChannel","useForceUpdate","useFreshCallback","useUniqHandlerId","useChannelHandler","useGroupChannelMessagesReducer","createMessageCollection","channel","creator","filter","limit","useGroupChannelMessagesWithCollection","sdk","userId","options","forceUpdate","collectionRef","handlerId","loading","refreshing","messages","nextMessages","newMessagesFromMembers","updateMessages","updateNextMessages","deleteNextMessages","deleteMessages","updateLoading","updateRefreshing","sortComparator","channelMarkAsRead","source","EVENT_MESSAGE_RECEIVED","EVENT_MESSAGE_SENT_SUCCESS","SYNC_MESSAGE_FILL","undefined","e","warn","init","uid","callback","_collectionRef$curren","current","dispose","_collectionRef$curren2","collectionCreator","currentUser","setMessageCollectionHandler","onMessagesAdded","_","__","onMessagesUpdated","nextMessageIds","map","it","messageId","nonAddedMessagesFromReceivedEvent","indexOf","onMessagesDeleted","messageIds","onChannelDeleted","_options$onChannelDel","call","onChannelUpdated","eventChannel","isGroupChannel","onHugeGapDetected","initialize","CACHE_AND_REPLACE_BY_API","onCacheResult","err","isCacheEnabled","error","_collectionRef$curren3","_collectionRef$curren4","debug","length","pendingMessages","failedMessages","onApiResult","_collectionRef$curren5","_collectionRef$curren6","onUserBanned","bannedUser","_options$onChannelDel2","setTimeout","url","_collectionRef$curren7","refresh","prev","_collectionRef$curren8","hasPrevious","_collectionRef$curren9","list","loadPrevious","next","_collectionRef$curren10","messageCandidates","hasNext","_collectionRef$curren11","fetchedList","loadNext","push","sendUserMessage","params","onPending","Promise","resolve","reject","pendingMessage","isUserMessage","onSucceeded","sentMessage","onFailed","_failedMessage","sendFileMessage","isFileMessage","updateUserMessage","updatedMessage","updateFileMessage","resendMessage","failedMessage","resentMessage","resendUserMessage","resendFileMessage","deleteMessage","message","sendingStatus","_collectionRef$curren12","removeFailedMessage","reqId"],"sources":["useGroupChannelMessagesWithCollection.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport { MessageCollectionInitPolicy, MessageEventSource, MessageFilter } from '@sendbird/chat/groupChannel';\nimport type {\n SendbirdBaseMessage,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessageCollection,\n} from '@sendbird/uikit-utils';\nimport {\n Logger,\n confirmAndMarkAsRead,\n isDifferentChannel,\n useForceUpdate,\n useFreshCallback,\n useUniqHandlerId,\n} from '@sendbird/uikit-utils';\n\nimport { useChannelHandler } from '../../handler/useChannelHandler';\nimport type { UseGroupChannelMessages, UseGroupChannelMessagesOptions } from '../../types';\nimport { useGroupChannelMessagesReducer } from './reducer';\n\nconst createMessageCollection = (\n channel: SendbirdGroupChannel,\n creator?: UseGroupChannelMessagesOptions['collectionCreator'],\n) => {\n if (creator) return creator();\n const filter = new MessageFilter();\n return channel.createMessageCollection({ filter, limit: 100 });\n};\n\nexport const useGroupChannelMessagesWithCollection: UseGroupChannelMessages = (sdk, channel, userId, options) => {\n const forceUpdate = useForceUpdate();\n const collectionRef = useRef<SendbirdMessageCollection>();\n const handlerId = useUniqHandlerId('useGroupChannelMessagesWithCollection');\n\n const {\n loading,\n refreshing,\n messages,\n nextMessages,\n newMessagesFromMembers,\n updateMessages,\n updateNextMessages,\n deleteNextMessages,\n deleteMessages,\n updateLoading,\n updateRefreshing,\n } = useGroupChannelMessagesReducer(userId, options?.sortComparator);\n\n const channelMarkAsRead = async (source?: MessageEventSource) => {\n try {\n switch (source) {\n case MessageEventSource.EVENT_MESSAGE_RECEIVED:\n case MessageEventSource.EVENT_MESSAGE_SENT_SUCCESS:\n case MessageEventSource.SYNC_MESSAGE_FILL:\n case undefined:\n await confirmAndMarkAsRead([channel]);\n break;\n }\n } catch (e) {\n Logger.warn('[useGroupChannelMessagesWithCollection/channelMarkAsRead]', e);\n }\n };\n\n const init = useFreshCallback(async (uid?: string, callback?: () => void) => {\n if (collectionRef.current) collectionRef.current?.dispose();\n\n if (uid) {\n collectionRef.current = createMessageCollection(channel, options?.collectionCreator);\n updateNextMessages([], true, sdk.currentUser.userId);\n channelMarkAsRead();\n\n collectionRef.current?.setMessageCollectionHandler({\n onMessagesAdded: (_, __, messages) => {\n channelMarkAsRead(_.source);\n updateNextMessages(messages, false, sdk.currentUser.userId);\n },\n onMessagesUpdated: (_, __, messages) => {\n channelMarkAsRead(_.source);\n\n // NOTE: admin message is not added via onMessagesAdded handler, not checked yet is this a bug.\n if (_.source === MessageEventSource.EVENT_MESSAGE_RECEIVED) {\n const nextMessageIds = nextMessages.map((it) => it.messageId);\n const nonAddedMessagesFromReceivedEvent = messages.filter(\n (it) => nextMessageIds.indexOf(it.messageId) === -1,\n );\n updateNextMessages(nonAddedMessagesFromReceivedEvent, false, sdk.currentUser.userId);\n }\n\n // NOTE: v4 MESSAGE_RECEIVED is called twice from onMessagesAdded and onMessagesUpdated when receiving new message.\n // This is not intended behavior but not bugs.\n if (_.source !== MessageEventSource.EVENT_MESSAGE_RECEIVED) {\n updateMessages(messages, false, sdk.currentUser.userId);\n }\n },\n onMessagesDeleted: (_, __, messageIds) => {\n deleteMessages(messageIds, []);\n deleteNextMessages(messageIds, []);\n },\n onChannelDeleted: () => {\n options?.onChannelDeleted?.();\n },\n onChannelUpdated: (_, eventChannel) => {\n if (eventChannel.isGroupChannel() && !isDifferentChannel(eventChannel, channel)) {\n forceUpdate();\n }\n },\n onHugeGapDetected: () => {\n init(uid);\n },\n });\n\n collectionRef.current\n .initialize(MessageCollectionInitPolicy.CACHE_AND_REPLACE_BY_API)\n .onCacheResult((err, messages) => {\n if (err) sdk.isCacheEnabled && Logger.error('[useGroupChannelMessagesWithCollection/onCacheResult]', err);\n else {\n Logger.debug('[useGroupChannelMessagesWithCollection/onCacheResult]', 'message length:', messages.length);\n\n updateMessages(messages, true, sdk.currentUser.userId);\n updateMessages(collectionRef.current?.pendingMessages ?? [], false, sdk.currentUser.userId);\n updateMessages(collectionRef.current?.failedMessages ?? [], false, sdk.currentUser.userId);\n }\n callback?.();\n })\n .onApiResult((err, messages) => {\n if (err) Logger.warn('[useGroupChannelMessagesWithCollection/onApiResult]', err);\n else {\n Logger.debug('[useGroupChannelMessagesWithCollection/onApiResult]', 'message length:', messages.length);\n\n updateMessages(messages, true, sdk.currentUser.userId);\n if (sdk.isCacheEnabled) {\n updateMessages(collectionRef.current?.pendingMessages ?? [], false, sdk.currentUser.userId);\n updateMessages(collectionRef.current?.failedMessages ?? [], false, sdk.currentUser.userId);\n }\n }\n callback?.();\n });\n }\n });\n\n useChannelHandler(sdk, handlerId, {\n onUserBanned(channel, bannedUser) {\n if (channel.isGroupChannel() && !isDifferentChannel(channel, channel)) {\n if (bannedUser.userId === sdk.currentUser.userId) {\n options?.onChannelDeleted?.();\n } else {\n forceUpdate();\n }\n }\n },\n });\n\n useEffect(() => {\n // NOTE: Cache read is heavy task, and it prevents smooth ui transition\n setTimeout(async () => {\n updateLoading(true);\n init(userId, () => updateLoading(false));\n }, 0);\n }, [channel.url, userId]);\n\n useEffect(() => {\n return () => {\n if (collectionRef.current) collectionRef.current?.dispose();\n };\n }, []);\n\n const refresh: ReturnType<UseGroupChannelMessages>['refresh'] = useFreshCallback(async () => {\n updateRefreshing(true);\n init(userId, () => updateRefreshing(false));\n });\n\n const prev: ReturnType<UseGroupChannelMessages>['prev'] = useFreshCallback(async () => {\n if (collectionRef.current && collectionRef.current?.hasPrevious) {\n try {\n const list = await collectionRef.current?.loadPrevious();\n updateMessages(list, false, sdk.currentUser.userId);\n } catch {}\n }\n });\n\n const next: ReturnType<UseGroupChannelMessages>['next'] = useFreshCallback(async () => {\n const messageCandidates: SendbirdBaseMessage[] = [];\n\n if (collectionRef.current && collectionRef.current?.hasNext) {\n try {\n const fetchedList = await collectionRef.current?.loadNext();\n messageCandidates.push(...fetchedList);\n } catch {}\n }\n\n if (nextMessages.length > 0) {\n messageCandidates.push(...nextMessages);\n }\n\n if (messageCandidates.length > 0) {\n updateMessages(messageCandidates, false, sdk.currentUser.userId);\n updateNextMessages([], true, sdk.currentUser.userId);\n }\n });\n\n const sendUserMessage: ReturnType<UseGroupChannelMessages>['sendUserMessage'] = useFreshCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n channel\n .sendUserMessage(params)\n .onPending((pendingMessage) => {\n if (pendingMessage.isUserMessage()) {\n onPending?.(pendingMessage);\n updateMessages([pendingMessage], false, sdk.currentUser.userId);\n }\n })\n .onSucceeded((sentMessage) => {\n if (sentMessage.isUserMessage()) {\n updateMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage);\n }\n })\n .onFailed((err, _failedMessage) => {\n // updateMessages([failedMessage], false, sdk.currentUser.userId);\n reject(err);\n });\n });\n },\n );\n const sendFileMessage: ReturnType<UseGroupChannelMessages>['sendFileMessage'] = useFreshCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n channel\n .sendFileMessage(params)\n .onPending((pendingMessage) => {\n if (pendingMessage.isFileMessage()) {\n updateMessages([pendingMessage], false, sdk.currentUser.userId);\n onPending?.(pendingMessage);\n }\n })\n .onSucceeded((sentMessage) => {\n if (sentMessage.isFileMessage()) {\n updateMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage as SendbirdFileMessage);\n }\n })\n .onFailed((err, _failedMessage) => {\n // updateMessages([failedMessage], false, sdk.currentUser.userId);\n reject(err);\n });\n });\n },\n );\n const updateUserMessage: ReturnType<UseGroupChannelMessages>['updateUserMessage'] = useFreshCallback(\n async (messageId, params) => {\n const updatedMessage = await channel.updateUserMessage(messageId, params);\n updateMessages([updatedMessage], false, sdk.currentUser.userId);\n return updatedMessage;\n },\n );\n const updateFileMessage: ReturnType<UseGroupChannelMessages>['updateFileMessage'] = useFreshCallback(\n async (messageId, params) => {\n const updatedMessage = await channel.updateFileMessage(messageId, params);\n updateMessages([updatedMessage], false, sdk.currentUser.userId);\n return updatedMessage;\n },\n );\n const resendMessage: ReturnType<UseGroupChannelMessages>['resendMessage'] = useFreshCallback(\n async (failedMessage) => {\n const resentMessage = await (() => {\n if (failedMessage.isUserMessage()) return channel.resendUserMessage(failedMessage);\n if (failedMessage.isFileMessage()) return channel.resendFileMessage(failedMessage);\n return null;\n })();\n\n if (resentMessage) updateMessages([resentMessage], false, sdk.currentUser.userId);\n },\n );\n const deleteMessage: ReturnType<UseGroupChannelMessages>['deleteMessage'] = useFreshCallback(async (message) => {\n if (message.sendingStatus === 'succeeded') {\n if (message.isUserMessage()) await channel.deleteMessage(message);\n if (message.isFileMessage()) await channel.deleteMessage(message);\n } else {\n try {\n await collectionRef.current?.removeFailedMessage(message.reqId);\n } finally {\n deleteMessages([message.messageId], [message.reqId]);\n }\n }\n });\n\n return {\n loading,\n refreshing,\n refresh,\n messages,\n nextMessages,\n newMessagesFromMembers,\n next,\n prev,\n sendUserMessage,\n sendFileMessage,\n updateUserMessage,\n updateFileMessage,\n resendMessage,\n deleteMessage,\n };\n};\n"],"mappings":"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"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Logger, confirmAndMarkAsRead, isDifferentChannel, useAsyncEffect, useForceUpdate, useUniqHandlerId } from '@sendbird/uikit-utils';
|
|
1
|
+
import { useRef } from 'react';
|
|
2
|
+
import { Logger, confirmAndMarkAsRead, isDifferentChannel, useAsyncEffect, useForceUpdate, useFreshCallback, useUniqHandlerId } from '@sendbird/uikit-utils';
|
|
3
3
|
import { useChannelHandler } from '../../handler/useChannelHandler';
|
|
4
4
|
import { useGroupChannelMessagesReducer } from './reducer';
|
|
5
|
-
|
|
6
5
|
const createMessageQuery = (channel, creator) => {
|
|
7
6
|
if (creator) return creator();
|
|
8
7
|
return channel.createPreviousMessageListQuery({
|
|
@@ -10,7 +9,6 @@ const createMessageQuery = (channel, creator) => {
|
|
|
10
9
|
reverse: true
|
|
11
10
|
});
|
|
12
11
|
};
|
|
13
|
-
|
|
14
12
|
export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options) => {
|
|
15
13
|
const queryRef = useRef();
|
|
16
14
|
const handlerId = useUniqHandlerId('useGroupChannelMessagesWithQuery');
|
|
@@ -28,7 +26,6 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
|
|
|
28
26
|
updateLoading,
|
|
29
27
|
updateRefreshing
|
|
30
28
|
} = useGroupChannelMessagesReducer(userId, options === null || options === void 0 ? void 0 : options.sortComparator);
|
|
31
|
-
|
|
32
29
|
const channelMarkAsRead = async () => {
|
|
33
30
|
try {
|
|
34
31
|
await confirmAndMarkAsRead([channel]);
|
|
@@ -36,31 +33,24 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
|
|
|
36
33
|
Logger.warn('[useGroupChannelMessagesWithQuery/channelMarkAsRead]', e);
|
|
37
34
|
}
|
|
38
35
|
};
|
|
39
|
-
|
|
40
|
-
const init = useCallback(async uid => {
|
|
36
|
+
const init = useFreshCallback(async uid => {
|
|
41
37
|
if (uid) {
|
|
42
38
|
var _queryRef$current;
|
|
43
|
-
|
|
44
39
|
queryRef.current = createMessageQuery(channel, options === null || options === void 0 ? void 0 : options.queryCreator);
|
|
45
40
|
channelMarkAsRead();
|
|
46
|
-
|
|
47
41
|
if ((_queryRef$current = queryRef.current) !== null && _queryRef$current !== void 0 && _queryRef$current.hasNext) {
|
|
48
42
|
var _queryRef$current2;
|
|
49
|
-
|
|
50
43
|
const list = await ((_queryRef$current2 = queryRef.current) === null || _queryRef$current2 === void 0 ? void 0 : _queryRef$current2.load());
|
|
51
44
|
updateMessages(list, true, sdk.currentUser.userId);
|
|
52
45
|
}
|
|
53
|
-
|
|
54
46
|
updateNextMessages([], true, sdk.currentUser.userId);
|
|
55
47
|
}
|
|
56
|
-
}
|
|
57
|
-
|
|
48
|
+
});
|
|
58
49
|
const channelUpdater = channel => {
|
|
59
50
|
if (channel.isGroupChannel() && !isDifferentChannel(channel, channel)) {
|
|
60
51
|
forceUpdate();
|
|
61
52
|
}
|
|
62
53
|
};
|
|
63
|
-
|
|
64
54
|
useChannelHandler(sdk, handlerId, {
|
|
65
55
|
// Messages
|
|
66
56
|
onMessageReceived(eventChannel, message) {
|
|
@@ -68,35 +58,28 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
|
|
|
68
58
|
channelMarkAsRead();
|
|
69
59
|
updateNextMessages([message], false, sdk.currentUser.userId);
|
|
70
60
|
},
|
|
71
|
-
|
|
72
61
|
onMessageUpdated(eventChannel, message) {
|
|
73
62
|
if (isDifferentChannel(channel, eventChannel)) return;
|
|
74
63
|
updateMessages([message], false, sdk.currentUser.userId);
|
|
75
64
|
},
|
|
76
|
-
|
|
77
65
|
onMessageDeleted(eventChannel, messageId) {
|
|
78
66
|
if (isDifferentChannel(channel, eventChannel)) return;
|
|
79
67
|
deleteMessages([messageId], []);
|
|
80
68
|
deleteNextMessages([messageId], []);
|
|
81
69
|
},
|
|
82
|
-
|
|
83
70
|
// Channels
|
|
84
71
|
onChannelChanged: channelUpdater,
|
|
85
72
|
onChannelFrozen: channelUpdater,
|
|
86
73
|
onChannelUnfrozen: channelUpdater,
|
|
87
74
|
onChannelHidden: channelUpdater,
|
|
88
|
-
|
|
89
75
|
onChannelMemberCountChanged(channels) {
|
|
90
76
|
const foundChannel = channels.find(c => !isDifferentChannel(c, channel));
|
|
91
77
|
if (foundChannel) channelUpdater(foundChannel);
|
|
92
78
|
},
|
|
93
|
-
|
|
94
79
|
onChannelDeleted(channelUrl) {
|
|
95
80
|
var _options$onChannelDel;
|
|
96
|
-
|
|
97
81
|
if (channel.url === channelUrl) options === null || options === void 0 ? void 0 : (_options$onChannelDel = options.onChannelDeleted) === null || _options$onChannelDel === void 0 ? void 0 : _options$onChannelDel.call(options);
|
|
98
82
|
},
|
|
99
|
-
|
|
100
83
|
// Users
|
|
101
84
|
onOperatorUpdated: channelUpdater,
|
|
102
85
|
onUserLeft: channelUpdater,
|
|
@@ -106,47 +89,41 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
|
|
|
106
89
|
onUserUnbanned: channelUpdater,
|
|
107
90
|
onUserMuted: channelUpdater,
|
|
108
91
|
onUserUnmuted: channelUpdater,
|
|
109
|
-
|
|
110
92
|
onUserBanned(eventChannel, bannedUser) {
|
|
111
93
|
if (isDifferentChannel(channel, eventChannel)) return;
|
|
112
|
-
|
|
113
94
|
if (bannedUser.userId === sdk.currentUser.userId) {
|
|
114
95
|
var _options$onChannelDel2;
|
|
115
|
-
|
|
116
96
|
options === null || options === void 0 ? void 0 : (_options$onChannelDel2 = options.onChannelDeleted) === null || _options$onChannelDel2 === void 0 ? void 0 : _options$onChannelDel2.call(options);
|
|
117
97
|
} else {
|
|
118
98
|
channelUpdater(eventChannel);
|
|
119
99
|
}
|
|
120
100
|
}
|
|
121
|
-
|
|
122
101
|
});
|
|
123
102
|
useAsyncEffect(async () => {
|
|
124
103
|
updateLoading(true);
|
|
125
104
|
await init(userId);
|
|
126
105
|
updateLoading(false);
|
|
127
|
-
}, [
|
|
128
|
-
const refresh =
|
|
106
|
+
}, [channel.url, userId]);
|
|
107
|
+
const refresh = useFreshCallback(async () => {
|
|
129
108
|
updateRefreshing(true);
|
|
130
109
|
await init(userId);
|
|
131
110
|
updateRefreshing(false);
|
|
132
|
-
}
|
|
133
|
-
const prev =
|
|
111
|
+
});
|
|
112
|
+
const prev = useFreshCallback(async () => {
|
|
134
113
|
var _queryRef$current3;
|
|
135
|
-
|
|
136
114
|
if (queryRef.current && (_queryRef$current3 = queryRef.current) !== null && _queryRef$current3 !== void 0 && _queryRef$current3.hasNext) {
|
|
137
115
|
var _queryRef$current4;
|
|
138
|
-
|
|
139
116
|
const list = await ((_queryRef$current4 = queryRef.current) === null || _queryRef$current4 === void 0 ? void 0 : _queryRef$current4.load());
|
|
140
117
|
updateMessages(list, false, sdk.currentUser.userId);
|
|
141
118
|
}
|
|
142
|
-
}
|
|
143
|
-
const next =
|
|
119
|
+
});
|
|
120
|
+
const next = useFreshCallback(async () => {
|
|
144
121
|
if (nextMessages.length > 0) {
|
|
145
122
|
updateMessages(nextMessages, false, sdk.currentUser.userId);
|
|
146
123
|
updateNextMessages([], true, sdk.currentUser.userId);
|
|
147
124
|
}
|
|
148
|
-
}
|
|
149
|
-
const sendUserMessage =
|
|
125
|
+
});
|
|
126
|
+
const sendUserMessage = useFreshCallback((params, onPending) => {
|
|
150
127
|
return new Promise((resolve, reject) => {
|
|
151
128
|
channel.sendUserMessage(params).onPending(pendingMessage => {
|
|
152
129
|
if (pendingMessage.isUserMessage()) {
|
|
@@ -163,8 +140,8 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
|
|
|
163
140
|
reject(err);
|
|
164
141
|
});
|
|
165
142
|
});
|
|
166
|
-
}
|
|
167
|
-
const sendFileMessage =
|
|
143
|
+
});
|
|
144
|
+
const sendFileMessage = useFreshCallback((params, onPending) => {
|
|
168
145
|
return new Promise((resolve, reject) => {
|
|
169
146
|
channel.sendFileMessage(params).onPending(pendingMessage => {
|
|
170
147
|
if (pendingMessage.isFileMessage()) {
|
|
@@ -181,33 +158,33 @@ export const useGroupChannelMessagesWithQuery = (sdk, channel, userId, options)
|
|
|
181
158
|
reject(err);
|
|
182
159
|
});
|
|
183
160
|
});
|
|
184
|
-
}
|
|
185
|
-
const updateUserMessage =
|
|
161
|
+
});
|
|
162
|
+
const updateUserMessage = useFreshCallback(async (messageId, params) => {
|
|
186
163
|
const updatedMessage = await channel.updateUserMessage(messageId, params);
|
|
187
164
|
updateMessages([updatedMessage], false, sdk.currentUser.userId);
|
|
188
165
|
return updatedMessage;
|
|
189
|
-
}
|
|
190
|
-
const updateFileMessage =
|
|
166
|
+
});
|
|
167
|
+
const updateFileMessage = useFreshCallback(async (messageId, params) => {
|
|
191
168
|
const updatedMessage = await channel.updateFileMessage(messageId, params);
|
|
192
169
|
updateMessages([updatedMessage], false, sdk.currentUser.userId);
|
|
193
170
|
return updatedMessage;
|
|
194
|
-
}
|
|
195
|
-
const resendMessage =
|
|
171
|
+
});
|
|
172
|
+
const resendMessage = useFreshCallback(async failedMessage => {
|
|
196
173
|
const message = await (() => {
|
|
197
174
|
if (failedMessage.isUserMessage()) return channel.resendUserMessage(failedMessage);
|
|
198
175
|
if (failedMessage.isFileMessage()) return channel.resendFileMessage(failedMessage);
|
|
199
176
|
return null;
|
|
200
177
|
})();
|
|
201
178
|
if (message) updateNextMessages([message], false, sdk.currentUser.userId);
|
|
202
|
-
}
|
|
203
|
-
const deleteMessage =
|
|
179
|
+
});
|
|
180
|
+
const deleteMessage = useFreshCallback(async message => {
|
|
204
181
|
if (message.sendingStatus === 'succeeded') {
|
|
205
182
|
if (message.isUserMessage()) await channel.deleteMessage(message);
|
|
206
183
|
if (message.isFileMessage()) await channel.deleteMessage(message);
|
|
207
184
|
} else {
|
|
208
185
|
deleteMessages([message.messageId], [message.reqId]);
|
|
209
186
|
}
|
|
210
|
-
}
|
|
187
|
+
});
|
|
211
188
|
return {
|
|
212
189
|
loading,
|
|
213
190
|
refreshing,
|