@@ -22,7 +22,6 @@ import {
2222 selectIntegration ,
2323 selectIsStreaming ,
2424 selectIsWaiting ,
25- selectMessages ,
2625 selectThread ,
2726 selectThreadUsage ,
2827} from "../../features/Chat/Thread/selectors" ;
@@ -35,6 +34,8 @@ import { telemetryApi } from "../../services/refact/telemetry";
3534import { PlaceHolderText } from "./PlaceHolderText" ;
3635import { UsageCounter } from "../UsageCounter" ;
3736import { getConfirmationPauseStatus } from "../../features/ToolConfirmation/confirmationSlice" ;
37+ import { MessageNode } from "../MessageNode" ;
38+ import { chatDbMessagesSliceSelectors } from "../../features/ChatDB/chatDbMessagesSlice" ;
3839
3940export type ChatContentProps = {
4041 onRetry : ( index : number , question : UserMessage [ "content" ] ) => void ;
@@ -43,11 +44,9 @@ export type ChatContentProps = {
4344
4445export const ChatContent : React . FC < ChatContentProps > = ( {
4546 onStopStreaming,
46- onRetry,
4747} ) => {
4848 const dispatch = useAppDispatch ( ) ;
4949 const scrollRef = useRef < HTMLDivElement > ( null ) ;
50- const messages = useAppSelector ( selectMessages ) ;
5150 const isStreaming = useAppSelector ( selectIsStreaming ) ;
5251 const thread = useAppSelector ( selectThread ) ;
5352 const threadUsage = useAppSelector ( selectThreadUsage ) ;
@@ -57,6 +56,9 @@ export const ChatContent: React.FC<ChatContentProps> = ({
5756 telemetryApi . useLazySendTelemetryChatEventQuery ( ) ;
5857 const integrationMeta = useAppSelector ( selectIntegration ) ;
5958 const isWaitingForConfirmation = useAppSelector ( getConfirmationPauseStatus ) ;
59+ const messageTree = useAppSelector (
60+ chatDbMessagesSliceSelectors . selectMessageTree ,
61+ ) ;
6062
6163 const {
6264 handleScroll,
@@ -67,10 +69,6 @@ export const ChatContent: React.FC<ChatContentProps> = ({
6769 scrollRef,
6870 } ) ;
6971
70- const onRetryWrapper = ( index : number , question : UserMessage [ "content" ] ) => {
71- onRetry ( index , question ) ;
72- } ;
73-
7472 const handleReturnToConfigurationClick = useCallback ( ( ) => {
7573 // console.log(`[DEBUG]: going back to configuration page`);
7674 // TBD: should it be allowed to run in the background?
@@ -121,10 +119,11 @@ export const ChatContent: React.FC<ChatContentProps> = ({
121119 p = "2"
122120 gap = "1"
123121 >
124- { messages . length === 0 && < PlaceHolderText /> }
125- { renderMessages ( messages , onRetryWrapper ) }
126- < UncommittedChangesWarning />
127- { threadUsage && messages . length > 0 && < UsageCounter /> }
122+ { ! messageTree && < PlaceHolderText /> }
123+ { /* {renderMessages(messages, onRetryWrapper)} */ }
124+ < MessageNode > { messageTree } </ MessageNode >
125+ { ! messageTree && < UncommittedChangesWarning /> }
126+ { threadUsage && messageTree && < UsageCounter /> }
128127
129128 < Container py = "4" >
130129 < Spinner
@@ -176,7 +175,8 @@ export const ChatContent: React.FC<ChatContentProps> = ({
176175
177176ChatContent . displayName = "ChatContent" ;
178177
179- function renderMessages (
178+ // TODO: can delete
179+ function _renderMessages (
180180 messages : ChatMessages ,
181181 onRetry : ( index : number , question : UserMessage [ "content" ] ) => void ,
182182 memo : React . ReactNode [ ] = [ ] ,
@@ -185,13 +185,13 @@ function renderMessages(
185185 if ( messages . length === 0 ) return memo ;
186186 const [ head , ...tail ] = messages ;
187187 if ( head . role === "tool" ) {
188- return renderMessages ( tail , onRetry , memo , index + 1 ) ;
188+ return _renderMessages ( tail , onRetry , memo , index + 1 ) ;
189189 }
190190
191191 if ( head . role === "plain_text" ) {
192192 const key = "plain-text-" + index ;
193193 const nextMemo = [ ...memo , < PlainText key = { key } > { head . content } </ PlainText > ] ;
194- return renderMessages ( tail , onRetry , nextMemo , index + 1 ) ;
194+ return _renderMessages ( tail , onRetry , nextMemo , index + 1 ) ;
195195 }
196196
197197 if ( head . role === "assistant" ) {
@@ -207,7 +207,7 @@ function renderMessages(
207207 /> ,
208208 ] ;
209209
210- return renderMessages ( tail , onRetry , nextMemo , index + 1 ) ;
210+ return _renderMessages ( tail , onRetry , nextMemo , index + 1 ) ;
211211 }
212212
213213 if ( head . role === "user" ) {
@@ -219,13 +219,13 @@ function renderMessages(
219219 { head . content }
220220 </ UserInput > ,
221221 ] ;
222- return renderMessages ( tail , onRetry , nextMemo , index + 1 ) ;
222+ return _renderMessages ( tail , onRetry , nextMemo , index + 1 ) ;
223223 }
224224
225225 if ( isChatContextFileMessage ( head ) ) {
226226 const key = "context-file-" + index ;
227227 const nextMemo = [ ...memo , < ContextFiles key = { key } files = { head . content } /> ] ;
228- return renderMessages ( tail , onRetry , nextMemo , index + 1 ) ;
228+ return _renderMessages ( tail , onRetry , nextMemo , index + 1 ) ;
229229 }
230230
231231 if ( isDiffMessage ( head ) ) {
@@ -240,13 +240,13 @@ function renderMessages(
240240
241241 const nextMemo = [ ...memo , < GroupedDiffs key = { key } diffs = { diffMessages } /> ] ;
242242
243- return renderMessages (
243+ return _renderMessages (
244244 nextTail ,
245245 onRetry ,
246246 nextMemo ,
247247 index + diffMessages . length ,
248248 ) ;
249249 }
250250
251- return renderMessages ( tail , onRetry , memo , index + 1 ) ;
251+ return _renderMessages ( tail , onRetry , memo , index + 1 ) ;
252252}
0 commit comments