File tree Expand file tree Collapse file tree 5 files changed +21
-33
lines changed
apps/web/client/src/app/project/[id]/_components/right-panel/chat-tab Expand file tree Collapse file tree 5 files changed +21
-33
lines changed Original file line number Diff line number Diff line change 1
1
import type { ChatMessage } from '@onlook/models' ;
2
2
import { MessageContent } from './message-content' ;
3
3
4
- export const AssistantMessage = ( { message } : { message : ChatMessage } ) => {
4
+ export const AssistantMessage = ( { message, isStreaming } : { message : ChatMessage , isStreaming : boolean } ) => {
5
5
return (
6
6
< div className = "px-4 py-2 text-small content-start flex flex-col text-wrap gap-2" >
7
7
< MessageContent
8
8
messageId = { message . id }
9
9
parts = { message . parts }
10
10
applied = { false }
11
- isStream = { false }
11
+ isStream = { isStreaming }
12
12
/>
13
13
</ div >
14
14
) ;
Original file line number Diff line number Diff line change @@ -51,7 +51,7 @@ export const ChatMessages = observer(({
51
51
let messageNode ;
52
52
switch ( message . role ) {
53
53
case 'assistant' :
54
- messageNode = < AssistantMessage key = { message . id } message = { message } /> ;
54
+ messageNode = < AssistantMessage key = { message . id } message = { message } isStreaming = { isStreaming } /> ;
55
55
break ;
56
56
case 'user' :
57
57
messageNode = (
@@ -93,6 +93,10 @@ export const ChatMessages = observer(({
93
93
{ messages . map ( ( message , index ) => renderMessage ( message , index ) ) }
94
94
{ streamedMessage && < StreamMessage message = { streamedMessage } /> }
95
95
{ error && < ErrorMessage error = { error } /> }
96
+ { isStreaming && < div className = "flex w-full h-full flex-row items-center gap-2 px-4 my-2 text-small content-start text-foreground-secondary" >
97
+ < Icons . LoadingSpinner className = "animate-spin" />
98
+ < p > Thinking ...</ p >
99
+ </ div > }
96
100
</ ChatMessageList >
97
101
) ;
98
102
} ,
Original file line number Diff line number Diff line change @@ -39,7 +39,7 @@ export const ToolCallDisplay = ({
39
39
const toolName = toolPart . type . split ( '-' ) [ 1 ] ;
40
40
const loading = isStream && isLastPart ;
41
41
42
- if ( isStream && toolPart . state !== 'output-available' && toolPart . state !== 'input-available' ) {
42
+ if ( isStream || ( toolPart . state !== 'output-available' && toolPart . state !== 'input-available' ) ) {
43
43
return (
44
44
< ToolCallSimple
45
45
toolPart = { toolPart }
Original file line number Diff line number Diff line change 1
1
import { type ChatMessage } from '@onlook/models' ;
2
- import { Icons } from '@onlook/ui/icons' ;
3
- import { useMemo } from 'react' ;
4
2
import { MessageContent } from './message-content' ;
5
3
6
4
export const StreamMessage = ( { message } : { message : ChatMessage } ) => {
7
- const isAssistantStreamMessage = useMemo ( ( ) => message ?. role === 'assistant' , [ message ?. role ] ) ;
8
-
9
5
return (
10
- < >
11
- { message && isAssistantStreamMessage && (
12
- < div className = "px-4 pt-2 text-small content-start flex flex-col text-wrap gap-2" >
13
- < MessageContent
14
- messageId = { message . id }
15
- parts = { message . parts }
16
- applied = { false }
17
- isStream = { true }
18
- />
19
- </ div >
20
- ) }
21
- < div className = "flex w-full h-full flex-row items-center gap-2 px-4 my-2 text-small content-start text-foreground-secondary" >
22
- < Icons . LoadingSpinner className = "animate-spin" />
23
- < p > Thinking ...</ p >
24
- </ div >
25
- </ >
6
+ < div className = "px-4 pt-2 text-small content-start flex flex-col text-wrap gap-2" >
7
+ < MessageContent
8
+ messageId = { message . id }
9
+ parts = { message . parts }
10
+ applied = { false }
11
+ isStream = { true }
12
+ />
13
+ </ div >
26
14
) ;
27
15
} ;
Original file line number Diff line number Diff line change 1
- import { api } from '@/trpc/react' ;
2
1
import { useEditorEngine } from '@/components/store/editor' ;
2
+ import { api } from '@/trpc/react' ;
3
3
import { Button } from '@onlook/ui/button' ;
4
4
import { Collapsible , CollapsibleContent , CollapsibleTrigger } from '@onlook/ui/collapsible' ;
5
5
import { Icons } from '@onlook/ui/icons' ;
@@ -49,7 +49,6 @@ export const CollapsibleCodeBlock = observer(({
49
49
50
50
return (
51
51
< div className = "group relative" >
52
-
53
52
< Collapsible open = { isOpen } onOpenChange = { setIsOpen } >
54
53
< div
55
54
className = { cn (
@@ -83,16 +82,13 @@ export const CollapsibleCodeBlock = observer(({
83
82
>
84
83
< span className = "truncate flex-1 min-w-0" > { getTruncatedFileName ( path ) } </ span >
85
84
{ ( ( ) => {
86
- const branch = branchId
85
+ const branch = branchId
87
86
? editorEngine . branches . allBranches . find ( b => b . id === branchId )
88
87
: editorEngine . branches . activeBranch ;
89
88
return branch && (
90
- < >
91
-
92
- < span className = "text-foreground-tertiary group-hover:text-foreground-secondary text-mini ml-0.5 flex-shrink-0 truncate max-w-24" >
93
- { ' • ' } { branch . name }
94
- </ span >
95
- </ >
89
+ < span className = "text-foreground-tertiary group-hover:text-foreground-secondary text-mini ml-0.5 flex-shrink-0 truncate max-w-24" >
90
+ { ' • ' } { branch . name }
91
+ </ span >
96
92
) ;
97
93
} ) ( ) }
98
94
</ div >
You can’t perform that action at this time.
0 commit comments