You can now edit an existing task

This commit is contained in:
Joseph Ferano 2023-06-06 21:59:18 +07:00
parent bef0836184
commit 78cb7fe84a
3 changed files with 23 additions and 19 deletions

View File

@ -60,7 +60,7 @@ impl Default for Project {
pub enum TaskEditFocus {
Title,
Description,
CreateBtn,
ConfirmBtn,
CancelBtn,
}
@ -141,17 +141,6 @@ impl Column {
pub fn select_last_task(&mut self) {
self.selected_task_idx = self.tasks.len() - 1;
}
pub fn get_task_state_from_curr_selected(&self) -> Option<TaskState> {
self.get_selected_task().map(|t| {
TaskState {
title: TextArea::from(t.title.chars()),
description: TextArea::from(t.description.chars()),
focus: TaskEditFocus::Title,
is_edit: true
}
})
}
}
impl Project {

View File

@ -24,19 +24,26 @@ pub fn handle_input(state: &mut AppState) -> Result<(), std::io::Error> {
}
TaskEditFocus::Description => {
match key.code {
KeyCode::Tab => task.focus = TaskEditFocus::CreateBtn,
KeyCode::Tab => task.focus = TaskEditFocus::ConfirmBtn,
KeyCode::BackTab => task.focus = TaskEditFocus::Title,
_ => { task.description.input(key); }
}
}
TaskEditFocus::CreateBtn => {
TaskEditFocus::ConfirmBtn => {
match key.code {
KeyCode::Tab => task.focus = TaskEditFocus::CancelBtn,
KeyCode::BackTab => task.focus = TaskEditFocus::Description,
KeyCode::Enter => {
let title = task.title.clone().into_lines().join("\n");
let description = task.description.clone().into_lines().clone().join("\n");
column.add_task(title, description);
if task.is_edit {
if let Some(selected_task) = column.get_selected_task_mut() {
selected_task.title = title;
selected_task.description = description;
}
} else {
column.add_task(title, description);
}
state.task_edit_state = None
}
_ => (),
@ -45,7 +52,7 @@ pub fn handle_input(state: &mut AppState) -> Result<(), std::io::Error> {
TaskEditFocus::CancelBtn => {
match key.code {
KeyCode::Tab => task.focus = TaskEditFocus::Title,
KeyCode::BackTab => task.focus = TaskEditFocus::CreateBtn,
KeyCode::BackTab => task.focus = TaskEditFocus::ConfirmBtn,
KeyCode::Enter => {
state.task_edit_state = None
}
@ -75,8 +82,16 @@ pub fn handle_input(state: &mut AppState) -> Result<(), std::io::Error> {
KeyCode::Char('K') => project.move_task_up(),
KeyCode::Char('n') => state.task_edit_state = Some(TaskState::default()),
KeyCode::Char('e') => {
let task = column.get_task_state_from_curr_selected();
state.task_edit_state = task;
if let Some(task) = column.get_selected_task() {
let task_state =
TaskState {
title: TextArea::from(task.title.lines()),
description: TextArea::from(task.description.lines()),
focus: TaskEditFocus::Title,
is_edit: true
};
state.task_edit_state = Some(task_state);
}
}
KeyCode::Char('D') => column.remove_task(),
_ => {}

View File

@ -129,7 +129,7 @@ pub fn draw_task_popup<B: Backend>(f: &mut Frame<B>, state: &mut AppState, popup
let cancel_style;
let cancel_txt;
match task.focus {
TaskEditFocus::CreateBtn => {
TaskEditFocus::ConfirmBtn => {
create_style = Style::default().fg(Color::Yellow);
cancel_style = Style::default();
create_txt = "[Confirm]";