diff --git a/src/view/table.rs b/src/view/table.rs index b037d83..f9cbcf3 100644 --- a/src/view/table.rs +++ b/src/view/table.rs @@ -569,9 +569,16 @@ impl TableView { FilterState::Filtering | FilterState::Filtered => { self.filter_input.reset(); self.filter_state = FilterState::None; - // let orig_idx = self.view_indices[self.list_state.selected]; + let orig_idx = self + .view_indices + .get(self.table_state.selected_row) + .cloned(); + let before_offset_idx = self.table_state.selected_row_offset_index(); self.filter_view_indices(); - // self.list_state.select_index(orig_idx); + if let Some(orig_idx) = orig_idx { + self.table_state.select_index(orig_idx, before_offset_idx); + self.table_state.update_table_state(); + } self.tx.send(AppEvent::ClearStatus); } FilterState::None => {} diff --git a/src/widget/table.rs b/src/widget/table.rs index 220438e..ec60a95 100644 --- a/src/widget/table.rs +++ b/src/widget/table.rs @@ -220,6 +220,14 @@ impl TableState { self.offset_col = self.total_cols - count; } + pub fn select_index(&mut self, index: usize, offset_index: usize) { + if index >= self.total_rows { + return; + } + self.selected_row = index; + self.offset_row = index.saturating_sub(offset_index); + } + pub fn update_table_state(&mut self) { let row = self.selected_row - self.offset_row; if let Some(col) = self.selected_col { @@ -269,6 +277,10 @@ impl TableState { pub fn selected_col_width(&self) -> Option { self.selected_col.map(|col| self.col_widths[col]) } + + pub fn selected_row_offset_index(&self) -> usize { + self.selected_row - self.offset_row + } } #[derive(Debug, Default)]