use crate::app::{EditMode, Mode};
use ratatui::{
buffer::Buffer,
layout::Rect,
style::{Style, Stylize},
text::Line,
widgets::{Block, BorderType, Padding, Widget},
};
use tui_textarea::TextArea;
pub struct Editor;
impl Editor {
pub fn render(
area: Rect,
buf: &mut Buffer,
mode: &Mode,
prev_mode: &Mode,
text_area: &mut TextArea,
) {
let instructions = Line::from(vec![
" [enter]".yellow(),
"save".into(),
" [esc]".yellow(),
"cancel ".into(),
]);
if let Mode::Editing { curr, mode, .. } = mode {
text_area.set_block(
Block::bordered()
.border_type(BorderType::Double)
.style(Style::new().cyan())
.padding(Padding::horizontal(1))
.title(
Line::from(match mode {
EditMode::Insert => format!(
" Editor [insert {}] ",
if *prev_mode == Mode::InProjectsPane {
"project"
} else {
"task"
}
)
.bold(),
EditMode::Rename => format!(
" Editor [rename {}] ",
if *prev_mode == Mode::InProjectsPane {
"project"
} else {
"task"
}
)
.bold(),
})
.centered(),
)
.title_bottom(instructions.centered()),
);
text_area.set_cursor_line_style(Style::default());
if let Some(curr) = curr {
text_area.input(curr.clone());
}
text_area.render(area, buf);
}
}
}