diff --git a/src/components/filterComponent/filter.js b/src/components/filterComponent/filter.js new file mode 100644 index 0000000..e69de29 diff --git a/src/components/listComponent/list.js b/src/components/listComponent/list.js index f6ee5af..631786c 100644 --- a/src/components/listComponent/list.js +++ b/src/components/listComponent/list.js @@ -1,20 +1,32 @@ import React from 'react'; -const List = ({ todos, deleteTd, set, deletedelements, allelements, activeelements }) => { - const listItems = todos.map((todo, index) => -
-
  • {todo}
  • - -
    +const List = ({ + todos, + toggleCompleted, + filterCompleted, + filterNotCompleted, + getHistory, +}) => { + const listItems = todos.map((todo) => +
  • toggleCompleted(todo.id)} + style={{ + textDecoration: todo.completed ? 'line-through' : 'none' + }} + > + {todo.text} +
  • ); + return (
    - - - + + +
    ); } diff --git a/src/components/mainscreenComponent/main.js b/src/components/mainscreenComponent/main.js index 116e4ed..9d49453 100644 --- a/src/components/mainscreenComponent/main.js +++ b/src/components/mainscreenComponent/main.js @@ -1,30 +1,18 @@ -import React, { useState } from 'react'; +import React from 'react'; import List from '../listComponent/list'; import Input from '../inputComponent/input'; import useTodostate from '../useTodostate'; -let active; - const Main = () => { const { todos, addTodo, - deleteTodo, - setTodo, - deletedelement, - allelement, - activeelement, + toggleCompleted, + filterCompleted, + filterNotCompleted, + getHistory, } = useTodostate([]); - if (activeelement.length === 0) { - active = allelement; - } else { - active = activeelement; - } - - - - return (
    { />
    ); diff --git a/src/components/useTodostate.js b/src/components/useTodostate.js index 280b6f7..b79db92 100644 --- a/src/components/useTodostate.js +++ b/src/components/useTodostate.js @@ -1,30 +1,66 @@ -import React, { useState } from 'react'; +import { useState } from 'react'; -export default initialTodo => { - const [todos, setTodos] = useState(initialTodo); - const [allelement, setAllelement] = useState([]); - const [deletedelement, setDeletedelement] = useState([]); - const [activeelement, setActiveelement] = useState([]); +let initialid = 0; + +const useTodostate = () => { + const [todos, setTodos] = useState([]); + const [history, setHistory] = useState([]); return { todos, - deletedelement, - allelement, - activeelement, + history, addTodo: todoText => { - setTodos([...todos, todoText]); - setAllelement([...allelement, todoText]); + const todo = { + // id: Date.now(), + id: initialid++, + text: todoText, + completed: false, + deleted: false, + }; + setTodos([ + ...todos, + todo, + ]); + setHistory([ + ...history, + todo, + ]); + }, + toggleCompleted: id => { + const toggled = history.map(todo => + (todo.id === id) + ? { ...todo, completed: !todo.completed } + : todo + ) + setHistory(toggled); + setTodos(toggled); + }, + toggleDeleted: id => { + const toggled = history.map(todo => { + if (todo.id === id) { + return { + ...todo, + deleted: !todo.deleted + }; + } + return todo; + }); + setHistory(toggled); + setTodos(toggled); }, - deleteTodo: deleteIndex => { - const deletednewTodo = todos.filter((todo, index) => index !== deleteIndex); - setActiveelement(deletednewTodo); - setTodos(deletednewTodo); - const deleted = todos.filter((todo, index) => index === deleteIndex); - setDeletedelement([...deletedelement, deleted]); + filterCompleted: () => { + const completed = history.filter(todo => todo.completed === true); + setTodos(completed); }, - setTodo: element => { - setTodos(element); + filterNotCompleted: () => { + const completed = history.filter(todo => todo.completed === false); + setTodos(completed); + }, + getHistory: () => { + setTodos(history); }, }; }; + +export default useTodostate;