From 36f70aa2919df6953a0381fece1152d3a5c3bda8 Mon Sep 17 00:00:00 2001 From: Harshita Khare <121930563+HarshitaKhare28@users.noreply.github.com> Date: Tue, 18 Jun 2024 12:43:16 +0530 Subject: [PATCH 1/2] Update App.js --- todo_list/src/App.js | 139 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 114 insertions(+), 25 deletions(-) diff --git a/todo_list/src/App.js b/todo_list/src/App.js index 220a997d1c..0eb8ec7dab 100644 --- a/todo_list/src/App.js +++ b/todo_list/src/App.js @@ -1,28 +1,117 @@ -import React, {useState} from "react"; +import React, {useState,useEffect} from "react"; import "./App.css"; + const App = () => { - const [todos, setTodos] = useState([]); - - // Add the handlesubmit code here - - - // Add the deleteToDo code here - - - // Add the toggleComplete code here - - - // Add the submitEdits code here - - -return( -
-

Todo List

-
- - -
-
-); -}; + const [todos, setTodos] = React.useState([]); + + const [todoEditing, setTodoEditing] = React.useState(null); + + useEffect(() => { + const json = localStorage.getItem("todos"); + const loadedTodos = JSON.parse(json); + if (loadedTodos) { + setTodos(loadedTodos); + } + }, []); + +useEffect(() => { + if(todos.length > 0) { + const json = JSON.stringify(todos); + localStorage.setItem("todos", json); + } + }, [todos]); + + + function handleSubmit(e) { + e.preventDefault(); + + let todo = document.getElementById('todoAdd').value + const newTodo = { + id: new Date().getTime(), + text: todo.trim(), + completed: false, + }; + if (newTodo.text.length > 0 ) { + setTodos([...todos].concat(newTodo)); + } else { + + alert("Enter Valid Task"); + } + document.getElementById('todoAdd').value = "" + } + function deleteTodo(id) { + let updatedTodos = [...todos].filter((todo) => todo.id !== id); + setTodos(updatedTodos); + } + + function toggleComplete(id) { + let updatedTodos = [...todos].map((todo) => { + if (todo.id === id) { + todo.completed = !todo.completed; + } + return todo; + }); + setTodos(updatedTodos); + } + + function submitEdits(newtodo) { + const updatedTodos = [...todos].map((todo) => { + if (todo.id === newtodo.id) { + todo.text = document.getElementById(newtodo.id).value; + } + return todo; + }); + setTodos(updatedTodos); + setTodoEditing(null); + } + + return ( +
+

Todo List

+
+ + +
+ {todos.map((todo) => ( + +
+
+ {/* Add checkbox for toggle complete */} + toggleComplete(todo.id)} + /> + {/* if it is edit mode, display input box, else display text */} + {todo.id === todoEditing ? + () : + (
{todo.text}
) + } +
+
+ {/* if it is edit mode, allow submit edit, else allow edit */} + {todo.id === todoEditing ? + ( + + ) : + ( + + )} + + +
+
+ ))} +
+ ); + }; + export default App; From 8c3e57e2541ba93b28ddf0b7cab3893fc04f01ff Mon Sep 17 00:00:00 2001 From: Harshita Khare <121930563+HarshitaKhare28@users.noreply.github.com> Date: Tue, 18 Jun 2024 12:44:18 +0530 Subject: [PATCH 2/2] Update package.json --- todo_list/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/todo_list/package.json b/todo_list/package.json index f3f0627ef8..d65843f1ac 100644 --- a/todo_list/package.json +++ b/todo_list/package.json @@ -12,8 +12,8 @@ "web-vitals": "^2.1.0" }, "scripts": { - "start": "react-scripts start", - "build": "react-scripts build", + "start": "set NODE_OPTIONS=--openssl-legacy-provider && react-scripts start", + "build": "set NODE_OPTIONS=--openssl-legacy-provider && react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject" },