use std::cell::RefCell;
use promkit_core::{Pane, PaneFactory};
use promkit_widgets::{checkbox, text};
use crate::{crossterm::event::Event, switch::ActiveKeySwitcher, PromptSignal};
use super::keymap;
pub struct Renderer {
pub keymap: RefCell<ActiveKeySwitcher<keymap::Keymap>>,
pub title_state: text::State,
pub checkbox_state: checkbox::State,
}
impl crate::Finalizer for Renderer {
type Return = Vec<String>;
fn finalize(&mut self) -> anyhow::Result<Self::Return> {
Ok(self
.checkbox_state
.checkbox
.get()
.iter()
.map(|e| e.to_string())
.collect())
}
}
impl crate::Renderer for Renderer {
fn create_panes(&self, width: u16, height: u16) -> Vec<Pane> {
vec![
self.title_state.create_pane(width, height),
self.checkbox_state.create_pane(width, height),
]
}
fn evaluate(&mut self, event: &Event) -> anyhow::Result<PromptSignal> {
let keymap = *self.keymap.borrow_mut().get();
keymap(event, self)
}
}