└── Task Management App.html /Task Management App.html: -------------------------------------------------------------------------------- 1 | import React, { useState, useEffect } from "react"; import { useDrag, useDrop } from "react-dnd"; import "tailwindcss/tailwind.css"; 2 | 3 | const TaskItem = ({ task, index, moveTask, toggleComplete }) => { const [, ref] = useDrag({ type: "TASK", item: { index }, }); const [, drop] = useDrop({ accept: "TASK", hover: (draggedItem) => { if (draggedItem.index !== index) { moveTask(draggedItem.index, index); draggedItem.index = index; } }, }); 4 | 5 | return (
ref(drop(node))} className="p-2 border flex justify-between bg-white shadow-md rounded-md"> toggleComplete(task.id)} /> {task.title}
); }; 6 | 7 | const TaskManager = () => { const [tasks, setTasks] = useState([]); const [newTask, setNewTask] = useState(""); 8 | 9 | useEffect(() => { const savedTasks = JSON.parse(localStorage.getItem("tasks")) || []; setTasks(savedTasks); }, []); 10 | 11 | useEffect(() => { localStorage.setItem("tasks", JSON.stringify(tasks)); }, [tasks]); 12 | 13 | const addTask = () => { if (newTask.trim()) { setTasks([...tasks, { id: Date.now(), title: newTask, completed: false }]); setNewTask(""); } }; 14 | 15 | const toggleComplete = (id) => { setTasks(tasks.map((task) => (task.id === id ? { ...task, completed: !task.completed } : task))); }; 16 | 17 | const moveTask = (fromIndex, toIndex) => { const updatedTasks = [...tasks]; const [movedTask] = updatedTasks.splice(fromIndex, 1); updatedTasks.splice(toIndex, 0, movedTask); setTasks(updatedTasks); }; 18 | 19 | return (

Task Manager

setNewTask(e.target.value)} placeholder="Enter task" />
{tasks.map((task, index) => ( ))}
); }; 20 | 21 | export default TaskManager; --------------------------------------------------------------------------------