@@ -7,7 +7,7 @@ form.addEventListener("submit", async (e) => {
77 const message = input . value . trim ( ) ;
88 if ( ! message ) return ;
99
10- appendMessage ( "Gebruiker " , message ) ;
10+ appendMessage ( "user " , message ) ;
1111 input . value = "" ;
1212
1313 try {
@@ -23,18 +23,34 @@ form.addEventListener("submit", async (e) => {
2323 throw new Error ( `Serverfout: ${ response . status } ` ) ;
2424 }
2525
26- const text = await response . text ( ) ;
27- appendMessage ( "Agent ", text ) ;
26+ const fullText = await response . text ( ) ;
27+ simulateTyping ( "assistant ", fullText ) ;
2828 } catch ( err ) {
29- appendMessage ( "Agent " , "Er ging iets mis." ) ;
29+ appendMessage ( "assistant " , "Er ging iets mis." ) ;
3030 console . error ( "Fout in fetch:" , err ) ;
3131 }
3232} ) ;
3333
34- function appendMessage ( sender , text ) {
34+ function appendMessage ( role , text ) {
3535 const msg = document . createElement ( "div" ) ;
36- msg . className = "message " + ( sender === "Gebruiker" ? "user-message" : "agent-message" ) ;
37- msg . textContent = text ;
36+ msg . classList . add ( "message" ) ;
37+ msg . classList . add ( role === "user" ? "user-message" : "agent-message" ) ;
38+ msg . innerText = `${ text } ` ;
3839 chat . appendChild ( msg ) ;
3940 chat . scrollTop = chat . scrollHeight ;
4041}
42+
43+ function simulateTyping ( role , fullText ) {
44+ const msg = document . createElement ( "div" ) ;
45+ msg . classList . add ( "message" ) ;
46+ msg . classList . add ( role === "user" ? "user-message" : "agent-message" ) ;
47+ chat . appendChild ( msg ) ;
48+
49+ let index = 0 ;
50+ const interval = setInterval ( ( ) => {
51+ msg . innerText = fullText . slice ( 0 , index ) ;
52+ chat . scrollTop = chat . scrollHeight ;
53+ index ++ ;
54+ if ( index > fullText . length ) clearInterval ( interval ) ;
55+ } , 20 ) ; // snelheid: 20ms per karakter
56+ }
0 commit comments