forked from sendbird/sendbird-javascript-samples
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.js
More file actions
104 lines (97 loc) · 3.41 KB
/
Copy pathmain.js
File metadata and controls
104 lines (97 loc) · 3.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import { getVariableFromUrl, isEmpty, redirectToIndex } from './utils';
import { SendBirdAction } from './SendBirdAction';
import { ChatLeftMenu } from './ChatLeftMenu';
import { Chat } from './Chat';
import { Spinner } from './components/Spinner';
import { body, UPDATE_INTERVAL_TIME } from './const';
import { SendBirdConnection } from './SendBirdConnection';
import { SendBirdEvent } from './SendBirdEvent';
import { LeftListItem } from './components/LeftListItem';
const sb = new SendBirdAction();
const chatLeft = new ChatLeftMenu();
const chat = new Chat();
Spinner.start(body);
const createConnectionHandler = () => {
const connectionManager = new SendBirdConnection();
connectionManager.onReconnectStarted = () => {
Spinner.start(body);
console.log('[SendBird JS SDK] Reconnect : Started');
connectionManager.channel = chat.channel;
};
connectionManager.onReconnectSucceeded = () => {
console.log('[SendBird JS SDK] Reconnect : Succeeded');
chatLeft.clear();
chatLeft.updateUserInfo(SendBirdAction.getInstance().getCurrentUser());
chatLeft.getGroupChannelList(true);
Spinner.start(body);
chat.refresh(connectionManager.channel);
};
connectionManager.onReconnectFailed = () => {
console.log('[SendBird JS SDK] Reconnect : Failed');
connectionManager.remove();
redirectToIndex('SendBird Reconnect Failed...');
};
};
const createChannelEvent = () => {
const channelEvent = new SendBirdEvent();
channelEvent.onChannelChanged = channel => {
if(channel._autoMarkAsRead) {
channel.markAsRead();
}
chatLeft.updateItem(channel, true);
};
channelEvent.onUserEntered = (openChannel, user) => {
if (SendBirdAction.getInstance().isCurrentUser(user)) {
const handler = () => {
chat.render(openChannel.url);
ChatLeftMenu.getInstance().activeChannelItem(openChannel.url);
};
const item = new LeftListItem({ channel: openChannel, handler });
chatLeft.addOpenChannelItem(item.element);
chat.render(openChannel.url);
}
};
channelEvent.onUserJoined = (groupChannel, user) => {
const handler = () => {
chat.render(groupChannel.url, false);
ChatLeftMenu.getInstance().activeChannelItem(groupChannel.url);
};
const item = new LeftListItem({ channel: groupChannel, handler });
chatLeft.addGroupChannelItem(item.element);
chat.updateChatInfo(groupChannel);
};
channelEvent.onUserLeft = (groupChannel, user) => {
if (SendBirdAction.getInstance().isCurrentUser(user)) {
chatLeft.removeGroupChannelItem(groupChannel.url);
} else {
chatLeft.updateItem(groupChannel);
}
chat.updateChatInfo(groupChannel);
};
channelEvent.onChannelHidden = groupChannel => {
chatLeft.removeGroupChannelItem(groupChannel.url);
};
};
const updateGroupChannelTime = () => {
setInterval(() => {
LeftListItem.updateLastMessageTime();
}, UPDATE_INTERVAL_TIME);
};
document.addEventListener('DOMContentLoaded', () => {
const { userid, nickname } = getVariableFromUrl();
if (isEmpty(userid) || isEmpty(nickname)) {
redirectToIndex('UserID and Nickname must be required.');
}
sb
.connect(userid, nickname)
.then(user => {
chatLeft.updateUserInfo(user);
createConnectionHandler();
createChannelEvent();
updateGroupChannelTime();
chatLeft.getGroupChannelList(true);
})
.catch(() => {
redirectToIndex('SendBird connection failed.');
});
});