use super::Component;
use crate::{
action::Action,
mode::{InputMode, Scene},
};
use color_eyre::Result;
use crossterm::event::{Event, KeyCode, KeyEvent};
use ratatui::{prelude::*, widgets::*};
use tui_input::{backend::crossterm::EventHandler, Input};
#[derive(Default)]
pub struct Options {
show_scene: bool,
input_mode: InputMode,
input: Input,
}
impl Component for Options {
fn handle_key_events(&mut self, key: KeyEvent) -> Result<Vec<Action>> {
match key.code {
KeyCode::Esc => {
return Ok(vec![Action::SwitchInputMode(InputMode::Navigation)]);
}
KeyCode::Down => {
}
KeyCode::Up => {
}
_ => {}
}
self.input.handle_event(&Event::Key(key));
Ok(vec![])
}
fn update(&mut self, action: Action) -> Result<Option<Action>> {
match action {
Action::SwitchScene(scene) => match scene {
Scene::Options => self.show_scene = true,
_ => self.show_scene = false,
},
Action::SwitchInputMode(mode) => self.input_mode = mode,
_ => {}
};
Ok(None)
}
fn draw(&mut self, f: &mut crate::tui::Frame<'_>, area: Rect) -> Result<()> {
if !self.show_scene {
return Ok(());
}
let layer_zero = Layout::new(
Direction::Vertical,
[Constraint::Max(1), Constraint::Min(15), Constraint::Max(3)],
)
.split(area);
let layer_one = Layout::new(
Direction::Vertical,
[
Constraint::Length(3),
Constraint::Length(3),
Constraint::Length(3),
Constraint::Length(3),
Constraint::Length(3),
Constraint::Length(3),
],
)
.split(layer_zero[1]);
let input = Paragraph::new(self.input.value())
.style(Style::default())
.block(
Block::default()
.borders(Borders::ALL)
.title("Peer MultiAddress"),
);
f.render_widget(input, layer_one[0]);
let input = Paragraph::new(self.input.value())
.style(Style::default())
.block(Block::default().borders(Borders::ALL).title("Home Network"));
f.render_widget(input, layer_one[1]);
let input = Paragraph::new(self.input.value())
.style(Style::default())
.block(
Block::default()
.borders(Borders::ALL)
.title("Data dir Path"),
);
f.render_widget(input, layer_one[2]);
let input = Paragraph::new(self.input.value())
.style(Style::default())
.block(Block::default().borders(Borders::ALL).title("Log dir Path"));
f.render_widget(input, layer_one[3]);
let input = Paragraph::new(self.input.value())
.style(Style::default())
.block(Block::default().borders(Borders::ALL).title("Node Version"));
f.render_widget(input, layer_one[4]);
let input = Paragraph::new(self.input.value())
.style(Style::default())
.block(Block::default().borders(Borders::ALL).title("RPC Address"));
f.render_widget(input, layer_one[5]);
Ok(())
}
}