glim-tui 0.1.0

A TUI for monitoring GitLab CI/CD pipelines and projects
use std::sync::mpsc::Sender;
use crossterm::event::KeyCode;
use tui_input::backend::crossterm::EventHandler;
use crossterm::{event::Event as CrosstermEvent};
use crate::dispatcher::Dispatcher;
use crate::event::GlimEvent;
use crate::input::InputProcessor;
use crate::ui::StatefulWidgets;

pub struct ConfigProcessor {
    sender: Sender<GlimEvent>,
}

impl ConfigProcessor {
    pub fn new(sender: Sender<GlimEvent>) -> Self {
        Self { sender }
    }
}

impl InputProcessor for ConfigProcessor {
    fn apply(&mut self, event: &GlimEvent, widgets: &mut StatefulWidgets) {
        if let GlimEvent::Key(code) = event {
            let popup = widgets.config_popup_state.as_mut().unwrap();
            match code.code {
                KeyCode::Enter => self.sender.dispatch(GlimEvent::ApplyConfiguration),
                KeyCode::Esc   => self.sender.dispatch(GlimEvent::CloseConfig),
                KeyCode::Down  => popup.select_next_input(),
                KeyCode::Up    => popup.select_previous_input(),
                _ => {
                    popup.input_mut().handle_event(&CrosstermEvent::Key(*code));
                },
            }
        }
    }

    fn on_pop(&self) {}
    fn on_push(&self) {}
}