@@ -8,6 +8,7 @@ mod terminal;
8
8
mod toolbar;
9
9
10
10
use crate :: agent:: event:: AgentState ;
11
+ use crate :: tui:: widgets:: message:: create_messages;
11
12
use crate :: tui:: App ;
12
13
use ratatui:: prelude:: StatefulWidget ;
13
14
use ratatui:: style:: Stylize ;
@@ -166,17 +167,26 @@ impl Widget for &mut App<'_> {
166
167
. border_type ( BorderType :: Rounded )
167
168
. border_style ( theme. border_style ( matches ! ( self . ui. focus, FocusedComponent :: History ) ) ) ;
168
169
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 ( ) ;
170
186
171
187
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 ;
180
190
let main_axis_size = item. main_axis_size ( ) ;
181
191
( item, main_axis_size)
182
192
} ) ;
0 commit comments