@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.
- package/README.md +2 -2
- package/lib/commonjs/channel/useChannelMessagesReducer.js +153 -0
- package/lib/commonjs/channel/useChannelMessagesReducer.js.map +1 -0
- 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/useGroupChannelMessagesWithCollection.js +172 -131
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +76 -73
- 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 -22
- 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/useOpenChannelMessagesWithQuery.js +128 -57
- 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 +5 -20
- 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/commonjs/types.js.map +1 -1
- package/lib/module/channel/useChannelMessagesReducer.js +146 -0
- package/lib/module/channel/useChannelMessagesReducer.js.map +1 -0
- 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/useGroupChannelMessagesWithCollection.js +174 -125
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +78 -70
- 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 -17
- 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/useOpenChannelMessagesWithQuery.js +129 -53
- 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 +5 -15
- 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/module/types.js.map +1 -1
- package/lib/typescript/src/channel/useChannelMessagesReducer.d.ts +18 -0
- package/lib/typescript/src/channel/useGroupChannelList/reducer.d.ts +1 -1
- 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/lib/typescript/src/types.d.ts +51 -20
- package/package.json +15 -10
- package/src/channel/useChannelMessagesReducer.ts +143 -0
- 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/useGroupChannelMessagesWithCollection.ts +174 -105
- package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.ts +90 -63
- package/src/channel/useOpenChannelList/useOpenChannelListWithQuery.ts +1 -5
- package/src/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.ts +143 -26
- package/src/common/useUserList.ts +4 -4
- package/src/handler/useChannelHandler.ts +11 -24
- package/src/handler/useConnectionHandler.ts +11 -5
- package/src/index.ts +0 -1
- package/src/types.ts +58 -20
- package/lib/commonjs/channel/useGroupChannelMessages/reducer.js +0 -154
- package/lib/commonjs/channel/useGroupChannelMessages/reducer.js.map +0 -1
- package/lib/commonjs/channel/useOpenChannelMessages/reducer.js +0 -154
- package/lib/commonjs/channel/useOpenChannelMessages/reducer.js.map +0 -1
- package/lib/commonjs/common/useTotalUnreadChannelCount.js +0 -29
- package/lib/commonjs/common/useTotalUnreadChannelCount.js.map +0 -1
- package/lib/module/channel/useGroupChannelMessages/reducer.js +0 -144
- package/lib/module/channel/useGroupChannelMessages/reducer.js.map +0 -1
- package/lib/module/channel/useOpenChannelMessages/reducer.js +0 -144
- package/lib/module/channel/useOpenChannelMessages/reducer.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/channel/useGroupChannelMessages/reducer.d.ts +0 -15
- package/lib/typescript/src/channel/useOpenChannelMessages/reducer.d.ts +0 -15
- package/lib/typescript/src/common/useTotalUnreadChannelCount.d.ts +0 -6
- package/src/channel/useGroupChannelMessages/reducer.ts +0 -125
- package/src/channel/useOpenChannelMessages/reducer.ts +0 -125
- 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,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
|
-
};
|