From 4356ab7b24bd98cb1d17b02e98882a33c62f57c0 Mon Sep 17 00:00:00 2001 From: yahlia Date: Tue, 29 Jul 2025 16:52:58 +0900 Subject: [PATCH] bug: fix increment for data tables if the change is greater than the number of entries left (#1759) --- src/canvas/components/data_table.rs | 33 +++++++++++++++++++---------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/src/canvas/components/data_table.rs b/src/canvas/components/data_table.rs index 33b38425..00559309 100644 --- a/src/canvas/components/data_table.rs +++ b/src/canvas/components/data_table.rs @@ -109,18 +109,29 @@ impl, H: ColumnHeader, S: SortType, C: DataTableColumn = self.state.current_index.try_into(); if let Ok(csp) = csp { - let proposed: Result = (csp + change).try_into(); - if let Ok(proposed) = proposed { - if proposed < self.data.len() { - self.state.current_index = proposed; - self.state.scroll_direction = if change < 0 { - ScrollDirection::Up - } else { - ScrollDirection::Down - }; + let proposed = csp + change; - return Some(self.state.current_index); - } + let proposed: Result = if proposed.is_negative() { + Ok(0) + } else { + proposed.try_into() + }; + + if let Ok(proposed) = proposed { + let proposed = if proposed >= max_index { + max_index - 1 + } else { + proposed + }; + + self.state.current_index = proposed; + self.state.scroll_direction = if change < 0 { + ScrollDirection::Up + } else { + ScrollDirection::Down + }; + + return Some(self.state.current_index); } }