1+ const usernameInput = document . getElementById ( "usernameInput" ) ;
2+ const messageInput = document . getElementById ( "messageInput" ) ;
3+ const sendButton = document . getElementById ( "sendButton" ) ;
4+ const messagesDiv = document . getElementById ( "messages" ) ;
5+ const feedback = document . getElementById ( "feedback" ) ;
6+
7+
8+ sendButton . addEventListener ( "click" , sendMessage ) ;
9+
10+
11+ messageInput . addEventListener ( "keydown" , function ( event ) {
12+
13+ if ( event . key === "Enter" ) {
14+ event . preventDefault ( ) ;
15+ sendMessage ( ) ;
16+ }
17+
18+ } ) ;
19+
20+
21+ function sendMessage ( ) {
22+
23+ const username = usernameInput . value . trim ( ) ;
24+ const content = messageInput . value . trim ( ) ;
25+
26+ if ( username === "" ) {
27+ feedback . textContent = "Please enter your name." ;
28+ return ;
29+ }
30+
31+ if ( content === "" ) {
32+ feedback . textContent = "Message cannot be empty." ;
33+ return ;
34+ }
35+
36+ fetch ( `http://localhost:8081/messages?username=${ encodeURIComponent ( username ) } ` , {
37+ method : "POST" ,
38+ headers : {
39+ "Content-Type" : "application/json"
40+ } ,
41+ body : JSON . stringify ( {
42+ content : content
43+ } )
44+ } )
45+ . then ( response => {
46+
47+ if ( ! response . ok ) {
48+ throw new Error ( "Message could not be sent." ) ;
49+ }
50+
51+ return response . json ( ) ;
52+ } )
53+ . then ( ( ) => {
54+
55+ messageInput . value = "" ;
56+ feedback . textContent = "" ;
57+
58+ loadMessages ( ) ;
59+ } )
60+ . catch ( error => {
61+
62+ feedback . textContent = error . message ;
63+ } ) ;
64+ }
65+
66+
67+ function loadMessages ( ) {
68+
69+ fetch ( "http://localhost:8081/messages" )
70+ . then ( response => {
71+
72+ if ( ! response . ok ) {
73+ throw new Error ( "Could not load messages." ) ;
74+ }
75+
76+ return response . json ( ) ;
77+ } )
78+ . then ( messages => {
79+
80+ messagesDiv . innerHTML = "" ;
81+
82+ messages . forEach ( message => {
83+
84+ const messageElement = document . createElement ( "div" ) ;
85+ messageElement . classList . add ( "message" ) ;
86+
87+ const usernameElement = document . createElement ( "span" ) ;
88+ usernameElement . classList . add ( "username" ) ;
89+
90+ const contentElement = document . createElement ( "span" ) ;
91+ contentElement . classList . add ( "content" ) ;
92+
93+ const timestampElement = document . createElement ( "span" ) ;
94+ timestampElement . classList . add ( "timestamp" ) ;
95+
96+
97+ if ( message . user ) {
98+
99+ usernameElement . textContent =
100+ message . user . username + ":" ;
101+
102+ } else {
103+
104+ usernameElement . textContent = "Unknown user:" ;
105+ }
106+
107+
108+ contentElement . textContent = message . content ;
109+
110+ timestampElement . textContent =
111+ message . createdAt
112+ ? new Date ( message . createdAt ) . toLocaleString ( )
113+ : "" ;
114+
115+
116+ messageElement . appendChild ( usernameElement ) ;
117+ messageElement . appendChild ( contentElement ) ;
118+ messageElement . appendChild ( timestampElement ) ;
119+
120+ messagesDiv . appendChild ( messageElement ) ;
121+ } ) ;
122+
123+ messagesDiv . scrollTop = messagesDiv . scrollHeight ;
124+ } )
125+ . catch ( error => {
126+
127+ feedback . textContent = error . message ;
128+ } ) ;
129+ }
130+
131+
132+ loadMessages ( ) ;
133+
134+ setInterval ( loadMessages , 2000 ) ;
0 commit comments