From 78cb7fe84a03d0153b45345f6cfda58b5b2ca7ab Mon Sep 17 00:00:00 2001 From: Joseph Ferano Date: Tue, 6 Jun 2023 21:59:18 +0700 Subject: [PATCH] You can now edit an existing task --- src/app.rs | 13 +------------ src/input.rs | 27 +++++++++++++++++++++------ src/ui.rs | 2 +- 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/src/app.rs b/src/app.rs index 9207ac5..a01c34a 100644 --- a/src/app.rs +++ b/src/app.rs @@ -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 { - 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 { diff --git a/src/input.rs b/src/input.rs index 8bd71e3..c1c61bd 100644 --- a/src/input.rs +++ b/src/input.rs @@ -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(), _ => {} diff --git a/src/ui.rs b/src/ui.rs index ab43cf3..e895e56 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -129,7 +129,7 @@ pub fn draw_task_popup(f: &mut Frame, 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]";