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 { pub enum TaskEditFocus {
Title, Title,
Description, Description,
CreateBtn, ConfirmBtn,
CancelBtn, CancelBtn,
} }
@ -141,17 +141,6 @@ impl Column {
pub fn select_last_task(&mut self) { pub fn select_last_task(&mut self) {
self.selected_task_idx = self.tasks.len() - 1; 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 { impl Project {

View File

@ -24,19 +24,26 @@ pub fn handle_input(state: &mut AppState) -> Result<(), std::io::Error> {
} }
TaskEditFocus::Description => { TaskEditFocus::Description => {
match key.code { match key.code {
KeyCode::Tab => task.focus = TaskEditFocus::CreateBtn, KeyCode::Tab => task.focus = TaskEditFocus::ConfirmBtn,
KeyCode::BackTab => task.focus = TaskEditFocus::Title, KeyCode::BackTab => task.focus = TaskEditFocus::Title,
_ => { task.description.input(key); } _ => { task.description.input(key); }
} }
} }
TaskEditFocus::CreateBtn => { TaskEditFocus::ConfirmBtn => {
match key.code { match key.code {
KeyCode::Tab => task.focus = TaskEditFocus::CancelBtn, KeyCode::Tab => task.focus = TaskEditFocus::CancelBtn,
KeyCode::BackTab => task.focus = TaskEditFocus::Description, KeyCode::BackTab => task.focus = TaskEditFocus::Description,
KeyCode::Enter => { KeyCode::Enter => {
let title = task.title.clone().into_lines().join("\n"); let title = task.title.clone().into_lines().join("\n");
let description = task.description.clone().into_lines().clone().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 state.task_edit_state = None
} }
_ => (), _ => (),
@ -45,7 +52,7 @@ pub fn handle_input(state: &mut AppState) -> Result<(), std::io::Error> {
TaskEditFocus::CancelBtn => { TaskEditFocus::CancelBtn => {
match key.code { match key.code {
KeyCode::Tab => task.focus = TaskEditFocus::Title, KeyCode::Tab => task.focus = TaskEditFocus::Title,
KeyCode::BackTab => task.focus = TaskEditFocus::CreateBtn, KeyCode::BackTab => task.focus = TaskEditFocus::ConfirmBtn,
KeyCode::Enter => { KeyCode::Enter => {
state.task_edit_state = None 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('K') => project.move_task_up(),
KeyCode::Char('n') => state.task_edit_state = Some(TaskState::default()), KeyCode::Char('n') => state.task_edit_state = Some(TaskState::default()),
KeyCode::Char('e') => { KeyCode::Char('e') => {
let task = column.get_task_state_from_curr_selected(); if let Some(task) = column.get_selected_task() {
state.task_edit_state = 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(), 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_style;
let cancel_txt; let cancel_txt;
match task.focus { match task.focus {
TaskEditFocus::CreateBtn => { TaskEditFocus::ConfirmBtn => {
create_style = Style::default().fg(Color::Yellow); create_style = Style::default().fg(Color::Yellow);
cancel_style = Style::default(); cancel_style = Style::default();
create_txt = "[Confirm]"; create_txt = "[Confirm]";