From d3eea69ad59f29aed2cdfc6fb3ac39c0b23adb83 Mon Sep 17 00:00:00 2001 From: data Date: Sat, 22 Jun 2019 14:53:25 -0400 Subject: [PATCH] add Task --- src/App.js | 44 ++++++++++++++++++++++++++- src/components/index.js | 1 + src/components/project.js | 7 ++--- src/components/task-row.js | 2 +- src/components/task.js | 61 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 108 insertions(+), 7 deletions(-) create mode 100644 src/components/task.js diff --git a/src/App.js b/src/App.js index d944a7f..7fd9da1 100644 --- a/src/App.js +++ b/src/App.js @@ -1,7 +1,7 @@ import React from 'react' import axios from 'axios' -import { About, Tasks, Profile, Projects, Project, Navbar } from './components' +import { About, Tasks, Task, Profile, Projects, Project, Navbar } from './components' const api = process.env.REACT_APP_API || 'http://localhost:1337' //console.log(process.env) @@ -31,6 +31,8 @@ class App extends React.Component { this.completeTask = this.completeTask.bind(this) this.createProject = this.createProject.bind(this) this.selectProject = this.selectProject.bind(this) + this.selectTask = this.selectTask.bind(this) + this.updateTask = this.updateTask.bind(this) this.deleteProject = this.deleteProject.bind(this) } @@ -108,6 +110,28 @@ class App extends React.Component { alert(`Failed to add task: ${e}`) } } + + async updateTask(e) { + e.preventDefault() + const task = this.state.tasks.find(t => t.id === this.state.selectedTaskId) + // TODO update properties from form + console.log(e.target) + try { + const { data, error } = await axios.put(api + `/api/tasks/${task.id}`, task) + console.log('Tried to update task.') + if (error) { + alert('Received error when updating task: ', error) + } else if (data.desc && data.projectId) { + console.log('Successfully updated task:', data) + // TODO this.setState({ tasks: this.state.tasks.concat(data), newTask: '' }) + } else { + console.log('Received malformed data when updating task: ', data) + } + } catch (e) { + alert(`Updating task failed: ${e}`) + } + } + async deleteTask(id) { this.setState({ tasks: this.state.tasks.filter(t => t.id !== id) }) try { @@ -144,6 +168,10 @@ class App extends React.Component { alert(`Failed to complete task ${task.desc}: ${e}`) } } + selectTask(id) { + this.setState({ selectedTaskId: id }) + this.navigate('task') + } async createProject(e) { e.preventDefault() @@ -228,6 +256,7 @@ class App extends React.Component { handleChange={this.handleChange} createProject={this.createProject} selectProject={this.selectProject} + selectTask={this.selectTask} deleteProject={this.deleteProject} addTask={this.addTask} completeTask={this.completeTask} @@ -250,11 +279,22 @@ class App extends React.Component { deleteTask={this.deleteTask} filtered={filtered} completed={completed} + selectTask={this.selectTask} selectProject={this.selectProject} {...this.state} /> ) } + renderTask() { + return ( + + ) + } render() { //console.log(this.state) // TODO refactor task filtering @@ -274,6 +314,8 @@ class App extends React.Component { ? this.renderLoading() : this.state.component === 'tasks' ? this.renderTasks(filtered, completed) + : this.state.component === 'task' + ? this.renderTask() : this.state.component === 'about' ? this.renderAbout() : this.state.component === 'profile' diff --git a/src/components/index.js b/src/components/index.js index b664437..d4f6713 100644 --- a/src/components/index.js +++ b/src/components/index.js @@ -1,6 +1,7 @@ export { default as Navbar } from './navbar' export { default as About } from './about' export { default as Tasks } from './tasks' +export { default as Task } from './task' export { default as Profile } from './profile' export { default as Projects } from './projects' export { default as Project } from './project' diff --git a/src/components/project.js b/src/components/project.js index 0b5aec6..9f9e19e 100644 --- a/src/components/project.js +++ b/src/components/project.js @@ -6,10 +6,7 @@ function Project(props) { props.navigate('projects') return null } - // TODO re-fetch project list if no project name is found instead of setting 'Default' - const projectName = - props.projects.find(p => p.id === props.selectedProjectId)['name'] || 'Default' - + const project = props.projects.find(p => p.id === props.selectedProjectId) const filtered = props.tasks.filter(t => t.projectId === props.selectedProjectId && !t.completed) const completed = props.tasks.filter( t => (t.projectId === props.selectedProjectId && t.completed === true) || null, @@ -17,7 +14,7 @@ function Project(props) { return (
-

{projectName}

+

{project.name}

) diff --git a/src/components/task-row.js b/src/components/task-row.js index cd6eaee..cbe8b66 100644 --- a/src/components/task-row.js +++ b/src/components/task-row.js @@ -10,7 +10,7 @@ const TaskRow = props => { X - {task.desc} + props.selectTask(task.id)}>{task.desc} {props.component === 'project' ? null : (