-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathuseTasks.js
More file actions
100 lines (92 loc) · 2.8 KB
/
useTasks.js
File metadata and controls
100 lines (92 loc) · 2.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import { useState, useEffect, useCallback } from "react";
import getDbConnection from "../db/dbConnection";
const useTasks = (tag = null) => {
const [taskList, setTaskList] = useState([]);
const getTasks = useCallback(async () => {
try {
let result;
if (tag) {
result = await getDbConnection().sql(
`
SELECT tasks.*, tags.id AS tag_id, tags.name AS tag_name
FROM tasks
JOIN tasks_tags ON tasks.id = tasks_tags.task_id
JOIN tags ON tags.id = tasks_tags.tag_id
WHERE tag_name=?`,
tag
);
setTaskList(result);
} else {
result = await getDbConnection().sql(`
SELECT tasks.*, tags.id AS tag_id, tags.name AS tag_name
FROM tasks
JOIN tasks_tags ON tasks.id = tasks_tags.task_id
JOIN tags ON tags.id = tasks_tags.tag_id`);
setTaskList(result);
}
} catch (error) {
console.error("Error getting tasks", error);
}
}, [tag]);
const updateTask = async (completedStatus, taskId) => {
try {
await getDbConnection().sql(
"UPDATE tasks SET isCompleted=? WHERE id=? RETURNING *",
completedStatus,
taskId
);
getTasks();
} catch (error) {
console.error("Error updating tasks", error);
}
};
const addTaskTag = async (newTask, tag) => {
try {
if (tag.id) {
const addNewTask = await getDbConnection().sql(
"INSERT INTO tasks (title, isCompleted) VALUES (?, ?) RETURNING *",
newTask.title,
newTask.isCompleted
);
addNewTask[0].tag_id = tag.id;
addNewTask[0].tag_name = tag.name;
setTaskList([...taskList, addNewTask[0]]);
await getDbConnection().sql(
"INSERT INTO tasks_tags (task_id, tag_id) VALUES (?, ?)",
addNewTask[0].id,
tag.id
);
} else {
const addNewTaskNoTag = await getDbConnection().sql(
"INSERT INTO tasks (title, isCompleted) VALUES (?, ?) RETURNING *",
newTask.title,
newTask.isCompleted
);
setTaskList([...taskList, addNewTaskNoTag[0]]);
}
} catch (error) {
console.error("Error adding task to database", error);
}
};
const deleteTask = async (taskId) => {
try {
await getDbConnection().sql("DELETE FROM tasks_tags WHERE task_id=?", taskId);
const result = await getDbConnection().sql("DELETE FROM tasks WHERE id=?", taskId);
console.log(`Deleted ${result.totalChanges} task`);
getTasks();
} catch (error) {
console.error("Error deleting task", error);
}
};
useEffect(() => {
getTasks();
}, [getTasks]);
return {
taskList,
updateTask,
addTaskTag,
deleteTask,
refreshTasks: getTasks,
};
};
export default useTasks;