33 lines
666 B
JavaScript
33 lines
666 B
JavaScript
|
|
document.addEventListener('alpine:init', () => {
|
||
|
|
Alpine.store('todo', {
|
||
|
|
title: 'Todo',
|
||
|
|
items: [],
|
||
|
|
nextId: 1,
|
||
|
|
|
||
|
|
addTodo(text) {
|
||
|
|
if (!text.trim()) return;
|
||
|
|
|
||
|
|
this.items.push({
|
||
|
|
id: this.nextId,
|
||
|
|
title: text.trim(),
|
||
|
|
done: false
|
||
|
|
});
|
||
|
|
this.nextId++;
|
||
|
|
},
|
||
|
|
|
||
|
|
toggleTodo(id) {
|
||
|
|
this.items = this.items.map(item =>
|
||
|
|
item.id === id ? { ...item, done: !item.done } : item
|
||
|
|
);
|
||
|
|
},
|
||
|
|
|
||
|
|
removeTodo(id) {
|
||
|
|
this.items = this.items.filter(item => item.id !== id);
|
||
|
|
},
|
||
|
|
|
||
|
|
clearCompleted() {
|
||
|
|
this.items = this.items.filter(item => !item.done);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
});
|