@sendbird/uikit-chat-hooks 1.0.2 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/lib/commonjs/channel/{useGroupChannelList.js → useGroupChannelList/index.js} +1 -1
  2. package/lib/commonjs/channel/useGroupChannelList/index.js.map +1 -0
  3. package/lib/commonjs/channel/useGroupChannelList/reducer.js +184 -0
  4. package/lib/commonjs/channel/useGroupChannelList/reducer.js.map +1 -0
  5. package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithCollection.js +134 -0
  6. package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithCollection.js.map +1 -0
  7. package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithQuery.js +118 -0
  8. package/lib/commonjs/channel/useGroupChannelList/useGroupChannelListWithQuery.js.map +1 -0
  9. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +4 -5
  10. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
  11. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +3 -3
  12. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
  13. package/lib/commonjs/common/useAppFeatures.js +8 -28
  14. package/lib/commonjs/common/useAppFeatures.js.map +1 -1
  15. package/lib/commonjs/common/useMessageOutgoingStatus.js +49 -0
  16. package/lib/commonjs/common/useMessageOutgoingStatus.js.map +1 -0
  17. package/lib/commonjs/handler/useChannelHandler.js +16 -5
  18. package/lib/commonjs/handler/useChannelHandler.js.map +1 -1
  19. package/lib/commonjs/index.js +12 -4
  20. package/lib/commonjs/index.js.map +1 -1
  21. package/lib/commonjs/types.js.map +1 -1
  22. package/lib/module/channel/{useGroupChannelList.js → useGroupChannelList/index.js} +1 -1
  23. package/lib/module/channel/useGroupChannelList/index.js.map +1 -0
  24. package/lib/module/channel/useGroupChannelList/reducer.js +174 -0
  25. package/lib/module/channel/useGroupChannelList/reducer.js.map +1 -0
  26. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js +120 -0
  27. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithCollection.js.map +1 -0
  28. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithQuery.js +104 -0
  29. package/lib/module/channel/useGroupChannelList/useGroupChannelListWithQuery.js.map +1 -0
  30. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +4 -5
  31. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
  32. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +3 -3
  33. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
  34. package/lib/module/common/useAppFeatures.js +8 -27
  35. package/lib/module/common/useAppFeatures.js.map +1 -1
  36. package/lib/module/common/useMessageOutgoingStatus.js +36 -0
  37. package/lib/module/common/useMessageOutgoingStatus.js.map +1 -0
  38. package/lib/module/handler/useChannelHandler.js +17 -6
  39. package/lib/module/handler/useChannelHandler.js.map +1 -1
  40. package/lib/module/index.js +4 -3
  41. package/lib/module/index.js.map +1 -1
  42. package/lib/module/types.js.map +1 -1
  43. package/lib/typescript/src/channel/{useGroupChannelList.d.ts → useGroupChannelList/index.d.ts} +1 -1
  44. package/lib/typescript/src/channel/useGroupChannelList/reducer.d.ts +14 -0
  45. package/lib/typescript/src/channel/{useGroupChannelListWithCollection.d.ts → useGroupChannelList/useGroupChannelListWithCollection.d.ts} +1 -1
  46. package/lib/typescript/src/channel/{useGroupChannelListWithQuery.d.ts → useGroupChannelList/useGroupChannelListWithQuery.d.ts} +1 -1
  47. package/lib/typescript/src/common/useMessageOutgoingStatus.d.ts +3 -0
  48. package/lib/typescript/src/handler/useChannelHandler.d.ts +1 -2
  49. package/lib/typescript/src/index.d.ts +4 -3
  50. package/lib/typescript/src/types.d.ts +0 -7
  51. package/package.json +3 -3
  52. package/src/channel/{useGroupChannelList.ts → useGroupChannelList/index.ts} +1 -1
  53. package/src/channel/useGroupChannelList/reducer.ts +154 -0
  54. package/src/channel/useGroupChannelList/useGroupChannelListWithCollection.ts +116 -0
  55. package/src/channel/useGroupChannelList/useGroupChannelListWithQuery.ts +114 -0
  56. package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.ts +14 -20
  57. package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.ts +48 -53
  58. package/src/common/useAppFeatures.ts +5 -22
  59. package/src/common/useMessageOutgoingStatus.ts +56 -0
  60. package/src/handler/useChannelHandler.ts +11 -5
  61. package/src/index.ts +4 -3
  62. package/src/types.ts +0 -8
  63. package/lib/commonjs/channel/useGroupChannelList.js.map +0 -1
  64. package/lib/commonjs/channel/useGroupChannelListWithCollection.js +0 -148
  65. package/lib/commonjs/channel/useGroupChannelListWithCollection.js.map +0 -1
  66. package/lib/commonjs/channel/useGroupChannelListWithQuery.js +0 -130
  67. package/lib/commonjs/channel/useGroupChannelListWithQuery.js.map +0 -1
  68. package/lib/module/channel/useGroupChannelList.js.map +0 -1
  69. package/lib/module/channel/useGroupChannelListWithCollection.js +0 -135
  70. package/lib/module/channel/useGroupChannelListWithCollection.js.map +0 -1
  71. package/lib/module/channel/useGroupChannelListWithQuery.js +0 -117
  72. package/lib/module/channel/useGroupChannelListWithQuery.js.map +0 -1
  73. package/src/channel/useGroupChannelListWithCollection.ts +0 -144
  74. package/src/channel/useGroupChannelListWithQuery.ts +0 -124
@@ -18,4 +18,4 @@ const useGroupChannelList = (sdk, userId, options) => {
18
18
  };
19
19
 
20
20
  exports.useGroupChannelList = useGroupChannelList;
21
- //# sourceMappingURL=useGroupChannelList.js.map
21
+ //# sourceMappingURL=index.js.map
@@ -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: 5,
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: 5,\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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"}
@@ -61,19 +61,18 @@ const useGroupChannelMessagesWithCollection = (sdk, channel, userId, options) =>
61
61
  try {
62
62
  if (deliveryReceiptEnabled) sdk.markAsDelivered(activeChannel.url);
63
63
  } catch (e) {
64
- _uikitUtils.Logger.error(`[${HOOK_NAME}/channelMarkAs/Delivered]`, e);
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.error(`[${HOOK_NAME}/channelMarkAs/Read]`, e);
70
+ _uikitUtils.Logger.warn(`[${HOOK_NAME}/channelMarkAs/Read]`, e);
71
71
  }
72
72
  };
73
73
 
74
74
  const updateChannel = channel => {
75
75
  if (channel.isGroupChannel() && !(0, _uikitUtils.isDifferentChannel)(channel, activeChannel)) {
76
- setActiveChannel(channel);
77
76
  forceUpdate();
78
77
  }
79
78
  };
@@ -99,7 +98,7 @@ const useGroupChannelMessagesWithCollection = (sdk, channel, userId, options) =>
99
98
  if (messages !== null && messages !== void 0 && messages.length) callback === null || callback === void 0 ? void 0 : callback();
100
99
  }
101
100
  }).onApiResult((err, messages) => {
102
- if (err) _uikitUtils.Logger.error(`[${HOOK_NAME}/onApiResult]`, err);else {
101
+ if (err) _uikitUtils.Logger.warn(`[${HOOK_NAME}/onApiResult]`, err);else {
103
102
  _uikitUtils.Logger.debug(`[${HOOK_NAME}/onApiResult]`, 'message length:', messages.length);
104
103
 
105
104
  updateMessages(messages, true, sdk.currentUser.userId);
@@ -172,7 +171,7 @@ const useGroupChannelMessagesWithCollection = (sdk, channel, userId, options) =>
172
171
  }
173
172
  }
174
173
 
175
- }, [sdk]);
174
+ });
176
175
  (0, _react.useEffect)(() => {
177
176
  // NOTE: Cache read is heavy synchronous task, and it prevents smooth ui transition
178
177
  setTimeout(async () => {