You can now edit an existing task
This commit is contained in:
		
							parent
							
								
									bef0836184
								
							
						
					
					
						commit
						78cb7fe84a
					
				
							
								
								
									
										13
									
								
								src/app.rs
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								src/app.rs
									
									
									
									
									
								
							@ -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 {
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										25
									
								
								src/input.rs
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								src/input.rs
									
									
									
									
									
								
							@ -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");
 | 
				
			||||||
 | 
					                                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);
 | 
					                                    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(),
 | 
				
			||||||
                    _ => {}
 | 
					                    _ => {}
 | 
				
			||||||
 | 
				
			|||||||
@ -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]";
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user