From cc8e924ce828d237d7cdd245b794c532a4ee80d8 Mon Sep 17 00:00:00 2001 From: pablu Date: Thu, 7 May 2026 13:07:32 +0200 Subject: working search --- src/app.rs | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) (limited to 'src/app.rs') diff --git a/src/app.rs b/src/app.rs index 8f8a209..2e9856a 100644 --- a/src/app.rs +++ b/src/app.rs @@ -1,24 +1,52 @@ use ratatui::widgets::ListState; +use ratatui_textarea::TextArea; use crate::gentoo::{Package, portage::Portage}; #[derive(Debug)] #[allow(dead_code)] -pub struct App { +pub struct App<'a> { portage: Portage, pub list_state: ListState, + pub showing_search_window: bool, + pub textarea: TextArea<'a>, + pub search_found: Option, } #[allow(dead_code)] -impl App { +impl<'a> App<'a> { pub fn new(portage: Portage) -> Self { App { portage, list_state: ListState::default().with_selected(Some(0)), + showing_search_window: false, + textarea: TextArea::default(), + search_found: None, } } pub fn installed_packages(&self) -> Vec { self.portage.installed_packages.clone() } + + pub fn toggle_search_window(&mut self) { + self.showing_search_window = !self.showing_search_window; + self.textarea.clear(); + self.search_found = None; + } + + pub fn search(&mut self) -> bool { + let index = self.portage.installed_packages.iter().position(|s| { + s.name + .to_lowercase() + .contains(&self.textarea.lines()[0].to_lowercase()) + }); + + if let Some(index) = index { + self.list_state.select(Some(index)); + return true; + } + + return false; + } } -- cgit 1.3.1