Skip to content

Commit 61b886f

Browse files
committed
fix: Split long messages for correct scrolling
1 parent 1000f14 commit 61b886f

File tree

2 files changed

+249
-236
lines changed

2 files changed

+249
-236
lines changed

src/tui/widgets.rs

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ mod terminal;
88
mod toolbar;
99

1010
use crate::agent::event::AgentState;
11+
use crate::tui::widgets::message::create_messages;
1112
use crate::tui::App;
1213
use ratatui::prelude::StatefulWidget;
1314
use 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

Comments
 (0)