@sendbird/uikit-chat-hooks 1.1.0 → 1.1.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/lib/commonjs/channel/{useGroupChannelList.js → useGroupChannelList/index.js} +1 -1
- package/lib/commonjs/channel/useGroupChannelList/index.js.map +1 -0
- package/lib/commonjs/channel/useGroupChannelList/reducer.js +184 -0
- package/lib/commonjs/channel/useGroupChannelList/reducer.js.map +1 -0
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithCollection.js +134 -0
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithCollection.js.map +1 -0
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithQuery.js +118 -0
- package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithQuery.js.map +1 -0
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +3 -3
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +2 -2
- package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
- package/lib/commonjs/common/useMessageOutgoingStatus.js +49 -0
- package/lib/commonjs/common/useMessageOutgoingStatus.js.map +1 -0
- package/lib/commonjs/index.js +12 -4
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/types.js.map +1 -1
- package/lib/module/channel/{useGroupChannelList.js → useGroupChannelList/index.js} +1 -1
- package/lib/module/channel/useGroupChannelList/index.js.map +1 -0
- package/lib/module/channel/useGroupChannelList/reducer.js +174 -0
- package/lib/module/channel/useGroupChannelList/reducer.js.map +1 -0
- package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js +120 -0
- package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js.map +1 -0
- package/lib/module/channel/useGroupChannelList/useGroupChannelListWithQuery.js +104 -0
- package/lib/module/channel/useGroupChannelList/useGroupChannelListWithQuery.js.map +1 -0
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +3 -3
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +2 -2
- package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
- package/lib/module/common/useMessageOutgoingStatus.js +36 -0
- package/lib/module/common/useMessageOutgoingStatus.js.map +1 -0
- package/lib/module/index.js +4 -3
- package/lib/module/index.js.map +1 -1
- package/lib/module/types.js.map +1 -1
- package/lib/typescript/src/channel/{useGroupChannelList.d.ts → useGroupChannelList/index.d.ts} +1 -1
- package/lib/typescript/src/channel/useGroupChannelList/reducer.d.ts +14 -0
- package/lib/typescript/src/channel/{useGroupChannelListWithCollection.d.ts → useGroupChannelList/useGroupChannelListWithCollection.d.ts} +1 -1
- package/lib/typescript/src/channel/{useGroupChannelListWithQuery.d.ts → useGroupChannelList/useGroupChannelListWithQuery.d.ts} +1 -1
- package/lib/typescript/src/common/useMessageOutgoingStatus.d.ts +3 -0
- package/lib/typescript/src/index.d.ts +4 -3
- package/lib/typescript/src/types.d.ts +0 -7
- package/package.json +3 -3
- package/src/channel/{useGroupChannelList.ts → useGroupChannelList/index.ts} +1 -1
- package/src/channel/useGroupChannelList/reducer.ts +154 -0
- package/src/channel/useGroupChannelList/useGroupChannelListWithCollection.ts +116 -0
- package/src/channel/useGroupChannelList/useGroupChannelListWithQuery.ts +114 -0
- package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.ts +3 -3
- package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.ts +2 -2
- package/src/common/useMessageOutgoingStatus.ts +56 -0
- package/src/index.ts +4 -3
- package/src/types.ts +0 -8
- package/lib/commonjs/channel/useGroupChannelList.js.map +0 -1
- package/lib/commonjs/channel/useGroupChannelListWithCollection.js +0 -148
- package/lib/commonjs/channel/useGroupChannelListWithCollection.js.map +0 -1
- package/lib/commonjs/channel/useGroupChannelListWithQuery.js +0 -130
- package/lib/commonjs/channel/useGroupChannelListWithQuery.js.map +0 -1
- package/lib/module/channel/useGroupChannelList.js.map +0 -1
- package/lib/module/channel/useGroupChannelListWithCollection.js +0 -135
- package/lib/module/channel/useGroupChannelListWithCollection.js.map +0 -1
- package/lib/module/channel/useGroupChannelListWithQuery.js +0 -117
- package/lib/module/channel/useGroupChannelListWithQuery.js.map +0 -1
- package/src/channel/useGroupChannelListWithCollection.ts +0 -139
- package/src/channel/useGroupChannelListWithQuery.ts +0 -119
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useGroupChannelList","sdk","userId","options","isCacheEnabled","enableCollectionWithoutLocalCache","useGroupChannelListWithCollection","useGroupChannelListWithQuery"],"sources":["index.ts"],"sourcesContent":["import type { UseGroupChannelList } from '../../types';\nimport { useGroupChannelListWithCollection } from './useGroupChannelListWithCollection';\nimport { useGroupChannelListWithQuery } from './useGroupChannelListWithQuery';\n\nexport const useGroupChannelList: UseGroupChannelList = (sdk, userId, options) => {\n if (sdk.isCacheEnabled || options?.enableCollectionWithoutLocalCache) {\n return useGroupChannelListWithCollection(sdk, userId, options);\n } else {\n return useGroupChannelListWithQuery(sdk, userId, options);\n }\n};\n"],"mappings":";;;;;;;AACA;;AACA;;AAEO,MAAMA,mBAAwC,GAAG,CAACC,GAAD,EAAMC,MAAN,EAAcC,OAAd,KAA0B;EAChF,IAAIF,GAAG,CAACG,cAAJ,IAAsBD,OAAtB,aAAsBA,OAAtB,eAAsBA,OAAO,CAAEE,iCAAnC,EAAsE;IACpE,OAAO,IAAAC,oEAAA,EAAkCL,GAAlC,EAAuCC,MAAvC,EAA+CC,OAA/C,CAAP;EACD,CAFD,MAEO;IACL,OAAO,IAAAI,0DAAA,EAA6BN,GAA7B,EAAkCC,MAAlC,EAA0CC,OAA1C,CAAP;EACD;AACF,CANM"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useGroupChannelListReducer = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
var _uikitUtils = require("@sendbird/uikit-utils");
|
|
11
|
+
|
|
12
|
+
const defaultReducer = (_ref, action) => {
|
|
13
|
+
let { ...draft
|
|
14
|
+
} = _ref;
|
|
15
|
+
const compareByOrder = createCompareByOrder(draft.order);
|
|
16
|
+
|
|
17
|
+
switch (action.type) {
|
|
18
|
+
case 'update_refreshing':
|
|
19
|
+
case 'update_loading':
|
|
20
|
+
{
|
|
21
|
+
const key = action.type === 'update_loading' ? 'loading' : 'refreshing';
|
|
22
|
+
draft[key] = action.value.status;
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
case 'update_channels':
|
|
27
|
+
{
|
|
28
|
+
(0, _uikitUtils.getGroupChannels)(action.value.channels).forEach(freshChannel => {
|
|
29
|
+
const idx = draft.groupChannels.findIndex(staleChannel => staleChannel.url === freshChannel.url);
|
|
30
|
+
if (idx > -1) draft.groupChannels[idx] = freshChannel;
|
|
31
|
+
});
|
|
32
|
+
compareByOrder && (draft.groupChannels = draft.groupChannels.sort(compareByOrder));
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
case 'delete_channels':
|
|
37
|
+
{
|
|
38
|
+
action.value.channelUrls.forEach(url => {
|
|
39
|
+
const idx = draft.groupChannels.findIndex(c => c.url === url);
|
|
40
|
+
if (idx > -1) draft.groupChannels.splice(idx, 1);
|
|
41
|
+
});
|
|
42
|
+
compareByOrder && (draft.groupChannels = draft.groupChannels.sort(compareByOrder));
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
case 'set_channels':
|
|
47
|
+
{
|
|
48
|
+
if (action.value.clearPrev) {
|
|
49
|
+
draft.groupChannels = (0, _uikitUtils.getGroupChannels)(action.value.channels);
|
|
50
|
+
} else {
|
|
51
|
+
draft.groupChannels = [...draft.groupChannels, ...(0, _uikitUtils.getGroupChannels)(action.value.channels)];
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
compareByOrder && (draft.groupChannels = draft.groupChannels.sort(compareByOrder));
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
case 'update_order':
|
|
59
|
+
{
|
|
60
|
+
draft.order = action.value.order;
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return draft;
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
const useGroupChannelListReducer = order => {
|
|
69
|
+
const [{
|
|
70
|
+
loading,
|
|
71
|
+
refreshing,
|
|
72
|
+
groupChannels
|
|
73
|
+
}, dispatch] = (0, _react.useReducer)(defaultReducer, {
|
|
74
|
+
loading: true,
|
|
75
|
+
refreshing: false,
|
|
76
|
+
groupChannels: [],
|
|
77
|
+
order
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
const updateChannels = channels => {
|
|
81
|
+
dispatch({
|
|
82
|
+
type: 'update_channels',
|
|
83
|
+
value: {
|
|
84
|
+
channels
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
const deleteChannels = channelUrls => {
|
|
90
|
+
dispatch({
|
|
91
|
+
type: 'delete_channels',
|
|
92
|
+
value: {
|
|
93
|
+
channelUrls
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
const setChannels = (channels, clearPrev) => {
|
|
99
|
+
dispatch({
|
|
100
|
+
type: 'set_channels',
|
|
101
|
+
value: {
|
|
102
|
+
channels,
|
|
103
|
+
clearPrev
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
const updateLoading = status => {
|
|
109
|
+
dispatch({
|
|
110
|
+
type: 'update_loading',
|
|
111
|
+
value: {
|
|
112
|
+
status
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
const updateRefreshing = status => {
|
|
118
|
+
dispatch({
|
|
119
|
+
type: 'update_refreshing',
|
|
120
|
+
value: {
|
|
121
|
+
status
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
const updateOrder = order => {
|
|
127
|
+
dispatch({
|
|
128
|
+
type: 'update_order',
|
|
129
|
+
value: {
|
|
130
|
+
order
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
return {
|
|
136
|
+
updateLoading,
|
|
137
|
+
updateRefreshing,
|
|
138
|
+
updateChannels,
|
|
139
|
+
deleteChannels,
|
|
140
|
+
setChannels,
|
|
141
|
+
updateOrder,
|
|
142
|
+
loading,
|
|
143
|
+
refreshing,
|
|
144
|
+
groupChannels
|
|
145
|
+
};
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
exports.useGroupChannelListReducer = useGroupChannelListReducer;
|
|
149
|
+
|
|
150
|
+
const createCompareByOrder = order => {
|
|
151
|
+
if (!order) return undefined;
|
|
152
|
+
return (channel1, channel2) => {
|
|
153
|
+
switch (order) {
|
|
154
|
+
case 'latest_last_message':
|
|
155
|
+
{
|
|
156
|
+
if (channel1.lastMessage && channel2.lastMessage) {
|
|
157
|
+
return channel2.lastMessage.createdAt - channel1.lastMessage.createdAt;
|
|
158
|
+
} else if (channel1.lastMessage) {
|
|
159
|
+
return -1;
|
|
160
|
+
} else if (channel2.lastMessage) {
|
|
161
|
+
return 1;
|
|
162
|
+
} else {
|
|
163
|
+
return channel2.createdAt - channel1.createdAt;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
case 'chronological':
|
|
168
|
+
{
|
|
169
|
+
return channel2.createdAt - channel1.createdAt;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
case 'channel_name_alphabetical':
|
|
173
|
+
{
|
|
174
|
+
return channel1.name.localeCompare(channel2.name);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
default:
|
|
178
|
+
{
|
|
179
|
+
return 0;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
};
|
|
184
|
+
//# sourceMappingURL=reducer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["defaultReducer","action","draft","compareByOrder","createCompareByOrder","order","type","key","value","status","getGroupChannels","channels","forEach","freshChannel","idx","groupChannels","findIndex","staleChannel","url","sort","channelUrls","c","splice","clearPrev","useGroupChannelListReducer","loading","refreshing","dispatch","useReducer","updateChannels","deleteChannels","setChannels","updateLoading","updateRefreshing","updateOrder","undefined","channel1","channel2","lastMessage","createdAt","name","localeCompare"],"sources":["reducer.ts"],"sourcesContent":["import { useReducer } from 'react';\n\nimport type { SendbirdChannel } from '@sendbird/uikit-utils';\nimport { SendbirdGroupChannel, getGroupChannels } from '@sendbird/uikit-utils';\n\ntype Order = 'latest_last_message' | 'chronological' | 'channel_name_alphabetical' | 'metadata_value_alphabetical';\n\ntype Action =\n | {\n type: 'update_loading' | 'update_refreshing';\n value: { status: boolean };\n }\n | {\n type: 'update_channels';\n value: { channels: SendbirdChannel[] };\n }\n | {\n type: 'delete_channels';\n value: { channelUrls: string[] };\n }\n | {\n type: 'set_channels';\n value: { channels: SendbirdChannel[]; clearPrev: boolean };\n }\n | {\n type: 'update_order';\n value: { order?: Order };\n };\n\ntype State = {\n loading: boolean;\n refreshing: boolean;\n groupChannels: SendbirdGroupChannel[];\n order?: Order;\n};\n\nconst defaultReducer = ({ ...draft }: State, action: Action) => {\n const compareByOrder = createCompareByOrder(draft.order);\n\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 break;\n }\n case 'update_channels': {\n getGroupChannels(action.value.channels).forEach((freshChannel) => {\n const idx = draft.groupChannels.findIndex((staleChannel) => staleChannel.url === freshChannel.url);\n if (idx > -1) draft.groupChannels[idx] = freshChannel;\n });\n\n compareByOrder && (draft.groupChannels = draft.groupChannels.sort(compareByOrder));\n break;\n }\n case 'delete_channels': {\n action.value.channelUrls.forEach((url) => {\n const idx = draft.groupChannels.findIndex((c) => c.url === url);\n if (idx > -1) draft.groupChannels.splice(idx, 1);\n });\n\n compareByOrder && (draft.groupChannels = draft.groupChannels.sort(compareByOrder));\n break;\n }\n case 'set_channels': {\n if (action.value.clearPrev) {\n draft.groupChannels = getGroupChannels(action.value.channels);\n } else {\n draft.groupChannels = [...draft.groupChannels, ...getGroupChannels(action.value.channels)];\n }\n\n compareByOrder && (draft.groupChannels = draft.groupChannels.sort(compareByOrder));\n break;\n }\n case 'update_order': {\n draft.order = action.value.order;\n break;\n }\n }\n return draft;\n};\n\nexport const useGroupChannelListReducer = (order?: Order) => {\n const [{ loading, refreshing, groupChannels }, dispatch] = useReducer(defaultReducer, {\n loading: true,\n refreshing: false,\n groupChannels: [],\n order,\n });\n\n const updateChannels = (channels: SendbirdChannel[]) => {\n dispatch({ type: 'update_channels', value: { channels } });\n };\n const deleteChannels = (channelUrls: string[]) => {\n dispatch({ type: 'delete_channels', value: { channelUrls } });\n };\n const setChannels = (channels: SendbirdChannel[], clearPrev: boolean) => {\n dispatch({ type: 'set_channels', value: { channels, clearPrev } });\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 const updateOrder = (order?: Order) => {\n dispatch({ type: 'update_order', value: { order } });\n };\n\n return {\n updateLoading,\n updateRefreshing,\n updateChannels,\n deleteChannels,\n setChannels,\n\n updateOrder,\n\n loading,\n refreshing,\n groupChannels,\n };\n};\n\nconst createCompareByOrder = (order?: Order) => {\n if (!order) return undefined;\n\n return (channel1: SendbirdGroupChannel, channel2: SendbirdGroupChannel): number => {\n switch (order) {\n case 'latest_last_message': {\n if (channel1.lastMessage && channel2.lastMessage) {\n return channel2.lastMessage.createdAt - channel1.lastMessage.createdAt;\n } else if (channel1.lastMessage) {\n return -1;\n } else if (channel2.lastMessage) {\n return 1;\n } else {\n return channel2.createdAt - channel1.createdAt;\n }\n }\n\n case 'chronological': {\n return channel2.createdAt - channel1.createdAt;\n }\n\n case 'channel_name_alphabetical': {\n return channel1.name.localeCompare(channel2.name);\n }\n default: {\n return 0;\n }\n }\n };\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useGroupChannelListWithCollection = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
var _uikitUtils = require("@sendbird/uikit-utils");
|
|
11
|
+
|
|
12
|
+
var _useAppFeatures = require("../../common/useAppFeatures");
|
|
13
|
+
|
|
14
|
+
var _useChannelHandler = require("../../handler/useChannelHandler");
|
|
15
|
+
|
|
16
|
+
var _reducer = require("./reducer");
|
|
17
|
+
|
|
18
|
+
const HOOK_NAME = 'useGroupChannelListWithCollection';
|
|
19
|
+
|
|
20
|
+
const createGroupChannelListCollection = (sdk, collectionCreator) => {
|
|
21
|
+
const passedCollection = collectionCreator === null || collectionCreator === void 0 ? void 0 : collectionCreator();
|
|
22
|
+
if (passedCollection) return passedCollection;
|
|
23
|
+
const defaultOptions = {
|
|
24
|
+
includeEmpty: false,
|
|
25
|
+
limit: 20,
|
|
26
|
+
order: sdk.GroupChannelCollection.GroupChannelOrder.LATEST_LAST_MESSAGE
|
|
27
|
+
};
|
|
28
|
+
const collectionBuilder = sdk.GroupChannel.createGroupChannelCollection();
|
|
29
|
+
const groupChannelFilter = new sdk.GroupChannelFilter();
|
|
30
|
+
groupChannelFilter.includeEmpty = defaultOptions.includeEmpty;
|
|
31
|
+
return collectionBuilder.setFilter(groupChannelFilter).setLimit(defaultOptions.limit).setOrder(defaultOptions.order).build();
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const useGroupChannelListWithCollection = (sdk, userId, options) => {
|
|
35
|
+
const id = (0, _uikitUtils.useUniqId)(HOOK_NAME);
|
|
36
|
+
const {
|
|
37
|
+
deliveryReceiptEnabled
|
|
38
|
+
} = (0, _useAppFeatures.useAppFeatures)(sdk);
|
|
39
|
+
const collectionRef = (0, _react.useRef)();
|
|
40
|
+
const {
|
|
41
|
+
loading,
|
|
42
|
+
groupChannels,
|
|
43
|
+
refreshing,
|
|
44
|
+
setChannels,
|
|
45
|
+
deleteChannels,
|
|
46
|
+
updateRefreshing,
|
|
47
|
+
updateLoading
|
|
48
|
+
} = (0, _reducer.useGroupChannelListReducer)();
|
|
49
|
+
|
|
50
|
+
const updateChannelsAndMarkAsDelivered = markAsDelivered => {
|
|
51
|
+
var _collectionRef$curren;
|
|
52
|
+
|
|
53
|
+
const channels = ((_collectionRef$curren = collectionRef.current) === null || _collectionRef$curren === void 0 ? void 0 : _collectionRef$curren.channelList) ?? [];
|
|
54
|
+
setChannels(channels, true);
|
|
55
|
+
if (markAsDelivered && deliveryReceiptEnabled) channels.forEach(channel => sdk.markAsDelivered(channel.url));
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const init = (0, _uikitUtils.useFreshCallback)(async uid => {
|
|
59
|
+
var _collectionRef$curren2;
|
|
60
|
+
|
|
61
|
+
if (collectionRef.current) (_collectionRef$curren2 = collectionRef.current) === null || _collectionRef$curren2 === void 0 ? void 0 : _collectionRef$curren2.dispose();
|
|
62
|
+
|
|
63
|
+
if (uid) {
|
|
64
|
+
var _collectionRef$curren3, _collectionRef$curren5;
|
|
65
|
+
|
|
66
|
+
collectionRef.current = createGroupChannelListCollection(sdk, options === null || options === void 0 ? void 0 : options.collectionCreator);
|
|
67
|
+
|
|
68
|
+
if ((_collectionRef$curren3 = collectionRef.current) !== null && _collectionRef$curren3 !== void 0 && _collectionRef$curren3.hasMore) {
|
|
69
|
+
var _collectionRef$curren4;
|
|
70
|
+
|
|
71
|
+
await ((_collectionRef$curren4 = collectionRef.current) === null || _collectionRef$curren4 === void 0 ? void 0 : _collectionRef$curren4.loadMore());
|
|
72
|
+
updateChannelsAndMarkAsDelivered(true);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
(_collectionRef$curren5 = collectionRef.current) === null || _collectionRef$curren5 === void 0 ? void 0 : _collectionRef$curren5.setGroupChannelCollectionHandler({
|
|
76
|
+
onChannelsAdded() {
|
|
77
|
+
updateChannelsAndMarkAsDelivered(true);
|
|
78
|
+
},
|
|
79
|
+
|
|
80
|
+
onChannelsUpdated() {
|
|
81
|
+
updateChannelsAndMarkAsDelivered(true);
|
|
82
|
+
},
|
|
83
|
+
|
|
84
|
+
onChannelsDeleted() {
|
|
85
|
+
updateChannelsAndMarkAsDelivered(false);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
(0, _react.useEffect)(() => {
|
|
92
|
+
return () => {
|
|
93
|
+
var _collectionRef$curren6;
|
|
94
|
+
|
|
95
|
+
if (collectionRef.current) (_collectionRef$curren6 = collectionRef.current) === null || _collectionRef$curren6 === void 0 ? void 0 : _collectionRef$curren6.dispose();
|
|
96
|
+
};
|
|
97
|
+
}, []);
|
|
98
|
+
(0, _uikitUtils.useAsyncEffect)(async () => {
|
|
99
|
+
updateLoading(true);
|
|
100
|
+
await init(userId);
|
|
101
|
+
updateLoading(false);
|
|
102
|
+
}, [init, userId]);
|
|
103
|
+
(0, _useChannelHandler.useChannelHandler)(sdk, `${HOOK_NAME}_${id}`, {
|
|
104
|
+
onUserBanned: (channel, user) => {
|
|
105
|
+
const isMe = user.userId === userId;
|
|
106
|
+
if (isMe) deleteChannels([channel.url]);else updateChannelsAndMarkAsDelivered(false);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
const refresh = (0, _uikitUtils.useFreshCallback)(async () => {
|
|
110
|
+
updateRefreshing(true);
|
|
111
|
+
await init(userId);
|
|
112
|
+
updateRefreshing(false);
|
|
113
|
+
});
|
|
114
|
+
const next = (0, _uikitUtils.useFreshCallback)(async () => {
|
|
115
|
+
var _collectionRef$curren7;
|
|
116
|
+
|
|
117
|
+
if ((_collectionRef$curren7 = collectionRef.current) !== null && _collectionRef$curren7 !== void 0 && _collectionRef$curren7.hasMore) {
|
|
118
|
+
var _collectionRef$curren8;
|
|
119
|
+
|
|
120
|
+
await ((_collectionRef$curren8 = collectionRef.current) === null || _collectionRef$curren8 === void 0 ? void 0 : _collectionRef$curren8.loadMore());
|
|
121
|
+
updateChannelsAndMarkAsDelivered(true);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
return {
|
|
125
|
+
loading,
|
|
126
|
+
groupChannels,
|
|
127
|
+
refresh,
|
|
128
|
+
refreshing,
|
|
129
|
+
next
|
|
130
|
+
};
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
exports.useGroupChannelListWithCollection = useGroupChannelListWithCollection;
|
|
134
|
+
//# sourceMappingURL=useGroupChannelListWithCollection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["HOOK_NAME","createGroupChannelListCollection","sdk","collectionCreator","passedCollection","defaultOptions","includeEmpty","limit","order","GroupChannelCollection","GroupChannelOrder","LATEST_LAST_MESSAGE","collectionBuilder","GroupChannel","createGroupChannelCollection","groupChannelFilter","GroupChannelFilter","setFilter","setLimit","setOrder","build","useGroupChannelListWithCollection","userId","options","id","useUniqId","deliveryReceiptEnabled","useAppFeatures","collectionRef","useRef","loading","groupChannels","refreshing","setChannels","deleteChannels","updateRefreshing","updateLoading","useGroupChannelListReducer","updateChannelsAndMarkAsDelivered","markAsDelivered","channels","current","channelList","forEach","channel","url","init","useFreshCallback","uid","dispose","hasMore","loadMore","setGroupChannelCollectionHandler","onChannelsAdded","onChannelsUpdated","onChannelsDeleted","useEffect","useAsyncEffect","useChannelHandler","onUserBanned","user","isMe","refresh","next"],"sources":["useGroupChannelListWithCollection.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport type { SendbirdChatSDK, SendbirdGroupChannelCollection } from '@sendbird/uikit-utils';\nimport { useAsyncEffect, useFreshCallback, useUniqId } from '@sendbird/uikit-utils';\n\nimport { useAppFeatures } from '../../common/useAppFeatures';\nimport { useChannelHandler } from '../../handler/useChannelHandler';\nimport type { UseGroupChannelList, UseGroupChannelListOptions } from '../../types';\nimport { useGroupChannelListReducer } from './reducer';\n\nconst HOOK_NAME = 'useGroupChannelListWithCollection';\n\nconst createGroupChannelListCollection = (\n sdk: SendbirdChatSDK,\n collectionCreator: UseGroupChannelListOptions['collectionCreator'],\n) => {\n const passedCollection = collectionCreator?.();\n if (passedCollection) return passedCollection;\n\n const defaultOptions = {\n includeEmpty: false,\n limit: 20,\n order: sdk.GroupChannelCollection.GroupChannelOrder.LATEST_LAST_MESSAGE,\n };\n const collectionBuilder = sdk.GroupChannel.createGroupChannelCollection();\n const groupChannelFilter = new sdk.GroupChannelFilter();\n groupChannelFilter.includeEmpty = defaultOptions.includeEmpty;\n\n return collectionBuilder\n .setFilter(groupChannelFilter)\n .setLimit(defaultOptions.limit)\n .setOrder(defaultOptions.order)\n .build();\n};\n\nexport const useGroupChannelListWithCollection: UseGroupChannelList = (sdk, userId, options) => {\n const id = useUniqId(HOOK_NAME);\n const { deliveryReceiptEnabled } = useAppFeatures(sdk);\n\n const collectionRef = useRef<SendbirdGroupChannelCollection>();\n\n const { loading, groupChannels, refreshing, setChannels, deleteChannels, updateRefreshing, updateLoading } =\n useGroupChannelListReducer();\n\n const updateChannelsAndMarkAsDelivered = (markAsDelivered: boolean) => {\n const channels = collectionRef.current?.channelList ?? [];\n setChannels(channels, true);\n if (markAsDelivered && deliveryReceiptEnabled) channels.forEach((channel) => sdk.markAsDelivered(channel.url));\n };\n\n const init = useFreshCallback(async (uid?: string) => {\n if (collectionRef.current) collectionRef.current?.dispose();\n\n if (uid) {\n collectionRef.current = createGroupChannelListCollection(sdk, options?.collectionCreator);\n\n if (collectionRef.current?.hasMore) {\n await collectionRef.current?.loadMore();\n updateChannelsAndMarkAsDelivered(true);\n }\n\n collectionRef.current?.setGroupChannelCollectionHandler({\n onChannelsAdded() {\n updateChannelsAndMarkAsDelivered(true);\n },\n onChannelsUpdated() {\n updateChannelsAndMarkAsDelivered(true);\n },\n onChannelsDeleted() {\n updateChannelsAndMarkAsDelivered(false);\n },\n });\n }\n });\n\n useEffect(() => {\n return () => {\n if (collectionRef.current) collectionRef.current?.dispose();\n };\n }, []);\n\n useAsyncEffect(async () => {\n updateLoading(true);\n await init(userId);\n updateLoading(false);\n }, [init, userId]);\n\n useChannelHandler(sdk, `${HOOK_NAME}_${id}`, {\n onUserBanned: (channel, user) => {\n const isMe = user.userId === userId;\n if (isMe) deleteChannels([channel.url]);\n else updateChannelsAndMarkAsDelivered(false);\n },\n });\n\n const refresh = useFreshCallback(async () => {\n updateRefreshing(true);\n await init(userId);\n updateRefreshing(false);\n });\n\n const next = useFreshCallback(async () => {\n if (collectionRef.current?.hasMore) {\n await collectionRef.current?.loadMore();\n updateChannelsAndMarkAsDelivered(true);\n }\n });\n\n return {\n loading,\n groupChannels,\n refresh,\n refreshing,\n next,\n };\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useGroupChannelListWithQuery = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
var _uikitUtils = require("@sendbird/uikit-utils");
|
|
11
|
+
|
|
12
|
+
var _useAppFeatures = require("../../common/useAppFeatures");
|
|
13
|
+
|
|
14
|
+
var _useChannelHandler = require("../../handler/useChannelHandler");
|
|
15
|
+
|
|
16
|
+
var _reducer = require("./reducer");
|
|
17
|
+
|
|
18
|
+
const HOOK_NAME = 'useGroupChannelListWithQuery';
|
|
19
|
+
|
|
20
|
+
const createGroupChannelListQuery = (sdk, queryCreator) => {
|
|
21
|
+
const passedQuery = queryCreator === null || queryCreator === void 0 ? void 0 : queryCreator();
|
|
22
|
+
if (passedQuery) return passedQuery;
|
|
23
|
+
const defaultOptions = {
|
|
24
|
+
includeEmpty: false,
|
|
25
|
+
limit: 20,
|
|
26
|
+
order: 'latest_last_message'
|
|
27
|
+
};
|
|
28
|
+
const defaultQuery = sdk.GroupChannel.createMyGroupChannelListQuery();
|
|
29
|
+
defaultQuery.limit = defaultOptions.limit;
|
|
30
|
+
defaultQuery.order = defaultOptions.order;
|
|
31
|
+
defaultQuery.includeEmpty = defaultOptions.includeEmpty;
|
|
32
|
+
return defaultQuery;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const useGroupChannelListWithQuery = (sdk, userId, options) => {
|
|
36
|
+
const {
|
|
37
|
+
deliveryReceiptEnabled
|
|
38
|
+
} = (0, _useAppFeatures.useAppFeatures)(sdk);
|
|
39
|
+
const queryRef = (0, _react.useRef)();
|
|
40
|
+
const {
|
|
41
|
+
loading,
|
|
42
|
+
groupChannels,
|
|
43
|
+
refreshing,
|
|
44
|
+
updateChannels,
|
|
45
|
+
setChannels,
|
|
46
|
+
deleteChannels,
|
|
47
|
+
updateRefreshing,
|
|
48
|
+
updateLoading,
|
|
49
|
+
updateOrder
|
|
50
|
+
} = (0, _reducer.useGroupChannelListReducer)();
|
|
51
|
+
|
|
52
|
+
const updateChannelsAndMarkAsDelivered = channels => {
|
|
53
|
+
updateChannels(channels);
|
|
54
|
+
if (deliveryReceiptEnabled) channels.forEach(channel => sdk.markAsDelivered(channel.url));
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const init = (0, _uikitUtils.useFreshCallback)(async uid => {
|
|
58
|
+
if (uid) {
|
|
59
|
+
var _queryRef$current, _queryRef$current2;
|
|
60
|
+
|
|
61
|
+
queryRef.current = createGroupChannelListQuery(sdk, options === null || options === void 0 ? void 0 : options.queryCreator);
|
|
62
|
+
updateOrder((_queryRef$current = queryRef.current) === null || _queryRef$current === void 0 ? void 0 : _queryRef$current.order);
|
|
63
|
+
|
|
64
|
+
if ((_queryRef$current2 = queryRef.current) !== null && _queryRef$current2 !== void 0 && _queryRef$current2.hasNext) {
|
|
65
|
+
const channels = await queryRef.current.next();
|
|
66
|
+
setChannels(channels, true);
|
|
67
|
+
if (deliveryReceiptEnabled) channels.forEach(channel => sdk.markAsDelivered(channel.url));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
(0, _uikitUtils.useAsyncEffect)(async () => {
|
|
72
|
+
updateLoading(true);
|
|
73
|
+
await init(userId);
|
|
74
|
+
updateLoading(false);
|
|
75
|
+
}, [init, userId]);
|
|
76
|
+
(0, _useChannelHandler.useChannelHandler)(sdk, HOOK_NAME, {
|
|
77
|
+
onChannelChanged: channel => updateChannelsAndMarkAsDelivered([channel]),
|
|
78
|
+
onChannelFrozen: channel => updateChannels([channel]),
|
|
79
|
+
onChannelUnfrozen: channel => updateChannels([channel]),
|
|
80
|
+
onChannelMemberCountChanged: channels => updateChannels(channels),
|
|
81
|
+
onChannelDeleted: url => deleteChannels([url]),
|
|
82
|
+
onUserJoined: channel => updateChannelsAndMarkAsDelivered([channel]),
|
|
83
|
+
onUserLeft: (channel, user) => {
|
|
84
|
+
const isMe = user.userId === userId;
|
|
85
|
+
if (isMe) deleteChannels([channel.url]);else updateChannelsAndMarkAsDelivered([channel]);
|
|
86
|
+
},
|
|
87
|
+
|
|
88
|
+
onUserBanned(channel, user) {
|
|
89
|
+
const isMe = user.userId === userId;
|
|
90
|
+
if (isMe) deleteChannels([channel.url]);else updateChannelsAndMarkAsDelivered([channel]);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
});
|
|
94
|
+
const refresh = (0, _uikitUtils.useFreshCallback)(async () => {
|
|
95
|
+
updateRefreshing(true);
|
|
96
|
+
await init(userId);
|
|
97
|
+
updateRefreshing(false);
|
|
98
|
+
});
|
|
99
|
+
const next = (0, _uikitUtils.useFreshCallback)(async () => {
|
|
100
|
+
var _queryRef$current3;
|
|
101
|
+
|
|
102
|
+
if ((_queryRef$current3 = queryRef.current) !== null && _queryRef$current3 !== void 0 && _queryRef$current3.hasNext) {
|
|
103
|
+
const channels = await queryRef.current.next();
|
|
104
|
+
setChannels(channels, false);
|
|
105
|
+
if (deliveryReceiptEnabled) channels.forEach(channel => sdk.markAsDelivered(channel.url));
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
return {
|
|
109
|
+
loading,
|
|
110
|
+
groupChannels,
|
|
111
|
+
refresh,
|
|
112
|
+
refreshing,
|
|
113
|
+
next
|
|
114
|
+
};
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
exports.useGroupChannelListWithQuery = useGroupChannelListWithQuery;
|
|
118
|
+
//# sourceMappingURL=useGroupChannelListWithQuery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["HOOK_NAME","createGroupChannelListQuery","sdk","queryCreator","passedQuery","defaultOptions","includeEmpty","limit","order","defaultQuery","GroupChannel","createMyGroupChannelListQuery","useGroupChannelListWithQuery","userId","options","deliveryReceiptEnabled","useAppFeatures","queryRef","useRef","loading","groupChannels","refreshing","updateChannels","setChannels","deleteChannels","updateRefreshing","updateLoading","updateOrder","useGroupChannelListReducer","updateChannelsAndMarkAsDelivered","channels","forEach","channel","markAsDelivered","url","init","useFreshCallback","uid","current","hasNext","next","useAsyncEffect","useChannelHandler","onChannelChanged","onChannelFrozen","onChannelUnfrozen","onChannelMemberCountChanged","onChannelDeleted","onUserJoined","onUserLeft","user","isMe","onUserBanned","refresh"],"sources":["useGroupChannelListWithQuery.ts"],"sourcesContent":["import { useRef } from 'react';\nimport type Sendbird from 'sendbird';\n\nimport type { SendbirdChannel, SendbirdChatSDK } from '@sendbird/uikit-utils';\nimport { useAsyncEffect, useFreshCallback } from '@sendbird/uikit-utils';\n\nimport { useAppFeatures } from '../../common/useAppFeatures';\nimport { useChannelHandler } from '../../handler/useChannelHandler';\nimport type { UseGroupChannelList, UseGroupChannelListOptions } from '../../types';\nimport { useGroupChannelListReducer } from './reducer';\n\nconst HOOK_NAME = 'useGroupChannelListWithQuery';\n\nconst createGroupChannelListQuery = (\n sdk: SendbirdChatSDK,\n queryCreator: UseGroupChannelListOptions['queryCreator'],\n) => {\n const passedQuery = queryCreator?.();\n if (passedQuery) return passedQuery;\n\n const defaultOptions = {\n includeEmpty: false,\n limit: 20,\n order: 'latest_last_message',\n } as const;\n const defaultQuery = sdk.GroupChannel.createMyGroupChannelListQuery();\n defaultQuery.limit = defaultOptions.limit;\n defaultQuery.order = defaultOptions.order;\n defaultQuery.includeEmpty = defaultOptions.includeEmpty;\n return defaultQuery;\n};\n\nexport const useGroupChannelListWithQuery: UseGroupChannelList = (sdk, userId, options) => {\n const { deliveryReceiptEnabled } = useAppFeatures(sdk);\n const queryRef = useRef<Sendbird.GroupChannelListQuery>();\n\n const {\n loading,\n groupChannels,\n refreshing,\n updateChannels,\n setChannels,\n deleteChannels,\n updateRefreshing,\n updateLoading,\n updateOrder,\n } = useGroupChannelListReducer();\n\n const updateChannelsAndMarkAsDelivered = (channels: SendbirdChannel[]) => {\n updateChannels(channels);\n if (deliveryReceiptEnabled) channels.forEach((channel) => sdk.markAsDelivered(channel.url));\n };\n\n const init = useFreshCallback(async (uid?: string) => {\n if (uid) {\n queryRef.current = createGroupChannelListQuery(sdk, options?.queryCreator);\n updateOrder(queryRef.current?.order);\n\n if (queryRef.current?.hasNext) {\n const channels = await queryRef.current.next();\n\n setChannels(channels, true);\n if (deliveryReceiptEnabled) channels.forEach((channel) => sdk.markAsDelivered(channel.url));\n }\n }\n });\n\n useAsyncEffect(async () => {\n updateLoading(true);\n await init(userId);\n updateLoading(false);\n }, [init, userId]);\n\n useChannelHandler(sdk, HOOK_NAME, {\n onChannelChanged: (channel) => updateChannelsAndMarkAsDelivered([channel]),\n onChannelFrozen: (channel) => updateChannels([channel]),\n onChannelUnfrozen: (channel) => updateChannels([channel]),\n onChannelMemberCountChanged: (channels) => updateChannels(channels),\n onChannelDeleted: (url) => deleteChannels([url]),\n onUserJoined: (channel) => updateChannelsAndMarkAsDelivered([channel]),\n onUserLeft: (channel, user) => {\n const isMe = user.userId === userId;\n if (isMe) deleteChannels([channel.url]);\n else updateChannelsAndMarkAsDelivered([channel]);\n },\n onUserBanned(channel, user) {\n const isMe = user.userId === userId;\n if (isMe) deleteChannels([channel.url]);\n else updateChannelsAndMarkAsDelivered([channel]);\n },\n });\n\n const refresh = useFreshCallback(async () => {\n updateRefreshing(true);\n await init(userId);\n updateRefreshing(false);\n });\n\n const next = useFreshCallback(async () => {\n if (queryRef.current?.hasNext) {\n const channels = await queryRef.current.next();\n setChannels(channels, false);\n if (deliveryReceiptEnabled) channels.forEach((channel) => sdk.markAsDelivered(channel.url));\n }\n });\n\n return {\n loading,\n groupChannels,\n refresh,\n refreshing,\n next,\n };\n};\n"],"mappings":"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"}
|
package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js
CHANGED
|
@@ -61,13 +61,13 @@ const useGroupChannelMessagesWithCollection = (sdk, channel, userId, options) =>
|
|
|
61
61
|
try {
|
|
62
62
|
if (deliveryReceiptEnabled) sdk.markAsDelivered(activeChannel.url);
|
|
63
63
|
} catch (e) {
|
|
64
|
-
_uikitUtils.Logger.
|
|
64
|
+
_uikitUtils.Logger.warn(`[${HOOK_NAME}/channelMarkAs/Delivered]`, e);
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
try {
|
|
68
68
|
await sdk.markAsReadWithChannelUrls([activeChannel.url]);
|
|
69
69
|
} catch (e) {
|
|
70
|
-
_uikitUtils.Logger.
|
|
70
|
+
_uikitUtils.Logger.warn(`[${HOOK_NAME}/channelMarkAs/Read]`, e);
|
|
71
71
|
}
|
|
72
72
|
};
|
|
73
73
|
|
|
@@ -98,7 +98,7 @@ const useGroupChannelMessagesWithCollection = (sdk, channel, userId, options) =>
|
|
|
98
98
|
if (messages !== null && messages !== void 0 && messages.length) callback === null || callback === void 0 ? void 0 : callback();
|
|
99
99
|
}
|
|
100
100
|
}).onApiResult((err, messages) => {
|
|
101
|
-
if (err) _uikitUtils.Logger.
|
|
101
|
+
if (err) _uikitUtils.Logger.warn(`[${HOOK_NAME}/onApiResult]`, err);else {
|
|
102
102
|
_uikitUtils.Logger.debug(`[${HOOK_NAME}/onApiResult]`, 'message length:', messages.length);
|
|
103
103
|
|
|
104
104
|
updateMessages(messages, true, sdk.currentUser.userId);
|
package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createMessageCollection","sdk","channel","creator","collection","filter","MessageFilter","setLimit","setFilter","build","HOOK_NAME","useGroupChannelMessagesWithCollection","userId","options","isMounted","useIsMountedRef","disposeManuallyAfterUnmounted","current","collectionRef","dispose","deliveryReceiptEnabled","useAppFeatures","useRef","activeChannel","setActiveChannel","useActiveGroupChannel","forceUpdate","useForceUpdate","loading","refreshing","messages","nextMessages","newMessagesFromMembers","updateMessages","updateNextMessages","deleteNextMessages","deleteMessages","updateLoading","updateRefreshing","useGroupChannelMessagesReducer","sortComparator","channelMarkAs","markAsDelivered","url","e","Logger","error","markAsReadWithChannelUrls","updateChannel","isGroupChannel","isDifferentChannel","init","useCallback","uid","callback","collectionCreator","currentUser","initialize","MessageCollection","MessageCollectionInitPolicy","CACHE_AND_REPLACE_BY_API","onCacheResult","err","isCacheEnabled","debug","length","pendingMessages","failedMessages","onApiResult","setMessageCollectionHandler","onMessagesAdded","_","onMessagesUpdated","onMessagesDeleted","msgIds","map","m","messageId","reqIds","reqId","onChannelDeleted","onChannelUpdated","onHugeGapDetected","useChannelHandler","onUserBanned","bannedUser","useEffect","setTimeout","refresh","prev","hasPrevious","list","loadPrevious","next","hasNext","fetchedList","loadNext","push","sendUserMessage","params","onPending","Promise","resolve","reject","pendingMessage","sentMessage","sendFileMessage","updateUserMessage","updatedMessage","NOOP","updateFileMessage","resendMessage","failedMessage","message","isUserMessage","resendUserMessage","isFileMessage","resendFileMessage","deleteMessage","sendingStatus","removeFailedMessages"],"sources":["useGroupChannelMessagesWithCollection.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\n\nimport type {\n SendbirdChannel,\n SendbirdChatSDK,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessageCollection,\n SendbirdUserMessage,\n} from '@sendbird/uikit-utils';\nimport { Logger, NOOP, isDifferentChannel, useForceUpdate, useIsMountedRef } from '@sendbird/uikit-utils';\n\nimport { useAppFeatures } from '../../common/useAppFeatures';\nimport { useChannelHandler } from '../../handler/useChannelHandler';\nimport type { UseGroupChannelMessages, UseGroupChannelMessagesOptions } from '../../types';\nimport { useActiveGroupChannel } from '../useActiveGroupChannel';\nimport { useGroupChannelMessagesReducer } from './reducer';\n\nconst createMessageCollection = (\n sdk: SendbirdChatSDK,\n channel: SendbirdGroupChannel,\n creator?: UseGroupChannelMessagesOptions['collectionCreator'],\n) => {\n if (creator) return creator();\n const collection = channel.createMessageCollection();\n const filter = new sdk.MessageFilter();\n return collection.setLimit(100).setFilter(filter).build();\n};\n\nconst HOOK_NAME = 'useGroupChannelMessagesWithCollection';\n\n// FIXME: MessageCollection event handler bug, initialize(run async addObserver) -> dispose -> removeObserver -> addObserver called\nexport const useGroupChannelMessagesWithCollection: UseGroupChannelMessages = (sdk, channel, userId, options) => {\n const isMounted = useIsMountedRef();\n const disposeManuallyAfterUnmounted = () => {\n if (!isMounted.current && collectionRef.current) collectionRef.current.dispose();\n };\n\n const { deliveryReceiptEnabled } = useAppFeatures(sdk);\n\n const collectionRef = useRef<SendbirdMessageCollection>();\n\n // NOTE: We cannot determine the channel object of Sendbird SDK is stale or not, so force update af\n const { activeChannel, setActiveChannel } = useActiveGroupChannel(sdk, channel);\n const forceUpdate = useForceUpdate();\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 channelMarkAs = async () => {\n try {\n if (deliveryReceiptEnabled) sdk.markAsDelivered(activeChannel.url);\n } catch (e) {\n Logger.error(`[${HOOK_NAME}/channelMarkAs/Delivered]`, e);\n }\n try {\n await sdk.markAsReadWithChannelUrls([activeChannel.url]);\n } catch (e) {\n Logger.error(`[${HOOK_NAME}/channelMarkAs/Read]`, e);\n }\n };\n\n const updateChannel = (channel: SendbirdChannel) => {\n if (channel.isGroupChannel() && !isDifferentChannel(channel, activeChannel)) {\n forceUpdate();\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(sdk, activeChannel, options?.collectionCreator);\n updateNextMessages([], true, sdk.currentUser.userId);\n channelMarkAs();\n\n collectionRef.current\n .initialize(sdk.MessageCollection.MessageCollectionInitPolicy.CACHE_AND_REPLACE_BY_API)\n .onCacheResult((err, messages) => {\n if (err) sdk.isCacheEnabled && Logger.error(`[${HOOK_NAME}/onCacheResult]`, err);\n else {\n Logger.debug(`[${HOOK_NAME}/onCacheResult]`, 'message length:', messages.length);\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 if (messages?.length) callback?.();\n }\n })\n .onApiResult((err, messages) => {\n if (err) Logger.error(`[${HOOK_NAME}/onApiResult]`, err);\n else {\n Logger.debug(`[${HOOK_NAME}/onApiResult]`, 'message length:', messages.length);\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 collectionRef.current.setMessageCollectionHandler({\n onMessagesAdded(_, channel, messages) {\n disposeManuallyAfterUnmounted();\n channelMarkAs();\n updateNextMessages(messages, false, sdk.currentUser.userId);\n updateChannel(channel);\n },\n onMessagesUpdated(_, channel, messages) {\n disposeManuallyAfterUnmounted();\n updateMessages(messages, false, sdk.currentUser.userId);\n updateChannel(channel);\n },\n onMessagesDeleted(_, channel, messages) {\n disposeManuallyAfterUnmounted();\n const msgIds = messages.map((m) => m.messageId);\n const reqIds = messages\n .filter((m): m is SendbirdUserMessage | SendbirdFileMessage => 'reqId' in m)\n .map((m) => m.reqId);\n\n deleteMessages(msgIds, reqIds);\n deleteNextMessages(msgIds, reqIds);\n updateChannel(channel);\n },\n onChannelDeleted() {\n disposeManuallyAfterUnmounted();\n options?.onChannelDeleted?.();\n },\n onChannelUpdated(_, channel) {\n disposeManuallyAfterUnmounted();\n updateChannel(channel);\n },\n onHugeGapDetected() {\n disposeManuallyAfterUnmounted();\n init(uid);\n },\n });\n }\n },\n [sdk, activeChannel.url, options?.collectionCreator],\n );\n\n useChannelHandler(sdk, HOOK_NAME, {\n onUserBanned(channel, bannedUser) {\n disposeManuallyAfterUnmounted();\n if (channel.isGroupChannel() && !isDifferentChannel(channel, activeChannel)) {\n if (bannedUser.userId === sdk.currentUser.userId) {\n options?.onChannelDeleted?.();\n } else {\n setActiveChannel(channel);\n forceUpdate();\n }\n }\n },\n });\n\n useEffect(() => {\n // NOTE: Cache read is heavy synchronous 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'] = useCallback(async () => {\n updateRefreshing(true);\n init(userId, () => updateRefreshing(false));\n }, [init, userId]);\n\n const prev: ReturnType<UseGroupChannelMessages>['prev'] = useCallback(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'] = useCallback(async () => {\n const list = [];\n if (collectionRef.current && collectionRef.current?.hasNext) {\n try {\n const fetchedList = await collectionRef.current?.loadNext();\n list.push(...fetchedList);\n } catch {}\n }\n if (nextMessages.length > 0) {\n list.push(...nextMessages);\n }\n if (list.length > 0) {\n updateMessages(list, false, sdk.currentUser.userId);\n updateNextMessages([], true, sdk.currentUser.userId);\n }\n }, [nextMessages.length]);\n\n const sendUserMessage: ReturnType<UseGroupChannelMessages>['sendUserMessage'] = useCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n const pendingMessage = activeChannel.sendUserMessage(params, (sentMessage, error) => {\n if (error) reject(error);\n else {\n updateMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage);\n }\n });\n\n onPending?.(pendingMessage);\n updateMessages([pendingMessage], false, sdk.currentUser.userId);\n });\n },\n [activeChannel],\n );\n const sendFileMessage: ReturnType<UseGroupChannelMessages>['sendFileMessage'] = useCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n const pendingMessage = activeChannel.sendFileMessage(params, (sentMessage, error) => {\n if (error) reject(error);\n else {\n updateMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage as SendbirdFileMessage);\n }\n });\n\n updateMessages([pendingMessage], false, sdk.currentUser.userId);\n onPending?.(pendingMessage);\n });\n },\n [activeChannel],\n );\n const updateUserMessage: ReturnType<UseGroupChannelMessages>['updateUserMessage'] = useCallback(\n async (messageId, params) => {\n const updatedMessage = await activeChannel.updateUserMessage(messageId, params, NOOP);\n updateMessages([updatedMessage], false, sdk.currentUser.userId);\n return updatedMessage;\n },\n [activeChannel],\n );\n const updateFileMessage: ReturnType<UseGroupChannelMessages>['updateFileMessage'] = useCallback(\n async (messageId, params) => {\n const updatedMessage = await activeChannel.updateFileMessage(messageId, params, NOOP);\n updateMessages([updatedMessage], false, sdk.currentUser.userId);\n return updatedMessage;\n },\n [activeChannel],\n );\n const resendMessage: ReturnType<UseGroupChannelMessages>['resendMessage'] = useCallback(\n async (failedMessage) => {\n const message = await (() => {\n if (failedMessage.isUserMessage()) return activeChannel.resendUserMessage(failedMessage);\n if (failedMessage.isFileMessage()) return activeChannel.resendFileMessage(failedMessage);\n return null;\n })();\n\n if (message) updateMessages([message], false, sdk.currentUser.userId);\n },\n [activeChannel],\n );\n const deleteMessage: ReturnType<UseGroupChannelMessages>['deleteMessage'] = useCallback(\n async (message) => {\n if (message.sendingStatus === 'succeeded') {\n if (message.isUserMessage()) await activeChannel.deleteMessage(message);\n if (message.isFileMessage()) await activeChannel.deleteMessage(message);\n } else {\n try {\n await collectionRef.current?.removeFailedMessages([message]);\n } finally {\n deleteMessages([message.messageId], [message.reqId]);\n }\n }\n },\n [activeChannel],\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 activeChannel,\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["createMessageCollection","sdk","channel","creator","collection","filter","MessageFilter","setLimit","setFilter","build","HOOK_NAME","useGroupChannelMessagesWithCollection","userId","options","isMounted","useIsMountedRef","disposeManuallyAfterUnmounted","current","collectionRef","dispose","deliveryReceiptEnabled","useAppFeatures","useRef","activeChannel","setActiveChannel","useActiveGroupChannel","forceUpdate","useForceUpdate","loading","refreshing","messages","nextMessages","newMessagesFromMembers","updateMessages","updateNextMessages","deleteNextMessages","deleteMessages","updateLoading","updateRefreshing","useGroupChannelMessagesReducer","sortComparator","channelMarkAs","markAsDelivered","url","e","Logger","warn","markAsReadWithChannelUrls","updateChannel","isGroupChannel","isDifferentChannel","init","useCallback","uid","callback","collectionCreator","currentUser","initialize","MessageCollection","MessageCollectionInitPolicy","CACHE_AND_REPLACE_BY_API","onCacheResult","err","isCacheEnabled","error","debug","length","pendingMessages","failedMessages","onApiResult","setMessageCollectionHandler","onMessagesAdded","_","onMessagesUpdated","onMessagesDeleted","msgIds","map","m","messageId","reqIds","reqId","onChannelDeleted","onChannelUpdated","onHugeGapDetected","useChannelHandler","onUserBanned","bannedUser","useEffect","setTimeout","refresh","prev","hasPrevious","list","loadPrevious","next","hasNext","fetchedList","loadNext","push","sendUserMessage","params","onPending","Promise","resolve","reject","pendingMessage","sentMessage","sendFileMessage","updateUserMessage","updatedMessage","NOOP","updateFileMessage","resendMessage","failedMessage","message","isUserMessage","resendUserMessage","isFileMessage","resendFileMessage","deleteMessage","sendingStatus","removeFailedMessages"],"sources":["useGroupChannelMessagesWithCollection.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\n\nimport type {\n SendbirdChannel,\n SendbirdChatSDK,\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdMessageCollection,\n SendbirdUserMessage,\n} from '@sendbird/uikit-utils';\nimport { Logger, NOOP, isDifferentChannel, useForceUpdate, useIsMountedRef } from '@sendbird/uikit-utils';\n\nimport { useAppFeatures } from '../../common/useAppFeatures';\nimport { useChannelHandler } from '../../handler/useChannelHandler';\nimport type { UseGroupChannelMessages, UseGroupChannelMessagesOptions } from '../../types';\nimport { useActiveGroupChannel } from '../useActiveGroupChannel';\nimport { useGroupChannelMessagesReducer } from './reducer';\n\nconst createMessageCollection = (\n sdk: SendbirdChatSDK,\n channel: SendbirdGroupChannel,\n creator?: UseGroupChannelMessagesOptions['collectionCreator'],\n) => {\n if (creator) return creator();\n const collection = channel.createMessageCollection();\n const filter = new sdk.MessageFilter();\n return collection.setLimit(100).setFilter(filter).build();\n};\n\nconst HOOK_NAME = 'useGroupChannelMessagesWithCollection';\n\n// FIXME: MessageCollection event handler bug, initialize(run async addObserver) -> dispose -> removeObserver -> addObserver called\nexport const useGroupChannelMessagesWithCollection: UseGroupChannelMessages = (sdk, channel, userId, options) => {\n const isMounted = useIsMountedRef();\n const disposeManuallyAfterUnmounted = () => {\n if (!isMounted.current && collectionRef.current) collectionRef.current.dispose();\n };\n\n const { deliveryReceiptEnabled } = useAppFeatures(sdk);\n\n const collectionRef = useRef<SendbirdMessageCollection>();\n\n // NOTE: We cannot determine the channel object of Sendbird SDK is stale or not, so force update af\n const { activeChannel, setActiveChannel } = useActiveGroupChannel(sdk, channel);\n const forceUpdate = useForceUpdate();\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 channelMarkAs = async () => {\n try {\n if (deliveryReceiptEnabled) sdk.markAsDelivered(activeChannel.url);\n } catch (e) {\n Logger.warn(`[${HOOK_NAME}/channelMarkAs/Delivered]`, e);\n }\n try {\n await sdk.markAsReadWithChannelUrls([activeChannel.url]);\n } catch (e) {\n Logger.warn(`[${HOOK_NAME}/channelMarkAs/Read]`, e);\n }\n };\n\n const updateChannel = (channel: SendbirdChannel) => {\n if (channel.isGroupChannel() && !isDifferentChannel(channel, activeChannel)) {\n forceUpdate();\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(sdk, activeChannel, options?.collectionCreator);\n updateNextMessages([], true, sdk.currentUser.userId);\n channelMarkAs();\n\n collectionRef.current\n .initialize(sdk.MessageCollection.MessageCollectionInitPolicy.CACHE_AND_REPLACE_BY_API)\n .onCacheResult((err, messages) => {\n if (err) sdk.isCacheEnabled && Logger.error(`[${HOOK_NAME}/onCacheResult]`, err);\n else {\n Logger.debug(`[${HOOK_NAME}/onCacheResult]`, 'message length:', messages.length);\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 if (messages?.length) callback?.();\n }\n })\n .onApiResult((err, messages) => {\n if (err) Logger.warn(`[${HOOK_NAME}/onApiResult]`, err);\n else {\n Logger.debug(`[${HOOK_NAME}/onApiResult]`, 'message length:', messages.length);\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 collectionRef.current.setMessageCollectionHandler({\n onMessagesAdded(_, channel, messages) {\n disposeManuallyAfterUnmounted();\n channelMarkAs();\n updateNextMessages(messages, false, sdk.currentUser.userId);\n updateChannel(channel);\n },\n onMessagesUpdated(_, channel, messages) {\n disposeManuallyAfterUnmounted();\n updateMessages(messages, false, sdk.currentUser.userId);\n updateChannel(channel);\n },\n onMessagesDeleted(_, channel, messages) {\n disposeManuallyAfterUnmounted();\n const msgIds = messages.map((m) => m.messageId);\n const reqIds = messages\n .filter((m): m is SendbirdUserMessage | SendbirdFileMessage => 'reqId' in m)\n .map((m) => m.reqId);\n\n deleteMessages(msgIds, reqIds);\n deleteNextMessages(msgIds, reqIds);\n updateChannel(channel);\n },\n onChannelDeleted() {\n disposeManuallyAfterUnmounted();\n options?.onChannelDeleted?.();\n },\n onChannelUpdated(_, channel) {\n disposeManuallyAfterUnmounted();\n updateChannel(channel);\n },\n onHugeGapDetected() {\n disposeManuallyAfterUnmounted();\n init(uid);\n },\n });\n }\n },\n [sdk, activeChannel.url, options?.collectionCreator],\n );\n\n useChannelHandler(sdk, HOOK_NAME, {\n onUserBanned(channel, bannedUser) {\n disposeManuallyAfterUnmounted();\n if (channel.isGroupChannel() && !isDifferentChannel(channel, activeChannel)) {\n if (bannedUser.userId === sdk.currentUser.userId) {\n options?.onChannelDeleted?.();\n } else {\n setActiveChannel(channel);\n forceUpdate();\n }\n }\n },\n });\n\n useEffect(() => {\n // NOTE: Cache read is heavy synchronous 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'] = useCallback(async () => {\n updateRefreshing(true);\n init(userId, () => updateRefreshing(false));\n }, [init, userId]);\n\n const prev: ReturnType<UseGroupChannelMessages>['prev'] = useCallback(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'] = useCallback(async () => {\n const list = [];\n if (collectionRef.current && collectionRef.current?.hasNext) {\n try {\n const fetchedList = await collectionRef.current?.loadNext();\n list.push(...fetchedList);\n } catch {}\n }\n if (nextMessages.length > 0) {\n list.push(...nextMessages);\n }\n if (list.length > 0) {\n updateMessages(list, false, sdk.currentUser.userId);\n updateNextMessages([], true, sdk.currentUser.userId);\n }\n }, [nextMessages.length]);\n\n const sendUserMessage: ReturnType<UseGroupChannelMessages>['sendUserMessage'] = useCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n const pendingMessage = activeChannel.sendUserMessage(params, (sentMessage, error) => {\n if (error) reject(error);\n else {\n updateMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage);\n }\n });\n\n onPending?.(pendingMessage);\n updateMessages([pendingMessage], false, sdk.currentUser.userId);\n });\n },\n [activeChannel],\n );\n const sendFileMessage: ReturnType<UseGroupChannelMessages>['sendFileMessage'] = useCallback(\n (params, onPending) => {\n return new Promise((resolve, reject) => {\n const pendingMessage = activeChannel.sendFileMessage(params, (sentMessage, error) => {\n if (error) reject(error);\n else {\n updateMessages([sentMessage], false, sdk.currentUser.userId);\n resolve(sentMessage as SendbirdFileMessage);\n }\n });\n\n updateMessages([pendingMessage], false, sdk.currentUser.userId);\n onPending?.(pendingMessage);\n });\n },\n [activeChannel],\n );\n const updateUserMessage: ReturnType<UseGroupChannelMessages>['updateUserMessage'] = useCallback(\n async (messageId, params) => {\n const updatedMessage = await activeChannel.updateUserMessage(messageId, params, NOOP);\n updateMessages([updatedMessage], false, sdk.currentUser.userId);\n return updatedMessage;\n },\n [activeChannel],\n );\n const updateFileMessage: ReturnType<UseGroupChannelMessages>['updateFileMessage'] = useCallback(\n async (messageId, params) => {\n const updatedMessage = await activeChannel.updateFileMessage(messageId, params, NOOP);\n updateMessages([updatedMessage], false, sdk.currentUser.userId);\n return updatedMessage;\n },\n [activeChannel],\n );\n const resendMessage: ReturnType<UseGroupChannelMessages>['resendMessage'] = useCallback(\n async (failedMessage) => {\n const message = await (() => {\n if (failedMessage.isUserMessage()) return activeChannel.resendUserMessage(failedMessage);\n if (failedMessage.isFileMessage()) return activeChannel.resendFileMessage(failedMessage);\n return null;\n })();\n\n if (message) updateMessages([message], false, sdk.currentUser.userId);\n },\n [activeChannel],\n );\n const deleteMessage: ReturnType<UseGroupChannelMessages>['deleteMessage'] = useCallback(\n async (message) => {\n if (message.sendingStatus === 'succeeded') {\n if (message.isUserMessage()) await activeChannel.deleteMessage(message);\n if (message.isFileMessage()) await activeChannel.deleteMessage(message);\n } else {\n try {\n await collectionRef.current?.removeFailedMessages([message]);\n } finally {\n deleteMessages([message.messageId], [message.reqId]);\n }\n }\n },\n [activeChannel],\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 activeChannel,\n };\n};\n"],"mappings":";;;;;;;AAAA;;AAUA;;AAEA;;AACA;;AAEA;;AACA;;AAEA,MAAMA,uBAAuB,GAAG,CAC9BC,GAD8B,EAE9BC,OAF8B,EAG9BC,OAH8B,KAI3B;EACH,IAAIA,OAAJ,EAAa,OAAOA,OAAO,EAAd;EACb,MAAMC,UAAU,GAAGF,OAAO,CAACF,uBAAR,EAAnB;EACA,MAAMK,MAAM,GAAG,IAAIJ,GAAG,CAACK,aAAR,EAAf;EACA,OAAOF,UAAU,CAACG,QAAX,CAAoB,GAApB,EAAyBC,SAAzB,CAAmCH,MAAnC,EAA2CI,KAA3C,EAAP;AACD,CATD;;AAWA,MAAMC,SAAS,GAAG,uCAAlB,C,CAEA;;AACO,MAAMC,qCAA8D,GAAG,CAACV,GAAD,EAAMC,OAAN,EAAeU,MAAf,EAAuBC,OAAvB,KAAmC;EAC/G,MAAMC,SAAS,GAAG,IAAAC,2BAAA,GAAlB;;EACA,MAAMC,6BAA6B,GAAG,MAAM;IAC1C,IAAI,CAACF,SAAS,CAACG,OAAX,IAAsBC,aAAa,CAACD,OAAxC,EAAiDC,aAAa,CAACD,OAAd,CAAsBE,OAAtB;EAClD,CAFD;;EAIA,MAAM;IAAEC;EAAF,IAA6B,IAAAC,8BAAA,EAAepB,GAAf,CAAnC;EAEA,MAAMiB,aAAa,GAAG,IAAAI,aAAA,GAAtB,CAR+G,CAU/G;;EACA,MAAM;IAAEC,aAAF;IAAiBC;EAAjB,IAAsC,IAAAC,4CAAA,EAAsBxB,GAAtB,EAA2BC,OAA3B,CAA5C;EACA,MAAMwB,WAAW,GAAG,IAAAC,0BAAA,GAApB;EAEA,MAAM;IACJC,OADI;IAEJC,UAFI;IAGJC,QAHI;IAIJC,YAJI;IAKJC,sBALI;IAMJC,cANI;IAOJC,kBAPI;IAQJC,kBARI;IASJC,cATI;IAUJC,aAVI;IAWJC;EAXI,IAYF,IAAAC,uCAAA,EAA+B3B,MAA/B,EAAuCC,OAAvC,aAAuCA,OAAvC,uBAAuCA,OAAO,CAAE2B,cAAhD,CAZJ;;EAcA,MAAMC,aAAa,GAAG,YAAY;IAChC,IAAI;MACF,IAAIrB,sBAAJ,EAA4BnB,GAAG,CAACyC,eAAJ,CAAoBnB,aAAa,CAACoB,GAAlC;IAC7B,CAFD,CAEE,OAAOC,CAAP,EAAU;MACVC,kBAAA,CAAOC,IAAP,CAAa,IAAGpC,SAAU,2BAA1B,EAAsDkC,CAAtD;IACD;;IACD,IAAI;MACF,MAAM3C,GAAG,CAAC8C,yBAAJ,CAA8B,CAACxB,aAAa,CAACoB,GAAf,CAA9B,CAAN;IACD,CAFD,CAEE,OAAOC,CAAP,EAAU;MACVC,kBAAA,CAAOC,IAAP,CAAa,IAAGpC,SAAU,sBAA1B,EAAiDkC,CAAjD;IACD;EACF,CAXD;;EAaA,MAAMI,aAAa,GAAI9C,OAAD,IAA8B;IAClD,IAAIA,OAAO,CAAC+C,cAAR,MAA4B,CAAC,IAAAC,8BAAA,EAAmBhD,OAAnB,EAA4BqB,aAA5B,CAAjC,EAA6E;MAC3EG,WAAW;IACZ;EACF,CAJD;;EAMA,MAAMyB,IAAI,GAAG,IAAAC,kBAAA,EACX,OAAOC,GAAP,EAAqBC,QAArB,KAA+C;IAAA;;IAC7C,IAAIpC,aAAa,CAACD,OAAlB,EAA2B,yBAAAC,aAAa,CAACD,OAAd,gFAAuBE,OAAvB;;IAE3B,IAAIkC,GAAJ,EAAS;MACPnC,aAAa,CAACD,OAAd,GAAwBjB,uBAAuB,CAACC,GAAD,EAAMsB,aAAN,EAAqBV,OAArB,aAAqBA,OAArB,uBAAqBA,OAAO,CAAE0C,iBAA9B,CAA/C;MACArB,kBAAkB,CAAC,EAAD,EAAK,IAAL,EAAWjC,GAAG,CAACuD,WAAJ,CAAgB5C,MAA3B,CAAlB;MACA6B,aAAa;MAEbvB,aAAa,CAACD,OAAd,CACGwC,UADH,CACcxD,GAAG,CAACyD,iBAAJ,CAAsBC,2BAAtB,CAAkDC,wBADhE,EAEGC,aAFH,CAEiB,CAACC,GAAD,EAAMhC,QAAN,KAAmB;QAChC,IAAIgC,GAAJ,EAAS7D,GAAG,CAAC8D,cAAJ,IAAsBlB,kBAAA,CAAOmB,KAAP,CAAc,IAAGtD,SAAU,iBAA3B,EAA6CoD,GAA7C,CAAtB,CAAT,KACK;UAAA;;UACHjB,kBAAA,CAAOoB,KAAP,CAAc,IAAGvD,SAAU,iBAA3B,EAA6C,iBAA7C,EAAgEoB,QAAQ,CAACoC,MAAzE;;UACAjC,cAAc,CAACH,QAAD,EAAW,IAAX,EAAiB7B,GAAG,CAACuD,WAAJ,CAAgB5C,MAAjC,CAAd;UACAqB,cAAc,CAAC,2BAAAf,aAAa,CAACD,OAAd,kFAAuBkD,eAAvB,KAA0C,EAA3C,EAA+C,KAA/C,EAAsDlE,GAAG,CAACuD,WAAJ,CAAgB5C,MAAtE,CAAd;UACAqB,cAAc,CAAC,2BAAAf,aAAa,CAACD,OAAd,kFAAuBmD,cAAvB,KAAyC,EAA1C,EAA8C,KAA9C,EAAqDnE,GAAG,CAACuD,WAAJ,CAAgB5C,MAArE,CAAd;UACA,IAAIkB,QAAJ,aAAIA,QAAJ,eAAIA,QAAQ,CAAEoC,MAAd,EAAsBZ,QAAQ,SAAR,IAAAA,QAAQ,WAAR,YAAAA,QAAQ;QAC/B;MACF,CAXH,EAYGe,WAZH,CAYe,CAACP,GAAD,EAAMhC,QAAN,KAAmB;QAC9B,IAAIgC,GAAJ,EAASjB,kBAAA,CAAOC,IAAP,CAAa,IAAGpC,SAAU,eAA1B,EAA0CoD,GAA1C,EAAT,KACK;UACHjB,kBAAA,CAAOoB,KAAP,CAAc,IAAGvD,SAAU,eAA3B,EAA2C,iBAA3C,EAA8DoB,QAAQ,CAACoC,MAAvE;;UACAjC,cAAc,CAACH,QAAD,EAAW,IAAX,EAAiB7B,GAAG,CAACuD,WAAJ,CAAgB5C,MAAjC,CAAd;;UACA,IAAIX,GAAG,CAAC8D,cAAR,EAAwB;YAAA;;YACtB9B,cAAc,CAAC,2BAAAf,aAAa,CAACD,OAAd,kFAAuBkD,eAAvB,KAA0C,EAA3C,EAA+C,KAA/C,EAAsDlE,GAAG,CAACuD,WAAJ,CAAgB5C,MAAtE,CAAd;YACAqB,cAAc,CAAC,2BAAAf,aAAa,CAACD,OAAd,kFAAuBmD,cAAvB,KAAyC,EAA1C,EAA8C,KAA9C,EAAqDnE,GAAG,CAACuD,WAAJ,CAAgB5C,MAArE,CAAd;UACD;QACF;QACD0C,QAAQ,SAAR,IAAAA,QAAQ,WAAR,YAAAA,QAAQ;MACT,CAvBH;MAyBApC,aAAa,CAACD,OAAd,CAAsBqD,2BAAtB,CAAkD;QAChDC,eAAe,CAACC,CAAD,EAAItE,OAAJ,EAAa4B,QAAb,EAAuB;UACpCd,6BAA6B;UAC7ByB,aAAa;UACbP,kBAAkB,CAACJ,QAAD,EAAW,KAAX,EAAkB7B,GAAG,CAACuD,WAAJ,CAAgB5C,MAAlC,CAAlB;UACAoC,aAAa,CAAC9C,OAAD,CAAb;QACD,CAN+C;;QAOhDuE,iBAAiB,CAACD,CAAD,EAAItE,OAAJ,EAAa4B,QAAb,EAAuB;UACtCd,6BAA6B;UAC7BiB,cAAc,CAACH,QAAD,EAAW,KAAX,EAAkB7B,GAAG,CAACuD,WAAJ,CAAgB5C,MAAlC,CAAd;UACAoC,aAAa,CAAC9C,OAAD,CAAb;QACD,CAX+C;;QAYhDwE,iBAAiB,CAACF,CAAD,EAAItE,OAAJ,EAAa4B,QAAb,EAAuB;UACtCd,6BAA6B;UAC7B,MAAM2D,MAAM,GAAG7C,QAAQ,CAAC8C,GAAT,CAAcC,CAAD,IAAOA,CAAC,CAACC,SAAtB,CAAf;UACA,MAAMC,MAAM,GAAGjD,QAAQ,CACpBzB,MADY,CACJwE,CAAD,IAAuD,WAAWA,CAD7D,EAEZD,GAFY,CAEPC,CAAD,IAAOA,CAAC,CAACG,KAFD,CAAf;UAIA5C,cAAc,CAACuC,MAAD,EAASI,MAAT,CAAd;UACA5C,kBAAkB,CAACwC,MAAD,EAASI,MAAT,CAAlB;UACA/B,aAAa,CAAC9C,OAAD,CAAb;QACD,CAtB+C;;QAuBhD+E,gBAAgB,GAAG;UAAA;;UACjBjE,6BAA6B;UAC7BH,OAAO,SAAP,IAAAA,OAAO,WAAP,qCAAAA,OAAO,CAAEoE,gBAAT,qFAAApE,OAAO;QACR,CA1B+C;;QA2BhDqE,gBAAgB,CAACV,CAAD,EAAItE,OAAJ,EAAa;UAC3Bc,6BAA6B;UAC7BgC,aAAa,CAAC9C,OAAD,CAAb;QACD,CA9B+C;;QA+BhDiF,iBAAiB,GAAG;UAClBnE,6BAA6B;UAC7BmC,IAAI,CAACE,GAAD,CAAJ;QACD;;MAlC+C,CAAlD;IAoCD;EACF,CAvEU,EAwEX,CAACpD,GAAD,EAAMsB,aAAa,CAACoB,GAApB,EAAyB9B,OAAzB,aAAyBA,OAAzB,uBAAyBA,OAAO,CAAE0C,iBAAlC,CAxEW,CAAb;EA2EA,IAAA6B,oCAAA,EAAkBnF,GAAlB,EAAuBS,SAAvB,EAAkC;IAChC2E,YAAY,CAACnF,OAAD,EAAUoF,UAAV,EAAsB;MAChCtE,6BAA6B;;MAC7B,IAAId,OAAO,CAAC+C,cAAR,MAA4B,CAAC,IAAAC,8BAAA,EAAmBhD,OAAnB,EAA4BqB,aAA5B,CAAjC,EAA6E;QAC3E,IAAI+D,UAAU,CAAC1E,MAAX,KAAsBX,GAAG,CAACuD,WAAJ,CAAgB5C,MAA1C,EAAkD;UAAA;;UAChDC,OAAO,SAAP,IAAAA,OAAO,WAAP,sCAAAA,OAAO,CAAEoE,gBAAT,uFAAApE,OAAO;QACR,CAFD,MAEO;UACLW,gBAAgB,CAACtB,OAAD,CAAhB;UACAwB,WAAW;QACZ;MACF;IACF;;EAX+B,CAAlC;EAcA,IAAA6D,gBAAA,EAAU,MAAM;IACd;IACAC,UAAU,CAAC,YAAY;MACrBnD,aAAa,CAAC,IAAD,CAAb;MACAc,IAAI,CAACvC,MAAD,EAAS,MAAMyB,aAAa,CAAC,KAAD,CAA5B,CAAJ;IACD,CAHS,EAGP,CAHO,CAAV;EAID,CAND,EAMG,CAACc,IAAD,EAAOvC,MAAP,CANH;EAQA,IAAA2E,gBAAA,EAAU,MAAM;IACd,OAAO,MAAM;MAAA;;MACX,IAAIrE,aAAa,CAACD,OAAlB,EAA2B,0BAAAC,aAAa,CAACD,OAAd,kFAAuBE,OAAvB;IAC5B,CAFD;EAGD,CAJD,EAIG,EAJH;EAMA,MAAMsE,OAAuD,GAAG,IAAArC,kBAAA,EAAY,YAAY;IACtFd,gBAAgB,CAAC,IAAD,CAAhB;IACAa,IAAI,CAACvC,MAAD,EAAS,MAAM0B,gBAAgB,CAAC,KAAD,CAA/B,CAAJ;EACD,CAH+D,EAG7D,CAACa,IAAD,EAAOvC,MAAP,CAH6D,CAAhE;EAKA,MAAM8E,IAAiD,GAAG,IAAAtC,kBAAA,EAAY,YAAY;IAAA;;IAChF,IAAIlC,aAAa,CAACD,OAAd,8BAAyBC,aAAa,CAACD,OAAvC,mDAAyB,uBAAuB0E,WAApD,EAAiE;MAC/D,IAAI;QAAA;;QACF,MAAMC,IAAI,GAAG,iCAAM1E,aAAa,CAACD,OAApB,2DAAM,uBAAuB4E,YAAvB,EAAN,CAAb;QACA5D,cAAc,CAAC2D,IAAD,EAAO,KAAP,EAAc3F,GAAG,CAACuD,WAAJ,CAAgB5C,MAA9B,CAAd;MACD,CAHD,CAGE,MAAM,CAAE;IACX;EACF,CAPyD,EAOvD,EAPuD,CAA1D;EASA,MAAMkF,IAAiD,GAAG,IAAA1C,kBAAA,EAAY,YAAY;IAAA;;IAChF,MAAMwC,IAAI,GAAG,EAAb;;IACA,IAAI1E,aAAa,CAACD,OAAd,8BAAyBC,aAAa,CAACD,OAAvC,mDAAyB,uBAAuB8E,OAApD,EAA6D;MAC3D,IAAI;QAAA;;QACF,MAAMC,WAAW,GAAG,kCAAM9E,aAAa,CAACD,OAApB,4DAAM,wBAAuBgF,QAAvB,EAAN,CAApB;QACAL,IAAI,CAACM,IAAL,CAAU,GAAGF,WAAb;MACD,CAHD,CAGE,MAAM,CAAE;IACX;;IACD,IAAIjE,YAAY,CAACmC,MAAb,GAAsB,CAA1B,EAA6B;MAC3B0B,IAAI,CAACM,IAAL,CAAU,GAAGnE,YAAb;IACD;;IACD,IAAI6D,IAAI,CAAC1B,MAAL,GAAc,CAAlB,EAAqB;MACnBjC,cAAc,CAAC2D,IAAD,EAAO,KAAP,EAAc3F,GAAG,CAACuD,WAAJ,CAAgB5C,MAA9B,CAAd;MACAsB,kBAAkB,CAAC,EAAD,EAAK,IAAL,EAAWjC,GAAG,CAACuD,WAAJ,CAAgB5C,MAA3B,CAAlB;IACD;EACF,CAfyD,EAevD,CAACmB,YAAY,CAACmC,MAAd,CAfuD,CAA1D;EAiBA,MAAMiC,eAAuE,GAAG,IAAA/C,kBAAA,EAC9E,CAACgD,MAAD,EAASC,SAAT,KAAuB;IACrB,OAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;MACtC,MAAMC,cAAc,GAAGlF,aAAa,CAAC4E,eAAd,CAA8BC,MAA9B,EAAsC,CAACM,WAAD,EAAc1C,KAAd,KAAwB;QACnF,IAAIA,KAAJ,EAAWwC,MAAM,CAACxC,KAAD,CAAN,CAAX,KACK;UACH/B,cAAc,CAAC,CAACyE,WAAD,CAAD,EAAgB,KAAhB,EAAuBzG,GAAG,CAACuD,WAAJ,CAAgB5C,MAAvC,CAAd;UACA2F,OAAO,CAACG,WAAD,CAAP;QACD;MACF,CANsB,CAAvB;MAQAL,SAAS,SAAT,IAAAA,SAAS,WAAT,YAAAA,SAAS,CAAGI,cAAH,CAAT;MACAxE,cAAc,CAAC,CAACwE,cAAD,CAAD,EAAmB,KAAnB,EAA0BxG,GAAG,CAACuD,WAAJ,CAAgB5C,MAA1C,CAAd;IACD,CAXM,CAAP;EAYD,CAd6E,EAe9E,CAACW,aAAD,CAf8E,CAAhF;EAiBA,MAAMoF,eAAuE,GAAG,IAAAvD,kBAAA,EAC9E,CAACgD,MAAD,EAASC,SAAT,KAAuB;IACrB,OAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;MACtC,MAAMC,cAAc,GAAGlF,aAAa,CAACoF,eAAd,CAA8BP,MAA9B,EAAsC,CAACM,WAAD,EAAc1C,KAAd,KAAwB;QACnF,IAAIA,KAAJ,EAAWwC,MAAM,CAACxC,KAAD,CAAN,CAAX,KACK;UACH/B,cAAc,CAAC,CAACyE,WAAD,CAAD,EAAgB,KAAhB,EAAuBzG,GAAG,CAACuD,WAAJ,CAAgB5C,MAAvC,CAAd;UACA2F,OAAO,CAACG,WAAD,CAAP;QACD;MACF,CANsB,CAAvB;MAQAzE,cAAc,CAAC,CAACwE,cAAD,CAAD,EAAmB,KAAnB,EAA0BxG,GAAG,CAACuD,WAAJ,CAAgB5C,MAA1C,CAAd;MACAyF,SAAS,SAAT,IAAAA,SAAS,WAAT,YAAAA,SAAS,CAAGI,cAAH,CAAT;IACD,CAXM,CAAP;EAYD,CAd6E,EAe9E,CAAClF,aAAD,CAf8E,CAAhF;EAiBA,MAAMqF,iBAA2E,GAAG,IAAAxD,kBAAA,EAClF,OAAO0B,SAAP,EAAkBsB,MAAlB,KAA6B;IAC3B,MAAMS,cAAc,GAAG,MAAMtF,aAAa,CAACqF,iBAAd,CAAgC9B,SAAhC,EAA2CsB,MAA3C,EAAmDU,gBAAnD,CAA7B;IACA7E,cAAc,CAAC,CAAC4E,cAAD,CAAD,EAAmB,KAAnB,EAA0B5G,GAAG,CAACuD,WAAJ,CAAgB5C,MAA1C,CAAd;IACA,OAAOiG,cAAP;EACD,CALiF,EAMlF,CAACtF,aAAD,CANkF,CAApF;EAQA,MAAMwF,iBAA2E,GAAG,IAAA3D,kBAAA,EAClF,OAAO0B,SAAP,EAAkBsB,MAAlB,KAA6B;IAC3B,MAAMS,cAAc,GAAG,MAAMtF,aAAa,CAACwF,iBAAd,CAAgCjC,SAAhC,EAA2CsB,MAA3C,EAAmDU,gBAAnD,CAA7B;IACA7E,cAAc,CAAC,CAAC4E,cAAD,CAAD,EAAmB,KAAnB,EAA0B5G,GAAG,CAACuD,WAAJ,CAAgB5C,MAA1C,CAAd;IACA,OAAOiG,cAAP;EACD,CALiF,EAMlF,CAACtF,aAAD,CANkF,CAApF;EAQA,MAAMyF,aAAmE,GAAG,IAAA5D,kBAAA,EAC1E,MAAO6D,aAAP,IAAyB;IACvB,MAAMC,OAAO,GAAG,MAAM,CAAC,MAAM;MAC3B,IAAID,aAAa,CAACE,aAAd,EAAJ,EAAmC,OAAO5F,aAAa,CAAC6F,iBAAd,CAAgCH,aAAhC,CAAP;MACnC,IAAIA,aAAa,CAACI,aAAd,EAAJ,EAAmC,OAAO9F,aAAa,CAAC+F,iBAAd,CAAgCL,aAAhC,CAAP;MACnC,OAAO,IAAP;IACD,CAJqB,GAAtB;IAMA,IAAIC,OAAJ,EAAajF,cAAc,CAAC,CAACiF,OAAD,CAAD,EAAY,KAAZ,EAAmBjH,GAAG,CAACuD,WAAJ,CAAgB5C,MAAnC,CAAd;EACd,CATyE,EAU1E,CAACW,aAAD,CAV0E,CAA5E;EAYA,MAAMgG,aAAmE,GAAG,IAAAnE,kBAAA,EAC1E,MAAO8D,OAAP,IAAmB;IACjB,IAAIA,OAAO,CAACM,aAAR,KAA0B,WAA9B,EAA2C;MACzC,IAAIN,OAAO,CAACC,aAAR,EAAJ,EAA6B,MAAM5F,aAAa,CAACgG,aAAd,CAA4BL,OAA5B,CAAN;MAC7B,IAAIA,OAAO,CAACG,aAAR,EAAJ,EAA6B,MAAM9F,aAAa,CAACgG,aAAd,CAA4BL,OAA5B,CAAN;IAC9B,CAHD,MAGO;MACL,IAAI;QAAA;;QACF,kCAAMhG,aAAa,CAACD,OAApB,4DAAM,wBAAuBwG,oBAAvB,CAA4C,CAACP,OAAD,CAA5C,CAAN;MACD,CAFD,SAEU;QACR9E,cAAc,CAAC,CAAC8E,OAAO,CAACpC,SAAT,CAAD,EAAsB,CAACoC,OAAO,CAAClC,KAAT,CAAtB,CAAd;MACD;IACF;EACF,CAZyE,EAa1E,CAACzD,aAAD,CAb0E,CAA5E;EAgBA,OAAO;IACLK,OADK;IAELC,UAFK;IAGL4D,OAHK;IAIL3D,QAJK;IAKLC,YALK;IAMLC,sBANK;IAOL8D,IAPK;IAQLJ,IARK;IASLS,eATK;IAULQ,eAVK;IAWLC,iBAXK;IAYLG,iBAZK;IAaLC,aAbK;IAcLO,aAdK;IAeLhG;EAfK,CAAP;AAiBD,CApRM"}
|