1+ const ALICE_JWT = "" ;
2+ const BOB_JWT = "" ;
3+ const CONVERSATION_ID = "" ;
4+
5+ const aliceLoginBtn = document . getElementById ( "alice-login" ) ;
6+ const bobLoginBtn = document . getElementById ( "bob-login" ) ;
7+
8+ const messageTextarea = document . getElementById ( "message-textarea" ) ;
9+ const messageFeed = document . getElementById ( "message-feed" ) ;
10+ const sendButton = document . getElementById ( "send" ) ;
11+
12+ let userToken ;
13+ let myMember ;
14+
15+ function formatMessage ( sender , message ) {
16+ const rawDate = new Date ( Date . parse ( message . timestamp ) ) ;
17+ const options = {
18+ weekday : "long" ,
19+ year : "numeric" ,
20+ month : "long" ,
21+ day : "numeric" ,
22+ hour : "numeric" ,
23+ minute : "numeric" ,
24+ second : "numeric" ,
25+ } ;
26+ const formattedDate = rawDate . toLocaleDateString ( undefined , options ) ;
27+ let text = "" ;
28+
29+ if ( message . from . memberId !== myMember . id ) {
30+ text = `<span style="color:red">${ sender . userName . replace ( / < / g, "<" ) } (${ formattedDate } ): <b>${ message . body . text . replace ( / < / g, "<" ) } </b></span>` ;
31+ } else {
32+ text = `me (${ formattedDate } ): <b>${ message . body . text . replace ( / < / g, "<" ) } </b>` ;
33+ }
34+ return text + "<br />" ;
35+ }
36+
37+ function handleEvent ( event ) {
38+ let formattedMessage ;
39+ switch ( event . kind ) {
40+ case "member:invited" :
41+ formattedMessage = `${ event . body . user . name } was invited.<br/>` ;
42+ break ;
43+ case "member:joined" :
44+ formattedMessage = `${ event . body . user . name } joined.<br/>` ;
45+ break ;
46+ case "member:left" :
47+ formattedMessage = `${ event . body . user . name } left.<br/>` ;
48+ break ;
49+ case "message:text" :
50+ const sender = {
51+ displayName : event . from . displayName ,
52+ memberId : event . from . memberId ,
53+ userName : event . from . user . name ,
54+ userId : event . from . user . id ,
55+ } ;
56+ formattedMessage = formatMessage ( sender , event ) ;
57+ break ;
58+ }
59+ messageFeed . innerHTML = messageFeed . innerHTML + formattedMessage ;
60+ }
61+
62+ async function run ( ) {
63+ const client = new vonageClientSDK . VonageClient ( ) ;
64+ try {
65+ await client . createSession ( userToken ) ;
66+
67+ // Get my Member information
68+ myMember = await client . getConversationMember ( CONVERSATION_ID , "me" ) ;
69+
70+ document . getElementById ( "messages" ) . style . display = "block" ;
71+ document . getElementById ( "login" ) . style . display = "none" ;
72+
73+ // Load events that happened before the page loaded
74+ const params = {
75+ order : "asc" ,
76+ pageSize : 100 ,
77+ } ;
78+ const eventsPage = await client . getConversationEvents ( CONVERSATION_ID , params ) ;
79+ eventsPage . events . forEach ( ( event ) => handleEvent ( event ) ) ;
80+ } catch ( error ) {
81+ console . error ( "Error: " , error ) ;
82+ return ;
83+ }
84+
85+ client . on ( "conversationEvent" , ( event ) => {
86+ handleEvent ( event ) ;
87+ } ) ;
88+
89+ // Listen for clicks on the submit button and send the existing text value
90+ sendButton . addEventListener ( "click" , ( ) => {
91+ client
92+ . sendMessageTextEvent ( CONVERSATION_ID , messageTextarea . value )
93+ . then ( ( timestamp ) => {
94+ console . log ( "Successfully sent text message at " , timestamp ) ;
95+ messageTextarea . value = "" ;
96+ } )
97+ . catch ( ( error ) => {
98+ console . error ( "Error sending text message: " , error ) ;
99+ } ) ;
100+ } ) ;
101+ }
102+
103+ aliceLoginBtn . addEventListener ( "click" , ( ) => {
104+ userToken = ALICE_JWT ;
105+ run ( ) ;
106+ } ) ;
107+
108+ bobLoginBtn . addEventListener ( "click" , ( ) => {
109+ userToken = BOB_JWT ;
110+ run ( ) ;
111+ } ) ;
112+
113+
0 commit comments