use color_eyre::Result; use crossterm::event::Event; use ratatui::{ layout::{Constraint, Direction, Layout}, Frame, }; use super::{ component::{ help::HelpComponent, input::{InputComponent, InputEvent}, list::{ListComponent, ListEvent}, Component, }, setting::SettingView, PopupView, View, }; // #[derive(Default)] pub struct Home { input: InputComponent, table: ListComponent, help: HelpComponent, setting: SettingView, } impl Default for Home { fn default() -> Self { let mut home = Home { input: InputComponent::default().name("Name".to_string()), table: ListComponent::default() .selectable() .name("Connections".to_string()), help: HelpComponent::default(), setting: SettingView::default(), }; home.table.active_state().set_active(true); // home.setting.active_state().set_active(true); home } } impl View for Home { fn draw(&self, frame: &mut Frame) { let layout = Layout::default() .direction(Direction::Vertical) .constraints(vec![ Constraint::Length(3), Constraint::Min(5), Constraint::Length(3), ]) .split(frame.area()); self.input.show_cursor(frame, layout[0]); frame.render_widget(self.input.widget(), layout[0]); frame.render_widget(self.table.widget(), layout[1]); frame.render_widget(self.help.widget(), layout[2]); self.setting.draw(frame); } fn handle_event(&mut self, event: &Event) -> Result<()> { match self.input.event_handler(event) { Ok(InputEvent::None) => {} _ => {} } match self.table.event_handler(event) { Ok(ListEvent::Select(i)) => { let active_state = self.setting.active_state().is_active(); self.setting.active_state().set_active(active_state); println!("{}", i); } _ => {} } self.setting.handle_event(event)?; Ok(()) } }