|
1 | | -# What's new in version 4? |
2 | | - |
3 | | -## Overall |
4 | | - |
5 | | -- No callback. Use `Promise`. |
6 | | - |
7 | | -```ts |
8 | | -// v3 |
9 | | -sb.connect(userId, (err, user) => {}); |
10 | | - |
11 | | -// v4 |
12 | | -const user = await sb.connect(userId); |
13 | | -``` |
14 | | - |
15 | | -- `Treeshaking` applied. The classes, interfaces, enums, types come to be `import`-able with treeshaking. See [SDK reference](https://sendbird.com/docs/chat/v4/javascript/ref/index.html) page for detailed list of exports. |
16 | | - |
17 | | -```ts |
18 | | -// v3 |
19 | | -sb.GroupChannel |
20 | | -sb.LogLevel |
21 | | -... |
22 | | - |
23 | | -// v4 |
24 | | -import { LogLevel } from '@sendbird/chat'; |
25 | | -import { GroupChannel } from '@sendbird/groupChannel'; |
26 | | -... |
27 | | -``` |
28 | | - |
29 | | -- `static` object relocation. |
30 | | - |
31 | | -|`v3`|`v4`| |
32 | | -|-|-| |
33 | | -|`sb.GroupChannel`|`sb.groupChannel`*| |
34 | | -|`sb.OpenChannel`|`sb.openChannel`**| |
35 | | -|`sb.BaseMessage`|`sb.message`| |
36 | | - |
37 | | -> \* Should declare `GroupChannelModule` in `SendbirdChat.init()`. |
38 | | -> ** Should declare `OpenChannelModule` in `SendbirdChat.init()`. |
39 | | -
|
40 | | -## New features |
41 | | - |
42 | | -- Added `onConnected()`, `onDisconnected()` to `ConnectionHandler`. |
43 | | - |
44 | | -## Changes |
45 | | - |
46 | | -- Changed initialization interface. |
47 | | - |
48 | | -```ts |
49 | | -// v3 |
50 | | -import SendBird from 'sendbird'; |
51 | | -import AsyncStorage from '@react-native-async-storage/async-storage'; |
52 | | - |
53 | | -const sb = new SendBird({ |
54 | | - appId: APP_ID, |
55 | | - localCacheEnabled: true, |
56 | | -}); |
57 | | -sb.setLogLevel(sb.LogLevel.WARN); |
58 | | -sb.appVersion = APP_VERSION; |
59 | | -sb.Options.useMemberAsMessageSender = true; |
60 | | - |
61 | | -// only for React Native |
62 | | -sb.useAsyncStorageAsDatabase(AsyncStorage); |
63 | | - |
64 | | -// v4 |
65 | | -import SendbirdChat, { |
66 | | - SendbirdChatOptions, |
67 | | - Loglevel |
68 | | -} from '@sendbird/chat'; |
69 | | -import AsyncStorage from '@react-native-async-storage/async-storage'; |
70 | | - |
71 | | -const sb = SendbirdChat.init({ |
72 | | - appId: APP_ID, |
73 | | - appVersion: APP_VERSION, |
74 | | - modules, |
75 | | - options: new SendbirdChatOptions({ |
76 | | - useMemberAsMessageSender: true, |
77 | | - }), |
78 | | - logLevel: LogLevel.WARN, |
79 | | - localCacheEnabled: true, |
80 | | - useAsyncStorageStore: AsyncStorage, // only for React Native |
81 | | -}); |
82 | | -``` |
83 | | - |
84 | | -- Replaced `ChannelHandler` to `GroupChannelHandler` and `OpenChannelHandler` |
85 | | - |
86 | | -```ts |
87 | | -// v3 |
88 | | -const channelHandler = new sb.ChannelHandler(); |
89 | | -channelHandler.onChannelChanged = (channel) => { |
90 | | - ... |
91 | | -}; |
92 | | -sb.addChannelHandler(EVENT_ID, channelHandler); |
93 | | -sb.removeChannelHandler(EVENT_ID); |
94 | | - |
95 | | -// v4 |
96 | | -import { GroupChannelHandler } from '@sendbird/chat/groupChannel'; |
97 | | - |
98 | | -const channelHandler = new GroupChannelHandler({ |
99 | | - onChannelChanged: (channel) => { |
100 | | - ... |
101 | | - }, |
102 | | -}); |
103 | | -sb.groupChannel.addGroupChannelHandler(EVENT_ID, channelHandler); |
104 | | -sb.groupChannel.removeGroupChannelHandler(EVENT_ID); |
105 | | -``` |
106 | | - |
107 | | -- No builder pattern for `Collection`s. |
108 | | - |
109 | | -```ts |
110 | | -// v3 |
111 | | -const groupChannelFilter = new sb.GroupChannelFilter(); |
112 | | -const gc = sb.GroupChannel.createGroupChannelCollection() |
113 | | - .setOrder(sb.GroupChannelCollection.GroupChannelOrder.LATEST_LAST_MESSAGE) |
114 | | - .setFilter(groupChannelFilter) |
115 | | - .build(); |
116 | | - |
117 | | -const messageFilter = new sb.MessageFilter(); |
118 | | -const mc = channel.createMessageCollection() |
119 | | - .setFilter(messageFilter) |
120 | | - .setStartingPoint(startingPoint) |
121 | | - .build(); |
122 | | - |
123 | | -// v4 |
124 | | -import { |
125 | | - GroupChannelFilter, |
126 | | - GroupChannelListOrder |
127 | | -} from '@sendbird/chat/groupChannel'; |
128 | | -import { MessageFilter } from '@sendbird/chat/message'; |
129 | | - |
130 | | -const groupChannelFilter = new GroupChannelFilter(); |
131 | | -const gc = sb.groupChannel.createGroupChannelCollection({ |
132 | | - filter: groupChannelFilter, |
133 | | - order: GroupChannelListOrder.LATEST_LAST_MESSAGE, |
134 | | -}); |
135 | | - |
136 | | -const messageFilter = new MessageFilter(); |
137 | | -const mc = channel.createMessageCollection({ |
138 | | - filter: messageFilter, |
139 | | - startingPoint: Date.now(), |
140 | | -}); |
141 | | -``` |
142 | | - |
143 | | -- Changed `sb.updateCurrentUserInfo()` to take `UserUpdateParams` as a parameter. |
144 | | - |
145 | | -```ts |
146 | | -// v3 |
147 | | -sb.updateCurrentUserInfo(NICKNAME, PROFILE_URL); |
148 | | -sb.updateCurrentUserInfoWithProfileImage(NICKNAME, PROFILE_IMAGE); |
149 | | - |
150 | | -// v4 |
151 | | -import { UserUpdateParams } from '@sendbird/chat'; |
152 | | - |
153 | | -const params = new UserUpdateParams({ |
154 | | - nickname: NICKNAME, |
155 | | - profileUrl: PROFILE_URL, |
156 | | - // or you can put a file as `profileImage` to upload the profile |
157 | | -}); |
158 | | -sb.updateCurrentUserInfo(params); |
159 | | -// no sb.updateCurrentUserInfoWithProfileImage() |
160 | | -``` |
161 | | - |
162 | | -- Changed `sb.getUnreadItemCount()` to take `UnreadItemCountParams` as a parameter. |
163 | | - |
164 | | -```ts |
165 | | -// v3 |
166 | | -sb.getUnreadItemCount(KEYS); |
167 | | - |
168 | | -// v4 |
169 | | -const params = new UnreadItemCountParams({ |
170 | | - keys: KEYS, |
171 | | -}); |
172 | | -sb.getUnreadItemCount(params); |
173 | | -``` |
174 | | - |
175 | | -- Changed `sb.getTotalUnreadMessageCount()` to take `TotalUnreadMessageCountParams` as a parameter. |
176 | | - |
177 | | -```ts |
178 | | -// v3 |
179 | | -sb.getTotalUnreadMessageCount(CHANNEL_CUSTOM_TYPES); |
180 | | -// no super channel filter support |
181 | | - |
182 | | -// v4 |
183 | | -const params = new TotalUnreadMessageCountParams({ |
184 | | - channelCustomTypesFilter: CHANNEL_CUSTOM_TYPES, |
185 | | - superChannelFilter: SUPER_CHANNEL_FILTER, |
186 | | -}); |
187 | | -sb.getTotalUnreadMessageCount(params); |
188 | | -``` |
189 | | - |
190 | | -- Changed `sendUserMessage()` and `sendFileMessage()` interface to chain the callbacks for pending/failed/succeeded messages. |
191 | | - |
192 | | -```ts |
193 | | -// v3 |
194 | | -const pendingMessage = channel.sendUserMessage(params, (err, message) => { |
195 | | - if (err) { |
196 | | - // message is a failed message |
197 | | - } else { |
198 | | - // message is a succeeded message |
199 | | - } |
200 | | -}); |
201 | | - |
202 | | -// v4 |
203 | | -channel.sendUserMessage(params) |
204 | | - .onPending((pendingMessage: UserMessage) => {}) |
205 | | - .onFailed((err: Error, failedMessage: UserMessage) => {}) |
206 | | - .onSucceeded((succeededMessage: UserMessage) => {}); |
207 | | -``` |
208 | | - |
209 | | -- Separated update params from create params. |
210 | | - |
211 | | -```ts |
212 | | -// v3 |
213 | | -GroupChannelParams // both for create/update |
214 | | -OpenChannelParams // both for create/update |
215 | | -UserMessageParams // both for send/update |
216 | | -FileMessageParams // both for send/update |
217 | | - |
218 | | -// v4 |
219 | | -GroupChannelCreateParams |
220 | | -GroupChannelUpdateParams |
221 | | -OpenChannelCreateParams |
222 | | -OpenChannelUpdateParams |
223 | | -UserMessageCreateParams |
224 | | -UserMessageUpdateParams |
225 | | -FileMessageCreateParams |
226 | | -FileMessageUpdateParams |
227 | | -``` |
228 | | - |
229 | | -- Changed to accept initial properties in `~Params` constructors. |
230 | | - |
231 | | -```ts |
232 | | -// v3 |
233 | | -const params = new sb.UserMessageParams(); |
234 | | -params.message = 'message'; |
235 | | - |
236 | | -// v4 |
237 | | -import { UserMessageParams } from '@sendbird/chat/message'; |
238 | | - |
239 | | -const params = new UserMessageCreateParams({ |
240 | | - message: 'message', |
241 | | -}); |
242 | | - |
243 | | -// or you can still use it as v3 |
244 | | -const params = new UserMessageCreateParams(); |
245 | | -params.message = 'message'; |
246 | | -``` |
247 | | - |
248 | | -- Changed to accept properties in `~Query` constructors. The query properties are immutable later on. |
249 | | - |
250 | | -```ts |
251 | | -// v3 |
252 | | -const query = sb.GroupChannel.createMyGroupChannelListQuery(); |
253 | | -query.customTypesFilter = ['a', 'b']; |
254 | | -query.order = 'latest_last_message'; |
255 | | - |
256 | | -// v4 |
257 | | -import { GroupChannelListOrder } from '@sendbird/chat/groupChannel'; |
258 | | - |
259 | | -const query = sb.groupChannel.createMyGroupChannelListQuery({ |
260 | | - customTypesFilter: ['a', 'b'], |
261 | | - order: GroupChannelListOrder.LATEST_LAST_MESSAGE, |
262 | | -}); |
263 | | -query.customTypesFilter = ['a', 'b']; // ERROR! IMMUTABLE PROPERTY! |
264 | | -``` |
265 | | - |
266 | | -- Changed `buildFromSerializedData()` paths. |
267 | | - |
268 | | -```ts |
269 | | -// v3 |
270 | | -sb.AdminMessage.buildFromSerializedData() |
271 | | -sb.FileMessage.buildFromSerializedData() |
272 | | -sb.UserMessage.buildFromSerializedData() |
273 | | -sb.Sender.buildFromSerializedData() |
274 | | - |
275 | | -sb.GroupChannel.buildFromSerializedData() |
276 | | -sb.GroupChannelListQuery.buildFromSerializedData() |
277 | | -sb.Member.buildFromSerializedData() |
278 | | - |
279 | | -sb.OpenChannel.buildFromSerializedData() |
280 | | - |
281 | | -sb.User.buildFromSerializedData() |
282 | | - |
283 | | -// v4 |
284 | | -sb.message.buildMessageFromSerializedData() // admin/file/user altogether |
285 | | -sb.message.buildSenderFromSerializedData() |
286 | | - |
287 | | -sb.groupChannel.buildGroupChannelFromSerializedData() |
288 | | -sb.groupChannel.buildGroupChannelListQueryFromSerializedData() |
289 | | -sb.groupChannel.buildMemberFromSerializedData() |
290 | | - |
291 | | -sb.openChannel.buildOpenChannelFromSerializedData() |
292 | | - |
293 | | -sb.buildUserFromSerializedData() |
294 | | -``` |
295 | | - |
296 | | -- Turned some getter functions to read-only properties. |
297 | | - |
298 | | -```ts |
299 | | -// v3 |
300 | | -SendBird.getInstance() |
301 | | -sb.getApplicationId() |
302 | | -sb.getConnectionState() |
303 | | -sb.getLastConnectedAt() |
304 | | -channel.isGroupChannel() |
305 | | -channel.isOpenChannel() |
306 | | -channel.getCachedMetaData() |
307 | | -message.isUserMessage() |
308 | | -message.isFileMessage() |
309 | | -message.isAdminMessage() |
310 | | -message.isResendable() |
311 | | - |
312 | | -// v4 |
313 | | -SendbirdChat.instance |
314 | | -sb.appId |
315 | | -sb.connectionState |
316 | | -sb.lastConnectedAt |
317 | | -channel.isGroupChannel |
318 | | -channel.isOpenChannel |
319 | | -channel.cachedMetaData |
320 | | -message.isUserMessage |
321 | | -message.isFileMessage |
322 | | -message.isAdminMessage |
323 | | -message.isResendable |
324 | | -``` |
325 | | - |
326 | | -- Relocations |
327 | | - |
328 | | -|v3|v4| |
329 | | -|-|-| |
330 | | -|`sb.getMyGroupChannelChangeLogsByToken()`|`sb.groupChannel.getMyGroupChannelChangeLogsByToken()`| |
331 | | -|`sb.getMyGroupChannelChangeLogsByTimestamp()`|`sb.groupChannel.getMyGroupChannelChangeLogsByTimestamp()`| |
332 | | - |
333 | | -- Renames |
334 | | - |
335 | | -|v3|v4| |
336 | | -|-|-| |
337 | | -|`SendBird`|`SendbirdChat`| |
338 | | -|`SendBirdException`|`SendbirdError`| |
339 | | -|`GCMPushToken`|`FCMPushToken`*| |
340 | | -|`sb.initializeDatabase()`|`sb.initializeCache()`| |
341 | | -|`sb.clearDatabase()`|`sb.clearCache()`| |
342 | | -|`channelHandler.onReadReceiptUpdated()`|`groupChannelHandler.onUnreadMemberStatusUpdated()`| |
343 | | -|`channelHandler.onDeliveryReceiptUpdated()`|`groupChannelHandler.onUndeliveredMemberStatusUpdated()`| |
344 | | -|`groupChannel.cachedReadReceiptStatus`|`groupChannel.cachedUnreadMemberState`| |
345 | | -|`groupChannel.cachedDeliveryReceiptStatus`|`groupChannel.cachedUndeliveredMemberState`| |
346 | | -|`message.sendingStatus`|`message.requestState`| |
347 | | - |
348 | | -> \* But stilling meaning the token for Android. |
349 | | -
|
350 | | -## Removes |
351 | | - |
352 | | -- Removed `channel.getMessagesByID()`. |
0 commit comments