fix: stop paging up or down on a single row table from crashing

page_up and page_down wrap the selection with a modulus of items_len - 1,
which is a remainder by zero when the table holds exactly one row. Ctrl-U
or Ctrl-D on such a table panicked the TUI. Both now return early for
tables of one row or fewer, mirroring the existing empty-table guard;
tables of two or more rows keep their existing paging arithmetic.
This commit is contained in:
Dark-Alex-17 committed 2026-09-16 12:25:00 -06:00
1 parent 1857d5ba15
commit d3a959d2dd
2 files changed
+55 -2

No files matched your search

+2 -2
View File
@@ -100,7 +100,7 @@ where
{ {
fn page_down(&mut self) { fn page_down(&mut self) {
let items_len = self.active_items().len(); let items_len = self.active_items().len();
if items_len == 0 { if items_len <= 1 {
return; return;
} }
@@ -113,7 +113,7 @@ where
fn page_up(&mut self) { fn page_up(&mut self) {
let items_len = self.active_items().len(); let items_len = self.active_items().len();
if items_len == 0 { if items_len <= 1 {
return; return;
} }
+53
View File
@@ -239,6 +239,59 @@ mod tests {
); );
} }
#[test]
fn test_stateful_table_pagination_on_single_item_table_performs_no_op() {
let mut stateful_table: StatefulTable<String> = StatefulTable::default();
stateful_table.set_items(vec!["Test 1".to_owned()]);
assert_some_eq_x!(stateful_table.state.selected(), 0);
stateful_table.page_down();
assert_some_eq_x!(stateful_table.state.selected(), 0);
stateful_table.page_up();
assert_some_eq_x!(stateful_table.state.selected(), 0);
}
#[test]
fn test_stateful_table_filtered_pagination_on_single_item_table_performs_no_op() {
let mut filtered_stateful_table: StatefulTable<String> = StatefulTable::default();
filtered_stateful_table.set_filtered_items(vec!["Test 1".to_owned()]);
assert_some_eq_x!(
filtered_stateful_table
.filtered_state
.as_ref()
.unwrap()
.selected(),
0
);
filtered_stateful_table.page_down();
assert_some_eq_x!(
filtered_stateful_table
.filtered_state
.as_ref()
.unwrap()
.selected(),
0
);
filtered_stateful_table.page_up();
assert_some_eq_x!(
filtered_stateful_table
.filtered_state
.as_ref()
.unwrap()
.selected(),
0
);
}
#[test] #[test]
fn test_stateful_table_pagination() { fn test_stateful_table_pagination() {
let mut stateful_table = StatefulTable::default(); let mut stateful_table = StatefulTable::default();