@@ -2,46 +2,58 @@ import React, { useRef, useEffect } from 'react';
2
2
import { Message } from '@/lib/types' ;
3
3
import ChatRequest from './chat-request' ;
4
4
import ChatResponse from './chat-response' ;
5
+ import ThinkingAnimation from './thinking-animation' ;
5
6
6
7
interface ChatSectionProps {
7
- messages : Message [ ] ;
8
+ messages : Message [ ] ;
8
9
}
9
10
10
11
const ChatSection : React . FC < ChatSectionProps > = ( {
11
- messages
12
+ messages
12
13
} ) => {
13
- const chatContainerRef =
14
- useRef < HTMLDivElement > ( null ) ;
14
+ const chatContainerRef = useRef < HTMLDivElement > ( null ) ;
15
+ const lastMessageIsUser = messages . length > 0 && messages [ messages . length - 1 ] . type === 0 ;
15
16
16
- useEffect ( ( ) => {
17
- if ( chatContainerRef . current ) {
18
- chatContainerRef . current . scrollTop =
19
- chatContainerRef . current . scrollHeight ;
20
- }
21
- } , [ messages ] ) ;
17
+ useEffect ( ( ) => {
18
+ if ( chatContainerRef . current ) {
19
+ chatContainerRef . current . scrollTop = chatContainerRef . current . scrollHeight ;
20
+ }
21
+ } , [ messages ] ) ;
22
22
23
- return (
24
- < div className = "relative flex flex-col items-center py-2" >
25
- < div
26
- className = "flex flex-col max-w-3xl w-full flex-grow space-y-2"
27
- ref = { chatContainerRef }
28
- >
29
- { messages . map ( ( message , index ) => (
30
- < div key = { message . id } >
31
- { message . type === 0 ? (
32
- < ChatRequest
33
- request = { message . content }
34
- />
35
- ) : (
36
- < ChatResponse
37
- message = { message }
38
- />
39
- ) }
40
- </ div >
41
- ) ) }
42
- </ div >
43
- </ div >
44
- ) ;
23
+ return (
24
+ < div className = "relative flex flex-col items-center py-2 h-full overflow-y-auto" >
25
+ < div
26
+ className = "flex flex-col max-w-3xl w-full flex-grow space-y-2"
27
+ ref = { chatContainerRef }
28
+ >
29
+ { messages . map ( ( message , index ) => (
30
+ < div key = { message . id } >
31
+ { message . type === 0 ? (
32
+ < ChatRequest
33
+ request = { message . content }
34
+ />
35
+ ) : (
36
+ < ChatResponse
37
+ message = { message }
38
+ />
39
+ ) }
40
+ </ div >
41
+ ) ) }
42
+
43
+ { /* Show thinking animation when last message is from user */ }
44
+ { lastMessageIsUser && (
45
+ < div className = "flex flex-row space-x-4 p-4" >
46
+ < div className = "h-10 w-10 rounded-full border shrink-0 p-2 bg-background flex items-center justify-center" >
47
+ < ThinkingAnimation />
48
+ </ div >
49
+ < div className = "flex items-center" >
50
+ < p className = "text-muted-foreground" > AIFAQ is thinking...</ p >
51
+ </ div >
52
+ </ div >
53
+ ) }
54
+ </ div >
55
+ </ div >
56
+ ) ;
45
57
} ;
46
58
47
- export default ChatSection ;
59
+ export default ChatSection ;
0 commit comments