iProsto commited on
Commit
b579da7
·
verified ·
1 Parent(s): a8e626b

I can't change a task status

Browse files
Files changed (1) hide show
  1. script.js +30 -18
script.js CHANGED
@@ -53,15 +53,25 @@ class UIController {
53
 
54
  this.setupEventListeners();
55
  }
56
-
57
  setupEventListeners() {
58
  this.addTaskBtn.addEventListener('click', () => this.handleAddTask());
59
  this.taskInput.addEventListener('keypress', (e) => {
60
  if (e.key === 'Enter') this.handleAddTask();
61
  });
 
 
 
 
 
 
 
 
 
 
 
 
62
  }
63
-
64
- handleAddTask() {
65
  const taskText = this.taskInput.value.trim();
66
  if (taskText) {
67
  const newTask = this.taskManager.addTask(taskText);
@@ -90,20 +100,11 @@ class UIController {
90
 
91
  this.taskList.prepend(taskElement);
92
  feather.replace();
93
-
94
- // Add event listeners to the new buttons
95
- taskElement.querySelector('.toggle-btn').addEventListener('click', (e) => {
96
- this.toggleTask(e.currentTarget.dataset.id);
97
- });
98
-
99
- taskElement.querySelector('.delete-btn').addEventListener('click', (e) => {
100
- this.deleteTask(e.currentTarget.dataset.id);
101
- });
102
- }
103
-
104
  toggleTask(id) {
105
  this.taskManager.toggleTask(id);
106
- const taskElement = document.querySelector(`[data-id="${id}"]`);
 
107
  if (taskElement) {
108
  const icon = taskElement.querySelector('.toggle-btn i');
109
  const text = taskElement.querySelector('span');
@@ -122,10 +123,10 @@ class UIController {
122
  feather.replace();
123
  }
124
  }
125
-
126
  deleteTask(id) {
127
  this.taskManager.deleteTask(id);
128
- const taskElement = document.querySelector(`[data-id="${id}"]`);
 
129
  if (taskElement) {
130
  taskElement.classList.add('opacity-0', 'translate-x-10');
131
  setTimeout(() => {
@@ -145,4 +146,15 @@ class UIController {
145
  function loadTasks() {
146
  const ui = new UIController();
147
  ui.loadTasks();
148
- }
 
 
 
 
 
 
 
 
 
 
 
 
53
 
54
  this.setupEventListeners();
55
  }
 
56
  setupEventListeners() {
57
  this.addTaskBtn.addEventListener('click', () => this.handleAddTask());
58
  this.taskInput.addEventListener('keypress', (e) => {
59
  if (e.key === 'Enter') this.handleAddTask();
60
  });
61
+
62
+ // Use event delegation for dynamic elements
63
+ this.taskList.addEventListener('click', (e) => {
64
+ const toggleBtn = e.target.closest('.toggle-btn');
65
+ const deleteBtn = e.target.closest('.delete-btn');
66
+
67
+ if (toggleBtn) {
68
+ this.toggleTask(toggleBtn.dataset.id);
69
+ } else if (deleteBtn) {
70
+ this.deleteTask(deleteBtn.dataset.id);
71
+ }
72
+ });
73
  }
74
+ handleAddTask() {
 
75
  const taskText = this.taskInput.value.trim();
76
  if (taskText) {
77
  const newTask = this.taskManager.addTask(taskText);
 
100
 
101
  this.taskList.prepend(taskElement);
102
  feather.replace();
103
+ }
 
 
 
 
 
 
 
 
 
 
104
  toggleTask(id) {
105
  this.taskManager.toggleTask(id);
106
+ document.dispatchEvent(new CustomEvent('taskChanged'));
107
+ const taskElement = document.querySelector(`[data-id="${id}"]`);
108
  if (taskElement) {
109
  const icon = taskElement.querySelector('.toggle-btn i');
110
  const text = taskElement.querySelector('span');
 
123
  feather.replace();
124
  }
125
  }
 
126
  deleteTask(id) {
127
  this.taskManager.deleteTask(id);
128
+ document.dispatchEvent(new CustomEvent('taskChanged'));
129
+ const taskElement = document.querySelector(`[data-id="${id}"]`);
130
  if (taskElement) {
131
  taskElement.classList.add('opacity-0', 'translate-x-10');
132
  setTimeout(() => {
 
146
  function loadTasks() {
147
  const ui = new UIController();
148
  ui.loadTasks();
149
+
150
+ // Update task counter in header
151
+ const taskCounter = document.querySelector('custom-header').shadowRoot.querySelector('#taskCounter');
152
+ if (taskCounter) {
153
+ taskCounter.textContent = `${ui.taskManager.getTasks().length} tasks`;
154
+ }
155
+
156
+ // Listen for task changes to update counter
157
+ document.addEventListener('taskChanged', () => {
158
+ taskCounter.textContent = `${ui.taskManager.getTasks().length} tasks`;
159
+ });
160
+ }