@@ -39,11 +39,11 @@ const MemoizedMessageContent = React.memo(MessageContent);
39
39
40
40
function MessageContent ( {
41
41
message,
42
- isLastMessage ,
42
+ shouldAnimate ,
43
43
isUser,
44
44
} : {
45
45
message : ContentWithUser ;
46
- isLastMessage : boolean ;
46
+ shouldAnimate : boolean ;
47
47
isUser : boolean ;
48
48
} ) {
49
49
// Only log message details in development mode
@@ -84,7 +84,7 @@ function MessageContent({
84
84
< div className = "py-2" >
85
85
{ isUser ? (
86
86
message . text
87
- ) : isLastMessage && ! isUser ? (
87
+ ) : shouldAnimate ? (
88
88
< AIWriter > { message . text } </ AIWriter >
89
89
) : (
90
90
message . text
@@ -94,7 +94,7 @@ function MessageContent({
94
94
< div >
95
95
{ isUser ? (
96
96
message . thought
97
- ) : isLastMessage && ! isUser ? (
97
+ ) : shouldAnimate ? (
98
98
< AIWriter >
99
99
< span className = "italic text-muted-foreground" > { message . thought } </ span >
100
100
</ AIWriter >
@@ -173,6 +173,8 @@ export default function Page({ serverId }: { serverId: UUID }) {
173
173
const prevServerIdRef = useRef < UUID | null > ( null ) ;
174
174
const prevActiveAgentIdsRef = useRef < UUID [ ] > ( [ ] ) ;
175
175
176
+ const animatedMessageIdRef = useRef < string | null > ( null ) ;
177
+
176
178
const getAvatar = ( agentId : string ) : string | null => {
177
179
const rooms = roomsData ?. get ( serverId ) ;
178
180
const room = rooms ?. find ( ( room ) => room . agentId === agentId ) ;
@@ -278,6 +280,8 @@ export default function Page({ serverId }: { serverId: UUID }) {
278
280
return old ;
279
281
}
280
282
283
+ animatedMessageIdRef . current = newMessage . id ;
284
+
281
285
return [ ...old , newMessage ] ;
282
286
}
283
287
) ;
@@ -481,7 +485,10 @@ export default function Page({ serverId }: { serverId: UUID }) {
481
485
>
482
486
{ messages . map ( ( message : ContentWithUser , index : number ) => {
483
487
const isUser = message . name === USER_NAME ;
484
-
488
+ const shouldAnimate =
489
+ index === messages . length - 1 &&
490
+ message . name !== USER_NAME &&
491
+ message . id === animatedMessageIdRef . current ;
485
492
return (
486
493
< div
487
494
key = { `${ message . id as string } -${ message . createdAt } ` }
@@ -509,7 +516,7 @@ export default function Page({ serverId }: { serverId: UUID }) {
509
516
510
517
< MemoizedMessageContent
511
518
message = { message }
512
- isLastMessage = { index === messages . length - 1 }
519
+ shouldAnimate = { shouldAnimate }
513
520
isUser = { isUser }
514
521
/>
515
522
</ ChatBubble >
0 commit comments