From 841928ae8d7d74d9fee82fc4efaee2d4336f8484 Mon Sep 17 00:00:00 2001 From: jmcph4 Date: Mon, 13 Jan 2025 14:08:00 +1000 Subject: [PATCH] Improve tx list scroll --- src/ui/app.rs | 46 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/src/ui/app.rs b/src/ui/app.rs index 77bd432..3650dac 100644 --- a/src/ui/app.rs +++ b/src/ui/app.rs @@ -1,4 +1,7 @@ -use alloy::{consensus::Transaction, rpc::types::Header}; +use alloy::{ + consensus::Transaction as AbstractTransaction, + rpc::types::{Header, Transaction}, +}; use chrono::{TimeZone, Utc}; use ratatui::{ layout::{Constraint, Layout, Rect}, @@ -79,9 +82,22 @@ impl App { } pub fn on_enter(&mut self) { - if self.get_selected().is_some() { + if self.get_selected_header().is_some() { self.view = View::Block; } + + match self.view { + View::Default => { + if self.get_selected_header().is_some() { + self.view = View::Block + } + } + View::Block => { + if self.get_selected_transaction().is_some() { + todo!() + } + } + } } pub fn on_up(&mut self) { @@ -108,21 +124,20 @@ impl App { self.block_headers.items.push(latest_header.clone()); } - if let Some(selected_header) = self.get_selected() { + if let Some(selected_header) = self.get_selected_header() { if !matches!(self.view, View::Block) { if let Some(selected_block) = db.block(selected_header.hash).unwrap() { self.selected_block = selected_block; + self.transactions = StatefulList::with_items( + self.selected_block + .transactions + .clone() + .into_transactions() + .collect(), + ); } - } else { - self.transactions = StatefulList::with_items( - self.selected_block - .transactions - .clone() - .into_transactions() - .collect(), - ); } } } @@ -334,10 +349,17 @@ impl App { xs.clone() } - fn get_selected(&self) -> Option<&Header> { + fn get_selected_header(&self) -> Option<&Header> { self.block_headers .state .selected() .and_then(|offset| self.block_headers.items.get(offset)) } + + fn get_selected_transaction(&self) -> Option<&Transaction> { + self.transactions + .state + .selected() + .and_then(|offset| self.transactions.items.get(offset)) + } }