diff --git a/TODO-LIST/src/pages/Home.jsx b/TODO-LIST/src/pages/Home.jsx index 74b9c24..6d16d9c 100644 --- a/TODO-LIST/src/pages/Home.jsx +++ b/TODO-LIST/src/pages/Home.jsx @@ -1,75 +1,109 @@ -import React,{useState,useEffect} from 'react' -import {nanoid} from 'nanoid' -import Todo from '../components/Todo' +import React, { useState, useEffect } from "react"; +import { nanoid } from "nanoid"; +import Todo from "../components/Todo"; +// Load todos from localStorage const getTodos = () => { - let todos = localStorage.getItem('todos') - if (todos) { - return JSON.parse(todos) - } - return [] -} + const storedTodos = localStorage.getItem("todos"); + return storedTodos ? JSON.parse(storedTodos) : []; +}; const Home = () => { - const [todos, setTodos] = useState(getTodos()) - const [todo, setTodo] = useState('') - - const addTodo = (e) => { - e.preventDefault() - if (todo && todos.findIndex(t => t.text === todo) === -1) { - setTodos(prev => [...prev, {id:nanoid(),text:todo}]) - setTodo('') - } - } - - const deleteTodo = (id) => { - setTodos(prev => prev.filter(t => t.id !== id)) - } - - const moveUp = (id) => { - let index = todos.findIndex(t => t.id === id) - if (index > 0) { - let temp = todos[index] - todos[index] = todos[index - 1] - todos[index - 1] = temp - setTodos([...todos]) - } - } - - const moveDown = (id) => { - let index = todos.findIndex(t => t.id === id) - if (index < todos.length - 1) { - let temp = todos[index] - todos[index] = todos[index + 1] - todos[index + 1] = temp - setTodos([...todos]) - } - } - useEffect(() => { - localStorage.setItem('todos', JSON.stringify(todos)) - },[todos]) - - return ( -
No todo...
- - } + const [todos, setTodos] = useState(getTodos); + const [todo, setTodo] = useState(""); + + // Add todo + const addTodo = (e) => { + e.preventDefault(); + + if (!todo.trim()) return; + + const isDuplicate = todos.some((t) => t.text === todo); + if (isDuplicate) return; + + setTodos((prev) => [ + ...prev, + { id: nanoid(), text: todo } + ]); + + setTodo(""); + }; + + // Delete todo + const deleteTodo = (id) => { + setTodos((prev) => prev.filter((t) => t.id !== id)); + }; + + // Move todo up + const moveUp = (id) => { + setTodos((prev) => { + const copy = [...prev]; + const index = copy.findIndex((t) => t.id === id); + + if (index > 0) { + [copy[index - 1], copy[index]] = [copy[index], copy[index - 1]]; + } + + return copy; + }); + }; + + // Move todo down + const moveDown = (id) => { + setTodos((prev) => { + const copy = [...prev]; + const index = copy.findIndex((t) => t.id === id); + + if (index < copy.length - 1) { + [copy[index + 1], copy[index]] = [copy[index], copy[index + 1]]; + } + + return copy; + }); + }; + + // Save todos to localStorage + useEffect(() => { + localStorage.setItem("todos", JSON.stringify(todos)); + }, [todos]); + + return ( ++ No todo... +
+ )}