Skip to content

Commit e002f27

Browse files
committed
changelog
1 parent e67157d commit e002f27

File tree

1 file changed

+352
-0
lines changed

1 file changed

+352
-0
lines changed

CHANGELOG.md

+352
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,352 @@
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

Comments
 (0)