49 lines
1017 B
JavaScript
49 lines
1017 B
JavaScript
class Model {
|
|
constructor() {
|
|
this.todos = JSON.parse(localStorage.getItem('todos')) || []
|
|
}
|
|
|
|
#commit(todos) {
|
|
localStorage.setItem('todos', JSON.stringify(todos))
|
|
}
|
|
|
|
getTodos(filter){
|
|
if (filter === "active")
|
|
return this.todos.filter(todo => !todo.done)
|
|
if (filter === "done")
|
|
return this.todos.filter(todo => todo.done)
|
|
|
|
return this.todos
|
|
}
|
|
|
|
add(todoText) {
|
|
const todo = {
|
|
id: this.todos.length > 0 ? this.todos[this.todos.length - 1].id + 1 : 1,
|
|
text: todoText,
|
|
done : false,
|
|
}
|
|
this.todos.push(todo)
|
|
this.#commit(this.todos)
|
|
}
|
|
|
|
edit(id, updatedText) {
|
|
this.todos = this.todos.map(todo =>
|
|
todo.id === id ? { id: todo.id, text: updatedText, done: todo.done} : todo
|
|
)
|
|
this.#commit(this.todos)
|
|
}
|
|
|
|
delete(id) {
|
|
this.todos = this.todos.filter(todo => todo.id !== id)
|
|
this.#commit(this.todos)
|
|
}
|
|
|
|
toggle(id) {
|
|
this.todos = this.todos.map(todo =>
|
|
todo.id === id ? { id: todo.id, text: todo.text, done: !todo.done } : todo
|
|
)
|
|
this.#commit(this.todos)
|
|
}
|
|
}
|
|
|