Skip to content

Instantly share code, notes, and snippets.

@ravid7000
Created May 28, 2021 07:35
Show Gist options
  • Save ravid7000/f1d69447fe5fe58230f839b05b6a044c to your computer and use it in GitHub Desktop.
Save ravid7000/f1d69447fe5fe58230f839b05b6a044c to your computer and use it in GitHub Desktop.
import { useMemo, useState } from "react"
export const useTodoController = () => {
const [todoList, setTodoList] = useState([]);
const [todoName, setTodoName] = useState('');
const [doneTodo, undoneTodo] = useMemo(() => {
const done = todoList.filter(item => item.done).length;
const undone = todoList.length - done;
return [done, undone];
}, [todoList]);
const addTodo = (e) => {
e.preventDefault();
setTodoList(prevList => {
const newTodo = {
name: todoName,
id: prevList.length + 1,
done: false,
}
return [newTodo, ...prevList];
});
setTodoName('');
}
const removeTodo = (id) => {
setTodoList(prevList => {
return prevList.filter((item) => item.id !== id);
})
}
const toggleTodo = (id) => {
setTodoList(prevList => {
return prevList.map((item) => {
if (item.id === id) {
item.done = !item.done;
}
return item;
});
})
}
const changeTodoName = (e) => {
setTodoName(e.target.value);
}
return {
state: {
todoList,
doneTodo,
undoneTodo,
todoName,
},
actions: {
addTodo,
removeTodo,
toggleTodo,
changeTodoName,
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment