-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.js
More file actions
104 lines (94 loc) · 2.75 KB
/
main.js
File metadata and controls
104 lines (94 loc) · 2.75 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
101
102
103
104
import { elFill, elWrite, $ } from "./module/helperFunction.js";
import {
TaskManager,
TaskCounter,
TaskProgressBar,
TaskProgressMessage,
} from "./module/taskClass.js";
const taskCtn = $("#task-ctn");
const taskInputForm = $("#task-input-form");
const manager = new TaskManager();
const taskCounter = new TaskCounter();
const taskProgressBar = new TaskProgressBar();
const taskProgressMsg = new TaskProgressMessage();
manager.addObs(taskCounter, taskProgressBar, taskProgressMsg);
renderTask();
// FORM ADD TASK EVENT
taskInputForm.addEventListener("submit", (e) => {
e.preventDefault();
const input = $("#task-input-form input");
const value = input.value.trim();
const msg = $("form .msg");
if (!value) {
msg.classList.add("isInvalid");
elWrite(msg, "Please enter a task name!");
setTimeout(() => {
elWrite(msg, "");
msg.classList.remove("isInvalid");
}, 4000);
return;
}
const newTask = { id: Date.now(), title: value, status: false };
manager.addTask(newTask);
input.value = "";
renderTask();
});
// FORM CLEAN INPUT
taskInputForm.addEventListener("reset", (e) => {
e.preventDefault();
const input = $("#task-input-form input");
const value = input.value.trim();
if (value && value !== "") {
input.value = "";
renderTask();
}
});
// CHECKBOX EVENT
taskCtn.addEventListener("change", (e) => {
if (e.target.type === "checkbox") {
const idTarget = e.target.closest("li").dataset.id;
const isChecked = e.target.checked;
const task = manager.taskList.find((task) => task.id === Number(idTarget));
if (task) {
task.status = isChecked;
manager.dataSet();
}
renderTask();
}
});
// DELETE BUTTON EVENT
taskCtn.addEventListener("click", (e) => {
if (e.target.classList.contains("del-btn")) {
const idTarget = e.target.closest("li").dataset.id;
const target = e.target.closest("li");
const delTask = manager.taskList.find(
(task) => task.id === Number(idTarget),
);
if (delTask) {
target.classList.add("animated");
setTimeout(() => {
manager.removeTask(delTask);
renderTask();
}, 300);
}
}
});
function setupTaskList() {
taskCtn.innerHTML = manager.taskList
.map(
(task) =>
`<li class="task-item" data-id=${task.id}>
<input type="checkbox" ${task.status ? "checked" : ""}/>
<span> ${task.title} </span>
<button class="del-btn"> ✕ </button>
</li>`,
)
.join("");
}
function renderTask() {
setupTaskList();
console.log(manager.taskList);
const completed = manager.taskList.filter((task) => task.status).length;
manager.notify(completed);
manager.showTotalTask();
}