botserver/web/desktop/tasks/tasks.js
Rodrigo Rodriguez (Pragmatismo) 01e89c9358 feat: add actix-files dependency for file serving support
Added actix-files and its dependencies (http-range, mime_guess, unicase, v_htmlescape) to enable static file functionality in the botserver. This will allow serving static assets and files through the web server. The change includes all required transitive dependencies for proper file handling and MIME type detection.
2025-11-15 19:08:26 -03:00

77 lines
1.6 KiB
JavaScript

function tasksApp() {
return {
newTask: '',
filter: 'all',
tasks: [],
init() {
const saved = localStorage.getItem('tasks');
if (saved) {
try {
this.tasks = JSON.parse(saved);
} catch (e) {
console.error('Failed to load tasks:', e);
this.tasks = [];
}
}
},
addTask() {
if (this.newTask.trim() === '') return;
this.tasks.push({
id: Date.now(),
text: this.newTask.trim(),
completed: false,
createdAt: new Date().toISOString()
});
this.newTask = '';
this.save();
},
toggleTask(id) {
const task = this.tasks.find(t => t.id === id);
if (task) {
task.completed = !task.completed;
this.save();
}
},
deleteTask(id) {
this.tasks = this.tasks.filter(t => t.id !== id);
this.save();
},
clearCompleted() {
this.tasks = this.tasks.filter(t => !t.completed);
this.save();
},
save() {
try {
localStorage.setItem('tasks', JSON.stringify(this.tasks));
} catch (e) {
console.error('Failed to save tasks:', e);
}
},
get filteredTasks() {
if (this.filter === 'active') {
return this.tasks.filter(t => !t.completed);
}
if (this.filter === 'completed') {
return this.tasks.filter(t => t.completed);
}
return this.tasks;
},
get activeTasks() {
return this.tasks.filter(t => !t.completed).length;
},
get completedTasks() {
return this.tasks.filter(t => t.completed).length;
}
};
}