Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
react-todo-app
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Ajmal.S
react-todo-app
Commits
817fbd56
Commit
817fbd56
authored
Feb 24, 2022
by
Ajmal.S
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
changes
parent
4fffcd8d
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
105 additions
and
117 deletions
+105
-117
App.js
src/App.js
+94
-64
TodoItem.js
src/components/TodoItem.js
+11
-39
Todos.js
src/components/Todos.js
+0
-14
No files found.
src/App.js
View file @
817fbd56
...
...
@@ -3,75 +3,105 @@ import "./App.css";
import
TodoForm
from
"./components/TodoForm"
;
import
Header
from
"./components/Header"
;
import
CompletedTodos
from
"./components/CompletedTodos"
;
import
Todos
from
'./components/Todos'
// import Todos from './components/Todos'
import
TodoItem
from
"./components/TodoItem"
;
function
App
()
{
const
[
todos
,
setTodos
]
=
useState
([]);
const
[
editId
,
setEdit
]
=
useState
(
false
);
const
[
inputValue
,
setInputValue
]
=
useState
(
""
);
const
handleEditChange
=
(
id
,
text
)
=>
{
setEdit
(
id
);
setInputValue
(
text
);
};
const
addTodo
=
(
todo
)
=>
{
if
(
!
todo
.
text
||
/^
\s
*$/
.
test
(
todo
.
text
))
{
alert
(
'Please add a Todo'
)
return
;
}
const
newTodos
=
[
todo
,
...
todos
];
setTodos
(
newTodos
);
console
.
log
(
newTodos
);
};
const
removeTodo
=
(
id
)
=>
{
const
removedArr
=
[...
todos
].
filter
((
todoId
)
=>
todoId
.
id
!==
id
);
setTodos
(
removedArr
);
};
const
completeTodo
=
(
id
)
=>
{
const
updatedTodos
=
todos
.
map
((
todo
)
=>
{
if
(
todo
.
id
===
id
)
{
todo
.
status
=
!
todo
.
status
;
}
return
todo
;
});
setTodos
(
updatedTodos
);
};
const
editTodo
=
(
id
,
text
)
=>
{
const
editTodos
=
todos
.
map
((
todo
)
=>
{
if
(
todo
.
id
===
id
)
{
todo
.
text
=
text
;
}
return
todo
;
});
setTodos
(
editTodos
);
setEdit
(
false
);
};
const
escFunction
=
useCallback
((
event
)
=>
{
if
(
event
.
keyCode
===
27
)
{
console
.
log
(
"esc"
);
return
editTodo
();
}
});
useEffect
(()
=>
{
document
.
addEventListener
(
"keydown"
,
escFunction
);
return
()
=>
{
document
.
removeEventListener
(
"keydown"
,
escFunction
);
};
},
[
escFunction
]);
const
todoData
=
[
{
id
:
1
,
text
:
'Todo 1'
,
isEdit
:
false
,
isComplete
:
false
},
{
id
:
2
,
text
:
'Todo 2'
,
isEdit
:
true
,
isComplete
:
false
},
{
id
:
3
,
text
:
'Todo 3'
,
isEdit
:
false
,
isComplete
:
true
}
]
// const [todos, setTodos] = useState([]);
// const [editId, setEdit] = useState(false);
// const [inputValue, setInputValue] = useState("");
// const handleEditChange = (id, text) => {
// setEdit(id);
// setInputValue(text);
// };
// const addTodo = (todo) => {
// if (!todo.text || /^\s*$/.test(todo.text)) {
// alert('Please add a Todo')
// return;
// }
// const newTodos = [todo, ...todos];
// setTodos(newTodos);
// console.log(newTodos);
// };
// const removeTodo = (id) => {
// const removedArr = [...todos].filter((todoId) => todoId.id !== id);
// setTodos(removedArr);
// };
// const completeTodo = (id) => {
// const updatedTodos = todos.map((todo) => {
// if (todo.id === id) {
// todo.status = !todo.status;
// }
// return todo;
// });
// setTodos(updatedTodos);
// };
// const editTodo = (id, text) => {
// const editTodos = todos.map((todo) => {
// if (todo.id === id) {
// todo.text = text;
// }
// return todo;
// });
// setTodos(editTodos);
// setEdit(false);
// };
// const escFunction = useCallback((event) => {
// if (event.keyCode === 27) {
// console.log("esc");
// return editTodo();
// }
// });
// useEffect(() => {
// document.addEventListener("keydown", escFunction);
// return () => {
// document.removeEventListener("keydown", escFunction);
// };
// }, [escFunction]);
return
(
<>
<
div
className
=
'task-main'
>
<
Header
todos
=
{
todos
}
/
>
<
Header
todos
=
{
todoData
}
/
>
{
todoData
.
map
((
todos
)
=>
(
<
TodoItem
key
=
{
todos
.
id
}
todos
=
{
todos
}
editMode
=
{((
e
)
=>
console
.
log
(
e
.
target
.
value
))}
/
>
))}
<
Todos
todos
=
{
todos
}
{
/*
<Todos todos={todos}
completeTodo={completeTodo}
removeTodo={removeTodo}
editTodo={editTodo}
...
...
@@ -79,14 +109,14 @@ function App() {
editId={editId}
inputValue={inputValue}
setInputValue={setInputValue}
escFunction
=
{
escFunction
}
/
>
escFunction={escFunction} />
*/
}
<
TodoForm
onSubmit
=
{
addTodo
}
/
>
{
/* <TodoForm onSubmit={addTodo} /> */
}
<
h4
style
=
{{
textAlign
:
'center'
,
marginBottom
:
'10px'
}}
>
{
todos
.
filter
(
todoLen
=>
todoLen
.
status
===
true
).
length
>
0
?
'Completed Todos('
+
todos
.
filter
(
todoLen
=>
todoLen
.
status
===
true
).
length
+
')'
:
''
}
<
/h4
>
{
/*
<h4 style={{ textAlign: 'center', marginBottom: '10px' }}>{todos.filter(todoLen => todoLen.status === true).length > 0 ? 'Completed Todos(' + todos.filter(todoLen => todoLen.status === true).length + ')' : ''}</h4>
<
CompletedTodos
todos
=
{
todos
}
completeTodo
=
{
completeTodo
}
removeTodo
=
{
removeTodo
}
/
>
<CompletedTodos todos={todos} completeTodo={completeTodo} removeTodo={removeTodo} />
*/
}
<
/div
>
...
...
src/components/TodoItem.js
View file @
817fbd56
import
React
from
'react'
import
{
CgCloseO
}
from
"react-icons/cg"
;
const
TodoItem
=
({
todos
,
completeTodo
,
removeTodo
,
editTodo
,
handleEditChange
,
editId
,
inputValue
,
setInputValue
,
escFunction
})
=>
{
return
(
<
div
className
=
"task"
>
{
/*** List Todos ***/
}
const
TodoItem
=
({
todos
,
editMode
})
=>
{
{
editId
!==
todos
.
id
?
(
todos
.
status
===
false
?
(
<
div
className
=
"task-body-content"
>
<
div
style
=
{{
display
:
'flex'
}}
>
<
div
style
=
{{
margin
:
'2px 4px 0px 0px'
,
lineHeight
:
'1px'
}}
>
<
input
type
=
'checkbox'
checked
=
{
todos
.
status
}
onChange
=
{()
=>
completeTodo
(
todos
.
id
)}
><
/input
>
<
/div
>
<
div
onClick
=
{()
=>
handleEditChange
(
todos
.
id
,
todos
.
text
)}
style
=
{{
cursor
:
'pointer'
}}
>
{
todos
.
text
}
<
/div
>
<
/div
>
<
div
>
<
CgCloseO
onClick
=
{()
=>
removeTodo
(
todos
.
id
)}
style
=
{{
fontSize
:
'18px'
,
cursor
:
'pointer'
,
color
:
'#ccc'
}}
/
>
<
/div
>
<
/div
>
)
:
''
)
:
(
<>
{
/*** Edit Todos ***/
}
const
className
=
`todos
${
todos
.
isComplete
?
't-complete'
:
''
}
`
<
div
className
=
"add-form"
>
<
div
className
=
'form-control'
>
<
input
type
=
"text"
value
=
{
inputValue
}
onChange
=
{(
e
)
=>
setInputValue
(
e
.
target
.
value
)}
escFunction
=
{(
e
)
=>
escFunction
(
e
.
key
)}
/
>
<
/div
>
<
button
className
=
"btn"
onClick
=
{()
=>
editTodo
(
todos
.
id
,
inputValue
)}
>
Save
<
/button
>
<
/div
>
<
/
>
)}
return
(
<
div
className
=
"task"
>
{
todos
.
isEdit
?
<
input
type
=
'text'
defaultValue
=
{
todos
.
text
}
onChange
=
{
editMode
}
><
/input>
:
<
div
>
<
input
type
=
'checkbox'
defaultChecked
=
{
todos
.
isComplete
}
><
/input
>
<
span
className
=
{
className
}
>
{
todos
.
text
}
<
/span
>
<
/div
>
}
<
/div
>
)
}
...
...
src/components/Todos.js
deleted
100644 → 0
View file @
4fffcd8d
import
React
from
'react'
import
TodoItem
from
'./TodoItem'
const
Todos
=
({
todos
,
removeTodo
,
completeTodo
,
editTodo
,
handleEditChange
,
inputValue
,
setInputValue
,
escFunction
,
editId
})
=>
{
return
(
<
div
>
{
todos
.
map
((
todos
)
=>
(
<
TodoItem
key
=
{
todos
.
id
}
todos
=
{
todos
}
removeTodo
=
{
removeTodo
}
completeTodo
=
{
completeTodo
}
editTodo
=
{
editTodo
}
handleEditChange
=
{
handleEditChange
}
inputValue
=
{
inputValue
}
setInputValue
=
{
setInputValue
}
escFunction
=
{
escFunction
}
editId
=
{
editId
}
/
>
))}
<
/div
>
)
}
export
default
Todos
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment