[go: up one dir, main page]

tatou 0.1.1

Tatou is a simple TUI application to manage and organize tasks.
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);
    }
  }
}