-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtodo.js
115 lines (97 loc) · 2.94 KB
/
todo.js
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import { firestore } from "./firebase.js";
const ulRef = document.querySelector("ul");
const inputRef = document.querySelector("#todo-task");
const selectRef = document.querySelector("#todo-status");
const editItemIdRef = document.querySelector("#edit-item-id");
const submitButtonRef = document.querySelector("#submit-button");
const cancelButtonRef = document.querySelector("#cancel-button");
const getStatusName = (status) =>
status === 1
? "IMCOMPLETE"
: status === 2
? "PROGRESS"
: status === 3
? "PENDING "
: "COMPLETE";
const handleResetForm = () => {
inputRef.value = "";
selectRef.value = "";
editItemIdRef.value = "";
submitButtonRef.textContent = "Add Item";
};
const handleSelectEditItem = ({ id, task, status }) => {
editItemIdRef.value = id;
inputRef.value = task;
selectRef.value = status;
submitButtonRef.textContent = "Edit Item";
};
const handleGetItems = async () => {
const snapShot = await firestore.collection("todos").get();
const todos = snapShot.docs.map((doc) => ({
id: doc.id,
status: doc.data().status,
task: doc.data().task,
}));
while (ulRef.firstChild) {
ulRef.removeChild(ulRef.firstChild);
}
inputRef.value = "";
todos.forEach((todo) => {
const spanRef = document.createElement("span");
const liRef = document.createElement("li");
spanRef.textContent = `${todo.task} - ${getStatusName(todo.status)}`;
liRef.appendChild(spanRef);
const editButtonRef = document.createElement("button");
editButtonRef.textContent = "edit";
liRef.appendChild(editButtonRef);
editButtonRef.addEventListener("click", () =>
handleSelectEditItem({
id: todo.id,
task: todo.task,
status: todo.status,
})
);
const deleteButtonRef = document.createElement("button");
deleteButtonRef.textContent = "delete";
liRef.appendChild(deleteButtonRef);
deleteButtonRef.addEventListener("click", () => handleDeleteItem(todo.id));
ulRef.appendChild(liRef);
});
};
const handleAddItem = async () => {
const value = inputRef.value;
const status = selectRef.value;
await firestore.collection("todos").add({
task: value,
status: parseInt(status, 10),
createdAt: new Date(),
});
await handleGetItems();
};
const handleEditItem = async () => {
const id = editItemIdRef.value;
const task = inputRef.value;
const status = selectRef.value;
await firestore
.collection("todos")
.doc(id)
.update({
task,
status: parseInt(status, 10),
});
await handleGetItems();
};
const handleDeleteItem = async (id) => {
await firestore.collection("todos").doc(id).delete();
await handleGetItems();
};
submitButtonRef.addEventListener("click", async () => {
if (submitButtonRef.textContent === "Edit Item") {
await handleEditItem();
} else {
await handleAddItem();
}
handleResetForm();
});
cancelButtonRef.addEventListener("click", handleResetForm);
window.onload = handleGetItems;