@@ -8,6 +8,7 @@ mod terminal;
88mod toolbar;
99
1010use crate :: agent:: event:: AgentState ;
11+ use crate :: tui:: widgets:: message:: create_messages;
1112use crate :: tui:: App ;
1213use ratatui:: prelude:: StatefulWidget ;
1314use ratatui:: style:: Stylize ;
@@ -166,17 +167,26 @@ impl Widget for &mut App<'_> {
166167 . border_type ( BorderType :: Rounded )
167168 . border_style ( theme. border_style ( matches ! ( self . ui. focus, FocusedComponent :: History ) ) ) ;
168169
169- let chat_len = self . model . messages . len ( ) ;
170+ let mut messages: Vec < MessageWidget > = Vec :: new ( ) ;
171+ let mut virt_idx = 0 ;
172+ for ( idx, message) in self . model . messages . iter ( ) . enumerate ( ) {
173+ for item in create_messages (
174+ message,
175+ & theme,
176+ layout. chat_area . width - 2 ,
177+ layout. chat_area . height as usize - 4 ,
178+ idx == self . model . messages . len ( ) - 1
179+ || self . ui . history_opened_state . contains ( & virt_idx) ,
180+ ) {
181+ messages. push ( item) ;
182+ virt_idx += 1 ;
183+ }
184+ }
185+ let chat_len = messages. len ( ) ;
170186
171187 let builder = ListBuilder :: new ( |context| {
172- let item = MessageWidget :: new (
173- & self . model . messages [ context. index ] ,
174- & theme,
175- context. is_selected ,
176- self . ui . history_opened_state . contains ( & context. index )
177- || context. index == self . model . messages . len ( ) - 1 ,
178- layout. chat_area . width ,
179- ) ;
188+ let mut item = messages[ context. index ] . clone ( ) ;
189+ item. is_selected = context. is_selected ;
180190 let main_axis_size = item. main_axis_size ( ) ;
181191 ( item, main_axis_size)
182192 } ) ;
0 commit comments