@@ -10,68 +10,73 @@ import SubRow from './SubRow';
10
10
import { cn } from '~/utils' ;
11
11
import store from '~/store' ;
12
12
13
+ const MessageAvatar = ( { iconData } : { iconData : TMessageIcon } ) => (
14
+ < div className = "relative flex flex-shrink-0 flex-col items-end" >
15
+ < div className = "pt-0.5" >
16
+ < div className = "flex h-6 w-6 items-center justify-center overflow-hidden rounded-full" >
17
+ < Icon iconData = { iconData } />
18
+ </ div >
19
+ </ div >
20
+ </ div >
21
+ ) ;
22
+
23
+ const MessageBody = ( { message, messageLabel, fontSize } ) => (
24
+ < div
25
+ className = { cn ( 'relative flex w-11/12 flex-col' , message . isCreatedByUser ? '' : 'agent-turn' ) }
26
+ >
27
+ < div className = { cn ( 'select-none font-semibold' , fontSize ) } > { messageLabel } </ div >
28
+ < SearchContent message = { message } />
29
+ < SubRow classes = "text-xs" >
30
+ < MinimalHoverButtons message = { message } />
31
+ < SearchButtons message = { message } />
32
+ </ SubRow >
33
+ </ div >
34
+ ) ;
35
+
13
36
export default function Message ( { message } : Pick < TMessageProps , 'message' > ) {
14
37
const UsernameDisplay = useRecoilValue < boolean > ( store . UsernameDisplay ) ;
15
38
const fontSize = useRecoilValue ( store . fontSize ) ;
16
39
const { user } = useAuthContext ( ) ;
17
40
const localize = useLocalize ( ) ;
18
41
19
- const iconData : TMessageIcon = useMemo (
20
- ( ) => ( {
21
- endpoint : message ?. endpoint ,
22
- model : message ?. model ,
23
- iconURL : message ?. iconURL ?? '' ,
24
- isCreatedByUser : message ?. isCreatedByUser ,
25
- } ) ,
26
- [ message ?. model , message ?. iconURL , message ?. endpoint , message ?. isCreatedByUser ] ,
27
- ) ;
28
-
29
42
if ( ! message ) {
30
43
return null ;
31
44
}
32
45
33
- const { isCreatedByUser } = message ;
46
+ const iconData : TMessageIcon = useMemo (
47
+ ( ) => ( {
48
+ endpoint : message . endpoint ,
49
+ model : message . model ,
50
+ iconURL : message . iconURL ?? '' ,
51
+ isCreatedByUser : message . isCreatedByUser ,
52
+ } ) ,
53
+ [ message . endpoint , message . model , message . iconURL , message . isCreatedByUser ] ,
54
+ ) ;
34
55
35
- let messageLabel = '' ;
36
- if ( isCreatedByUser ) {
37
- messageLabel = UsernameDisplay
38
- ? ( user ?. name ?? '' ) || ( user ?. username ?? '' )
39
- : localize ( 'com_user_message' ) ;
40
- } else {
41
- messageLabel = message . sender ?? '' ;
42
- }
56
+ const messageLabel = useMemo ( ( ) => {
57
+ if ( message . isCreatedByUser ) {
58
+ return UsernameDisplay
59
+ ? ( user ?. name ?? '' ) || ( user ?. username ?? '' )
60
+ : localize ( 'com_user_message' ) ;
61
+ }
62
+ return message . sender ?? '' ;
63
+ } , [
64
+ message . isCreatedByUser ,
65
+ message . sender ,
66
+ UsernameDisplay ,
67
+ user ?. name ,
68
+ user ?. username ,
69
+ localize ,
70
+ ] ) ;
43
71
44
72
return (
45
- < >
46
- < div className = "text-token-text-primary w-full border-0 bg-transparent dark:border-0 dark:bg-transparent" >
47
- < div className = "m-auto justify-center p-4 py-2 md:gap-6 " >
48
- < div className = "final-completion group mx-auto flex flex-1 gap-3 md:max-w-3xl md:px-5 lg:max-w-[40rem] lg:px-1 xl:max-w-[48rem] xl:px-5" >
49
- < div className = "relative flex flex-shrink-0 flex-col items-end" >
50
- < div >
51
- < div className = "pt-0.5" >
52
- < div className = "flex h-6 w-6 items-center justify-center overflow-hidden rounded-full" >
53
- < Icon iconData = { iconData } />
54
- </ div >
55
- </ div >
56
- </ div >
57
- </ div >
58
- < div
59
- className = { cn ( 'relative flex w-11/12 flex-col' , isCreatedByUser ? '' : 'agent-turn' ) }
60
- >
61
- < div className = { cn ( 'select-none font-semibold' , fontSize ) } > { messageLabel } </ div >
62
- < div className = "flex-col gap-1 md:gap-3" >
63
- < div className = "flex max-w-full flex-grow flex-col gap-0" >
64
- < SearchContent message = { message } />
65
- </ div >
66
- </ div >
67
- < SubRow classes = "text-xs" >
68
- < MinimalHoverButtons message = { message } />
69
- < SearchButtons message = { message } />
70
- </ SubRow >
71
- </ div >
72
- </ div >
73
+ < div className = "text-token-text-primary w-full bg-transparent" >
74
+ < div className = "m-auto p-4 py-2 md:gap-6" >
75
+ < div className = "final-completion group mx-auto flex flex-1 gap-3 md:max-w-3xl md:px-5 lg:max-w-[40rem] lg:px-1 xl:max-w-[48rem] xl:px-5" >
76
+ < MessageAvatar iconData = { iconData } />
77
+ < MessageBody message = { message } messageLabel = { messageLabel } fontSize = { fontSize } />
73
78
</ div >
74
79
</ div >
75
- </ >
80
+ </ div >
76
81
) ;
77
82
}
0 commit comments