Skip to content

Commit 4d03bb3

Browse files
committed
todoList is done
1 parent a022dfd commit 4d03bb3

6 files changed

Lines changed: 10173 additions & 6 deletions

File tree

package-lock.json

Lines changed: 16 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
"react": "^18.2.0",
1010
"react-dom": "^18.2.0",
1111
"react-scripts": "5.0.1",
12+
"uuid": "^9.0.1",
1213
"web-vitals": "^2.1.4"
1314
},
1415
"scripts": {

src/App.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import "./App.css";
2-
// TODO: Import the todoData and pass it as a prop to the TodoList component
3-
2+
import TodoList from "./component/TodoList";
3+
import todoData from './todoData'
44
function App() {
55
return (
66
<div className="App">
77
<header className="App-header">
8-
{/* Call the TodoList Component Here */}
8+
<TodoList todoData ={todoData}/>
99
</header>
1010
</div>
1111
);

src/component/TodoItem.jsx

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import React, { useState } from 'react';
2+
export const TodoItem = ({ todo, selectedTodo, handleDelete, handleEdit, handleSave }) => {
3+
const [newTodoTitle,setNewTodoTitle]= useState("")
4+
const handleTextChange=(event)=>{
5+
setNewTodoTitle(event.target.value)
6+
}
7+
return (
8+
todo.id === selectedTodo?.id ? <div><input type="text" defaultValue={ selectedTodo.title } onChange={handleTextChange}></input>
9+
<sub style={ { color: "yellow", cursor: "pointer" } } onClick={ () => handleSave(todo.id,newTodoTitle) }
10+
> save</sub>
11+
</div> :
12+
<div>
13+
<p key={ todo.id }>
14+
{ todo.title }</p>
15+
16+
<sub
17+
style={ { color: "red", cursor: "pointer" } }
18+
onClick={ () => handleDelete(todo.id) }
19+
>
20+
Delete
21+
</sub>
22+
<sub style={ { color: "green", cursor: "pointer" } } onClick={ () => handleEdit(todo) }
23+
> Edit</sub>
24+
25+
</div>
26+
);
27+
};

src/component/TodoList.jsx

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import { useState } from "react";
2+
import { v4 as uuidv4 } from 'uuid'
3+
import { TodoItem } from "./TodoItem";
4+
function TodoList({todoData}){
5+
const [todoList, setTodoList]=useState(todoData)
6+
const [newTodo,setNewTodo]=useState("")
7+
const [selectedTodo,setSelectedTodo]=useState()
8+
// capture new to do
9+
const handleTextChange =(event)=>{
10+
setNewTodo(event.target.value)
11+
}
12+
//Adding new todo to the list
13+
const handleTodoCreate=()=>{
14+
const newTodoObj={
15+
id :uuidv4(),
16+
title: newTodo,
17+
done: false
18+
}
19+
setTodoList([...todoList,newTodoObj])
20+
}
21+
//delete Function
22+
const handleDelete=(todoId)=>{
23+
setTodoList(todoList.filter((todo)=>todo.id !== todoId))
24+
}
25+
//edit Function
26+
const handleEdit=(todo)=>{
27+
setSelectedTodo(todo)
28+
}
29+
//Save Function
30+
const handleSave=(todoId,newTodoTitle)=>{
31+
const index = todoList.findIndex((todo)=>{
32+
return todo.id ===todoId
33+
})
34+
if(index!== -1){
35+
const clonedTodoList=[...todoList]
36+
clonedTodoList[index].title = newTodoTitle
37+
setTodoList(clonedTodoList)
38+
}
39+
setSelectedTodo(undefined)
40+
}
41+
return <div>
42+
<input type="text" placeholder="add your todo" onChange={handleTextChange}></input>
43+
<button onClick={handleTodoCreate}>add</button>
44+
{todoList.map((todo) => (
45+
<TodoItem key ={todo.id} todo={todo} selectedTodo={selectedTodo} handleDelete={handleDelete} handleEdit={handleEdit} handleSave={handleSave}/>))}
46+
</div>;
47+
48+
}
49+
export default TodoList

0 commit comments

Comments
 (0)